commit 6fdd830a6e692bd67a5ec4fec0fae887573d7799 Author: 廖德云 Date: Mon Nov 24 22:56:00 2025 +0800 ruoyi-geek-vue3 diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..edc18e6 --- /dev/null +++ b/.env.development @@ -0,0 +1,11 @@ +# 页面标题 +VITE_APP_TITLE = 若依Geek管理系统 + +# 开发环境配置 +VITE_APP_ENV = 'development' + +# 若依Geek管理系统/开发环境 +VITE_APP_BASE_API = '/dev-api' + +# 路由基础路径 +VITE_BASE_ROUTER = / diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..f914044 --- /dev/null +++ b/.env.production @@ -0,0 +1,14 @@ +# 页面标题 +VITE_APP_TITLE = 若依Geek管理系统 + +# 生产环境配置 +VITE_APP_ENV = 'production' + +# 若依Geek管理系统/生产环境 +VITE_APP_BASE_API = '/prod-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip + +# 路由基础路径 +VITE_BASE_ROUTER = / \ No newline at end of file diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..02ee95a --- /dev/null +++ b/.env.staging @@ -0,0 +1,14 @@ +# 页面标题 +VITE_APP_TITLE = 若依Geek管理系统 + +# 生产环境配置 +VITE_APP_ENV = 'staging' + +# 若依Geek管理系统/生产环境 +VITE_APP_BASE_API = '/stage-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip + +# 路由基础路径 +VITE_BASE_ROUTER = / \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6851624 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..7beedf0 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,32 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "DEV", + "request": "launch", + "runtimeArgs": ["run", "dev"], + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "type": "node" + }, + { + "name": "Debug Edge", + "request": "launch", + "type": "msedge", + "url": "http://localhost:80", + "webRoot": "${workspaceFolder}" + } + ], + "compounds": [ + { + "name": "Debug All", + "configurations": ["DEV", "Debug Edge"], + "presentation": { + "order": 1 + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3513d29 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "files.encoding": "utf8", + "search.exclude": { + "node_modules": true, + "lib": true, + "dist": true, + "public/draco": true + }, + "files.autoGuessEncoding": false, + "editor.tabSize": 2, + "editor.formatOnSave": true +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0d9552b --- /dev/null +++ b/LICENSE @@ -0,0 +1,6 @@ +MIT 许可证 +本产品所使用的核心代码基于开源项目 RuoYi-Geek(MIT 协议)开发,原项目版权归 RuoYi-Geek 所有。 +版权所有 (c) 2024 Dftre +特此授予任何获得本软件及相关文档文件(以下简称 “软件”)副本的人,免费使用、复制、修改、合并、发布、分发、再许可和 / 或出售本软件副本的权利,前提是遵守以下条件: +上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。 +本软件按 “现状” 提供,不提供任何形式的担保,无论是明示的还是默示的,包括但不限于适销性担保、特定用途适用性担保和非侵权担保。在任何情况下,作者或版权持有人均不对任何索赔、损害赔偿或其他责任承担责任,无论是因合同、侵权行为或其他与软件使用或其他交易相关的原因而产生的。 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a0ca56e --- /dev/null +++ b/README.md @@ -0,0 +1,132 @@ +

+ + logo + + + + + logo + +

+

RuoYi-Geek v3.8.7.3.2

+

基于SpringBoot3+Vue3前后端分离的Java快速开发框架

+

+ +

+ +# 当前版本是3.8.7.3 + +本人的其他两个推荐搭配的项目 + +1. [RuoYi-App-Geek: 这是若依极客生态的小程序版本 (gitee.com)](https://gitee.com/geek-xd/geek-uniapp-vue3-uview-plus-uchart) +2. [RuoYi-SpringBoot3-Geek: 这是若依极客生态的SpringBoot3版本 (gitee.com)](https://gitee.com/geek-xd/ruoyi-spring-boot3-geek.git) + +与本项目同为一个作者开发,兼容性最好,学习成本最低 + +## 前端运行 + +```bash +# 克隆项目 +git clone https://gitee.com/geek-xd/ruoyi-geek-vue3.git + +# 进入项目目录 +cd RuoYi-Vue3 + +# 安装依赖 +yarn --registry=https://registry.npmmirror.com + +# 启动服务 +yarn dev + +# 构建测试环境 yarn build:stage +# 构建生产环境 yarn build:prod +# 前端访问地址 http://localhost:80 +``` + +## Electron + +electron项目已经迁移至: + +https://gitee.com/geek-xd/ruoyi-geek-electron.git + +## 内置功能 + +1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 +2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 +3. 岗位管理:配置系统用户所属担任职务。 +4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 +5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 +6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 +7. 参数管理:对系统动态配置常用参数。 +8. 通知公告:系统通知公告信息发布维护。 +9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 +10. 登录日志:系统登录日志记录查询包含登录异常。 +11. 在线用户:当前系统中活跃用户状态监控。 +12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 +13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 +14. 系统接口:根据业务代码自动生成相关的api接口文档。 +15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 +16. 缓存监控:对系统的缓存信息查询,命令统计等。 +17. 在线构建器:拖动表单元素生成相应的HTML代码。 +18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 + +### 新加功能和增强功能演示 + + + + + + + + + + + + + + + + + + +
+ +### 原有功能演示 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +# 联系我们: + +QQ交流群:744785891 diff --git a/bin/build.bat b/bin/build.bat new file mode 100644 index 0000000..ecbb454 --- /dev/null +++ b/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅdistļ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn build:prod + +pause \ No newline at end of file diff --git a/bin/package.bat b/bin/package.bat new file mode 100644 index 0000000..f5b24e0 --- /dev/null +++ b/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] װWeḅnode_modulesļ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn --registry=https://registry.npmmirror.com + +pause \ No newline at end of file diff --git a/bin/run-web.bat b/bin/run-web.bat new file mode 100644 index 0000000..d2fe397 --- /dev/null +++ b/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] ʹ Vite Web ̡ +echo. + +%~d0 +cd %~dp0 + +cd .. +yarn dev + +pause \ No newline at end of file diff --git a/doc/image/code-edit.png b/doc/image/code-edit.png new file mode 100644 index 0000000..bea6014 Binary files /dev/null and b/doc/image/code-edit.png differ diff --git a/doc/image/code-show.png b/doc/image/code-show.png new file mode 100644 index 0000000..3414fda Binary files /dev/null and b/doc/image/code-show.png differ diff --git a/doc/image/flowable.png b/doc/image/flowable.png new file mode 100644 index 0000000..ffd135f Binary files /dev/null and b/doc/image/flowable.png differ diff --git a/doc/image/form-edit.png b/doc/image/form-edit.png new file mode 100644 index 0000000..3ac6dc2 Binary files /dev/null and b/doc/image/form-edit.png differ diff --git a/doc/image/logo.png b/doc/image/logo.png new file mode 100644 index 0000000..dab35ca Binary files /dev/null and b/doc/image/logo.png differ diff --git a/doc/image/message.png b/doc/image/message.png new file mode 100644 index 0000000..3d13eef Binary files /dev/null and b/doc/image/message.png differ diff --git a/doc/image/online-mb-code.png b/doc/image/online-mb-code.png new file mode 100644 index 0000000..45a4973 Binary files /dev/null and b/doc/image/online-mb-code.png differ diff --git a/doc/image/online-mb-edit.png b/doc/image/online-mb-edit.png new file mode 100644 index 0000000..6f3b378 Binary files /dev/null and b/doc/image/online-mb-edit.png differ diff --git a/doc/image/online-mb-list.png b/doc/image/online-mb-list.png new file mode 100644 index 0000000..0e1c032 Binary files /dev/null and b/doc/image/online-mb-list.png differ diff --git a/doc/nginx.conf b/doc/nginx.conf new file mode 100644 index 0000000..60d74b7 --- /dev/null +++ b/doc/nginx.conf @@ -0,0 +1,66 @@ +worker_processes 1; + +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/octet-stream; + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + server_name localhost; + charset utf-8; + + # 前端根应用路径部署 + location / { + root /home/ruoyi/projects/ruoyi-ui; + try_files $uri $uri/ /index.html; + index index.html index.htm; + } + + # 前端子应用路径部署 + # 需要与env环境变量中的VITE_BASE_ROUTER路由基础路径保持一致 + # location /admin { + # alias /home/ruoyi/projects/ruoyi-ui; + # try_files $uri $uri/ /admin/index.html; + # index index.html index.htm; + # } + + # 后端接口代理 + location /prod-api/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://localhost:8080/; + } + + # 后端websocket代理 + location /websocket/ { + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_read_timeout 30000s; + proxy_pass http://localhost:8080/websocket; + } + + # 后端在线接口文档的请求路径 + location /v3/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://localhost:8080/v3/; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } +} \ No newline at end of file diff --git a/html/ie.html b/html/ie.html new file mode 100644 index 0000000..cf6dcb7 --- /dev/null +++ b/html/ie.html @@ -0,0 +1,47 @@ + + + + + + 请升级您的浏览器 + + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..e024604 --- /dev/null +++ b/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + 天然气工具集 + + + + + +
+
+
+
+
+
正在加载系统资源,请耐心等待
+
+
+ + + + \ No newline at end of file diff --git a/lib/vform/designer.style.css b/lib/vform/designer.style.css new file mode 100644 index 0000000..7482780 --- /dev/null +++ b/lib/vform/designer.style.css @@ -0,0 +1,16 @@ +@charset "UTF-8";.primary-color[data-v-8002b89a]{color:#409eff}.background-opacity[data-v-8002b89a]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-8002b89a]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-8002b89a]{margin-top:8px}.el-form-item--medium .el-radio[data-v-8002b89a]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-8002b89a]{margin-top:8px}.el-form-item--small .el-radio[data-v-8002b89a]{line-height:32px!important}.el-form-item--small .el-rate[data-v-8002b89a]{margin-top:6px}.el-form-item--mini .el-radio[data-v-8002b89a]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-8002b89a]{margin-top:4px}.el-card[data-v-8002b89a]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-8002b89a]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-8002b89a],.auto-full-width.el-date-editor.el-input__inner[data-v-8002b89a]{width:100%!important}[data-v-8002b89a]::-webkit-scrollbar{width:8px;height:8px}[data-v-8002b89a]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-8002b89a]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-8002b89a]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-8002b89a]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.svg-icon[data-v-8002b89a]{width:1.1em;height:1.1em;margin-left:.35em;margin-right:.35em;vertical-align:-.15em;fill:currentColor;overflow:hidden;display:inline-block}.primary-color[data-v-b7a1a47c]{color:#409eff}.background-opacity[data-v-b7a1a47c]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-b7a1a47c]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-b7a1a47c]{margin-top:8px}.el-form-item--medium .el-radio[data-v-b7a1a47c]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-b7a1a47c]{margin-top:8px}.el-form-item--small .el-radio[data-v-b7a1a47c]{line-height:32px!important}.el-form-item--small .el-rate[data-v-b7a1a47c]{margin-top:6px}.el-form-item--mini .el-radio[data-v-b7a1a47c]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-b7a1a47c]{margin-top:4px}.el-card[data-v-b7a1a47c]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-b7a1a47c]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-b7a1a47c],.auto-full-width.el-date-editor.el-input__inner[data-v-b7a1a47c]{width:100%!important}[data-v-b7a1a47c]::-webkit-scrollbar{width:8px;height:8px}[data-v-b7a1a47c]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-b7a1a47c]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-b7a1a47c]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-b7a1a47c]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.color-svg-icon[data-v-b7a1a47c]{-webkit-font-smoothing:antialiased;color:#7c7d82}.side-scroll-bar[data-v-b7a1a47c] .el-scrollbar__wrap{overflow-x:hidden}div.panel-container[data-v-b7a1a47c]{padding-bottom:10px}.no-bottom-margin[data-v-b7a1a47c] .el-tabs__header{margin-bottom:0}.indent-left-margin[data-v-b7a1a47c] .el-tabs__nav{margin-left:20px}.el-collapse-item[data-v-b7a1a47c] ul>li{list-style:none}.widget-collapse[data-v-b7a1a47c]{border-top-width:0}.widget-collapse[data-v-b7a1a47c] .el-collapse-item__header{margin-left:8px;font-style:italic;font-weight:700}.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content{padding-bottom:6px}.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul{padding-left:10px;margin:0;margin-block-start:0;margin-block-end:.25em;padding-inline-start:10px}.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul:after{content:"";display:block;clear:both}.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul .container-widget-item,.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul .field-widget-item{display:inline-block;height:32px;line-height:32px;width:98px;float:left;margin:2px 6px 6px 0;cursor:move;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;background:#fff;border:1px solid #e8e9eb;border-radius:4px;padding:0 8px}.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul .container-widget-item:hover,.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul .field-widget-item:hover{background:#F1F2F3;border-color:#409eff}.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul .container-widget-item:hover .color-svg-icon,.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul .field-widget-item:hover .color-svg-icon{color:#409eff}.widget-collapse[data-v-b7a1a47c] .el-collapse-item__content ul .drag-handler{position:absolute;top:0;left:160px;background-color:#ddd;border-radius:5px;padding-right:5px;font-size:11px;color:#666}.el-card.ft-card[data-v-b7a1a47c]{border:1px solid #8896B3}.ft-card[data-v-b7a1a47c]{margin-bottom:10px}.ft-card .bottom[data-v-b7a1a47c]{margin-top:10px;line-height:12px}.ft-card .ft-title[data-v-b7a1a47c]{font-size:13px;font-weight:700}.ft-card .right-button[data-v-b7a1a47c]{padding:0;float:right}.ft-card .clear-fix[data-v-b7a1a47c]:before,.ft-card .clear-fix[data-v-b7a1a47c]:after{display:table;content:""}.ft-card .clear-fix[data-v-b7a1a47c]:after{clear:both}.primary-color[data-v-244033de]{color:#409eff}.background-opacity[data-v-244033de]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-244033de]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-244033de]{margin-top:8px}.el-form-item--medium .el-radio[data-v-244033de]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-244033de]{margin-top:8px}.el-form-item--small .el-radio[data-v-244033de]{line-height:32px!important}.el-form-item--small .el-rate[data-v-244033de]{margin-top:6px}.el-form-item--mini .el-radio[data-v-244033de]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-244033de]{margin-top:4px}.el-card[data-v-244033de]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-244033de]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-244033de],.auto-full-width.el-date-editor.el-input__inner[data-v-244033de]{width:100%!important}[data-v-244033de]::-webkit-scrollbar{width:8px;height:8px}[data-v-244033de]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-244033de]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-244033de]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-244033de]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.design-time-bottom-margin[data-v-244033de]{margin-bottom:5px}.field-wrapper[data-v-244033de]{position:relative}.field-wrapper .field-action[data-v-244033de]{position:absolute;bottom:0;right:-2px;height:22px;line-height:22px;background:#409EFF;z-index:9}.field-wrapper .field-action i[data-v-244033de]{font-size:14px;color:#fff;margin:0 5px;cursor:pointer}.field-wrapper .drag-handler[data-v-244033de]{position:absolute;top:0;left:-1px;height:20px;line-height:20px;z-index:9}.field-wrapper .drag-handler i[data-v-244033de]{font-size:12px;font-style:normal;color:#fff;margin:4px;cursor:move}.field-wrapper .drag-handler[data-v-244033de]:hover{background:#409EFF}.field-action[data-v-244033de] .svg-icon,.drag-handler[data-v-244033de] .svg-icon{margin-left:.1em;margin-right:.1em}.static-content-item[data-v-244033de]{min-height:20px;display:flex;align-items:center}.static-content-item[data-v-244033de] .el-divider--horizontal{margin:0}.el-form-item.selected[data-v-244033de],.static-content-item.selected[data-v-244033de]{outline:2px solid #409EFF}.primary-color[data-v-3784bbc2]{color:#409eff}.background-opacity[data-v-3784bbc2]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-3784bbc2]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-3784bbc2]{margin-top:8px}.el-form-item--medium .el-radio[data-v-3784bbc2]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-3784bbc2]{margin-top:8px}.el-form-item--small .el-radio[data-v-3784bbc2]{line-height:32px!important}.el-form-item--small .el-rate[data-v-3784bbc2]{margin-top:6px}.el-form-item--mini .el-radio[data-v-3784bbc2]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-3784bbc2]{margin-top:4px}.el-card[data-v-3784bbc2]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-3784bbc2]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-3784bbc2],.auto-full-width.el-date-editor.el-input__inner[data-v-3784bbc2]{width:100%!important}[data-v-3784bbc2]::-webkit-scrollbar{width:8px;height:8px}[data-v-3784bbc2]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-3784bbc2]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-3784bbc2]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-3784bbc2]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.primary-color[data-v-6e673265]{color:#409eff}.background-opacity[data-v-6e673265]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-6e673265]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-6e673265]{margin-top:8px}.el-form-item--medium .el-radio[data-v-6e673265]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-6e673265]{margin-top:8px}.el-form-item--small .el-radio[data-v-6e673265]{line-height:32px!important}.el-form-item--small .el-rate[data-v-6e673265]{margin-top:6px}.el-form-item--mini .el-radio[data-v-6e673265]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-6e673265]{margin-top:4px}.el-card[data-v-6e673265]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-6e673265]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-6e673265],.auto-full-width.el-date-editor.el-input__inner[data-v-6e673265]{width:100%!important}[data-v-6e673265]::-webkit-scrollbar{width:8px;height:8px}[data-v-6e673265]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-6e673265]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-6e673265]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-6e673265]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.design-time-bottom-margin[data-v-6e673265]{margin-bottom:5px}.field-wrapper[data-v-6e673265]{position:relative}.field-wrapper .field-action[data-v-6e673265]{position:absolute;bottom:0;right:-2px;height:22px;line-height:22px;background:#409EFF;z-index:9}.field-wrapper .field-action i[data-v-6e673265]{font-size:14px;color:#fff;margin:0 3px;cursor:pointer}.field-wrapper .drag-handler[data-v-6e673265]{position:absolute;top:0;left:-1px;height:20px;line-height:20px;z-index:9}.field-wrapper .drag-handler i[data-v-6e673265]{font-size:12px;font-style:normal;color:#fff;margin:4px;cursor:move}.field-wrapper .drag-handler[data-v-6e673265]:hover{background:#409EFF}.field-action[data-v-6e673265] .svg-icon,.drag-handler[data-v-6e673265] .svg-icon{margin-left:0;margin-right:0}.el-form-item[data-v-6e673265]{position:relative}.el-form-item[data-v-6e673265] .el-form-item__label{white-space:nowrap;text-overflow:ellipsis}.el-form-item span.custom-label i[data-v-6e673265]{margin:0 3px}.el-form-item[data-v-6e673265] .hide-spin-button input::-webkit-outer-spin-button,.el-form-item[data-v-6e673265] .hide-spin-button input::-webkit-inner-spin-button{-webkit-appearance:none!important}.el-form-item[data-v-6e673265] .hide-spin-button input[type=number]{-moz-appearance:textfield}.required[data-v-6e673265] .el-form-item__label:before{content:"*";color:#f56c6c;margin-right:4px}.static-content-item[data-v-6e673265]{min-height:20px;display:flex;align-items:center}.static-content-item[data-v-6e673265] .el-divider--horizontal{margin:0}.el-form-item.selected[data-v-6e673265],.static-content-item.selected[data-v-6e673265]{outline:2px solid #409EFF}[data-v-6e673265] .label-left-align .el-form-item__label{text-align:left;justify-content:flex-start!important}[data-v-6e673265] .label-center-align .el-form-item__label{text-align:center;justify-content:center!important}[data-v-6e673265] .label-right-align .el-form-item__label{text-align:right;justify-content:flex-end!important}.primary-color[data-v-3ebbe3c0]{color:#409eff}.background-opacity[data-v-3ebbe3c0]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-3ebbe3c0]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-3ebbe3c0]{margin-top:8px}.el-form-item--medium .el-radio[data-v-3ebbe3c0]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-3ebbe3c0]{margin-top:8px}.el-form-item--small .el-radio[data-v-3ebbe3c0]{line-height:32px!important}.el-form-item--small .el-rate[data-v-3ebbe3c0]{margin-top:6px}.el-form-item--mini .el-radio[data-v-3ebbe3c0]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-3ebbe3c0]{margin-top:4px}.el-card[data-v-3ebbe3c0]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-3ebbe3c0]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-3ebbe3c0],.auto-full-width.el-date-editor.el-input__inner[data-v-3ebbe3c0]{width:100%!important}[data-v-3ebbe3c0]::-webkit-scrollbar{width:8px;height:8px}[data-v-3ebbe3c0]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-3ebbe3c0]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-3ebbe3c0]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-3ebbe3c0]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-3ebbe3c0],.full-width-input[data-v-3ebbe3c0] .el-cascader{width:100%!important}.primary-color[data-v-33320a4d]{color:#409eff}.background-opacity[data-v-33320a4d]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-33320a4d]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-33320a4d]{margin-top:8px}.el-form-item--medium .el-radio[data-v-33320a4d]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-33320a4d]{margin-top:8px}.el-form-item--small .el-radio[data-v-33320a4d]{line-height:32px!important}.el-form-item--small .el-rate[data-v-33320a4d]{margin-top:6px}.el-form-item--mini .el-radio[data-v-33320a4d]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-33320a4d]{margin-top:4px}.el-card[data-v-33320a4d]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-33320a4d]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-33320a4d],.auto-full-width.el-date-editor.el-input__inner[data-v-33320a4d]{width:100%!important}[data-v-33320a4d]::-webkit-scrollbar{width:8px;height:8px}[data-v-33320a4d]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-33320a4d]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-33320a4d]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-33320a4d]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.primary-color[data-v-5c8214c6]{color:#409eff}.background-opacity[data-v-5c8214c6]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-5c8214c6]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-5c8214c6]{margin-top:8px}.el-form-item--medium .el-radio[data-v-5c8214c6]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-5c8214c6]{margin-top:8px}.el-form-item--small .el-radio[data-v-5c8214c6]{line-height:32px!important}.el-form-item--small .el-rate[data-v-5c8214c6]{margin-top:6px}.el-form-item--mini .el-radio[data-v-5c8214c6]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-5c8214c6]{margin-top:4px}.el-card[data-v-5c8214c6]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-5c8214c6]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-5c8214c6],.auto-full-width.el-date-editor.el-input__inner[data-v-5c8214c6]{width:100%!important}[data-v-5c8214c6]::-webkit-scrollbar{width:8px;height:8px}[data-v-5c8214c6]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-5c8214c6]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-5c8214c6]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-5c8214c6]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-5c8214c6]{width:100%!important}.primary-color[data-v-9b0f3514]{color:#409eff}.background-opacity[data-v-9b0f3514]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-9b0f3514]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-9b0f3514]{margin-top:8px}.el-form-item--medium .el-radio[data-v-9b0f3514]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-9b0f3514]{margin-top:8px}.el-form-item--small .el-radio[data-v-9b0f3514]{line-height:32px!important}.el-form-item--small .el-rate[data-v-9b0f3514]{margin-top:6px}.el-form-item--mini .el-radio[data-v-9b0f3514]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-9b0f3514]{margin-top:4px}.el-card[data-v-9b0f3514]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-9b0f3514]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-9b0f3514],.auto-full-width.el-date-editor.el-input__inner[data-v-9b0f3514]{width:100%!important}[data-v-9b0f3514]::-webkit-scrollbar{width:8px;height:8px}[data-v-9b0f3514]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-9b0f3514]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-9b0f3514]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-9b0f3514]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-9b0f3514]{width:100%!important}.auto-full-width[data-v-9b0f3514]{width:100%}.auto-full-width[data-v-9b0f3514] .el-range-editor{width:100%!important}.primary-color[data-v-f05b3708]{color:#409eff}.background-opacity[data-v-f05b3708]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-f05b3708]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-f05b3708]{margin-top:8px}.el-form-item--medium .el-radio[data-v-f05b3708]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-f05b3708]{margin-top:8px}.el-form-item--small .el-radio[data-v-f05b3708]{line-height:32px!important}.el-form-item--small .el-rate[data-v-f05b3708]{margin-top:6px}.el-form-item--mini .el-radio[data-v-f05b3708]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-f05b3708]{margin-top:4px}.el-card[data-v-f05b3708]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-f05b3708]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-f05b3708],.auto-full-width.el-date-editor.el-input__inner[data-v-f05b3708]{width:100%!important}[data-v-f05b3708]::-webkit-scrollbar{width:8px;height:8px}[data-v-f05b3708]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-f05b3708]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-f05b3708]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-f05b3708]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-f05b3708]{width:100%!important}.primary-color[data-v-208e9558]{color:#409eff}.background-opacity[data-v-208e9558]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-208e9558]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-208e9558]{margin-top:8px}.el-form-item--medium .el-radio[data-v-208e9558]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-208e9558]{margin-top:8px}.el-form-item--small .el-radio[data-v-208e9558]{line-height:32px!important}.el-form-item--small .el-rate[data-v-208e9558]{margin-top:6px}.el-form-item--mini .el-radio[data-v-208e9558]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-208e9558]{margin-top:4px}.el-card[data-v-208e9558]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-208e9558]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-208e9558],.auto-full-width.el-date-editor.el-input__inner[data-v-208e9558]{width:100%!important}[data-v-208e9558]::-webkit-scrollbar{width:8px;height:8px}[data-v-208e9558]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-208e9558]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-208e9558]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-208e9558]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.primary-color[data-v-335cf656]{color:#409eff}.background-opacity[data-v-335cf656]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-335cf656]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-335cf656]{margin-top:8px}.el-form-item--medium .el-radio[data-v-335cf656]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-335cf656]{margin-top:8px}.el-form-item--small .el-radio[data-v-335cf656]{line-height:32px!important}.el-form-item--small .el-rate[data-v-335cf656]{margin-top:6px}.el-form-item--mini .el-radio[data-v-335cf656]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-335cf656]{margin-top:4px}.el-card[data-v-335cf656]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-335cf656]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-335cf656],.auto-full-width.el-date-editor.el-input__inner[data-v-335cf656]{width:100%!important}[data-v-335cf656]::-webkit-scrollbar{width:8px;height:8px}[data-v-335cf656]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-335cf656]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-335cf656]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-335cf656]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-335cf656]{width:100%!important}.dynamicPseudoAfter[data-v-335cf656] .el-upload.el-upload--text{color:#409eff;font-size:12px}.dynamicPseudoAfter[data-v-335cf656] .el-upload.el-upload--text .el-icon-plus:after{content:var(--select-file-action)}.hideUploadDiv[data-v-335cf656] div.el-upload--picture-card,.hideUploadDiv[data-v-335cf656] div.el-upload--text,.hideUploadDiv[data-v-335cf656] div.el-upload__tip{display:none}.upload-file-list[data-v-335cf656]{font-size:12px}.upload-file-list .file-action[data-v-335cf656]{color:#409eff;margin-left:5px;margin-right:5px;cursor:pointer}.primary-color[data-v-1ad6f874]{color:#409eff}.background-opacity[data-v-1ad6f874]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-1ad6f874]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-1ad6f874]{margin-top:8px}.el-form-item--medium .el-radio[data-v-1ad6f874]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-1ad6f874]{margin-top:8px}.el-form-item--small .el-radio[data-v-1ad6f874]{line-height:32px!important}.el-form-item--small .el-rate[data-v-1ad6f874]{margin-top:6px}.el-form-item--mini .el-radio[data-v-1ad6f874]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-1ad6f874]{margin-top:4px}.el-card[data-v-1ad6f874]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-1ad6f874]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-1ad6f874],.auto-full-width.el-date-editor.el-input__inner[data-v-1ad6f874]{width:100%!important}[data-v-1ad6f874]::-webkit-scrollbar{width:8px;height:8px}[data-v-1ad6f874]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-1ad6f874]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-1ad6f874]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-1ad6f874]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.primary-color[data-v-35bcee25]{color:#409eff}.background-opacity[data-v-35bcee25]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-35bcee25]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-35bcee25]{margin-top:8px}.el-form-item--medium .el-radio[data-v-35bcee25]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-35bcee25]{margin-top:8px}.el-form-item--small .el-radio[data-v-35bcee25]{line-height:32px!important}.el-form-item--small .el-rate[data-v-35bcee25]{margin-top:6px}.el-form-item--mini .el-radio[data-v-35bcee25]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-35bcee25]{margin-top:4px}.el-card[data-v-35bcee25]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-35bcee25]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-35bcee25],.auto-full-width.el-date-editor.el-input__inner[data-v-35bcee25]{width:100%!important}[data-v-35bcee25]::-webkit-scrollbar{width:8px;height:8px}[data-v-35bcee25]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-35bcee25]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-35bcee25]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-35bcee25]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.primary-color[data-v-612b9efe]{color:#409eff}.background-opacity[data-v-612b9efe]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-612b9efe]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-612b9efe]{margin-top:8px}.el-form-item--medium .el-radio[data-v-612b9efe]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-612b9efe]{margin-top:8px}.el-form-item--small .el-radio[data-v-612b9efe]{line-height:32px!important}.el-form-item--small .el-rate[data-v-612b9efe]{margin-top:6px}.el-form-item--mini .el-radio[data-v-612b9efe]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-612b9efe]{margin-top:4px}.el-card[data-v-612b9efe]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-612b9efe]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-612b9efe],.auto-full-width.el-date-editor.el-input__inner[data-v-612b9efe]{width:100%!important}[data-v-612b9efe]::-webkit-scrollbar{width:8px;height:8px}[data-v-612b9efe]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-612b9efe]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-612b9efe]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-612b9efe]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-612b9efe]{width:100%!important}.primary-color[data-v-6bdae02e]{color:#409eff}.background-opacity[data-v-6bdae02e]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-6bdae02e]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-6bdae02e]{margin-top:8px}.el-form-item--medium .el-radio[data-v-6bdae02e]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-6bdae02e]{margin-top:8px}.el-form-item--small .el-radio[data-v-6bdae02e]{line-height:32px!important}.el-form-item--small .el-rate[data-v-6bdae02e]{margin-top:6px}.el-form-item--mini .el-radio[data-v-6bdae02e]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-6bdae02e]{margin-top:4px}.el-card[data-v-6bdae02e]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-6bdae02e]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-6bdae02e],.auto-full-width.el-date-editor.el-input__inner[data-v-6bdae02e]{width:100%!important}[data-v-6bdae02e]::-webkit-scrollbar{width:8px;height:8px}[data-v-6bdae02e]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-6bdae02e]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-6bdae02e]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-6bdae02e]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-6bdae02e]{width:100%!important}.hideUploadDiv[data-v-6bdae02e] div.el-upload--picture-card,.hideUploadDiv[data-v-6bdae02e] div.el-upload--text,.hideUploadDiv[data-v-6bdae02e] div.el-upload__tip{display:none}.uploader-icon[data-v-6bdae02e]{height:100%;display:flex;color:#8c939d;font-size:28px;justify-content:center;align-items:center}.primary-color[data-v-06d5ed13]{color:#409eff}.background-opacity[data-v-06d5ed13]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-06d5ed13]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-06d5ed13]{margin-top:8px}.el-form-item--medium .el-radio[data-v-06d5ed13]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-06d5ed13]{margin-top:8px}.el-form-item--small .el-radio[data-v-06d5ed13]{line-height:32px!important}.el-form-item--small .el-rate[data-v-06d5ed13]{margin-top:6px}.el-form-item--mini .el-radio[data-v-06d5ed13]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-06d5ed13]{margin-top:4px}.el-card[data-v-06d5ed13]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-06d5ed13]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-06d5ed13],.auto-full-width.el-date-editor.el-input__inner[data-v-06d5ed13]{width:100%!important}[data-v-06d5ed13]::-webkit-scrollbar{width:8px;height:8px}[data-v-06d5ed13]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-06d5ed13]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-06d5ed13]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-06d5ed13]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.radio-group-block[data-v-06d5ed13]{display:block!important}.primary-color[data-v-29a21d5b]{color:#409eff}.background-opacity[data-v-29a21d5b]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-29a21d5b]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-29a21d5b]{margin-top:8px}.el-form-item--medium .el-radio[data-v-29a21d5b]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-29a21d5b]{margin-top:8px}.el-form-item--small .el-radio[data-v-29a21d5b]{line-height:32px!important}.el-form-item--small .el-rate[data-v-29a21d5b]{margin-top:6px}.el-form-item--mini .el-radio[data-v-29a21d5b]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-29a21d5b]{margin-top:4px}.el-card[data-v-29a21d5b]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-29a21d5b]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-29a21d5b],.auto-full-width.el-date-editor.el-input__inner[data-v-29a21d5b]{width:100%!important}[data-v-29a21d5b]::-webkit-scrollbar{width:8px;height:8px}[data-v-29a21d5b]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-29a21d5b]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-29a21d5b]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-29a21d5b]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-29a21d5b]{width:100%!important}/*! +* Quill Editor v1.3.7 +* https://quilljs.com/ +* Copyright (c) 2014, Jason Chen +* Copyright (c) 2013, salesforce.com +*/.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor>*{cursor:text}.ql-editor p,.ql-editor ol,.ql-editor ul,.ql-editor pre,.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"\2022"}.ql-editor ul[data-checked=true],.ql-editor ul[data-checked=false]{pointer-events:none}.ql-editor ul[data-checked=true]>li *,.ql-editor ul[data-checked=false]>li *{pointer-events:all}.ql-editor ul[data-checked=true]>li:before,.ql-editor ul[data-checked=false]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"\2611"}.ql-editor ul[data-checked=false]>li:before{content:"\2610"}.ql-editor li:before{display:inline-block;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl):before{margin-left:-1.5em;margin-right:.3em;text-align:right}.ql-editor li.ql-direction-rtl:before{margin-left:.3em;margin-right:-1.5em}.ql-editor ol li:not(.ql-direction-rtl),.ql-editor ul li:not(.ql-direction-rtl){padding-left:1.5em}.ql-editor ol li.ql-direction-rtl,.ql-editor ul li.ql-direction-rtl{padding-right:1.5em}.ql-editor ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-0}.ql-editor ol li:before{content:counter(list-0,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:#0009;content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor>*{cursor:text}.ql-editor p,.ql-editor ol,.ql-editor ul,.ql-editor pre,.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"\2022"}.ql-editor ul[data-checked=true],.ql-editor ul[data-checked=false]{pointer-events:none}.ql-editor ul[data-checked=true]>li *,.ql-editor ul[data-checked=false]>li *{pointer-events:all}.ql-editor ul[data-checked=true]>li:before,.ql-editor ul[data-checked=false]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"\2611"}.ql-editor ul[data-checked=false]>li:before{content:"\2610"}.ql-editor li:before{display:inline-block;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl):before{margin-left:-1.5em;margin-right:.3em;text-align:right}.ql-editor li.ql-direction-rtl:before{margin-left:.3em;margin-right:-1.5em}.ql-editor ol li:not(.ql-direction-rtl),.ql-editor ul li:not(.ql-direction-rtl){padding-left:1.5em}.ql-editor ol li.ql-direction-rtl,.ql-editor ul li.ql-direction-rtl{padding-right:1.5em}.ql-editor ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-0}.ql-editor ol li:before{content:counter(list-0,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:#0009;content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-snow.ql-toolbar:after,.ql-snow .ql-toolbar:after{clear:both;content:"";display:table}.ql-snow.ql-toolbar button,.ql-snow .ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-snow.ql-toolbar button svg,.ql-snow .ql-toolbar button svg{float:left;height:100%}.ql-snow.ql-toolbar button:active:hover,.ql-snow .ql-toolbar button:active:hover{outline:none}.ql-snow.ql-toolbar input.ql-image[type=file],.ql-snow .ql-toolbar input.ql-image[type=file]{display:none}.ql-snow.ql-toolbar button:hover,.ql-snow .ql-toolbar button:hover,.ql-snow.ql-toolbar button:focus,.ql-snow .ql-toolbar button:focus,.ql-snow.ql-toolbar button.ql-active,.ql-snow .ql-toolbar button.ql-active,.ql-snow.ql-toolbar .ql-picker-label:hover,.ql-snow .ql-toolbar .ql-picker-label:hover,.ql-snow.ql-toolbar .ql-picker-label.ql-active,.ql-snow .ql-toolbar .ql-picker-label.ql-active,.ql-snow.ql-toolbar .ql-picker-item:hover,.ql-snow .ql-toolbar .ql-picker-item:hover,.ql-snow.ql-toolbar .ql-picker-item.ql-selected,.ql-snow .ql-toolbar .ql-picker-item.ql-selected{color:#06c}.ql-snow.ql-toolbar button:hover .ql-fill,.ql-snow .ql-toolbar button:hover .ql-fill,.ql-snow.ql-toolbar button:focus .ql-fill,.ql-snow .ql-toolbar button:focus .ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill{fill:#06c}.ql-snow.ql-toolbar button:hover .ql-stroke,.ql-snow .ql-toolbar button:hover .ql-stroke,.ql-snow.ql-toolbar button:focus .ql-stroke,.ql-snow .ql-toolbar button:focus .ql-stroke,.ql-snow.ql-toolbar button.ql-active .ql-stroke,.ql-snow .ql-toolbar button.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow.ql-toolbar button:hover .ql-stroke-miter,.ql-snow .ql-toolbar button:hover .ql-stroke-miter,.ql-snow.ql-toolbar button:focus .ql-stroke-miter,.ql-snow .ql-toolbar button:focus .ql-stroke-miter,.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter{stroke:#06c}@media (pointer: coarse){.ql-snow.ql-toolbar button:hover:not(.ql-active),.ql-snow .ql-toolbar button:hover:not(.ql-active){color:#444}.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#444}.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#444}}.ql-snow,.ql-snow *{box-sizing:border-box}.ql-snow .ql-hidden{display:none}.ql-snow .ql-out-bottom,.ql-snow .ql-out-top{visibility:hidden}.ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-snow .ql-formats{display:inline-block;vertical-align:middle}.ql-snow .ql-formats:after{clear:both;content:"";display:table}.ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}.ql-snow .ql-fill,.ql-snow .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-empty{fill:none}.ql-snow .ql-even{fill-rule:evenodd}.ql-snow .ql-thin,.ql-snow .ql-stroke.ql-thin{stroke-width:1}.ql-snow .ql-transparent{opacity:.4}.ql-snow .ql-direction svg:last-child{display:none}.ql-snow .ql-direction.ql-active svg:last-child{display:inline}.ql-snow .ql-direction.ql-active svg:first-child{display:none}.ql-snow .ql-editor h1{font-size:2em}.ql-snow .ql-editor h2{font-size:1.5em}.ql-snow .ql-editor h3{font-size:1.17em}.ql-snow .ql-editor h4{font-size:1em}.ql-snow .ql-editor h5{font-size:.83em}.ql-snow .ql-editor h6{font-size:.67em}.ql-snow .ql-editor a{text-decoration:underline}.ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-snow .ql-editor code,.ql-snow .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ql-snow .ql-editor pre{white-space:pre-wrap;margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-snow .ql-editor code{font-size:85%;padding:2px 4px}.ql-snow .ql-editor pre.ql-syntax{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-snow .ql-editor img{max-width:100%}.ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-snow .ql-picker-label:before{display:inline-block;line-height:22px}.ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-snow .ql-color-picker,.ql-snow .ql-icon-picker{width:28px}.ql-snow .ql-color-picker .ql-picker-label,.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-label svg,.ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}.ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-snow .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-snow .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=""]):before{content:attr(data-label)}.ql-snow .ql-picker.ql-header{width:98px}.ql-snow .ql-picker.ql-header .ql-picker-label:before,.ql-snow .ql-picker.ql-header .ql-picker-item:before{content:"Normal"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{content:"Heading 1"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{content:"Heading 2"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{content:"Heading 3"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{content:"Heading 4"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{content:"Heading 5"}.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]:before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{content:"Heading 6"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{font-size:2em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{font-size:1.5em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{font-size:1.17em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{font-size:1em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{font-size:.83em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{font-size:.67em}.ql-snow .ql-picker.ql-font{width:108px}.ql-snow .ql-picker.ql-font .ql-picker-label:before,.ql-snow .ql-picker.ql-font .ql-picker-item:before{content:"Sans Serif"}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]:before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{content:"Serif"}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before,.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{content:"Monospace"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}.ql-snow .ql-picker.ql-size{width:98px}.ql-snow .ql-picker.ql-size .ql-picker-label:before,.ql-snow .ql-picker.ql-size .ql-picker-item:before{content:"Normal"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]:before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{content:"Small"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]:before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{content:"Large"}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]:before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{content:"Huge"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}.ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:8px}.ql-toolbar.ql-snow .ql-formats{margin-right:15px}.ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}.ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:#0003 0 2px 8px}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label,.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}.ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0px}.ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}.ql-snow .ql-tooltip:before{content:"Visit URL:";line-height:26px;margin-right:8px}.ql-snow .ql-tooltip input[type=text]{display:none;border:1px solid #ccc;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}.ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}.ql-snow .ql-tooltip a.ql-action:after{border-right:1px solid #ccc;content:"Edit";margin-left:16px;padding-right:8px}.ql-snow .ql-tooltip a.ql-remove:before{content:"Remove";margin-left:8px}.ql-snow .ql-tooltip a{line-height:26px}.ql-snow .ql-tooltip.ql-editing a.ql-preview,.ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}.ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}.ql-snow .ql-tooltip.ql-editing a.ql-action:after{border-right:0px;content:"Save";padding-right:0}.ql-snow .ql-tooltip[data-mode=link]:before{content:"Enter link:"}.ql-snow .ql-tooltip[data-mode=formula]:before{content:"Enter formula:"}.ql-snow .ql-tooltip[data-mode=video]:before{content:"Enter video:"}.ql-snow a{color:#06c}.ql-container.ql-snow{border:1px solid #ccc}/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor>*{cursor:text}.ql-editor p,.ql-editor ol,.ql-editor ul,.ql-editor pre,.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"\2022"}.ql-editor ul[data-checked=true],.ql-editor ul[data-checked=false]{pointer-events:none}.ql-editor ul[data-checked=true]>li *,.ql-editor ul[data-checked=false]>li *{pointer-events:all}.ql-editor ul[data-checked=true]>li:before,.ql-editor ul[data-checked=false]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"\2611"}.ql-editor ul[data-checked=false]>li:before{content:"\2610"}.ql-editor li:before{display:inline-block;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl):before{margin-left:-1.5em;margin-right:.3em;text-align:right}.ql-editor li.ql-direction-rtl:before{margin-left:.3em;margin-right:-1.5em}.ql-editor ol li:not(.ql-direction-rtl),.ql-editor ul li:not(.ql-direction-rtl){padding-left:1.5em}.ql-editor ol li.ql-direction-rtl,.ql-editor ul li.ql-direction-rtl{padding-right:1.5em}.ql-editor ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-0}.ql-editor ol li:before{content:counter(list-0,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:#0009;content:attr(data-placeholder);font-style:italic;left:15px;pointer-events:none;position:absolute;right:15px}.ql-bubble.ql-toolbar:after,.ql-bubble .ql-toolbar:after{clear:both;content:"";display:table}.ql-bubble.ql-toolbar button,.ql-bubble .ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-bubble.ql-toolbar button svg,.ql-bubble .ql-toolbar button svg{float:left;height:100%}.ql-bubble.ql-toolbar button:active:hover,.ql-bubble .ql-toolbar button:active:hover{outline:none}.ql-bubble.ql-toolbar input.ql-image[type=file],.ql-bubble .ql-toolbar input.ql-image[type=file]{display:none}.ql-bubble.ql-toolbar button:hover,.ql-bubble .ql-toolbar button:hover,.ql-bubble.ql-toolbar button:focus,.ql-bubble .ql-toolbar button:focus,.ql-bubble.ql-toolbar button.ql-active,.ql-bubble .ql-toolbar button.ql-active,.ql-bubble.ql-toolbar .ql-picker-label:hover,.ql-bubble .ql-toolbar .ql-picker-label:hover,.ql-bubble.ql-toolbar .ql-picker-label.ql-active,.ql-bubble .ql-toolbar .ql-picker-label.ql-active,.ql-bubble.ql-toolbar .ql-picker-item:hover,.ql-bubble .ql-toolbar .ql-picker-item:hover,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected{color:#fff}.ql-bubble.ql-toolbar button:hover .ql-fill,.ql-bubble .ql-toolbar button:hover .ql-fill,.ql-bubble.ql-toolbar button:focus .ql-fill,.ql-bubble .ql-toolbar button:focus .ql-fill,.ql-bubble.ql-toolbar button.ql-active .ql-fill,.ql-bubble .ql-toolbar button.ql-active .ql-fill,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill,.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill{fill:#fff}.ql-bubble.ql-toolbar button:hover .ql-stroke,.ql-bubble .ql-toolbar button:hover .ql-stroke,.ql-bubble.ql-toolbar button:focus .ql-stroke,.ql-bubble .ql-toolbar button:focus .ql-stroke,.ql-bubble.ql-toolbar button.ql-active .ql-stroke,.ql-bubble .ql-toolbar button.ql-active .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-bubble.ql-toolbar button:hover .ql-stroke-miter,.ql-bubble .ql-toolbar button:hover .ql-stroke-miter,.ql-bubble.ql-toolbar button:focus .ql-stroke-miter,.ql-bubble .ql-toolbar button:focus .ql-stroke-miter,.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter,.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter{stroke:#fff}@media (pointer: coarse){.ql-bubble.ql-toolbar button:hover:not(.ql-active),.ql-bubble .ql-toolbar button:hover:not(.ql-active){color:#ccc}.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill{fill:#ccc}.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke,.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter{stroke:#ccc}}.ql-bubble,.ql-bubble *{box-sizing:border-box}.ql-bubble .ql-hidden{display:none}.ql-bubble .ql-out-bottom,.ql-bubble .ql-out-top{visibility:hidden}.ql-bubble .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-bubble .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-bubble .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-bubble .ql-formats{display:inline-block;vertical-align:middle}.ql-bubble .ql-formats:after{clear:both;content:"";display:table}.ql-bubble .ql-stroke{fill:none;stroke:#ccc;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-bubble .ql-stroke-miter{fill:none;stroke:#ccc;stroke-miterlimit:10;stroke-width:2}.ql-bubble .ql-fill,.ql-bubble .ql-stroke.ql-fill{fill:#ccc}.ql-bubble .ql-empty{fill:none}.ql-bubble .ql-even{fill-rule:evenodd}.ql-bubble .ql-thin,.ql-bubble .ql-stroke.ql-thin{stroke-width:1}.ql-bubble .ql-transparent{opacity:.4}.ql-bubble .ql-direction svg:last-child{display:none}.ql-bubble .ql-direction.ql-active svg:last-child{display:inline}.ql-bubble .ql-direction.ql-active svg:first-child{display:none}.ql-bubble .ql-editor h1{font-size:2em}.ql-bubble .ql-editor h2{font-size:1.5em}.ql-bubble .ql-editor h3{font-size:1.17em}.ql-bubble .ql-editor h4{font-size:1em}.ql-bubble .ql-editor h5{font-size:.83em}.ql-bubble .ql-editor h6{font-size:.67em}.ql-bubble .ql-editor a{text-decoration:underline}.ql-bubble .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-bubble .ql-editor code,.ql-bubble .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ql-bubble .ql-editor pre{white-space:pre-wrap;margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-bubble .ql-editor code{font-size:85%;padding:2px 4px}.ql-bubble .ql-editor pre.ql-syntax{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-bubble .ql-editor img{max-width:100%}.ql-bubble .ql-picker{color:#ccc;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-bubble .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-bubble .ql-picker-label:before{display:inline-block;line-height:22px}.ql-bubble .ql-picker-options{background-color:#444;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-bubble .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-bubble .ql-picker.ql-expanded .ql-picker-label{color:#777;z-index:2}.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#777}.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#777}.ql-bubble .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-bubble .ql-color-picker,.ql-bubble .ql-icon-picker{width:28px}.ql-bubble .ql-color-picker .ql-picker-label,.ql-bubble .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-bubble .ql-color-picker .ql-picker-label svg,.ql-bubble .ql-icon-picker .ql-picker-label svg{right:4px}.ql-bubble .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-bubble .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-bubble .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-bubble .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=""]):before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=""]):before{content:attr(data-label)}.ql-bubble .ql-picker.ql-header{width:98px}.ql-bubble .ql-picker.ql-header .ql-picker-label:before,.ql-bubble .ql-picker.ql-header .ql-picker-item:before{content:"Normal"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{content:"Heading 1"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{content:"Heading 2"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{content:"Heading 3"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{content:"Heading 4"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{content:"Heading 5"}.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]:before,.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{content:"Heading 6"}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{font-size:2em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{font-size:1.5em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{font-size:1.17em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{font-size:1em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{font-size:.83em}.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{font-size:.67em}.ql-bubble .ql-picker.ql-font{width:108px}.ql-bubble .ql-picker.ql-font .ql-picker-label:before,.ql-bubble .ql-picker.ql-font .ql-picker-item:before{content:"Sans Serif"}.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]:before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{content:"Serif"}.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before,.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{content:"Monospace"}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}.ql-bubble .ql-picker.ql-size{width:98px}.ql-bubble .ql-picker.ql-size .ql-picker-label:before,.ql-bubble .ql-picker.ql-size .ql-picker-item:before{content:"Normal"}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]:before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]:before{content:"Small"}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]:before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]:before{content:"Large"}.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]:before,.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{content:"Huge"}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}.ql-bubble .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-bubble .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-bubble .ql-toolbar .ql-formats{margin:8px 12px 8px 0}.ql-bubble .ql-toolbar .ql-formats:first-child{margin-left:12px}.ql-bubble .ql-color-picker svg{margin:1px}.ql-bubble .ql-color-picker .ql-picker-item.ql-selected,.ql-bubble .ql-color-picker .ql-picker-item:hover{border-color:#fff}.ql-bubble .ql-tooltip{background-color:#444;border-radius:25px;color:#fff}.ql-bubble .ql-tooltip-arrow{border-left:6px solid transparent;border-right:6px solid transparent;content:" ";display:block;left:50%;margin-left:-6px;position:absolute}.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow{border-bottom:6px solid #444;top:-6px}.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow{border-top:6px solid #444;bottom:-6px}.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor{display:block}.ql-bubble .ql-tooltip.ql-editing .ql-formats{visibility:hidden}.ql-bubble .ql-tooltip-editor{display:none}.ql-bubble .ql-tooltip-editor input[type=text]{background:transparent;border:none;color:#fff;font-size:13px;height:100%;outline:none;padding:10px 20px;position:absolute;width:100%}.ql-bubble .ql-tooltip-editor a{top:10px;position:absolute;right:20px}.ql-bubble .ql-tooltip-editor a:before{color:#ccc;content:"\d7";font-size:16px;font-weight:700}.ql-container.ql-bubble:not(.ql-disabled) a{position:relative;white-space:nowrap}.ql-container.ql-bubble:not(.ql-disabled) a:before{background-color:#444;border-radius:15px;top:-5px;font-size:12px;color:#fff;content:attr(href);font-weight:400;overflow:hidden;padding:5px 15px;text-decoration:none;z-index:1}.ql-container.ql-bubble:not(.ql-disabled) a:after{border-top:6px solid #444;border-left:6px solid transparent;border-right:6px solid transparent;top:0;content:" ";height:0;width:0}.ql-container.ql-bubble:not(.ql-disabled) a:before,.ql-container.ql-bubble:not(.ql-disabled) a:after{left:0;margin-left:50%;position:absolute;transform:translate(-50%,-100%);transition:visibility 0s ease .2s;visibility:hidden}.ql-container.ql-bubble:not(.ql-disabled) a:hover:before,.ql-container.ql-bubble:not(.ql-disabled) a:hover:after{visibility:visible}.primary-color[data-v-697b5022]{color:#409eff}.background-opacity[data-v-697b5022]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-697b5022]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-697b5022]{margin-top:8px}.el-form-item--medium .el-radio[data-v-697b5022]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-697b5022]{margin-top:8px}.el-form-item--small .el-radio[data-v-697b5022]{line-height:32px!important}.el-form-item--small .el-rate[data-v-697b5022]{margin-top:6px}.el-form-item--mini .el-radio[data-v-697b5022]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-697b5022]{margin-top:4px}.el-card[data-v-697b5022]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-697b5022]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-697b5022],.auto-full-width.el-date-editor.el-input__inner[data-v-697b5022]{width:100%!important}[data-v-697b5022]::-webkit-scrollbar{width:8px;height:8px}[data-v-697b5022]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-697b5022]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-697b5022]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-697b5022]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-697b5022]{width:100%!important}.primary-color[data-v-3a0f316d]{color:#409eff}.background-opacity[data-v-3a0f316d]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-3a0f316d]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-3a0f316d]{margin-top:8px}.el-form-item--medium .el-radio[data-v-3a0f316d]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-3a0f316d]{margin-top:8px}.el-form-item--small .el-radio[data-v-3a0f316d]{line-height:32px!important}.el-form-item--small .el-rate[data-v-3a0f316d]{margin-top:6px}.el-form-item--mini .el-radio[data-v-3a0f316d]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-3a0f316d]{margin-top:4px}.el-card[data-v-3a0f316d]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-3a0f316d]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-3a0f316d],.auto-full-width.el-date-editor.el-input__inner[data-v-3a0f316d]{width:100%!important}[data-v-3a0f316d]::-webkit-scrollbar{width:8px;height:8px}[data-v-3a0f316d]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-3a0f316d]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-3a0f316d]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-3a0f316d]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-3a0f316d]{width:100%!important}.primary-color[data-v-0de324ac]{color:#409eff}.background-opacity[data-v-0de324ac]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-0de324ac]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-0de324ac]{margin-top:8px}.el-form-item--medium .el-radio[data-v-0de324ac]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-0de324ac]{margin-top:8px}.el-form-item--small .el-radio[data-v-0de324ac]{line-height:32px!important}.el-form-item--small .el-rate[data-v-0de324ac]{margin-top:6px}.el-form-item--mini .el-radio[data-v-0de324ac]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-0de324ac]{margin-top:4px}.el-card[data-v-0de324ac]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-0de324ac]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-0de324ac],.auto-full-width.el-date-editor.el-input__inner[data-v-0de324ac]{width:100%!important}[data-v-0de324ac]::-webkit-scrollbar{width:8px;height:8px}[data-v-0de324ac]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-0de324ac]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-0de324ac]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-0de324ac]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-0de324ac]{width:100%!important}.primary-color[data-v-95f13fca]{color:#409eff}.background-opacity[data-v-95f13fca]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-95f13fca]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-95f13fca]{margin-top:8px}.el-form-item--medium .el-radio[data-v-95f13fca]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-95f13fca]{margin-top:8px}.el-form-item--small .el-radio[data-v-95f13fca]{line-height:32px!important}.el-form-item--small .el-rate[data-v-95f13fca]{margin-top:6px}.el-form-item--mini .el-radio[data-v-95f13fca]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-95f13fca]{margin-top:4px}.el-card[data-v-95f13fca]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-95f13fca]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-95f13fca],.auto-full-width.el-date-editor.el-input__inner[data-v-95f13fca]{width:100%!important}[data-v-95f13fca]::-webkit-scrollbar{width:8px;height:8px}[data-v-95f13fca]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-95f13fca]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-95f13fca]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-95f13fca]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.slot-wrapper-design[data-v-95f13fca]{width:100%;min-height:26px;background:linear-gradient(45deg,#ccc 25%,#eee 0,#eee 50%,#ccc 0,#ccc 75%,#eee 0);background-size:20px 20px;text-align:center}.slot-wrapper-design .slot-title[data-v-95f13fca]{font-size:13px}.primary-color[data-v-9a1dfacc]{color:#409eff}.background-opacity[data-v-9a1dfacc]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-9a1dfacc]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-9a1dfacc]{margin-top:8px}.el-form-item--medium .el-radio[data-v-9a1dfacc]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-9a1dfacc]{margin-top:8px}.el-form-item--small .el-radio[data-v-9a1dfacc]{line-height:32px!important}.el-form-item--small .el-rate[data-v-9a1dfacc]{margin-top:6px}.el-form-item--mini .el-radio[data-v-9a1dfacc]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-9a1dfacc]{margin-top:4px}.el-card[data-v-9a1dfacc]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-9a1dfacc]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-9a1dfacc],.auto-full-width.el-date-editor.el-input__inner[data-v-9a1dfacc]{width:100%!important}[data-v-9a1dfacc]::-webkit-scrollbar{width:8px;height:8px}[data-v-9a1dfacc]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-9a1dfacc]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-9a1dfacc]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-9a1dfacc]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.primary-color[data-v-22bb2b91]{color:#409eff}.background-opacity[data-v-22bb2b91]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-22bb2b91]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-22bb2b91]{margin-top:8px}.el-form-item--medium .el-radio[data-v-22bb2b91]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-22bb2b91]{margin-top:8px}.el-form-item--small .el-radio[data-v-22bb2b91]{line-height:32px!important}.el-form-item--small .el-rate[data-v-22bb2b91]{margin-top:6px}.el-form-item--mini .el-radio[data-v-22bb2b91]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-22bb2b91]{margin-top:4px}.el-card[data-v-22bb2b91]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-22bb2b91]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-22bb2b91],.auto-full-width.el-date-editor.el-input__inner[data-v-22bb2b91]{width:100%!important}[data-v-22bb2b91]::-webkit-scrollbar{width:8px;height:8px}[data-v-22bb2b91]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-22bb2b91]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-22bb2b91]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-22bb2b91]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-22bb2b91]{width:100%!important}.primary-color[data-v-4cec7068]{color:#409eff}.background-opacity[data-v-4cec7068]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-4cec7068]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-4cec7068]{margin-top:8px}.el-form-item--medium .el-radio[data-v-4cec7068]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-4cec7068]{margin-top:8px}.el-form-item--small .el-radio[data-v-4cec7068]{line-height:32px!important}.el-form-item--small .el-rate[data-v-4cec7068]{margin-top:6px}.el-form-item--mini .el-radio[data-v-4cec7068]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-4cec7068]{margin-top:4px}.el-card[data-v-4cec7068]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-4cec7068]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-4cec7068],.auto-full-width.el-date-editor.el-input__inner[data-v-4cec7068]{width:100%!important}[data-v-4cec7068]::-webkit-scrollbar{width:8px;height:8px}[data-v-4cec7068]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-4cec7068]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-4cec7068]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-4cec7068]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.primary-color[data-v-8d758ba4]{color:#409eff}.background-opacity[data-v-8d758ba4]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-8d758ba4]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-8d758ba4]{margin-top:8px}.el-form-item--medium .el-radio[data-v-8d758ba4]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-8d758ba4]{margin-top:8px}.el-form-item--small .el-radio[data-v-8d758ba4]{line-height:32px!important}.el-form-item--small .el-rate[data-v-8d758ba4]{margin-top:6px}.el-form-item--mini .el-radio[data-v-8d758ba4]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-8d758ba4]{margin-top:4px}.el-card[data-v-8d758ba4]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-8d758ba4]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-8d758ba4],.auto-full-width.el-date-editor.el-input__inner[data-v-8d758ba4]{width:100%!important}[data-v-8d758ba4]::-webkit-scrollbar{width:8px;height:8px}[data-v-8d758ba4]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-8d758ba4]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-8d758ba4]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-8d758ba4]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-8d758ba4]{width:100%!important}.auto-full-width[data-v-8d758ba4]{width:100%}.auto-full-width[data-v-8d758ba4] .el-range-editor{width:100%!important}.primary-color[data-v-2dd889c0]{color:#409eff}.background-opacity[data-v-2dd889c0]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-2dd889c0]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-2dd889c0]{margin-top:8px}.el-form-item--medium .el-radio[data-v-2dd889c0]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-2dd889c0]{margin-top:8px}.el-form-item--small .el-radio[data-v-2dd889c0]{line-height:32px!important}.el-form-item--small .el-rate[data-v-2dd889c0]{margin-top:6px}.el-form-item--mini .el-radio[data-v-2dd889c0]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-2dd889c0]{margin-top:4px}.el-card[data-v-2dd889c0]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-2dd889c0]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-2dd889c0],.auto-full-width.el-date-editor.el-input__inner[data-v-2dd889c0]{width:100%!important}[data-v-2dd889c0]::-webkit-scrollbar{width:8px;height:8px}[data-v-2dd889c0]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-2dd889c0]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-2dd889c0]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-2dd889c0]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.full-width-input[data-v-2dd889c0]{width:100%!important}.primary-color[data-v-9332ab84]{color:#409eff}.background-opacity[data-v-9332ab84]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-9332ab84]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-9332ab84]{margin-top:8px}.el-form-item--medium .el-radio[data-v-9332ab84]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-9332ab84]{margin-top:8px}.el-form-item--small .el-radio[data-v-9332ab84]{line-height:32px!important}.el-form-item--small .el-rate[data-v-9332ab84]{margin-top:6px}.el-form-item--mini .el-radio[data-v-9332ab84]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-9332ab84]{margin-top:4px}.el-card[data-v-9332ab84]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-9332ab84]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-9332ab84],.auto-full-width.el-date-editor.el-input__inner[data-v-9332ab84]{width:100%!important}[data-v-9332ab84]::-webkit-scrollbar{width:8px;height:8px}[data-v-9332ab84]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-9332ab84]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-9332ab84]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-9332ab84]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.blank-cell[data-v-9332ab84]{font-style:italic;color:#ccc}.blank-cell span.invisible-content[data-v-9332ab84]{opacity:0}.primary-color[data-v-2eb559e6]{color:#409eff}.background-opacity[data-v-2eb559e6]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-2eb559e6]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-2eb559e6]{margin-top:8px}.el-form-item--medium .el-radio[data-v-2eb559e6]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-2eb559e6]{margin-top:8px}.el-form-item--small .el-radio[data-v-2eb559e6]{line-height:32px!important}.el-form-item--small .el-rate[data-v-2eb559e6]{margin-top:6px}.el-form-item--mini .el-radio[data-v-2eb559e6]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-2eb559e6]{margin-top:4px}.el-card[data-v-2eb559e6]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-2eb559e6]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-2eb559e6],.auto-full-width.el-date-editor.el-input__inner[data-v-2eb559e6]{width:100%!important}[data-v-2eb559e6]::-webkit-scrollbar{width:8px;height:8px}[data-v-2eb559e6]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-2eb559e6]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-2eb559e6]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-2eb559e6]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.sub-form-container[data-v-2eb559e6]{margin-bottom:8px;text-align:left}.sub-form-container[data-v-2eb559e6] .el-row.header-row{padding-bottom:0}.sub-form-container[data-v-2eb559e6] .el-row.sub-form-row{padding-top:3px;padding-bottom:3px}.sub-form-container[data-v-2eb559e6] .el-row.sub-form-row .row-number-span{margin-left:16px}div.action-header-column[data-v-2eb559e6]{display:inline-block;width:120px}div.action-header-column .action-label[data-v-2eb559e6]{margin-right:12px}div.action-header-column .action-button[data-v-2eb559e6]{padding-left:8px;padding-right:8px}div.field-header-column[data-v-2eb559e6]{display:inline-block}div.field-header-column span.custom-label i[data-v-2eb559e6]{margin:0 3px}div.field-header-column.is-required[data-v-2eb559e6]:before{content:"*";color:#f56c6c;margin-right:4px}div.label-center-left[data-v-2eb559e6]{text-align:left}div.label-center-align[data-v-2eb559e6]{text-align:center}div.label-right-align[data-v-2eb559e6]{text-align:right}div.sub-form-action-column[data-v-2eb559e6]{display:inline-block;width:120px}div.sub-form-action-column[data-v-2eb559e6] .el-form-item{margin-bottom:0}div.sub-form-action-column[data-v-2eb559e6] .el-button{font-size:14px;padding:0;background:#DCDFE6;border:4px solid #DCDFE6}div.sub-form-action-column.hide-label[data-v-2eb559e6] .el-form-item__label{display:none}div.sub-form-table-column[data-v-2eb559e6]{display:inline-block}div.sub-form-table-column[data-v-2eb559e6] .el-form-item{margin-left:4px;margin-right:4px;margin-bottom:0}div.sub-form-table-column[data-v-2eb559e6] .el-form-item__content{margin-left:0!important}div.sub-form-table-column.hide-label[data-v-2eb559e6] .el-form-item__label{display:none}.primary-color[data-v-1825ed0b]{color:#409eff}.background-opacity[data-v-1825ed0b]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-1825ed0b]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-1825ed0b]{margin-top:8px}.el-form-item--medium .el-radio[data-v-1825ed0b]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-1825ed0b]{margin-top:8px}.el-form-item--small .el-radio[data-v-1825ed0b]{line-height:32px!important}.el-form-item--small .el-rate[data-v-1825ed0b]{margin-top:6px}.el-form-item--mini .el-radio[data-v-1825ed0b]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-1825ed0b]{margin-top:4px}.el-card[data-v-1825ed0b]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-1825ed0b]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-1825ed0b],.auto-full-width.el-date-editor.el-input__inner[data-v-1825ed0b]{width:100%!important}[data-v-1825ed0b]::-webkit-scrollbar{width:8px;height:8px}[data-v-1825ed0b]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-1825ed0b]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-1825ed0b]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-1825ed0b]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}td.table-cell[data-v-1825ed0b]{display:table-cell;height:36px;border:1px solid #e5e5e5}.primary-color[data-v-dfc6ca8e]{color:#409eff}.background-opacity[data-v-dfc6ca8e]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-dfc6ca8e]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-dfc6ca8e]{margin-top:8px}.el-form-item--medium .el-radio[data-v-dfc6ca8e]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-dfc6ca8e]{margin-top:8px}.el-form-item--small .el-radio[data-v-dfc6ca8e]{line-height:32px!important}.el-form-item--small .el-rate[data-v-dfc6ca8e]{margin-top:6px}.el-form-item--mini .el-radio[data-v-dfc6ca8e]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-dfc6ca8e]{margin-top:4px}.el-card[data-v-dfc6ca8e]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-dfc6ca8e]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-dfc6ca8e],.auto-full-width.el-date-editor.el-input__inner[data-v-dfc6ca8e]{width:100%!important}[data-v-dfc6ca8e]::-webkit-scrollbar{width:8px;height:8px}[data-v-dfc6ca8e]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-dfc6ca8e]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-dfc6ca8e]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-dfc6ca8e]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}div.table-container table.table-layout[data-v-dfc6ca8e]{width:100%;table-layout:fixed;border-collapse:collapse}.primary-color[data-v-544703a2]{color:#409eff}.background-opacity[data-v-544703a2]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-544703a2]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-544703a2]{margin-top:8px}.el-form-item--medium .el-radio[data-v-544703a2]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-544703a2]{margin-top:8px}.el-form-item--small .el-radio[data-v-544703a2]{line-height:32px!important}.el-form-item--small .el-rate[data-v-544703a2]{margin-top:6px}.el-form-item--mini .el-radio[data-v-544703a2]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-544703a2]{margin-top:4px}.el-card[data-v-544703a2]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-544703a2]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-544703a2],.auto-full-width.el-date-editor.el-input__inner[data-v-544703a2]{width:100%!important}[data-v-544703a2]::-webkit-scrollbar{width:8px;height:8px}[data-v-544703a2]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-544703a2]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-544703a2]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-544703a2]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.el-form[data-v-544703a2] .el-row{padding:8px}.primary-color[data-v-71442268]{color:#409eff}.background-opacity[data-v-71442268]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-71442268]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-71442268]{margin-top:8px}.el-form-item--medium .el-radio[data-v-71442268]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-71442268]{margin-top:8px}.el-form-item--small .el-radio[data-v-71442268]{line-height:32px!important}.el-form-item--small .el-rate[data-v-71442268]{margin-top:6px}.el-form-item--mini .el-radio[data-v-71442268]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-71442268]{margin-top:4px}.el-card[data-v-71442268]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-71442268]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-71442268],.auto-full-width.el-date-editor.el-input__inner[data-v-71442268]{width:100%!important}[data-v-71442268]::-webkit-scrollbar{width:8px;height:8px}[data-v-71442268]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-71442268]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-71442268]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-71442268]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.ace-editor[data-v-71442268]{min-height:300px}.primary-color[data-v-5e4c412c]{color:#409eff}.background-opacity[data-v-5e4c412c]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-5e4c412c]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-5e4c412c]{margin-top:8px}.el-form-item--medium .el-radio[data-v-5e4c412c]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-5e4c412c]{margin-top:8px}.el-form-item--small .el-radio[data-v-5e4c412c]{line-height:32px!important}.el-form-item--small .el-rate[data-v-5e4c412c]{margin-top:6px}.el-form-item--mini .el-radio[data-v-5e4c412c]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-5e4c412c]{margin-top:4px}.el-card[data-v-5e4c412c]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-5e4c412c]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-5e4c412c],.auto-full-width.el-date-editor.el-input__inner[data-v-5e4c412c]{width:100%!important}[data-v-5e4c412c]::-webkit-scrollbar{width:8px;height:8px}[data-v-5e4c412c]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-5e4c412c]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-5e4c412c]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-5e4c412c]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.toolbar-container[data-v-5e4c412c]{display:flex;justify-content:space-between}.toolbar-container .right-toolbar[data-v-5e4c412c]{display:flex;justify-content:flex-end}.toolbar-container .right-toolbar .right-toolbar-con[data-v-5e4c412c]{display:flex;align-items:center}.toolbar-container .right-toolbar .right-toolbar-con .menu[data-v-5e4c412c]{height:42px;font-size:14px;display:flex;align-items:center}.toolbar-container .right-toolbar .right-toolbar-con .menu+.menu[data-v-5e4c412c]{margin-left:15px}.toolbar-container .right-toolbar[data-v-5e4c412c] .svg-icon{margin-left:0;margin-right:.05em}.toolbar-container .left-toolbar[data-v-5e4c412c]{display:flex;margin-top:4px;font-size:16px}.el-button i[data-v-5e4c412c]{margin-right:3px}.small-padding-dialog[data-v-5e4c412c] .el-dialog__header{background:#f1f2f3}.small-padding-dialog[data-v-5e4c412c] .el-dialog__body{padding:12px 15px}.small-padding-dialog[data-v-5e4c412c] .el-dialog__body .el-alert.alert-padding{padding:0 10px}.small-padding-dialog[data-v-5e4c412c] .ace-container{border:1px solid #DCDFE6}.dialog-title-light-bg[data-v-5e4c412c] .el-dialog__header{background:#f1f2f3}.no-box-shadow[data-v-5e4c412c]{box-shadow:none}.no-padding.el-tabs--border-card[data-v-5e4c412c] .el-tabs__content{padding:0}.form-render-wrapper.h5-layout[data-v-5e4c412c]{margin:0 auto;width:420px;border-radius:15px;box-shadow:0 0 1px 10px #495060;height:calc(100vh - 175px);overflow-y:auto;overflow-x:hidden}.form-render-wrapper.pad-layout[data-v-5e4c412c]{margin:0 auto;width:960px;border-radius:15px;box-shadow:0 0 1px 10px #495060;height:calc(100vh - 175px);overflow-y:auto;overflow-x:hidden}.node-tree-drawer[data-v-5e4c412c] .el-drawer{padding:10px;overflow:auto}.node-tree-drawer[data-v-5e4c412c] .el-drawer__header{margin-bottom:12px;padding:5px 5px 0}.node-tree-drawer[data-v-5e4c412c] .el-drawer__body{padding-left:5px}[data-v-5e4c412c] .node-tree .el-tree-node{position:relative;padding-left:12px}[data-v-5e4c412c] .node-tree .el-tree-node__content{padding-left:0!important}[data-v-5e4c412c] .node-tree .el-tree-node__expand-icon.is-leaf{display:none}[data-v-5e4c412c] .node-tree .el-tree-node__children{padding-left:12px;overflow:visible!important}[data-v-5e4c412c] .node-tree .el-tree-node :last-child:before{height:38px}[data-v-5e4c412c] .node-tree .el-tree>.el-tree-node:before{border-left:none}[data-v-5e4c412c] .node-tree .el-tree>.el-tree-node:after{border-top:none}[data-v-5e4c412c] .node-tree .el-tree-node:before{content:"";left:-4px;position:absolute;right:auto;border-width:1px}[data-v-5e4c412c] .node-tree .el-tree-node:after{content:"";left:-4px;position:absolute;right:auto;border-width:1px}[data-v-5e4c412c] .node-tree .el-tree-node:before{border-left:1px dashed #4386c6;bottom:0px;height:100%;top:-10px;width:1px}[data-v-5e4c412c] .node-tree .el-tree-node:after{border-top:1px dashed #4386c6;height:20px;top:12px;width:16px}[data-v-5e4c412c] .node-tree .el-tree-node.is-current>.el-tree-node__content{background:#c2d6ea!important}[data-v-5e4c412c] .node-tree .el-tree-node__expand-icon{margin-left:-3px;padding:6px 6px 6px 0;font-size:16px}.primary-color[data-v-2b4eb610]{color:#409eff}.background-opacity[data-v-2b4eb610]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-2b4eb610]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-2b4eb610]{margin-top:8px}.el-form-item--medium .el-radio[data-v-2b4eb610]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-2b4eb610]{margin-top:8px}.el-form-item--small .el-radio[data-v-2b4eb610]{line-height:32px!important}.el-form-item--small .el-rate[data-v-2b4eb610]{margin-top:6px}.el-form-item--mini .el-radio[data-v-2b4eb610]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-2b4eb610]{margin-top:4px}.el-card[data-v-2b4eb610]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-2b4eb610]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-2b4eb610],.auto-full-width.el-date-editor.el-input__inner[data-v-2b4eb610]{width:100%!important}[data-v-2b4eb610]::-webkit-scrollbar{width:8px;height:8px}[data-v-2b4eb610]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-2b4eb610]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-2b4eb610]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-2b4eb610]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.radio-group-custom[data-v-2b4eb610] .el-radio-button__inner{padding-left:12px;padding-right:12px}.primary-color[data-v-78d1cf52]{color:#409eff}.background-opacity[data-v-78d1cf52]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-78d1cf52]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-78d1cf52]{margin-top:8px}.el-form-item--medium .el-radio[data-v-78d1cf52]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-78d1cf52]{margin-top:8px}.el-form-item--small .el-radio[data-v-78d1cf52]{line-height:32px!important}.el-form-item--small .el-rate[data-v-78d1cf52]{margin-top:6px}.el-form-item--mini .el-radio[data-v-78d1cf52]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-78d1cf52]{margin-top:4px}.el-card[data-v-78d1cf52]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-78d1cf52]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-78d1cf52],.auto-full-width.el-date-editor.el-input__inner[data-v-78d1cf52]{width:100%!important}[data-v-78d1cf52]::-webkit-scrollbar{width:8px;height:8px}[data-v-78d1cf52]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-78d1cf52]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-78d1cf52]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-78d1cf52]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.option-items-pane[data-v-78d1cf52]{width:100%}.option-items-pane ul[data-v-78d1cf52]{padding-inline-start:6px;padding-left:6px}li.ghost[data-v-78d1cf52]{background:#fff;border:2px dotted #409EFF}.drag-option[data-v-78d1cf52]{cursor:move}.small-padding-dialog[data-v-78d1cf52] .el-dialog__body{padding:10px 15px}.dialog-footer .el-button[data-v-78d1cf52]{width:100px}.full-width-input[data-v-78d1cf52],.full-width-input[data-v-78d1cf52] .el-cascader{width:100%!important}.primary-color[data-v-ff435ad4]{color:#409eff}.background-opacity[data-v-ff435ad4]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-ff435ad4]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-ff435ad4]{margin-top:8px}.el-form-item--medium .el-radio[data-v-ff435ad4]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-ff435ad4]{margin-top:8px}.el-form-item--small .el-radio[data-v-ff435ad4]{line-height:32px!important}.el-form-item--small .el-rate[data-v-ff435ad4]{margin-top:6px}.el-form-item--mini .el-radio[data-v-ff435ad4]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-ff435ad4]{margin-top:4px}.el-card[data-v-ff435ad4]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-ff435ad4]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-ff435ad4],.auto-full-width.el-date-editor.el-input__inner[data-v-ff435ad4]{width:100%!important}[data-v-ff435ad4]::-webkit-scrollbar{width:8px;height:8px}[data-v-ff435ad4]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-ff435ad4]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-ff435ad4]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-ff435ad4]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.radio-group-custom[data-v-ff435ad4] .el-radio-button__inner{padding-left:12px;padding-right:12px}.primary-color[data-v-5998270e]{color:#409eff}.background-opacity[data-v-5998270e]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-5998270e]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-5998270e]{margin-top:8px}.el-form-item--medium .el-radio[data-v-5998270e]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-5998270e]{margin-top:8px}.el-form-item--small .el-radio[data-v-5998270e]{line-height:32px!important}.el-form-item--small .el-rate[data-v-5998270e]{margin-top:6px}.el-form-item--mini .el-radio[data-v-5998270e]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-5998270e]{margin-top:4px}.el-card[data-v-5998270e]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-5998270e]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-5998270e],.auto-full-width.el-date-editor.el-input__inner[data-v-5998270e]{width:100%!important}[data-v-5998270e]::-webkit-scrollbar{width:8px;height:8px}[data-v-5998270e]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-5998270e]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-5998270e]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-5998270e]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}li.col-item[data-v-5998270e]{list-style:none}li.col-item span.col-span-title[data-v-5998270e]{display:inline-block;font-size:13px;width:120px}li.col-item .col-delete-button[data-v-5998270e]{margin-left:6px}.primary-color[data-v-195592c2]{color:#409eff}.background-opacity[data-v-195592c2]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-195592c2]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-195592c2]{margin-top:8px}.el-form-item--medium .el-radio[data-v-195592c2]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-195592c2]{margin-top:8px}.el-form-item--small .el-radio[data-v-195592c2]{line-height:32px!important}.el-form-item--small .el-rate[data-v-195592c2]{margin-top:6px}.el-form-item--mini .el-radio[data-v-195592c2]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-195592c2]{margin-top:4px}.el-card[data-v-195592c2]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-195592c2]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-195592c2],.auto-full-width.el-date-editor.el-input__inner[data-v-195592c2]{width:100%!important}[data-v-195592c2]::-webkit-scrollbar{width:8px;height:8px}[data-v-195592c2]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-195592c2]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-195592c2]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-195592c2]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.radio-group-custom[data-v-195592c2] .el-radio-button__inner{padding-left:12px;padding-right:12px}.primary-color[data-v-3f8b79a4]{color:#409eff}.background-opacity[data-v-3f8b79a4]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-3f8b79a4]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-3f8b79a4]{margin-top:8px}.el-form-item--medium .el-radio[data-v-3f8b79a4]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-3f8b79a4]{margin-top:8px}.el-form-item--small .el-radio[data-v-3f8b79a4]{line-height:32px!important}.el-form-item--small .el-rate[data-v-3f8b79a4]{margin-top:6px}.el-form-item--mini .el-radio[data-v-3f8b79a4]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-3f8b79a4]{margin-top:4px}.el-card[data-v-3f8b79a4]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-3f8b79a4]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-3f8b79a4],.auto-full-width.el-date-editor.el-input__inner[data-v-3f8b79a4]{width:100%!important}[data-v-3f8b79a4]::-webkit-scrollbar{width:8px;height:8px}[data-v-3f8b79a4]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-3f8b79a4]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-3f8b79a4]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-3f8b79a4]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}li.col-item[data-v-3f8b79a4]{list-style:none}li.col-item span.col-span-title[data-v-3f8b79a4]{display:inline-block;font-size:13px;width:120px}li.col-item .col-delete-button[data-v-3f8b79a4]{margin-left:6px}.panes-setting ul[data-v-3f8b79a4]{padding-inline-start:0;padding-left:0;margin:0}.panes-setting .drag-option[data-v-3f8b79a4]{cursor:move}.panes-setting li.ghost[data-v-3f8b79a4]{background:#fff;border:2px dotted #409EFF}.html-content-editor[data-v-a8d84c8e]{font-size:13px}.primary-color[data-v-70f556a1]{color:#409eff}.background-opacity[data-v-70f556a1]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-70f556a1]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-70f556a1]{margin-top:8px}.el-form-item--medium .el-radio[data-v-70f556a1]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-70f556a1]{margin-top:8px}.el-form-item--small .el-radio[data-v-70f556a1]{line-height:32px!important}.el-form-item--small .el-rate[data-v-70f556a1]{margin-top:6px}.el-form-item--mini .el-radio[data-v-70f556a1]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-70f556a1]{margin-top:4px}.el-card[data-v-70f556a1]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-70f556a1]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-70f556a1],.auto-full-width.el-date-editor.el-input__inner[data-v-70f556a1]{width:100%!important}[data-v-70f556a1]::-webkit-scrollbar{width:8px;height:8px}[data-v-70f556a1]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-70f556a1]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-70f556a1]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-70f556a1]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.setting-form[data-v-70f556a1] .el-form-item__label{font-size:13px;overflow:hidden;white-space:nowrap}.setting-form[data-v-70f556a1] .el-form-item--small.el-form-item{margin-bottom:10px}.setting-form .radio-group-custom[data-v-70f556a1] .el-radio-button__inner{padding-left:12px;padding-right:12px}.setting-form .custom-divider.el-divider--horizontal[data-v-70f556a1]{margin:10px 0}.setting-collapse[data-v-70f556a1] .el-collapse-item__content{padding-bottom:6px}.setting-collapse[data-v-70f556a1] .el-collapse-item__header{font-style:italic;font-weight:700}.small-padding-dialog[data-v-70f556a1] .el-dialog__body{padding:6px 15px 12px}.primary-color[data-v-5cdeebbc]{color:#409eff}.background-opacity[data-v-5cdeebbc]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-5cdeebbc]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-5cdeebbc]{margin-top:8px}.el-form-item--medium .el-radio[data-v-5cdeebbc]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-5cdeebbc]{margin-top:8px}.el-form-item--small .el-radio[data-v-5cdeebbc]{line-height:32px!important}.el-form-item--small .el-rate[data-v-5cdeebbc]{margin-top:6px}.el-form-item--mini .el-radio[data-v-5cdeebbc]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-5cdeebbc]{margin-top:4px}.el-card[data-v-5cdeebbc]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-5cdeebbc]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-5cdeebbc],.auto-full-width.el-date-editor.el-input__inner[data-v-5cdeebbc]{width:100%!important}[data-v-5cdeebbc]::-webkit-scrollbar{width:8px;height:8px}[data-v-5cdeebbc]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-5cdeebbc]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-5cdeebbc]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-5cdeebbc]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.panel-container[data-v-5cdeebbc]{padding:0 8px}.setting-scrollbar[data-v-5cdeebbc] .el-scrollbar__wrap{overflow-x:hidden}.setting-collapse[data-v-5cdeebbc] .el-collapse-item__content{padding-bottom:6px}.setting-collapse[data-v-5cdeebbc] .el-collapse-item__header{font-style:italic;font-weight:700}.setting-form[data-v-5cdeebbc] .el-form-item__label{font-size:13px;overflow:hidden;white-space:nowrap}.setting-form[data-v-5cdeebbc] .el-form-item--small.el-form-item{margin-bottom:10px}[data-v-5cdeebbc] .hide-spin-button input::-webkit-outer-spin-button,[data-v-5cdeebbc] .hide-spin-button input::-webkit-inner-spin-button{-webkit-appearance:none!important}[data-v-5cdeebbc] .hide-spin-button input[type=number]{-moz-appearance:textfield}[data-v-5cdeebbc] .custom-divider.el-divider--horizontal{margin:10px 0}[data-v-5cdeebbc] .custom-divider-margin-top.el-divider--horizontal{margin:20px 0}.small-padding-dialog[data-v-5cdeebbc] .el-dialog__body{padding:6px 15px 12px}.primary-color[data-v-0d08f778]{color:#409eff}.background-opacity[data-v-0d08f778]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-0d08f778]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-0d08f778]{margin-top:8px}.el-form-item--medium .el-radio[data-v-0d08f778]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-0d08f778]{margin-top:8px}.el-form-item--small .el-radio[data-v-0d08f778]{line-height:32px!important}.el-form-item--small .el-rate[data-v-0d08f778]{margin-top:6px}.el-form-item--mini .el-radio[data-v-0d08f778]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-0d08f778]{margin-top:4px}.el-card[data-v-0d08f778]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-0d08f778]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-0d08f778],.auto-full-width.el-date-editor.el-input__inner[data-v-0d08f778]{width:100%!important}[data-v-0d08f778]::-webkit-scrollbar{width:8px;height:8px}[data-v-0d08f778]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-0d08f778]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-0d08f778]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-0d08f778]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.container-wrapper[data-v-0d08f778]{position:relative;margin-bottom:5px}.container-wrapper .container-action[data-v-0d08f778]{position:absolute;bottom:0;right:-2px;height:28px;line-height:28px;background:#409EFF;z-index:999}.container-wrapper .container-action i[data-v-0d08f778]{font-size:14px;color:#fff;margin:0 5px;cursor:pointer}.container-wrapper .drag-handler[data-v-0d08f778]{position:absolute;top:-2px;left:-2px;height:22px;line-height:22px;background:#409EFF;z-index:9}.container-wrapper .drag-handler i[data-v-0d08f778]{font-size:14px;font-style:normal;color:#fff;margin:4px;cursor:move}.container-action[data-v-0d08f778] .svg-icon,.drag-handler[data-v-0d08f778] .svg-icon{margin-left:.1em;margin-right:.1em}.primary-color[data-v-28e126df]{color:#409eff}.background-opacity[data-v-28e126df]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-28e126df]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-28e126df]{margin-top:8px}.el-form-item--medium .el-radio[data-v-28e126df]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-28e126df]{margin-top:8px}.el-form-item--small .el-radio[data-v-28e126df]{line-height:32px!important}.el-form-item--small .el-rate[data-v-28e126df]{margin-top:6px}.el-form-item--mini .el-radio[data-v-28e126df]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-28e126df]{margin-top:4px}.el-card[data-v-28e126df]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-28e126df]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-28e126df],.auto-full-width.el-date-editor.el-input__inner[data-v-28e126df]{width:100%!important}[data-v-28e126df]::-webkit-scrollbar{width:8px;height:8px}[data-v-28e126df]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-28e126df]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-28e126df]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-28e126df]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.grid-cell[data-v-28e126df]{min-height:38px!important;padding:3px;outline:1px dashed #336699;position:relative}.grid-cell .form-widget-list[data-v-28e126df]{min-height:28px}.grid-cell .grid-col-action[data-v-28e126df]{position:absolute;bottom:0;right:-2px;height:28px;line-height:28px;background:#409EFF;z-index:999}.grid-cell .grid-col-action i[data-v-28e126df]{font-size:14px;color:#fff;margin:0 5px;cursor:pointer}.grid-cell .grid-col-handler[data-v-28e126df]{position:absolute;top:-2px;left:-2px;height:22px;line-height:22px;background:#409EFF;z-index:9}.grid-cell .grid-col-handler i[data-v-28e126df]{font-size:14px;font-style:normal;color:#fff;margin:4px;cursor:default}.grid-col-action[data-v-28e126df] .svg-icon,.grid-col-handler[data-v-28e126df] .svg-icon{margin-left:.1em;margin-right:.1em}.primary-color[data-v-6170ad3a]{color:#409eff}.background-opacity[data-v-6170ad3a]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-6170ad3a]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-6170ad3a]{margin-top:8px}.el-form-item--medium .el-radio[data-v-6170ad3a]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-6170ad3a]{margin-top:8px}.el-form-item--small .el-radio[data-v-6170ad3a]{line-height:32px!important}.el-form-item--small .el-rate[data-v-6170ad3a]{margin-top:6px}.el-form-item--mini .el-radio[data-v-6170ad3a]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-6170ad3a]{margin-top:4px}.el-card[data-v-6170ad3a]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-6170ad3a]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-6170ad3a],.auto-full-width.el-date-editor.el-input__inner[data-v-6170ad3a]{width:100%!important}[data-v-6170ad3a]::-webkit-scrollbar{width:8px;height:8px}[data-v-6170ad3a]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-6170ad3a]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-6170ad3a]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-6170ad3a]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.el-row.grid-container[data-v-6170ad3a]{min-height:50px;outline:1px dashed #336699}.el-row.grid-container .form-widget-list[data-v-6170ad3a]{min-height:28px}.grid-container.selected[data-v-6170ad3a],.grid-cell.selected[data-v-6170ad3a]{outline:2px solid #409EFF!important}.primary-color[data-v-31c69563]{color:#409eff}.background-opacity[data-v-31c69563]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-31c69563]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-31c69563]{margin-top:8px}.el-form-item--medium .el-radio[data-v-31c69563]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-31c69563]{margin-top:8px}.el-form-item--small .el-radio[data-v-31c69563]{line-height:32px!important}.el-form-item--small .el-rate[data-v-31c69563]{margin-top:6px}.el-form-item--mini .el-radio[data-v-31c69563]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-31c69563]{margin-top:4px}.el-card[data-v-31c69563]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-31c69563]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-31c69563],.auto-full-width.el-date-editor.el-input__inner[data-v-31c69563]{width:100%!important}[data-v-31c69563]::-webkit-scrollbar{width:8px;height:8px}[data-v-31c69563]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-31c69563]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-31c69563]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-31c69563]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.sub-form-container[data-v-31c69563]{min-height:120px;padding:8px;border:1px dashed #336699;background-color:#fafafa;position:relative}.sub-form-container .sub-form-header[data-v-31c69563]{display:flex;align-items:center;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid #ddd;background-color:#f5f5f5;min-height:32px}.sub-form-container .sub-form-header .action-header-column[data-v-31c69563]{width:120px;padding:0 8px;font-weight:700;color:#666}.sub-form-container .sub-form-header .action-header-column .action-label[data-v-31c69563]{font-size:12px}.sub-form-container .sub-form-header .field-header-column[data-v-31c69563]{flex:1;padding:0 8px;font-weight:700;color:#333;min-width:120px}.sub-form-container .sub-form-header .field-header-column .custom-label[data-v-31c69563]{font-size:12px}.sub-form-container .sub-form-header .field-header-column.is-required .custom-label[data-v-31c69563]:before{content:"*";color:#f56c6c;margin-right:4px}.sub-form-container .sub-form-header .field-header-column.label-center[data-v-31c69563]{text-align:center}.sub-form-container .sub-form-header .field-header-column.label-left[data-v-31c69563]{text-align:left}.sub-form-container .sub-form-header .field-header-column.label-right[data-v-31c69563]{text-align:right}.sub-form-container .sub-form-body[data-v-31c69563]{min-height:40px;margin-bottom:8px}.sub-form-container .sub-form-body .sub-form-drag-area[data-v-31c69563]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px;padding:8px;border:1px dashed #ccc;background-color:#fff;border-radius:4px}.sub-form-container .sub-form-body .sub-form-drag-area .sub-form-field-item[data-v-31c69563]{flex:1;min-width:120px;padding:4px;border:1px solid #e4e7ed;border-radius:4px;background-color:#f9f9f9}.sub-form-container .sub-form-body .sub-form-empty-tip[data-v-31c69563]{text-align:center;padding:20px;color:#999;font-style:italic;font-size:14px;border:1px dashed #ccc;background-color:#fff;border-radius:4px}.sub-form-container .sub-form-sample-row[data-v-31c69563]{display:flex;align-items:center;padding:8px 0;border-top:1px solid #ddd;background-color:#f9f9f9}.sub-form-container .sub-form-sample-row .sample-action-column[data-v-31c69563]{width:120px;padding:0 8px;text-align:center}.sub-form-container .sub-form-sample-row .sample-field-column[data-v-31c69563]{flex:1;padding:0 8px;min-width:120px;text-align:center}.sub-form-container .sub-form-sample-row .sample-field-column .sample-data[data-v-31c69563]{font-size:12px;color:#999;font-style:italic}.sub-form-container.selected[data-v-31c69563]{border:2px solid #409EFF!important}.ghost[data-v-31c69563]{opacity:.5}.primary-color[data-v-026c4dcc]{color:#409eff}.background-opacity[data-v-026c4dcc]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-026c4dcc]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-026c4dcc]{margin-top:8px}.el-form-item--medium .el-radio[data-v-026c4dcc]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-026c4dcc]{margin-top:8px}.el-form-item--small .el-radio[data-v-026c4dcc]{line-height:32px!important}.el-form-item--small .el-rate[data-v-026c4dcc]{margin-top:6px}.el-form-item--mini .el-radio[data-v-026c4dcc]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-026c4dcc]{margin-top:4px}.el-card[data-v-026c4dcc]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-026c4dcc]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-026c4dcc],.auto-full-width.el-date-editor.el-input__inner[data-v-026c4dcc]{width:100%!important}[data-v-026c4dcc]::-webkit-scrollbar{width:8px;height:8px}[data-v-026c4dcc]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-026c4dcc]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-026c4dcc]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-026c4dcc]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.tab-container[data-v-026c4dcc]{margin:2px}.tab-container .form-widget-list[data-v-026c4dcc],.tab-container[data-v-026c4dcc] .el-tabs__content{min-height:28px}.tab-container.selected[data-v-026c4dcc]{outline:2px solid #409EFF!important}.primary-color[data-v-e45f7f74]{color:#409eff}.background-opacity[data-v-e45f7f74]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-e45f7f74]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-e45f7f74]{margin-top:8px}.el-form-item--medium .el-radio[data-v-e45f7f74]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-e45f7f74]{margin-top:8px}.el-form-item--small .el-radio[data-v-e45f7f74]{line-height:32px!important}.el-form-item--small .el-rate[data-v-e45f7f74]{margin-top:6px}.el-form-item--mini .el-radio[data-v-e45f7f74]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-e45f7f74]{margin-top:4px}.el-card[data-v-e45f7f74]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-e45f7f74]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-e45f7f74],.auto-full-width.el-date-editor.el-input__inner[data-v-e45f7f74]{width:100%!important}[data-v-e45f7f74]::-webkit-scrollbar{width:8px;height:8px}[data-v-e45f7f74]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-e45f7f74]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-e45f7f74]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-e45f7f74]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.table-cell[data-v-e45f7f74]{border:1px dashed #336699;display:table-cell;position:relative}.table-cell .draggable-div[data-v-e45f7f74]{position:relative;height:100%}.table-cell .form-widget-list[data-v-e45f7f74]{border:1px dashed #336699;margin:3px;min-height:28px}.table-cell .table-cell-action[data-v-e45f7f74]{position:absolute;bottom:0;right:-2px;height:28px;line-height:28px;background:#409EFF;z-index:999;display:flex;align-items:center}.table-cell .table-cell-action i[data-v-e45f7f74]{font-size:14px;color:#fff;margin:0 5px;cursor:pointer}.table-cell .table-cell-handler[data-v-e45f7f74]{position:absolute;top:-2px;left:-2px;height:22px;line-height:22px;background:#409EFF;z-index:9}.table-cell .table-cell-handler i[data-v-e45f7f74]{font-size:14px;font-style:normal;color:#fff;margin:4px;cursor:default}.table-cell-action[data-v-e45f7f74] .svg-icon,.table-cell-handler[data-v-e45f7f74] .svg-icon{margin-left:.1em;margin-right:.1em}.table-cell.selected[data-v-e45f7f74]{outline:2px solid #409EFF!important}.primary-color[data-v-4520ae21]{color:#409eff}.background-opacity[data-v-4520ae21]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-4520ae21]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-4520ae21]{margin-top:8px}.el-form-item--medium .el-radio[data-v-4520ae21]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-4520ae21]{margin-top:8px}.el-form-item--small .el-radio[data-v-4520ae21]{line-height:32px!important}.el-form-item--small .el-rate[data-v-4520ae21]{margin-top:6px}.el-form-item--mini .el-radio[data-v-4520ae21]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-4520ae21]{margin-top:4px}.el-card[data-v-4520ae21]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-4520ae21]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-4520ae21],.auto-full-width.el-date-editor.el-input__inner[data-v-4520ae21]{width:100%!important}[data-v-4520ae21]::-webkit-scrollbar{width:8px;height:8px}[data-v-4520ae21]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-4520ae21]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-4520ae21]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-4520ae21]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}div.table-container[data-v-4520ae21]{padding:5px;border:1px dashed #336699;box-sizing:border-box}div.table-container table.table-layout[data-v-4520ae21]{width:100%;text-align:center;border-collapse:collapse;table-layout:fixed}div.table-container table.table-layout[data-v-4520ae21] td{height:48px;border:1px dashed #336699;padding:3px;display:table-cell}div.table-container table.table-layout .form-widget-list[data-v-4520ae21]{border:1px dashed #336699;min-height:36px}.table-container.selected[data-v-4520ae21]{outline:2px solid #409EFF!important}.primary-color[data-v-4b9ac57a]{color:#409eff}.background-opacity[data-v-4b9ac57a]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-4b9ac57a]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-4b9ac57a]{margin-top:8px}.el-form-item--medium .el-radio[data-v-4b9ac57a]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-4b9ac57a]{margin-top:8px}.el-form-item--small .el-radio[data-v-4b9ac57a]{line-height:32px!important}.el-form-item--small .el-rate[data-v-4b9ac57a]{margin-top:6px}.el-form-item--mini .el-radio[data-v-4b9ac57a]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-4b9ac57a]{margin-top:4px}.el-card[data-v-4b9ac57a]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-4b9ac57a]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-4b9ac57a],.auto-full-width.el-date-editor.el-input__inner[data-v-4b9ac57a]{width:100%!important}[data-v-4b9ac57a]::-webkit-scrollbar{width:8px;height:8px}[data-v-4b9ac57a]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-4b9ac57a]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-4b9ac57a]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-4b9ac57a]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.container-scroll-bar[data-v-4b9ac57a] .el-scrollbar__wrap,.container-scroll-bar[data-v-4b9ac57a] .el-scrollbar__view{overflow-x:hidden}.form-widget-container[data-v-4b9ac57a]{padding:10px;background:#f1f2f3;overflow-x:hidden;overflow-y:auto}.form-widget-container .el-form.full-height-width[data-v-4b9ac57a]{height:100%;padding:3px;background:#ffffff}.form-widget-container .el-form.full-height-width .no-widget-hint[data-v-4b9ac57a]{position:absolute;left:0;right:0;top:0;bottom:0;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:18px;color:#999}.form-widget-container .el-form.full-height-width .form-widget-list[data-v-4b9ac57a]{min-height:calc(100vh - 124px);padding:3px}.form-widget-container .el-form.Pad-layout[data-v-4b9ac57a]{margin:0 auto;max-width:960px;border-radius:15px;box-shadow:0 0 1px 10px #495060}.form-widget-container .el-form.H5-layout[data-v-4b9ac57a]{margin:0 auto;width:420px;border-radius:15px;box-shadow:0 0 1px 10px #495060}.form-widget-container .el-form.widget-form[data-v-4b9ac57a] .el-row{padding:2px;border:1px dashed rgba(170,170,170,.75)}.grid-cell[data-v-4b9ac57a]{min-height:30px;border-right:1px dotted #cccccc}.fade-enter-active[data-v-4b9ac57a],.fade-leave-active[data-v-4b9ac57a]{transition:opacity .5s}.fade-enter[data-v-4b9ac57a],.fade-leave-to[data-v-4b9ac57a]{opacity:0}.primary-color[data-v-0da83bce]{color:#409eff}.background-opacity[data-v-0da83bce]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-0da83bce]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-0da83bce]{margin-top:8px}.el-form-item--medium .el-radio[data-v-0da83bce]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-0da83bce]{margin-top:8px}.el-form-item--small .el-radio[data-v-0da83bce]{line-height:32px!important}.el-form-item--small .el-rate[data-v-0da83bce]{margin-top:6px}.el-form-item--mini .el-radio[data-v-0da83bce]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-0da83bce]{margin-top:4px}.el-card[data-v-0da83bce]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-0da83bce]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-0da83bce],.auto-full-width.el-date-editor.el-input__inner[data-v-0da83bce]{width:100%!important}[data-v-0da83bce]::-webkit-scrollbar{width:8px;height:8px}[data-v-0da83bce]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-0da83bce]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-0da83bce]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-0da83bce]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.el-container.main-container[data-v-0da83bce]{background:#fff}.el-container.main-container[data-v-0da83bce] aside{margin:0;padding:0;background:inherit}.el-container.full-height[data-v-0da83bce]{height:100%;overflow-y:hidden}.el-container.center-layout-container[data-v-0da83bce]{min-width:680px;border-left:2px dotted #EBEEF5;border-right:2px dotted #EBEEF5}.el-header.main-header[data-v-0da83bce]{border-bottom:2px dotted #EBEEF5;height:48px!important;line-height:48px!important;min-width:800px}div.main-title[data-v-0da83bce]{font-size:18px;color:#242424;display:flex;align-items:center;justify-items:center}div.main-title img[data-v-0da83bce]{cursor:pointer;width:36px;height:36px}div.main-title span.bold[data-v-0da83bce]{font-size:20px;font-weight:700;margin:0 6px}div.main-title span.version-span[data-v-0da83bce]{font-size:14px;color:#101f1c;margin-left:6px}.float-left[data-v-0da83bce]{float:left}.float-right[data-v-0da83bce]{float:right}.el-dropdown-link[data-v-0da83bce]{margin-right:12px;cursor:pointer}div.external-link[data-v-0da83bce]{display:flex;align-items:center}div.external-link a[data-v-0da83bce]{font-size:13px;text-decoration:none;margin-right:10px;color:#606266}.el-header.toolbar-header[data-v-0da83bce]{font-size:14px;border-bottom:1px dotted #CCCCCC;height:42px!important}.el-aside.side-panel[data-v-0da83bce]{width:260px!important;overflow-y:hidden}.el-main.form-widget-main[data-v-0da83bce]{padding:0;position:relative;overflow-x:hidden}.container-scroll-bar[data-v-0da83bce] .el-scrollbar__wrap,.container-scroll-bar[data-v-0da83bce] .el-scrollbar__view{overflow-x:hidden}@font-face{font-family:iconfont;src:url(data:font/ttf;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI8i0leAAABjAAAAFZjbWFw7bW54gAAAfgAAAGqZ2x5Zpkon+wAAAOwAAADNGhlYWQcnMJsAAAA4AAAADZoaGVhB4IDhgAAALwAAAAkaG10eBQAAAAAAAHkAAAAFGxvY2EBeAI2AAADpAAAAAxtYXhwARcAagAAARgAAAAgbmFtZT5U/n0AAAbkAAACbXBvc3T0IfeLAAAJVAAAAFAAAQAAA4D/gAAABAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAUAAQAAAAEAALwRH5pfDzz1AAsEAAAAAADcvr83AAAAANy+vzcAAP+ABAADgQAAAAgAAgAAAAAAAAABAAAABQBeAAgAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAEEAAGQAAUAAAKJAswAAACPAokCzAAAAesAMgEIAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAQOYd52sDgP+AAFwDgQCAAAAAAQAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAABQAAAAMAAAAsAAAABAAAAWoAAQAAAAAAZAADAAEAAAAsAAMACgAAAWoABAA4AAAACAAIAAIAAOYd51Tna///AADmHedT52v//wAAAAAAAAABAAgACAAKAAAABAABAAIAAwAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAQAAAAAAAAAAEAADmHQAA5h0AAAAEAADnUwAA51MAAAABAADnVAAA51QAAAACAADnawAA52sAAAADAAAAAAAAAE4AnAEqAZoABAAA/8AEAANAABoAHgAmAC4AACU2MhcWDwEUDwEGDwEiFAcjIiYvASY+ATIfAQMRIREBESMRIREjAyERIxEhESMDAo0KGwoFAQEJfQIJAgICAwQJBYwJBRQbCmmlAUD9wEABAD8BAkBAAQA/AbYKCgUMBg0KfwIEAQEBBASACRsUCmQC7v3AAkD9gP8AAUD+wAEA/wABQP7AAQAABAAA/4ADwANAABoAHgAmAC4AACUWFAcGLwEiLwEmLwE0Iic1NDY/ATYeARQPASUhESEBITUhESE1JREhNSERITUlATYKCgUMBg0KfwIEAQEBBASACRsUCmQC7v3AAkD9gP8AAUD+wAEA/wABQP7AAQDzChsKBQEBCX0CCQICAgMECQWMCQUUGwpppf7AAkBA/wA/Af3AQP8APwEABQAAAAADwgL9ACYAOQBBAEkAXQAAASYnNzY0JiIPASYjIgcGBwYUFxYXFhcHBhQXFjI/ARYzMjY3Njc2BTY3NjMyFwcuASMiDgEVFBcHJiUUBiMiJzcWBzQ2MzIXByYXIic3HgEzMj4BNTQnNxYXDgEHBgO9TWNpChMaCXRdeZF9XlEFBSIqMDRtCQkPGAl0YHZcs0RHIwX8xEZSanhcSlAQLRksSSsaWlIBkjcpFhSACsA3KRYUgApgXEpQEC0ZLEkrGlpUSSF6SkwBkINKaQoaEwpzQGRLgQcSBzkyOSltCRoJCgpzPU9FR1gPAm5AUi1QDg8rSSwxKVlBcik3CoAUFik3CoAU6i1QDg8rSSwxKVlAc0l1ICIAAAAIAAD/gANBA4EACAARABoAIwAsADUAPgBHAAABIiY0NjIWFAYDIiY0NjIWFAYDIiY0NjIWFAYDIiY0NjIWFAYBIiY0NjIWFAYDIiY0NjIWFAYDIiY0NjIWFAYDIiY0NjIWFAYBICg4OFA4OCgoODhQODgoKDg4UDg4KCg4OFA4OAGYKDg4UDg4KCg4OFA4OCgoODhQODgoKDg4UDg4AsA4UDg4UDj+6zhPOTlPOP7qOU84OE85/us4UDg4UDgDQDhQODhQOP7rOE85OU84/uo5Tzg4Tzn+6zhQODhQOAAAAAAAEgDeAAEAAAAAAAAAFQAAAAEAAAAAAAEACAAVAAEAAAAAAAIABwAdAAEAAAAAAAMACAAkAAEAAAAAAAQACAAsAAEAAAAAAAUACwA0AAEAAAAAAAYACAA/AAEAAAAAAAoAKwBHAAEAAAAAAAsAEwByAAMAAQQJAAAAKgCFAAMAAQQJAAEAEACvAAMAAQQJAAIADgC/AAMAAQQJAAMAEADNAAMAAQQJAAQAEADdAAMAAQQJAAUAFgDtAAMAAQQJAAYAEAEDAAMAAQQJAAoAVgETAAMAAQQJAAsAJgFpCkNyZWF0ZWQgYnkgaWNvbmZvbnQKaWNvbmZvbnRSZWd1bGFyaWNvbmZvbnRpY29uZm9udFZlcnNpb24gMS4waWNvbmZvbnRHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQAKAEMAcgBlAGEAdABlAGQAIABiAHkAIABpAGMAbwBuAGYAbwBuAHQACgBpAGMAbwBuAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBpAGMAbwBuAGYAbwBuAHQAaQBjAG8AbgBmAG8AbgB0AFYAZQByAHMAaQBvAG4AIAAxAC4AMABpAGMAbwBuAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQECAQMBBAEFAQYADGluc2VydGNvbHVtbglpbnNlcnRyb3cEaGlkZQRkcmFnAAA=) format("truetype")}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-insertcolumn:before{content:"\e753"}.icon-insertrow:before{content:"\e754"}.icon-hide:before{content:"\e76b"}.icon-drag:before{content:"\e61d"}.primary-color[data-v-0fd62e9e]{color:#409eff}.background-opacity[data-v-0fd62e9e]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-0fd62e9e]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-0fd62e9e]{margin-top:8px}.el-form-item--medium .el-radio[data-v-0fd62e9e]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-0fd62e9e]{margin-top:8px}.el-form-item--small .el-radio[data-v-0fd62e9e]{line-height:32px!important}.el-form-item--small .el-rate[data-v-0fd62e9e]{margin-top:6px}.el-form-item--mini .el-radio[data-v-0fd62e9e]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-0fd62e9e]{margin-top:4px}.el-card[data-v-0fd62e9e]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-0fd62e9e]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-0fd62e9e],.auto-full-width.el-date-editor.el-input__inner[data-v-0fd62e9e]{width:100%!important}[data-v-0fd62e9e]::-webkit-scrollbar{width:8px;height:8px}[data-v-0fd62e9e]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-0fd62e9e]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-0fd62e9e]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-0fd62e9e]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}.card-container.selected[data-v-0fd62e9e]{outline:2px solid #409EFF!important}.card-container[data-v-0fd62e9e]{margin:3px}.card-container .form-widget-list[data-v-0fd62e9e]{min-height:28px}[data-v-0fd62e9e] .el-card__header{padding:10px 12px}.folded[data-v-0fd62e9e] .el-card__body{display:none}.clear-fix[data-v-0fd62e9e]:before,.clear-fix[data-v-0fd62e9e]:after{display:table;content:""}.clear-fix[data-v-0fd62e9e]:after{clear:both}.float-right[data-v-0fd62e9e]{float:right}.primary-color[data-v-52275f84]{color:#409eff}.background-opacity[data-v-52275f84]{background:rgba(64,158,255,.6)}.form-widget-list .ghost[data-v-52275f84]{content:"";font-size:0;height:3px;box-sizing:border-box;background:#409EFF;border:2px solid #409EFF;outline-width:0;padding:0;overflow:hidden}.el-form-item .el-rate[data-v-52275f84]{margin-top:8px}.el-form-item--medium .el-radio[data-v-52275f84]{line-height:36px!important}.el-form-item--medium .el-rate[data-v-52275f84]{margin-top:8px}.el-form-item--small .el-radio[data-v-52275f84]{line-height:32px!important}.el-form-item--small .el-rate[data-v-52275f84]{margin-top:6px}.el-form-item--mini .el-radio[data-v-52275f84]{line-height:28px!important}.el-form-item--mini .el-rate[data-v-52275f84]{margin-top:4px}.el-card[data-v-52275f84]{margin-top:3px;margin-bottom:3px}input[type=password][data-v-52275f84]::-ms-reveal{display:none}.auto-full-width.el-date-editor.el-input[data-v-52275f84],.auto-full-width.el-date-editor.el-input__inner[data-v-52275f84]{width:100%!important}[data-v-52275f84]::-webkit-scrollbar{width:8px;height:8px}[data-v-52275f84]::-webkit-scrollbar-track{width:8px;background:rgba(16,31,28,.1);-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-52275f84]::-webkit-scrollbar-thumb{background-color:#101f1c59;background-clip:padding-box;min-height:28px;-webkit-border-radius:2em;-moz-border-radius:2em;border-radius:2em}[data-v-52275f84]::-webkit-scrollbar-thumb:hover{background-color:#101f1cd9}[data-v-52275f84]{scrollbar-color:#e5e5e5 #f7f7f9;scrollbar-width:thin}[data-v-52275f84] .el-card__header{padding:10px 12px}.folded[data-v-52275f84] .el-card__body{display:none}.clear-fix[data-v-52275f84]:before,.clear-fix[data-v-52275f84]:after{display:table;content:""}.clear-fix[data-v-52275f84]:after{clear:both}.float-right[data-v-52275f84]{float:right} diff --git a/lib/vform/designer.umd.js b/lib/vform/designer.umd.js new file mode 100644 index 0000000..3a1e877 --- /dev/null +++ b/lib/vform/designer.umd.js @@ -0,0 +1,1678 @@ +var qe=Object.defineProperty,Ne=Object.defineProperties;var Re=Object.getOwnPropertyDescriptors;var Oe=Object.getOwnPropertySymbols;var Fe=Object.prototype.hasOwnProperty,Ie=Object.prototype.propertyIsEnumerable;var Le=(t,d,e)=>d in t?qe(t,d,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[d]=e,Se=(t,d)=>{for(var e in d||(d={}))Fe.call(d,e)&&Le(t,e,d[e]);if(Oe)for(var e of Oe(d))Ie.call(d,e)&&Le(t,e,d[e]);return t},ke=(t,d)=>Ne(t,Re(d));(function(t,d){typeof exports=="object"&&typeof module!="undefined"?module.exports=d(require("vue")):typeof define=="function"&&define.amd?define(["vue"],d):(t=typeof globalThis!="undefined"?globalThis:t||self,t.VFormDesigner=d(t.Vue))})(this,function(require$$0$1){"use strict";function _interopDefaultLegacy(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var require$$0__default=_interopDefaultLegacy(require$$0$1),commonjsGlobal=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function getDefaultExportFromCjs(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var axios$2={exports:{}},bind$2=function(d,e){return function(){for(var m=new Array(arguments.length),g=0;g=0)return;p==="set-cookie"?e[p]=(e[p]?e[p]:[]).concat([m]):e[p]=e[p]?e[p]+", "+m:m}}),e},utils$7=utils$d,isURLSameOrigin$1=utils$7.isStandardBrowserEnv()?function(){var d=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a"),p;function m(g){var s=g;return d&&(e.setAttribute("href",s),s=e.href),e.setAttribute("href",s),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:e.pathname.charAt(0)==="/"?e.pathname:"/"+e.pathname}}return p=m(window.location.href),function(s){var c=utils$7.isString(s)?m(s):s;return c.protocol===p.protocol&&c.host===p.host}}():function(){return function(){return!0}}();function Cancel$3(t){this.message=t}Cancel$3.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Cancel$3.prototype.__CANCEL__=!0;var Cancel_1=Cancel$3,utils$6=utils$d,settle=settle$1,cookies=cookies$1,buildURL$1=buildURL$2,buildFullPath=buildFullPath$1,parseHeaders=parseHeaders$1,isURLSameOrigin=isURLSameOrigin$1,createError=createError$2,defaults$5=defaults_1,Cancel$2=Cancel_1,xhr=function(d){return new Promise(function(p,m){var g=d.data,s=d.headers,c=d.responseType,i;function f(){d.cancelToken&&d.cancelToken.unsubscribe(i),d.signal&&d.signal.removeEventListener("abort",i)}utils$6.isFormData(g)&&delete s["Content-Type"];var n=new XMLHttpRequest;if(d.auth){var o=d.auth.username||"",r=d.auth.password?unescape(encodeURIComponent(d.auth.password)):"";s.Authorization="Basic "+btoa(o+":"+r)}var l=buildFullPath(d.baseURL,d.url);n.open(d.method.toUpperCase(),buildURL$1(l,d.params,d.paramsSerializer),!0),n.timeout=d.timeout;function a(){if(!!n){var h="getAllResponseHeaders"in n?parseHeaders(n.getAllResponseHeaders()):null,$=!c||c==="text"||c==="json"?n.responseText:n.response,v={data:$,status:n.status,statusText:n.statusText,headers:h,config:d,request:n};settle(function(y){p(y),f()},function(y){m(y),f()},v),n=null}}if("onloadend"in n?n.onloadend=a:n.onreadystatechange=function(){!n||n.readyState!==4||n.status===0&&!(n.responseURL&&n.responseURL.indexOf("file:")===0)||setTimeout(a)},n.onabort=function(){!n||(m(createError("Request aborted",d,"ECONNABORTED",n)),n=null)},n.onerror=function(){m(createError("Network Error",d,null,n)),n=null},n.ontimeout=function(){var $=d.timeout?"timeout of "+d.timeout+"ms exceeded":"timeout exceeded",v=d.transitional||defaults$5.transitional;d.timeoutErrorMessage&&($=d.timeoutErrorMessage),m(createError($,d,v.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",n)),n=null},utils$6.isStandardBrowserEnv()){var u=(d.withCredentials||isURLSameOrigin(l))&&d.xsrfCookieName?cookies.read(d.xsrfCookieName):void 0;u&&(s[d.xsrfHeaderName]=u)}"setRequestHeader"in n&&utils$6.forEach(s,function($,v){typeof g=="undefined"&&v.toLowerCase()==="content-type"?delete s[v]:n.setRequestHeader(v,$)}),utils$6.isUndefined(d.withCredentials)||(n.withCredentials=!!d.withCredentials),c&&c!=="json"&&(n.responseType=d.responseType),typeof d.onDownloadProgress=="function"&&n.addEventListener("progress",d.onDownloadProgress),typeof d.onUploadProgress=="function"&&n.upload&&n.upload.addEventListener("progress",d.onUploadProgress),(d.cancelToken||d.signal)&&(i=function(h){!n||(m(!h||h&&h.type?new Cancel$2("canceled"):h),n.abort(),n=null)},d.cancelToken&&d.cancelToken.subscribe(i),d.signal&&(d.signal.aborted?i():d.signal.addEventListener("abort",i))),g||(g=null),n.send(g)})},utils$5=utils$d,normalizeHeaderName=normalizeHeaderName$1,enhanceError=enhanceError$2,DEFAULT_CONTENT_TYPE={"Content-Type":"application/x-www-form-urlencoded"};function setContentTypeIfUnset(t,d){!utils$5.isUndefined(t)&&utils$5.isUndefined(t["Content-Type"])&&(t["Content-Type"]=d)}function getDefaultAdapter(){var t;return(typeof XMLHttpRequest!="undefined"||typeof process!="undefined"&&Object.prototype.toString.call(process)==="[object process]")&&(t=xhr),t}function stringifySafely(t,d,e){if(utils$5.isString(t))try{return(d||JSON.parse)(t),utils$5.trim(t)}catch(p){if(p.name!=="SyntaxError")throw p}return(e||JSON.stringify)(t)}var defaults$4={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:getDefaultAdapter(),transformRequest:[function(d,e){return normalizeHeaderName(e,"Accept"),normalizeHeaderName(e,"Content-Type"),utils$5.isFormData(d)||utils$5.isArrayBuffer(d)||utils$5.isBuffer(d)||utils$5.isStream(d)||utils$5.isFile(d)||utils$5.isBlob(d)?d:utils$5.isArrayBufferView(d)?d.buffer:utils$5.isURLSearchParams(d)?(setContentTypeIfUnset(e,"application/x-www-form-urlencoded;charset=utf-8"),d.toString()):utils$5.isObject(d)||e&&e["Content-Type"]==="application/json"?(setContentTypeIfUnset(e,"application/json"),stringifySafely(d)):d}],transformResponse:[function(d){var e=this.transitional||defaults$4.transitional,p=e&&e.silentJSONParsing,m=e&&e.forcedJSONParsing,g=!p&&this.responseType==="json";if(g||m&&utils$5.isString(d)&&d.length)try{return JSON.parse(d)}catch(s){if(g)throw s.name==="SyntaxError"?enhanceError(s,this,"E_JSON_PARSE"):s}return d}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(d){return d>=200&&d<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};utils$5.forEach(["delete","get","head"],function(d){defaults$4.headers[d]={}}),utils$5.forEach(["post","put","patch"],function(d){defaults$4.headers[d]=utils$5.merge(DEFAULT_CONTENT_TYPE)});var defaults_1=defaults$4,utils$4=utils$d,defaults$3=defaults_1,transformData$1=function(d,e,p){var m=this||defaults$3;return utils$4.forEach(p,function(s){d=s.call(m,d,e)}),d},isCancel$1=function(d){return!!(d&&d.__CANCEL__)},utils$3=utils$d,transformData=transformData$1,isCancel=isCancel$1,defaults$2=defaults_1,Cancel$1=Cancel_1;function throwIfCancellationRequested(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Cancel$1("canceled")}var dispatchRequest$1=function(d){throwIfCancellationRequested(d),d.headers=d.headers||{},d.data=transformData.call(d,d.data,d.headers,d.transformRequest),d.headers=utils$3.merge(d.headers.common||{},d.headers[d.method]||{},d.headers),utils$3.forEach(["delete","get","head","post","put","patch","common"],function(m){delete d.headers[m]});var e=d.adapter||defaults$2.adapter;return e(d).then(function(m){return throwIfCancellationRequested(d),m.data=transformData.call(d,m.data,m.headers,d.transformResponse),m},function(m){return isCancel(m)||(throwIfCancellationRequested(d),m&&m.response&&(m.response.data=transformData.call(d,m.response.data,m.response.headers,d.transformResponse))),Promise.reject(m)})},utils$2=utils$d,mergeConfig$2=function(d,e){e=e||{};var p={};function m(n,o){return utils$2.isPlainObject(n)&&utils$2.isPlainObject(o)?utils$2.merge(n,o):utils$2.isPlainObject(o)?utils$2.merge({},o):utils$2.isArray(o)?o.slice():o}function g(n){if(utils$2.isUndefined(e[n])){if(!utils$2.isUndefined(d[n]))return m(void 0,d[n])}else return m(d[n],e[n])}function s(n){if(!utils$2.isUndefined(e[n]))return m(void 0,e[n])}function c(n){if(utils$2.isUndefined(e[n])){if(!utils$2.isUndefined(d[n]))return m(void 0,d[n])}else return m(void 0,e[n])}function i(n){if(n in e)return m(d[n],e[n]);if(n in d)return m(void 0,d[n])}var f={url:s,method:s,data:s,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:i};return utils$2.forEach(Object.keys(d).concat(Object.keys(e)),function(o){var r=f[o]||g,l=r(o);utils$2.isUndefined(l)&&r!==i||(p[o]=l)}),p},data={version:"0.24.0"},VERSION=data.version,validators$1={};["object","boolean","number","function","string","symbol"].forEach(function(t,d){validators$1[t]=function(p){return typeof p===t||"a"+(d<1?"n ":" ")+t}});var deprecatedWarnings={};validators$1.transitional=function(d,e,p){function m(g,s){return"[Axios v"+VERSION+"] Transitional option '"+g+"'"+s+(p?". "+p:"")}return function(g,s,c){if(d===!1)throw new Error(m(s," has been removed"+(e?" in "+e:"")));return e&&!deprecatedWarnings[s]&&(deprecatedWarnings[s]=!0,console.warn(m(s," has been deprecated since v"+e+" and will be removed in the near future"))),d?d(g,s,c):!0}};function assertOptions(t,d,e){if(typeof t!="object")throw new TypeError("options must be an object");for(var p=Object.keys(t),m=p.length;m-- >0;){var g=p[m],s=d[g];if(s){var c=t[g],i=c===void 0||s(c,g,t);if(i!==!0)throw new TypeError("option "+g+" must be "+i);continue}if(e!==!0)throw Error("Unknown option "+g)}}var validator$1={assertOptions,validators:validators$1},utils$1=utils$d,buildURL=buildURL$2,InterceptorManager=InterceptorManager_1,dispatchRequest=dispatchRequest$1,mergeConfig$1=mergeConfig$2,validator=validator$1,validators=validator.validators;function Axios$1(t){this.defaults=t,this.interceptors={request:new InterceptorManager,response:new InterceptorManager}}Axios$1.prototype.request=function(d){typeof d=="string"?(d=arguments[1]||{},d.url=arguments[0]):d=d||{},d=mergeConfig$1(this.defaults,d),d.method?d.method=d.method.toLowerCase():this.defaults.method?d.method=this.defaults.method.toLowerCase():d.method="get";var e=d.transitional;e!==void 0&&validator.assertOptions(e,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1);var p=[],m=!0;this.interceptors.request.forEach(function(r){typeof r.runWhen=="function"&&r.runWhen(d)===!1||(m=m&&r.synchronous,p.unshift(r.fulfilled,r.rejected))});var g=[];this.interceptors.response.forEach(function(r){g.push(r.fulfilled,r.rejected)});var s;if(!m){var c=[dispatchRequest,void 0];for(Array.prototype.unshift.apply(c,p),c=c.concat(g),s=Promise.resolve(d);c.length;)s=s.then(c.shift(),c.shift());return s}for(var i=d;p.length;){var f=p.shift(),n=p.shift();try{i=f(i)}catch(o){n(o);break}}try{s=dispatchRequest(i)}catch(o){return Promise.reject(o)}for(;g.length;)s=s.then(g.shift(),g.shift());return s},Axios$1.prototype.getUri=function(d){return d=mergeConfig$1(this.defaults,d),buildURL(d.url,d.params,d.paramsSerializer).replace(/^\?/,"")},utils$1.forEach(["delete","get","head","options"],function(d){Axios$1.prototype[d]=function(e,p){return this.request(mergeConfig$1(p||{},{method:d,url:e,data:(p||{}).data}))}}),utils$1.forEach(["post","put","patch"],function(d){Axios$1.prototype[d]=function(e,p,m){return this.request(mergeConfig$1(m||{},{method:d,url:e,data:p}))}});var Axios_1=Axios$1,Cancel=Cancel_1;function CancelToken(t){if(typeof t!="function")throw new TypeError("executor must be a function.");var d;this.promise=new Promise(function(m){d=m});var e=this;this.promise.then(function(p){if(!!e._listeners){var m,g=e._listeners.length;for(m=0;mhtml text",customClass:"",onCreated:"",onMounted:""}},{type:"button",icon:"button",formItemFlag:!1,options:{name:"",label:"",columnWidth:"200px",size:"",displayStyle:"block",disabled:!1,hidden:!1,type:"",plain:!1,round:!1,circle:!1,icon:null,customClass:"",onCreated:"",onMounted:"",onClick:""}},{type:"divider",icon:"divider",formItemFlag:!1,options:{name:"",label:"",columnWidth:"200px",direction:"horizontal",contentPosition:"center",hidden:!1,customClass:"",onCreated:"",onMounted:""}}],advancedFields=[{type:"picture-upload",icon:"picture-upload-field",formItemFlag:!0,options:{name:"",label:"",labelAlign:"",labelWidth:null,labelHidden:!1,columnWidth:"200px",disabled:!1,hidden:!1,required:!1,requiredHint:"",customRule:"",customRuleHint:"",uploadURL:"",uploadTip:"",withCredentials:!1,multipleSelect:!1,showFileList:!0,limit:3,fileMaxSize:5,fileTypes:["jpg","jpeg","png"],customClass:"",labelIconClass:null,labelIconPosition:"rear",labelTooltip:null,onCreated:"",onMounted:"",onBeforeUpload:"",onUploadSuccess:"",onUploadError:"",onFileRemove:"",onValidate:""}},{type:"file-upload",icon:"file-upload-field",formItemFlag:!0,options:{name:"",label:"",labelAlign:"",labelWidth:null,labelHidden:!1,columnWidth:"200px",disabled:!1,hidden:!1,required:!1,requiredHint:"",customRule:"",customRuleHint:"",uploadURL:"",uploadTip:"",withCredentials:!1,multipleSelect:!1,showFileList:!0,limit:3,fileMaxSize:5,fileTypes:["doc","docx","xls","xlsx"],customClass:"",labelIconClass:null,labelIconPosition:"rear",labelTooltip:null,onCreated:"",onMounted:"",onBeforeUpload:"",onUploadSuccess:"",onUploadError:"",onFileRemove:"",onValidate:""}},{type:"rich-editor",icon:"rich-editor-field",formItemFlag:!0,options:{name:"",label:"",labelAlign:"",placeholder:"",labelWidth:null,labelHidden:!1,columnWidth:"200px",contentHeight:"200px",disabled:!1,hidden:!1,required:!1,requiredHint:"",customRule:"",customRuleHint:"",customClass:"",labelIconClass:null,labelIconPosition:"rear",labelTooltip:null,minLength:null,maxLength:null,showWordLimit:!1,onCreated:"",onMounted:"",onValidate:""}},{type:"cascader",icon:"cascader-field",formItemFlag:!0,options:{name:"",label:"",labelAlign:"",defaultValue:"",placeholder:"",size:"",labelWidth:null,labelHidden:!1,columnWidth:"200px",disabled:!1,hidden:!1,clearable:!0,filterable:!1,multiple:!1,checkStrictly:!1,showAllLevels:!0,optionItems:[{label:"select 1",value:1,children:[{label:"child 1",value:11}]},{label:"select 2",value:2},{label:"select 3",value:3}],required:!1,requiredHint:"",customRule:"",customRuleHint:"",customClass:"",labelIconClass:null,labelIconPosition:"rear",labelTooltip:null,onCreated:"",onMounted:"",onChange:"",onFocus:"",onBlur:"",onValidate:""}}],customFields=[];function addContainerWidgetSchema(t){containers.push(t)}function addCustomWidgetSchema(t){customFields.push(t)}const formTemplates=[{title:"\u5355\u5217\u8868\u5355",imgUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/t1.png",jsonUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/json1.txt",description:"\u8868\u5355\u6A21\u677F\u8BE6\u7EC6\u8BF4\u660E..."},{title:"\u591A\u5217\u8868\u5355",imgUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/t2.png",jsonUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/json2.txt",description:"\u8868\u5355\u6A21\u677F\u8BE6\u7EC6\u8BF4\u660E..."},{title:"\u5206\u7EC4\u8868\u5355",imgUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/t3.png",jsonUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/json3.txt",description:"\u8868\u5355\u6A21\u677F\u8BE6\u7EC6\u8BF4\u660E..."},{title:"\u6807\u7B7E\u9875\u8868\u5355",imgUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/t4.png",jsonUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/json4.txt",description:"\u8868\u5355\u6A21\u677F\u8BE6\u7EC6\u8BF4\u660E..."},{title:"\u4E3B\u4ECE\u8868\u5355",imgUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/t5.png",jsonUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/json5.txt",description:"\u8868\u5355\u6A21\u677F\u8BE6\u7EC6\u8BF4\u660E..."},{title:"\u54CD\u5E94\u5F0F\u8868\u5355",imgUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/t6.png",jsonUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/json6.txt",description:"\u8868\u5355\u6A21\u677F\u8BE6\u7EC6\u8BF4\u660E..."},{title:"\u95EE\u5377\u8C03\u67E5\u8868",imgUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/t7.png",jsonUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/json7.txt",description:"\u8868\u5355\u6A21\u677F\u8BE6\u7EC6\u8BF4\u660E..."},{title:"\u56FA\u5B9A\u8868\u683C\u8868\u5355",imgUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/t8.png",jsonUrl:"https://ks3-cn-beijing.ksyuncs.com/vform-static/form-samples/json8.txt",description:"\u8868\u5355\u6A21\u677F\u8BE6\u7EC6\u8BF4\u660E..."}];var clipboard={exports:{}};/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,d){(function(p,m){t.exports=m()})(commonjsGlobal,function(){return function(){var e={686:function(g,s,c){c.d(s,{default:function(){return R}});var i=c(279),f=c.n(i),n=c(370),o=c.n(n),r=c(817),l=c.n(r);function a(B){try{return document.execCommand(B)}catch{return!1}}var u=function(D){var P=l()(D);return a("cut"),P},h=u;function $(B){var D=document.documentElement.getAttribute("dir")==="rtl",P=document.createElement("textarea");P.style.fontSize="12pt",P.style.border="0",P.style.padding="0",P.style.margin="0",P.style.position="absolute",P.style[D?"right":"left"]="-9999px";var j=window.pageYOffset||document.documentElement.scrollTop;return P.style.top="".concat(j,"px"),P.setAttribute("readonly",""),P.value=B,P}var v=function(D,P){var j=$(D);P.container.appendChild(j);var V=l()(j);return a("copy"),j.remove(),V},w=function(D){var P=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},j="";return typeof D=="string"?j=v(D,P):D instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(D==null?void 0:D.type)?j=v(D.value,P):(j=l()(D),a("copy")),j},y=w;function _(B){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_=function(P){return typeof P}:_=function(P){return P&&typeof Symbol=="function"&&P.constructor===Symbol&&P!==Symbol.prototype?"symbol":typeof P},_(B)}var b=function(){var D=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},P=D.action,j=P===void 0?"copy":P,V=D.container,W=D.target,H=D.text;if(j!=="copy"&&j!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(W!==void 0)if(W&&_(W)==="object"&&W.nodeType===1){if(j==="copy"&&W.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(j==="cut"&&(W.hasAttribute("readonly")||W.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(H)return y(H,{container:V});if(W)return j==="cut"?h(W):y(W,{container:V})},S=b;function M(B){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?M=function(P){return typeof P}:M=function(P){return P&&typeof Symbol=="function"&&P.constructor===Symbol&&P!==Symbol.prototype?"symbol":typeof P},M(B)}function O(B,D){if(!(B instanceof D))throw new TypeError("Cannot call a class as a function")}function k(B,D){for(var P=0;P0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof V.action=="function"?V.action:this.defaultAction,this.target=typeof V.target=="function"?V.target:this.defaultTarget,this.text=typeof V.text=="function"?V.text:this.defaultText,this.container=M(V.container)==="object"?V.container:document.body}},{key:"listenClick",value:function(V){var W=this;this.listener=o()(V,"click",function(H){return W.onClick(H)})}},{key:"onClick",value:function(V){var W=V.delegateTarget||V.currentTarget,H=this.action(W)||"copy",z=S({action:H,container:this.container,target:this.target(W),text:this.text(W)});this.emit(z?"success":"error",{action:H,text:z,trigger:W,clearSelection:function(){W&&W.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(V){return F("action",V)}},{key:"defaultTarget",value:function(V){var W=F("target",V);if(W)return document.querySelector(W)}},{key:"defaultText",value:function(V){return F("text",V)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(V){var W=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return y(V,W)}},{key:"cut",value:function(V){return h(V)}},{key:"isSupported",value:function(){var V=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],W=typeof V=="string"?[V]:V,H=!!document.queryCommandSupported;return W.forEach(function(z){H=H&&!!document.queryCommandSupported(z)}),H}}]),P}(f()),R=I},828:function(g){var s=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var c=Element.prototype;c.matches=c.matchesSelector||c.mozMatchesSelector||c.msMatchesSelector||c.oMatchesSelector||c.webkitMatchesSelector}function i(f,n){for(;f&&f.nodeType!==s;){if(typeof f.matches=="function"&&f.matches(n))return f;f=f.parentNode}}g.exports=i},438:function(g,s,c){var i=c(828);function f(r,l,a,u,h){var $=o.apply(this,arguments);return r.addEventListener(a,$,h),{destroy:function(){r.removeEventListener(a,$,h)}}}function n(r,l,a,u,h){return typeof r.addEventListener=="function"?f.apply(null,arguments):typeof a=="function"?f.bind(null,document).apply(null,arguments):(typeof r=="string"&&(r=document.querySelectorAll(r)),Array.prototype.map.call(r,function($){return f($,l,a,u,h)}))}function o(r,l,a,u){return function(h){h.delegateTarget=i(h.target,l),h.delegateTarget&&u.call(r,h)}}g.exports=n},879:function(g,s){s.node=function(c){return c!==void 0&&c instanceof HTMLElement&&c.nodeType===1},s.nodeList=function(c){var i=Object.prototype.toString.call(c);return c!==void 0&&(i==="[object NodeList]"||i==="[object HTMLCollection]")&&"length"in c&&(c.length===0||s.node(c[0]))},s.string=function(c){return typeof c=="string"||c instanceof String},s.fn=function(c){var i=Object.prototype.toString.call(c);return i==="[object Function]"}},370:function(g,s,c){var i=c(879),f=c(438);function n(a,u,h){if(!a&&!u&&!h)throw new Error("Missing required arguments");if(!i.string(u))throw new TypeError("Second argument must be a String");if(!i.fn(h))throw new TypeError("Third argument must be a Function");if(i.node(a))return o(a,u,h);if(i.nodeList(a))return r(a,u,h);if(i.string(a))return l(a,u,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function o(a,u,h){return a.addEventListener(u,h),{destroy:function(){a.removeEventListener(u,h)}}}function r(a,u,h){return Array.prototype.forEach.call(a,function($){$.addEventListener(u,h)}),{destroy:function(){Array.prototype.forEach.call(a,function($){$.removeEventListener(u,h)})}}}function l(a,u,h){return f(document.body,a,u,h)}g.exports=n},817:function(g){function s(c){var i;if(c.nodeName==="SELECT")c.focus(),i=c.value;else if(c.nodeName==="INPUT"||c.nodeName==="TEXTAREA"){var f=c.hasAttribute("readonly");f||c.setAttribute("readonly",""),c.select(),c.setSelectionRange(0,c.value.length),f||c.removeAttribute("readonly"),i=c.value}else{c.hasAttribute("contenteditable")&&c.focus();var n=window.getSelection(),o=document.createRange();o.selectNodeContents(c),n.removeAllRanges(),n.addRange(o),i=n.toString()}return i}g.exports=s},279:function(g){function s(){}s.prototype={on:function(c,i,f){var n=this.e||(this.e={});return(n[c]||(n[c]=[])).push({fn:i,ctx:f}),this},once:function(c,i,f){var n=this;function o(){n.off(c,o),i.apply(f,arguments)}return o._=i,this.on(c,o,f)},emit:function(c){var i=[].slice.call(arguments,1),f=((this.e||(this.e={}))[c]||[]).slice(),n=0,o=f.length;for(n;n{t[e]=d[e]})},evalFn=function(t,d=null,e=null){return new Function("DSV","VFR","return "+t)(d,e)},addWindowResizeHandler=function(t){let d=window.onresize;typeof window.onresize!="function"?window.onresize=t:window.onresize=function(){d(),t()}},insertCustomCssToHead=function(t,d=""){let e=document.getElementsByTagName("head")[0],p=document.getElementById("vform-custom-css");p&&e.removeChild(p),d&&(p=document.getElementById("vform-custom-css-"+d),!!p&&e.removeChild(p));let m=document.createElement("style");m.type="text/css",m.rel="stylesheet",m.id=d?"vform-custom-css-"+d:"vform-custom-css";try{m.appendChild(document.createTextNode(t))}catch{m.styleSheet.cssText=t}e.appendChild(m)},insertGlobalFunctionsToHtml=function(t,d=""){let e=document.getElementsByTagName("body")[0],p=document.getElementById("v_form_global_functions");!!p&&e.removeChild(p),d&&(p=document.getElementById("v_form_global_functions-"+d),!!p&&e.removeChild(p));let m=document.createElement("script");m.id=d?"v_form_global_functions-"+d:"v_form_global_functions",m.type="text/javascript",m.innerHTML=t,e.appendChild(m)},loadRemoteScript=function(t,d){let e=encodeURIComponent(t);if(!document.getElementById(e)){let m=document.createElement("script");m.src=t,m.id=e,document.body.appendChild(m),m.onload=m.onreadystatechange=function(g,s){(s||!m.readyState||m.readyState==="loaded"||m.readyState==="complete")&&(m=m.onload=m.onreadystatechange=null,s||d())}}};function traverseFieldWidgets(t,d,e=null){!t||t.map(p=>{p.formItemFlag?d(p,e):p.type==="grid"?p.cols.map(m=>{traverseFieldWidgets(m.widgetList,d,p)}):p.type==="table"?p.rows.map(m=>{m.cols.map(g=>{traverseFieldWidgets(g.widgetList,d,p)})}):p.type==="tab"?p.tabs.map(m=>{traverseFieldWidgets(m.widgetList,d,p)}):(p.type==="sub-form"||p.category==="container")&&traverseFieldWidgets(p.widgetList,d,p)})}function traverseContainerWidgets(t,d){!t||t.map(e=>{e.category==="container"&&d(e),e.type==="grid"?e.cols.map(p=>{traverseContainerWidgets(p.widgetList,d)}):e.type==="table"?e.rows.map(p=>{p.cols.map(m=>{traverseContainerWidgets(m.widgetList,d)})}):e.type==="tab"?e.tabs.map(p=>{traverseContainerWidgets(p.widgetList,d)}):(e.type==="sub-form"||e.category==="container")&&traverseContainerWidgets(e.widgetList,d)})}function traverseAllWidgets(t,d){!t||t.map(e=>{d(e),e.type==="grid"?e.cols.map(p=>{d(p),traverseAllWidgets(p.widgetList,d)}):e.type==="table"?e.rows.map(p=>{p.cols.map(m=>{d(m),traverseAllWidgets(m.widgetList,d)})}):e.type==="tab"?e.tabs.map(p=>{traverseAllWidgets(p.widgetList,d)}):(e.type==="sub-form"||e.category==="container")&&traverseAllWidgets(e.widgetList,d)})}function handleWidgetForTraverse(t,d){t.category?traverseFieldWidgetsOfContainer(t,d):t.formItemFlag&&d(t)}function traverseFieldWidgetsOfContainer(t,d){t.type==="grid"?t.cols.forEach(e=>{e.widgetList.forEach(p=>{handleWidgetForTraverse(p,d)})}):t.type==="table"?t.rows.forEach(e=>{e.cols.forEach(p=>{p.widgetList.forEach(m=>{handleWidgetForTraverse(m,d)})})}):t.type==="tab"?t.tabs.forEach(e=>{e.widgetList.forEach(p=>{handleWidgetForTraverse(p,d)})}):t.type==="sub-form"?t.widgetList.forEach(e=>{handleWidgetForTraverse(e,d)}):t.category==="container"&&t.widgetList.forEach(e=>{handleWidgetForTraverse(e,d)})}function getAllFieldWidgets(t){if(!t)return[];let d=[];return traverseFieldWidgets(t,p=>{d.push({type:p.type,name:p.options.name,field:p})}),d}function getAllContainerWidgets(t){if(!t)return[];let d=[];return traverseContainerWidgets(t,p=>{d.push({type:p.type,name:p.options.name,container:p})}),d}function copyToClipboard(t,d,e,p,m){const g=new Clipboard(d.target,{text:()=>t});g.on("success",()=>{e.success(p),g.destroy()}),g.on("error",()=>{e.error(m),g.destroy()}),g.onClick(d)}function getQueryParam(t){let e=window.location.search.substring(1).split("&");for(let p=0;p{p=isDef(p)&&isDef(p[m])?p[m]:null}),p}let locale=require$$0$1.reactive({lang:localStorage.getItem("v_form_locale")||"zh-CN"});function createI18n(t){return{messages:t.messages,$st(d,...e){const p=get(this.messages[locale.lang],d);return typeof p=="function"?p(...e):p!==null?p:d},$st2(d,e){let p=this.messages[locale.lang];const m=get(p,d);return m!==null?m:get(p,e)},setLang(d){locale.lang=d}}}var enLocale={application:{"zh-CN":"\u7B80\u4F53\u4E2D\u6587","en-US":"English",productTitle:"Online Form Designer",github:"GitHub",document:"Docs",qqGroup:"WeChat Group",deployment:"Deployment",subscription:"Subscription"},designer:{componentLib:"Components",formLib:"Templates",containerTitle:"Container",dragHandlerHint:"drag container or field to layout center",dragAction:"drag",basicFieldTitle:"Basic Field",advancedFieldTitle:"Advanced Field",customFieldTitle:"Customized Field",noWidgetHint:"Please select a widget from the left list, drag and drop to this container.",widgetLabel:{grid:"Grid",table:"Table",tab:"Tab",section:"Section","sub-form":"SubForm","grid-col":"GridCol","table-cell":"TableCell","tab-pane":"TabPane","data-table":"DataTable",input:"Input",textarea:"Textarea",number:"InputNumber",radio:"Radio",checkbox:"Checkbox",select:"Select",time:"Time","time-range":"Time range",date:"Date","date-range":"Date range",switch:"Switch",rate:"Rate",color:"ColorPicker",slider:"Slider","static-text":"Text","html-text":"HTML",button:"Button",divider:"Divider","picture-upload":"Picture","file-upload":"File","rich-editor":"Rich Editor",cascader:"Cascader",slot:"Slot",custom:"Custom Component"},hint:{selectParentWidget:"Select parent of this widget",moveUpWidget:"Move up this widget",moveDownWidget:"Move down this widget",cloneWidget:"Clone this widget",insertRow:"Insert new row",insertColumn:"Insert new column",remove:"Remove this widget",cellSetting:"Cell setting",dragHandler:"Drag handler",copyField:"Copy field widget",onlyFieldWidgetAcceptable:"Only field widget can be dragged into sub-form",moveUpFirstChildHint:"First child can not be move up",moveDownLastChildHint:"Last child can not be move down",closePreview:"Close",copyJson:"Copy",saveFormJson:"Save As File",copyVueCode:"Copy Vue Code",copyHtmlCode:"Copy HTML Code",copyJsonSuccess:"Copy succeed",importJsonSuccess:"Import succeed",invalidJsonFormat:"Invalid JSON format",jsonVersionMismatch:"Version of JSON mismatch",copyJsonFail:"Copy failed",copyVueCodeSuccess:"Copy succeed",copyVueCodeFail:"Copy failed",copyHtmlCodeSuccess:"Copy succeed",copyHtmlCodeFail:"Copy failed",saveVueCode:"Save Vue File",saveHtmlCode:"Save Html File",getFormData:"Get Data",resetForm:"Reset",disableForm:"Disable",enableForm:"Enable",exportFormData:"Form Data",copyFormData:"Copy",saveFormData:"Save As File",copyVue2SFC:"Copy Vue2",copyVue3SFC:"Copy Vue3",copySFCFail:"Copy failed",copySFCSuccess:"Copy succeed",saveVue2SFC:"Save As Vue2",saveVue3SFC:"Save As Vue3",fileNameForSave:"File name:",saveFileTitle:"Save as File",fileNameInputPlaceholder:"Enter the file name",sampleLoadedSuccess:"Example loaded successfully",sampleLoadedFail:"Sample load failed",loadFormTemplate:"Load This",loadFormTemplateHint:"Are you sure to load this template?",loadFormTemplateSuccess:"Load form template success!",loadFormTemplateFailed:"Load form template failed.",currentNodeCannotBeSelected:"The current node cannot be selected.",widgetSetting:"Widget Config",formSetting:"Form Config",prompt:"Prompt",confirm:"OK",cancel:"Cancel",import:"Import",importJsonHint:"The code to be imported should have the following JSON format.",invalidOptionsData:"Invalid data of options:",lastPaneCannotBeDeleted:"The last pane cannot be deleted.",duplicateName:"Duplicate name: ",nameRequired:"Name required.",numberValidator:"Number",letterValidator:"Letter",letterAndNumberValidator:"LetterAndNumber",mobilePhoneValidator:"MobilePhone",emailValidator:"Email",urlValidator:"URL",noChineseValidator:"Non-Chinese",chineseValidator:"Chinese",rowspanNotConsistentForMergeEntireRow:"Cells in this row don't have the same rowspan, operation failed.",colspanNotConsistentForMergeEntireColumn:"Cells in this column don't have the same colspan, operation failed.",rowspanNotConsistentForDeleteEntireRow:"Cells in this row don't have the same rowspan, operation failed.",colspanNotConsistentForDeleteEntireColumn:"Cells in this column don't have the same colspan, operation failed.",lastColCannotBeDeleted:"The last col cannot be deleted.",lastRowCannotBeDeleted:"The last row cannot be deleted."},toolbar:{undoHint:"Undo",redoHint:"Redo",pcLayout:"PC",padLayout:"Pad",mobileLayout:"H5",nodeTreeHint:"Tree View Of Component Hierarchy",nodeTreeTitle:"Tree View Of Component Hierarchy",clear:"Clear",preview:"Preview",importJson:"Import",exportJson:"Export",exportCode:"Codes",generateCode:"Generate Code",generateSFC:"Generate SFC"},setting:{basicSetting:"Basic Setting",attributeSetting:"Attribute Setting",commonSetting:"Common Setting",advancedSetting:"Advanced Setting",eventSetting:"Event Setting",uniqueName:"Unique Name",editNameHelp:"Press enter to confirm the modification",label:"Label",displayType:"Type",defaultValue:"Default Value",placeholder:"Placeholder",startPlaceholder:"Start Placeholder",endPlaceholder:"End Placeholder",widgetColumnWidth:"Width",widgetSize:"Size",fontSize:"Font Size",textAlign:"Text Align",autoFullWidth:"Auto Full Width",showStops:"Show Stops",displayStyle:"Display Style",inlineLayout:"inline",blockLayout:"block",buttonStyle:"Show As Button",border:"Show Border",labelWidth:"Width Of Label",rows:"Rows",labelHidden:"Hide Label",required:"Required",requiredHint:"Failure Hint",validation:"Validation",validationHelp:"Regular expressions supported",validationHint:"Validation Hint",readonly:"Readonly",disabled:"Disabled",hidden:"Hidden",textContent:"Text",preWrap:"Line Wrap",htmlContent:"HTML",clearable:"Clearable",editable:"Editable",format:"Format",valueFormat:"Value Format",showPassword:"Show Reveal",filterable:"Filterable",allowCreate:"Allow Create",remote:"Remote Query",automaticDropdown:"Automatic Dropdown",multiple:"Multiple",multipleLimit:"Multiple Limit",checkStrictly:"Any Level Selectable",showAllLevels:"Show All Levels",contentPosition:"Content Position",plain:"Plain",round:"Round",circle:"Circle",icon:"Icon",optionsSetting:"Options Setting",addOption:"Add Option",importOptions:"Import Options",resetDefault:"Reset Default",uploadSetting:"Upload Setting",uploadURL:"Upload URL",uploadTip:"Tip Content",withCredentials:"Send Cookie",multipleSelect:"File Multi-select",showFileList:"Show File List",limit:"Max Upload Number",fileMaxSize:"Max Size(MB)",fileTypes:"Upload File Types",fileTypesHelp:"Allows to add more file types",headers:"Request Headers",cellWidth:"Width",cellHeight:"Height",wordBreak:"Line Wrap",gridColHeight:"Height Of Col(px)",gutter:"Gutter(px)",columnSetting:"Cols Setting",colsOfGrid:"Cols Of Grid:",colSpanTitle:"Spans Of Col",colOffsetTitle:"Offset Of Col",colPushTitle:"Push Of Col",colPullTitle:"Pull Of Col",addColumn:"Add Column",responsive:"Responsive",tabPaneSetting:"Tab Panes",addTabPane:"Add Tab Pane",paneActive:"Active",customLabelIcon:"Custom Label",labelIconClass:"Label Icon Class",labelIconPosition:"Label Icon Position",labelTooltip:"Label Tooltip",minValue:"Min Value",maxValue:"Max Value",precision:"Precision",step:"Step",controlsPosition:"Controls Position",minLength:"Min Length",maxLength:"Max Length",showWordLimit:"Show Word Limit",prefixIcon:"Prefix Icon",suffixIcon:"Suffix Icon",inputButton:"Input Button Setting",appendButton:"Append Button",appendButtonDisabled:"Button Disabled",appendButtonIcon:"Append Button Icon",buttonIcon:"Button Icon",switchWidth:"Width of Switch(px)",activeText:"Active Text",inactiveText:"Inactive Text",activeColor:"Active Color",inactiveColor:"Inactive Color",maxStars:"Stars Max Number",lowThreshold:"Low Threshold",highThreshold:"High Threshold",allowHalf:"Allow Half",showText:"Show Text",showScore:"Show Score",range:"Range",vertical:"Vertical",showBlankRow:"Show Blank Row",showRowNumber:"Show Row Number",contentHeight:"Content Area Height",insertColumnToLeft:"insert column to left",insertColumnToRight:"insert column to right",insertRowAbove:"insert row above",insertRowBelow:"insert row below",mergeLeftColumn:"merge left cell",mergeRightColumn:"merge right cell",mergeEntireRow:"merge entire row",mergeRowAbove:"merge cell above",mergeRowBelow:"merge cell below",mergeEntireColumn:"merge entire column",undoMergeCol:"undo merge column",undoMergeRow:"undo merge row",deleteEntireCol:"delete entire column",deleteEntireRow:"delete entire row",widgetName:"Unique Name",formSize:"Size",labelPosition:"Position Of Label",topPosition:"Top",leftPosition:"Left",labelAlign:"Label Align",leftAlign:"Left",centerAlign:"Center",rightAlign:"Right",formCss:"Form CSS",addCss:"Edit",customClass:"Custom Class",globalFunctions:"Global Functions",addEventHandler:"Edit",editWidgetEventHandler:"Edit Widget Event Handler",editFormEventHandler:"Edit Form Event Handler",formSFCSetting:"SFC Setting",formModelName:"Model Name",formRefName:"Ref Name",formRulesName:"Rules Name",syntaxCheckWarning:"Syntax error in the javascript codes, please check again!"}}},zhLocale={application:{"zh-CN":"\u7B80\u4F53\u4E2D\u6587","en-US":"English",productTitle:"\u8868\u5355\u8BBE\u8BA1\u5668",github:"GitHub",document:"\u6587\u6863",qqGroup:"\u6280\u672FWX\u7FA4",deployment:"\u79C1\u6709\u90E8\u7F72",subscription:"\u8BA2\u9605Pro"},designer:{componentLib:"\u7EC4\u4EF6\u5E93",formLib:"\u8868\u5355\u6A21\u677F",containerTitle:"\u5BB9\u5668",dragHandlerHint:"\u9F20\u6807\u62D6\u62FD\u5BB9\u5668\u7EC4\u4EF6\u6216\u5B57\u6BB5\u7EC4\u4EF6\u5E76\u653E\u7F6E\u4E8E\u8868\u5355\u4E2D",dragAction:"\u62D6\u52A8",basicFieldTitle:"\u57FA\u7840\u5B57\u6BB5",advancedFieldTitle:"\u9AD8\u7EA7\u5B57\u6BB5",customFieldTitle:"\u81EA\u5B9A\u4E49\u6269\u5C55\u5B57\u6BB5",noWidgetHint:"\u8BF7\u4ECE\u5DE6\u4FA7\u5217\u8868\u4E2D\u9009\u62E9\u4E00\u4E2A\u7EC4\u4EF6, \u7136\u540E\u7528\u9F20\u6807\u62D6\u52A8\u7EC4\u4EF6\u653E\u7F6E\u4E8E\u6B64\u5904.",widgetLabel:{grid:"\u6805\u683C",table:"\u8868\u683C",tab:"\u6807\u7B7E\u9875",section:"\u533A\u5757","sub-form":"\u5B50\u8868\u5355","grid-col":"\u6805\u683C\u5217","table-cell":"\u5355\u5143\u683C","tab-pane":"\u9009\u9879\u5361\u9875","data-table":"\u6570\u636E\u8868\u683C",input:"\u5355\u884C\u8F93\u5165",textarea:"\u591A\u884C\u8F93\u5165",number:"\u8BA1\u6570\u5668",radio:"\u5355\u9009\u9879",checkbox:"\u591A\u9009\u9879",select:"\u4E0B\u62C9\u9009\u9879",time:"\u65F6\u95F4","time-range":"\u65F6\u95F4\u8303\u56F4",date:"\u65E5\u671F","date-range":"\u65E5\u671F\u8303\u56F4",switch:"\u5F00\u5173",rate:"\u8BC4\u5206",color:"\u989C\u8272\u9009\u62E9\u5668",slider:"\u6ED1\u5757","static-text":"\u9759\u6001\u6587\u5B57","html-text":"HTML",button:"\u6309\u94AE",divider:"\u5206\u9694\u7EBF","picture-upload":"\u56FE\u7247","file-upload":"\u6587\u4EF6","rich-editor":"\u5BCC\u6587\u672C",cascader:"\u7EA7\u8054\u9009\u62E9",slot:"\u63D2\u69FD",custom:"Custom Component"},hint:{selectParentWidget:"\u9009\u4E2D\u7236\u7EC4\u4EF6",moveUpWidget:"\u4E0A\u79FB\u7EC4\u4EF6",moveDownWidget:"\u4E0B\u79FB\u7EC4\u4EF6",cloneWidget:"\u590D\u5236\u7EC4\u4EF6",insertRow:"\u63D2\u5165\u65B0\u884C",insertColumn:"\u63D2\u5165\u65B0\u5217",remove:"\u79FB\u9664\u7EC4\u4EF6",cellSetting:"\u5355\u5143\u683C\u64CD\u4F5C",dragHandler:"\u62D6\u62FD\u624B\u67C4",copyField:"\u590D\u5236\u5B57\u6BB5\u7EC4\u4EF6",onlyFieldWidgetAcceptable:"\u5B50\u8868\u5355\u53EA\u80FD\u63A5\u6536\u5B57\u6BB5\u7EC4\u4EF6",moveUpFirstChildHint:"\u5DF2\u7ECF\u79FB\u52A8\u5230\u6700\u4E0A\u9762",moveDownLastChildHint:"\u5DF2\u7ECF\u79FB\u52A8\u5230\u6700\u4E0B\u9762",closePreview:"\u5173\u95ED",copyJson:"\u590D\u5236JSON",saveFormJson:"\u4FDD\u5B58\u4E3A\u6587\u4EF6",copyVueCode:"\u590D\u5236Vue\u4EE3\u7801",copyHtmlCode:"\u590D\u5236HTML\u4EE3\u7801",copyJsonSuccess:"\u590D\u5236JSON\u6210\u529F",importJsonSuccess:"\u5BFC\u5165JSON\u6210\u529F",invalidJsonFormat:"\u65E0\u6548\u7684\u8868\u5355JSON\u683C\u5F0F",jsonVersionMismatch:"\u8868\u5355JSON\u7248\u672C\u53F7\u4E0D\u5339\u914D",copyJsonFail:"\u590D\u5236JSON\u5931\u8D25",copyVueCodeSuccess:"\u590D\u5236Vue\u4EE3\u7801\u6210\u529F",copyVueCodeFail:"\u590D\u5236Vue\u4EE3\u7801\u5931\u8D25",copyHtmlCodeSuccess:"\u590D\u5236HTML\u4EE3\u7801\u6210\u529F",copyHtmlCodeFail:"\u590D\u5236HTML\u4EE3\u7801\u5931\u8D25",saveVueCode:"\u4FDD\u5B58Vue\u6587\u4EF6",saveHtmlCode:"\u4FDD\u5B58Html\u6587\u4EF6",getFormData:"\u83B7\u53D6\u6570\u636E",resetForm:"\u91CD\u7F6E\u8868\u5355",disableForm:"\u7981\u7528\u7F16\u8F91",enableForm:"\u6062\u590D\u7F16\u8F91",exportFormData:"\u8868\u5355\u6570\u636E",copyFormData:"\u590D\u5236JSON",saveFormData:"\u4FDD\u5B58\u4E3A\u6587\u4EF6",copyVue2SFC:"\u590D\u5236Vue2\u4EE3\u7801",copyVue3SFC:"\u590D\u5236Vue3\u4EE3\u7801",copySFCFail:"\u590D\u5236SFC\u4EE3\u7801\u5931\u8D25",copySFCSuccess:"\u590D\u5236SFC\u4EE3\u7801\u6210\u529F",saveVue2SFC:"\u4FDD\u5B58\u4E3AVue2\u7EC4\u4EF6",saveVue3SFC:"\u4FDD\u5B58\u4E3AVue3\u7EC4\u4EF6",fileNameForSave:"\u6587\u4EF6\u540D\uFF1A",saveFileTitle:"\u4FDD\u5B58\u4E3A\u6587\u4EF6",fileNameInputPlaceholder:"\u8BF7\u8F93\u5165\u6587\u4EF6\u540D",sampleLoadedSuccess:"\u8868\u5355\u793A\u4F8B\u52A0\u8F7D\u6210\u529F",sampleLoadedFail:"\u8868\u5355\u793A\u4F8B\u52A0\u8F7D\u5931\u8D25",loadFormTemplate:"\u52A0\u8F7D\u6B64\u6A21\u677F",loadFormTemplateHint:"\u662F\u5426\u52A0\u8F7D\u8FD9\u4E2A\u6A21\u677F\uFF1F\u52A0\u8F7D\u540E\u4F1A\u8986\u76D6\u8BBE\u8BA1\u5668\u5F53\u524D\u8868\u5355\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528\u201C\u64A4\u9500\u201D\u529F\u80FD\u6062\u590D\u3002",loadFormTemplateSuccess:"\u8868\u5355\u6A21\u677F\u52A0\u8F7D\u6210\u529F",loadFormTemplateFailed:"\u8868\u5355\u6A21\u677F\u52A0\u8F7D\u5931\u8D25",currentNodeCannotBeSelected:"\u5F53\u524D\u7EC4\u4EF6\u8282\u70B9\u4E0D\u53EF\u9009\u62E9",widgetSetting:"\u7EC4\u4EF6\u8BBE\u7F6E",formSetting:"\u8868\u5355\u8BBE\u7F6E",prompt:"\u63D0\u793A",confirm:"\u786E\u5B9A",cancel:"\u53D6\u6D88",import:"\u5BFC\u5165",importJsonHint:"\u5BFC\u5165\u7684JSON\u5185\u5BB9\u987B\u7B26\u5408\u4E0B\u8FF0\u683C\u5F0F\uFF0C\u4EE5\u4FDD\u8BC1\u987A\u5229\u5BFC\u5165.",invalidOptionsData:"\u65E0\u6548\u7684\u9009\u9879\u6570\u636E:",lastPaneCannotBeDeleted:"\u4EC5\u5269\u4E00\u4E2A\u9009\u9879\u5361\u9875\u4E0D\u53EF\u5220\u9664.",duplicateName:"\u7EC4\u4EF6\u540D\u79F0\u5DF2\u5B58\u5728: ",nameRequired:"\u7EC4\u4EF6\u540D\u79F0\u4E0D\u53EF\u4E3A\u7A7A",numberValidator:"\u6570\u5B57",letterValidator:"\u5B57\u6BCD",letterAndNumberValidator:"\u6570\u5B57\u5B57\u6BCD",mobilePhoneValidator:"\u624B\u673A\u53F7\u7801",emailValidator:"\u90AE\u7BB1",urlValidator:"\u7F51\u5740",noChineseValidator:"\u975E\u4E2D\u6587\u5B57\u7B26",chineseValidator:"\u4EC5\u4E2D\u6587\u5B57\u7B26",rowspanNotConsistentForMergeEntireRow:"\u5B58\u5728\u884C\u9AD8\u4E0D\u4E00\u81F4\u7684\u5355\u5143\u683C, \u65E0\u6CD5\u5408\u5E76\u6574\u884C.",colspanNotConsistentForMergeEntireColumn:"\u5B58\u5728\u5217\u5BBD\u4E0D\u4E00\u81F4\u7684\u5355\u5143\u683C, \u65E0\u6CD5\u5408\u5E76\u6574\u5217.",rowspanNotConsistentForDeleteEntireRow:"\u5B58\u5728\u884C\u9AD8\u4E0D\u4E00\u81F4\u7684\u5355\u5143\u683C, \u4E0D\u53EF\u5220\u9664\u6574\u884C.",colspanNotConsistentForDeleteEntireColumn:"\u5B58\u5728\u5217\u5BBD\u4E0D\u4E00\u81F4\u7684\u5355\u5143\u683C, \u4E0D\u53EF\u5220\u9664\u6574\u5217.",lastColCannotBeDeleted:"\u6700\u540E\u4E00\u5217\u4E0D\u53EF\u5220\u9664.",lastRowCannotBeDeleted:"\u6700\u540E\u4E00\u884C\u4E0D\u53EF\u5220\u9664."},toolbar:{undoHint:"\u64A4\u9500",redoHint:"\u91CD\u505A",pcLayout:"PC",padLayout:"Pad",mobileLayout:"H5",nodeTreeHint:"\u7EC4\u4EF6\u5C42\u6B21\u7ED3\u6784\u6811",nodeTreeTitle:"\u7EC4\u4EF6\u5C42\u6B21\u7ED3\u6784\u6811",clear:"\u6E05\u7A7A",preview:"\u9884\u89C8",importJson:"\u5BFC\u5165JSON",exportJson:"\u5BFC\u51FAJSON",exportCode:"\u5BFC\u51FA\u4EE3\u7801",generateCode:"\u751F\u6210\u4EE3\u7801",generateSFC:"\u751F\u6210SFC"},setting:{basicSetting:"\u57FA\u672C\u5C5E\u6027",attributeSetting:"\u5C5E\u6027\u8BBE\u7F6E",commonSetting:"\u5E38\u89C1\u5C5E\u6027",advancedSetting:"\u9AD8\u7EA7\u5C5E\u6027",eventSetting:"\u4E8B\u4EF6\u5C5E\u6027",uniqueName:"\u552F\u4E00\u540D\u79F0",editNameHelp:"\u4FEE\u6539\u540D\u79F0\u540E\u9700\u6309\u56DE\u8F66\u786E\u8BA4",label:"\u6807\u7B7E",displayType:"\u663E\u793A\u7C7B\u578B",defaultValue:"\u9ED8\u8BA4\u503C",placeholder:"\u5360\u4F4D\u5185\u5BB9",startPlaceholder:"\u8D77\u59CB\u5360\u4F4D\u5185\u5BB9",endPlaceholder:"\u622A\u6B62\u5360\u4F4D\u5185\u5BB9",widgetColumnWidth:"\u7EC4\u4EF6\u5217\u5BBD",widgetSize:"\u7EC4\u4EF6\u5927\u5C0F",fontSize:"\u5B57\u4F53\u5927\u5C0F",textAlign:"\u6587\u5B57\u5BF9\u9F50",autoFullWidth:"\u81EA\u52A8\u62C9\u4F38\u5BBD\u5EA6",showStops:"\u663E\u793A\u95F4\u65AD\u70B9",displayStyle:"\u663E\u793A\u6837\u5F0F",inlineLayout:"\u884C\u5185",blockLayout:"\u5757",buttonStyle:"\u663E\u793A\u4E3A\u6309\u94AE",border:"\u5E26\u6709\u8FB9\u6846",labelWidth:"\u6807\u7B7E\u5BBD\u5EA6",rows:"\u884C\u6570",labelHidden:"\u9690\u85CF\u5B57\u6BB5\u6807\u7B7E",required:"\u5FC5\u586B\u5B57\u6BB5",requiredHint:"\u5FC5\u586B\u6821\u9A8C\u63D0\u793A",validation:"\u5B57\u6BB5\u6821\u9A8C",validationHelp:"\u652F\u6301\u8F93\u5165\u6B63\u5219\u8868\u8FBE\u5F0F",validationHint:"\u6821\u9A8C\u5931\u8D25\u63D0\u793A",readonly:"\u53EA\u8BFB",disabled:"\u7981\u7528",hidden:"\u9690\u85CF",textContent:"\u9759\u6001\u6587\u5B57",preWrap:"\u81EA\u52A8\u6362\u884C",htmlContent:"HTML",clearable:"\u53EF\u6E05\u9664",editable:"\u53EF\u8F93\u5165",format:"\u663E\u793A\u683C\u5F0F",valueFormat:"\u7ED1\u5B9A\u503C\u683C\u5F0F",showPassword:"\u53EF\u663E\u793A\u5BC6\u7801",filterable:"\u53EF\u641C\u7D22\u9009\u9879",allowCreate:"\u5141\u8BB8\u521B\u5EFA\u9009\u9879",remote:"\u53EF\u8FDC\u7A0B\u641C\u7D22",automaticDropdown:"\u81EA\u52A8\u5F39\u51FA\u9009\u9879",multiple:"\u9009\u9879\u53EF\u591A\u9009",multipleLimit:"\u591A\u9009\u6570\u91CF\u9650\u5236",checkStrictly:"\u4EFB\u610F\u7EA7\u8282\u70B9\u53EF\u9009",showAllLevels:"\u663E\u793A\u5B8C\u6574\u8DEF\u5F84",contentPosition:"\u6587\u5B57\u4F4D\u7F6E",plain:"\u6734\u7D20\u6309\u94AE",round:"\u5706\u89D2\u6309\u94AE",circle:"\u5706\u5F62\u6309\u94AE",icon:"\u56FE\u6807",optionsSetting:"\u9009\u9879\u8BBE\u7F6E",addOption:"\u589E\u52A0\u9009\u9879",importOptions:"\u5BFC\u5165\u9009\u9879",resetDefault:"\u91CD\u8BBE\u9009\u4E2D\u9879",uploadSetting:"\u4E0A\u4F20\u53C2\u6570\u8BBE\u7F6E",uploadURL:"\u4E0A\u4F20\u5730\u5740",uploadTip:"\u4E0A\u4F20\u63D0\u793A\u5185\u5BB9",withCredentials:"\u53D1\u9001cookie\u51ED\u8BC1",multipleSelect:"\u6587\u4EF6\u53EF\u591A\u9009",showFileList:"\u663E\u793A\u6587\u4EF6\u5217\u8868",limit:"\u6700\u5927\u4E0A\u4F20\u6570\u91CF",fileMaxSize:"\u6587\u4EF6\u5927\u5C0F\u9650\u5236(MB)",fileTypes:"\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B",fileTypesHelp:"\u652F\u6301\u6DFB\u52A0\u5176\u4ED6\u6587\u4EF6\u7C7B\u578B",headers:"\u4E0A\u4F20\u8BF7\u6C42\u5934",cellWidth:"\u5BBD\u5EA6",cellHeight:"\u9AD8\u5EA6",wordBreak:"\u6587\u5B57\u81EA\u52A8\u6362\u884C",gridColHeight:"\u6805\u683C\u5217\u7EDF\u4E00\u9AD8\u5EA6(px)",gutter:"\u6805\u683C\u95F4\u9694(px)",columnSetting:"\u6805\u683C\u5C5E\u6027\u8BBE\u7F6E",colsOfGrid:"\u5F53\u524D\u6805\u683C\u5217:",colSpanTitle:"\u6805\u683C\u5BBD\u5EA6",colOffsetTitle:"\u5DE6\u4FA7\u95F4\u9694\u683C\u6570",colPushTitle:"\u53F3\u79FB\u6805\u683C\u6570",colPullTitle:"\u5DE6\u79FB\u6805\u683C\u6570",addColumn:"\u589E\u52A0\u6805\u683C",responsive:"\u54CD\u5E94\u5F0F\u5E03\u5C40",tabPaneSetting:"\u9009\u9879\u5361\u8BBE\u7F6E",addTabPane:"\u589E\u52A0\u9009\u9879\u5361\u9875",paneActive:"\u6FC0\u6D3B",customLabelIcon:"\u5B9A\u5236\u5B57\u6BB5\u6807\u7B7E",labelIconClass:"\u6807\u7B7EIcon\u6837\u5F0F",labelIconPosition:"\u6807\u7B7EIcon\u4F4D\u7F6E",labelTooltip:"\u6807\u7B7E\u6587\u5B57\u63D0\u793A",minValue:"\u6700\u5C0F\u503C",maxValue:"\u6700\u5927\u503C",precision:"\u7CBE\u5EA6",step:"\u589E\u51CF\u6B65\u957F",controlsPosition:"\u63A7\u5236\u6309\u94AE\u4F4D\u7F6E",minLength:"\u6700\u5C0F\u957F\u5EA6",maxLength:"\u6700\u5927\u957F\u5EA6",showWordLimit:"\u663E\u793A\u5B57\u6570\u7EDF\u8BA1",prefixIcon:"\u5934\u90E8Icon",suffixIcon:"\u5C3E\u90E8Icon",inputButton:"\u8F93\u5165\u6846\u6309\u94AE\u8BBE\u7F6E",appendButton:"\u6DFB\u52A0\u540E\u7F6E\u6309\u94AE",appendButtonDisabled:"\u540E\u7F6E\u6309\u94AE\u7981\u7528",appendButtonIcon:"\u540E\u7F6E\u6309\u94AEIcon",buttonIcon:"\u6309\u94AEIcon",switchWidth:"\u5F00\u5173\u5BBD\u5EA6\uFF08\u50CF\u7D20\uFF09",activeText:"\u5F00\u542F\u65F6\u6587\u5B57\u63CF\u8FF0",inactiveText:"\u5173\u95ED\u65F6\u6587\u5B57\u63CF\u8FF0",activeColor:"\u5F00\u542F\u65F6\u80CC\u666F\u8272",inactiveColor:"\u5173\u95ED\u65F6\u80CC\u666F\u8272",maxStars:"\u6700\u5927\u8BC4\u5206\u503C",lowThreshold:"\u4F4E\u5206\u754C\u9650\u503C",highThreshold:"\u9AD8\u5206\u754C\u9650\u503C",allowHalf:"\u5141\u8BB8\u534A\u9009",showText:"\u663E\u793A\u8F85\u52A9\u6587\u5B57",showScore:"\u663E\u793A\u5F53\u524D\u5206\u6570",range:"\u662F\u5426\u4E3A\u8303\u56F4\u9009\u62E9",vertical:"\u662F\u5426\u7AD6\u5411\u663E\u793A",showBlankRow:"\u9ED8\u8BA4\u663E\u793A\u65B0\u884C",showRowNumber:"\u663E\u793A\u884C\u53F7",contentHeight:"\u5185\u5BB9\u533A\u9AD8\u5EA6",insertColumnToLeft:"\u63D2\u5165\u5DE6\u4FA7\u5217",insertColumnToRight:"\u63D2\u5165\u53F3\u4FA7\u5217",insertRowAbove:"\u63D2\u5165\u4E0A\u65B9\u884C",insertRowBelow:"\u63D2\u5165\u4E0B\u65B9\u884C",mergeLeftColumn:"\u5408\u5E76\u5DE6\u4FA7\u5355\u5143\u683C",mergeRightColumn:"\u5408\u5E76\u53F3\u4FA7\u5355\u5143\u683C",mergeEntireRow:"\u5408\u5E76\u6574\u884C",mergeRowAbove:"\u5408\u5E76\u4E0A\u65B9\u5355\u5143\u683C",mergeRowBelow:"\u5408\u5E76\u4E0B\u65B9\u5355\u5143\u683C",mergeEntireColumn:"\u5408\u5E76\u6574\u5217",undoMergeCol:"\u64A4\u9500\u5217\u5408\u5E76",undoMergeRow:"\u64A4\u9500\u884C\u5408\u5E76",deleteEntireCol:"\u5220\u9664\u6574\u5217",deleteEntireRow:"\u5220\u9664\u6574\u884C",widgetName:"\u7EC4\u4EF6\u552F\u4E00\u540D\u79F0",formSize:"\u5168\u5C40\u7EC4\u4EF6\u5927\u5C0F",labelPosition:"\u6807\u7B7E\u4F4D\u7F6E",topPosition:"\u9876\u90E8",leftPosition:"\u5DE6\u8FB9",labelAlign:"\u5B57\u6BB5\u6807\u7B7E\u5BF9\u9F50",leftAlign:"\u5C45\u5DE6",centerAlign:"\u5C45\u4E2D",rightAlign:"\u5C45\u53F3",formCss:"\u8868\u5355\u5168\u5C40CSS",addCss:"\u7F16\u5199CSS",customClass:"\u81EA\u5B9A\u4E49CSS\u6837\u5F0F",globalFunctions:"\u8868\u5355\u5168\u5C40\u51FD\u6570",addEventHandler:"\u7F16\u5199\u4EE3\u7801",editWidgetEventHandler:"\u7EC4\u4EF6\u4E8B\u4EF6\u5904\u7406",editFormEventHandler:"\u8868\u5355\u4E8B\u4EF6\u5904\u7406",formSFCSetting:"\u751F\u6210SFC\u8BBE\u7F6E",formModelName:"\u6570\u636E\u5BF9\u8C61\u540D\u79F0",formRefName:"\u5F15\u7528\u540D\u79F0",formRulesName:"\u9A8C\u8BC1\u89C4\u5219\u540D\u79F0",syntaxCheckWarning:"JS\u4EE3\u7801\u5B58\u5728\u8BED\u6CD5\u9519\u8BEF\uFF0C\u8BF7\u4ED4\u7EC6\u68C0\u67E5\uFF01"}}},enLocale_render={render:{hint:{prompt:"Prompt",confirm:"OK",cancel:"Cancel",selectPlaceholder:"Pick some item",timePlaceholder:"Select time",startTimePlaceholder:"Start time",endTimePlaceholder:"End time",datePlaceholder:"Select date",startDatePlaceholder:"Start date",endDatePlaceholder:"End date",blankCellContent:"--",uploadError:"Upload error: ",uploadExceed:"The maximum number(${uploadLimit}) of file uploads has been exceeded.",unsupportedFileType:"Unsupported format: ",fileSizeExceed:"File size out of limit: ",refNotFound:"Ref not found: ",fieldRequired:"Input value should be not null.",invalidNumber:"Invalid number format",selectFile:" File...",downloadFile:"Download",removeFile:"Remove",validationFailed:"Form validation failed",subFormAction:"Action",subFormAddAction:"Add",subFormAddActionHint:"add new row",insertSubFormRow:"insert new row",deleteSubFormRow:"delete this row",nonSubFormType:"The type of widget don't match sub-form"}}},zhLocale_render={render:{hint:{prompt:"\u63D0\u793A",confirm:"\u786E\u5B9A",cancel:"\u53D6\u6D88",selectPlaceholder:"\u8BF7\u9009\u62E9",timePlaceholder:"\u9009\u62E9\u65F6\u95F4",startTimePlaceholder:"\u8D77\u59CB\u65F6\u95F4",endTimePlaceholder:"\u622A\u6B62\u65F6\u95F4",datePlaceholder:"\u9009\u62E9\u65E5\u671F",startDatePlaceholder:"\u8D77\u59CB\u65E5\u671F",endDatePlaceholder:"\u622A\u6B62\u65E5\u671F",blankCellContent:"--",uploadError:"\u4E0A\u4F20\u9519\u8BEF: ",uploadExceed:"\u6700\u5927\u4E0A\u4F20\u6570\u91CF(${uploadLimit})\u5DF2\u8D85\u51FA.",unsupportedFileType:"\u4E0D\u652F\u6301\u683C\u5F0F: ",fileSizeExceed:"\u6587\u4EF6\u5927\u5C0F\u5DF2\u8D85\u51FA: ",refNotFound:"\u7EC4\u4EF6\u672A\u627E\u5230: ",fieldRequired:"\u5B57\u6BB5\u503C\u4E0D\u53EF\u4E3A\u7A7A",invalidNumber:"\u6570\u636E\u683C\u5F0F\u9519\u8BEF",selectFile:" \u9009\u62E9\u6587\u4EF6",downloadFile:"\u4E0B\u8F7D",removeFile:"\u79FB\u9664",validationFailed:"\u8868\u5355\u6570\u636E\u6821\u9A8C\u5931\u8D25",subFormAction:"\u64CD\u4F5C",subFormAddAction:"\u65B0\u589E",subFormAddActionHint:"\u65B0\u589E\u884C",insertSubFormRow:"\u63D2\u5165\u884C",deleteSubFormRow:"\u5220\u9664\u884C",nonSubFormType:"\u7EC4\u4EF6\u7C7B\u578B\u4E0D\u662F\u5B50\u8868\u5355"}}},enLocale_extension={extension:{widgetLabel:{card:"Card",alert:"Alert"},setting:{cardFolded:"Folded",cardShowFold:"Show Fold",cardWidth:"Width Of Card",cardShadow:"Shadow",alertTitle:"Title",alertType:"Type",description:"Description",closable:"Closable",closeText:"Text On Close Btn",center:"Center",showIcon:"Show Icon",effect:"Effect"}}},zhLocale_extension={extension:{widgetLabel:{card:"\u5361\u7247",alert:"\u63D0\u793A"},setting:{cardFolded:"\u662F\u5426\u6536\u8D77",cardShowFold:"\u663E\u793A\u6298\u53E0\u6309\u94AE",cardWidth:"\u5361\u7247\u5BBD\u5EA6",cardShadow:"\u663E\u793A\u9634\u5F71",alertTitle:"\u6807\u9898",alertType:"\u7C7B\u578B",description:"\u8F85\u52A9\u6027\u6587\u5B57",closable:"\u662F\u5426\u53EF\u5173\u95ED",closeText:"\u5173\u95ED\u6309\u94AE\u6587\u5B57",center:"\u6587\u5B57\u5C45\u4E2D",showIcon:"\u663E\u793A\u56FE\u6807",effect:"\u663E\u793A\u6548\u679C"}}};const langResources={"en-US":Se(Se(Se({something:{}},enLocale),enLocale_render),enLocale_extension),"zh-CN":Se(Se(Se({something:{}},zhLocale),zhLocale_render),zhLocale_extension)},i18n=createI18n({locale:localStorage.getItem("v_form_locale")||"zh-CN",messages:langResources}),changeLocale=function(t){i18n.setLang(t),localStorage.setItem("v_form_locale",t)},translate=function(t){return i18n.$st(t)};var i18n$1={methods:{i18nt(t){return i18n.$st(t)},i18n2t(t,d){return i18n.$st2(t,d)}}},index_vue_vue_type_style_index_0_scoped_true_lang$7="",_export_sfc=(t,d)=>{const e=t.__vccOpts||t;for(const[p,m]of d)e[p]=m;return e};const _sfc_main$31={name:"SvgIcon",props:{iconClass:{type:String,required:!0},className:{type:String},title:{type:String,default:""}},computed:{iconName(){return`#icon-${this.iconClass}`},svgClass(){return this.className?"svg-icon "+this.className:"svg-icon"}}},_hoisted_1$x=["xlink:href"],_hoisted_2$j={key:0};function _sfc_render$31(t,d,e,p,m,g){return require$$0$1.openBlock(),require$$0$1.createElementBlock("svg",{class:require$$0$1.normalizeClass(g.svgClass),"aria-hidden":"true"},[require$$0$1.createElementVNode("use",{"xlink:href":g.iconName},null,8,_hoisted_1$x),e.title?(require$$0$1.openBlock(),require$$0$1.createElementBlock("title",_hoisted_2$j,require$$0$1.toDisplayString(e.title),1)):require$$0$1.createCommentVNode("",!0)],2)}var SvgIcon=_export_sfc(_sfc_main$31,[["render",_sfc_render$31],["__scopeId","data-v-8002b89a"]]),index_vue_vue_type_style_index_0_scoped_true_lang$6="";const _sfc_main$30={name:"FieldPanel",mixins:[i18n$1],components:{SvgIcon},props:{designer:Object},inject:["getBannedWidgets","getDesignerConfig"],data(){return{designerConfig:this.getDesignerConfig(),firstTab:"componentLib",scrollerHeight:0,activeNames:["1","2","3","4"],containers:[],basicFields:[],advancedFields:[],customFields:[],formTemplates}},computed:{},created(){this.loadWidgets()},mounted(){this.scrollerHeight=window.innerHeight-56+"px",addWindowResizeHandler(()=>{this.$nextTick(()=>{this.scrollerHeight=window.innerHeight-56+"px"})})},methods:{isBanned(t){return this.getBannedWidgets().indexOf(t)>-1},showFormTemplates(){return this.designerConfig.formTemplates===void 0?!0:!!this.designerConfig.formTemplates},loadWidgets(){this.containers=containers.map(t=>ke(Se({key:generateId()},t),{displayName:this.i18n2t(`designer.widgetLabel.${t.type}`,`extension.widgetLabel.${t.type}`)})).filter(t=>!t.internal&&!this.isBanned(t.type)),this.basicFields=basicFields.map(t=>ke(Se({key:generateId()},t),{displayName:this.i18n2t(`designer.widgetLabel.${t.type}`,`extension.widgetLabel.${t.type}`)})).filter(t=>!this.isBanned(t.type)),this.advancedFields=advancedFields.map(t=>ke(Se({key:generateId()},t),{displayName:this.i18n2t(`designer.widgetLabel.${t.type}`,`extension.widgetLabel.${t.type}`)})).filter(t=>!this.isBanned(t.type)),this.customFields=customFields.map(t=>ke(Se({key:generateId()},t),{displayName:this.i18n2t(`designer.widgetLabel.${t.type}`,`extension.widgetLabel.${t.type}`)})).filter(t=>!this.isBanned(t.type))},handleContainerWidgetClone(t){return this.designer.copyNewContainerWidget(t)},handleFieldWidgetClone(t){return this.designer.copyNewFieldWidget(t)},checkContainerMove(t){return this.designer.checkWidgetMove(t)},checkFieldMove(t){return this.designer.checkFieldMove(t)},onContainerDragEnd(t){},addContainerByDbClick(t){this.designer.addContainerByDbClick(t)},addFieldByDbClick(t){this.designer.addFieldByDbClick(t)},loadFormTemplate(t){this.$confirm(this.i18nt("designer.hint.loadFormTemplateHint"),this.i18nt("render.hint.prompt"),{confirmButtonText:this.i18nt("render.hint.confirm"),cancelButtonText:this.i18nt("render.hint.cancel")}).then(()=>{axios.get(t).then(d=>{let e=!1;typeof d.data=="string"?e=this.designer.loadFormJson(JSON.parse(d.data)):d.data.constructor===Object&&(e=this.designer.loadFormJson(d.data)),e&&this.designer.emitHistoryChange(),this.$message.success(this.i18nt("designer.hint.loadFormTemplateSuccess"))}).catch(d=>{this.$message.error(this.i18nt("designer.hint.loadFormTemplateFailed")+":"+d)})}).catch(d=>{console.error(d)})}}},_hoisted_1$w={class:"panel-container"},_hoisted_2$i=["title","onDblclick"],_hoisted_3$e=["title","onDblclick"],_hoisted_4$e=["title","onDblclick"],_hoisted_5$c=["title","onDblclick"],_hoisted_6$c=["src"],_hoisted_7$9=["src"],_hoisted_8$7={class:"bottom clear-fix"},_hoisted_9$3={class:"ft-title"};function _sfc_render$30(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("svg-icon"),c=require$$0$1.resolveComponent("draggable"),i=require$$0$1.resolveComponent("el-collapse-item"),f=require$$0$1.resolveComponent("el-collapse"),n=require$$0$1.resolveComponent("el-tab-pane"),o=require$$0$1.resolveComponent("el-popover"),r=require$$0$1.resolveComponent("el-button"),l=require$$0$1.resolveComponent("el-card"),a=require$$0$1.resolveComponent("el-tabs"),u=require$$0$1.resolveComponent("el-scrollbar");return require$$0$1.openBlock(),require$$0$1.createBlock(u,{class:"side-scroll-bar",style:require$$0$1.normalizeStyle({height:m.scrollerHeight})},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",_hoisted_1$w,[require$$0$1.createVNode(a,{modelValue:m.firstTab,"onUpdate:modelValue":d[1]||(d[1]=h=>m.firstTab=h),class:"no-bottom-margin indent-left-margin"},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(n,{name:"componentLib"},{label:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("span",null,[require$$0$1.createVNode(s,{"icon-class":"el-set-up"}),require$$0$1.createTextVNode(" "+require$$0$1.toDisplayString(t.i18nt("designer.componentLib")),1)])]),default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(f,{modelValue:m.activeNames,"onUpdate:modelValue":d[0]||(d[0]=h=>m.activeNames=h),class:"widget-collapse"},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(i,{name:"1",title:t.i18nt("designer.containerTitle")},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(c,{tag:"ul",list:m.containers,"item-key":"key",group:{name:"dragGroup",pull:"clone",put:!1},clone:g.handleContainerWidgetClone,"ghost-class":"ghost",sort:!1,move:g.checkContainerMove,onEnd:g.onContainerDragEnd},{item:require$$0$1.withCtx(({element:h})=>[require$$0$1.createElementVNode("li",{class:"container-widget-item",title:h.displayName,onDblclick:$=>g.addContainerByDbClick(h)},[require$$0$1.createElementVNode("span",null,[require$$0$1.createVNode(s,{"icon-class":h.icon,"class-name":"color-svg-icon"},null,8,["icon-class"]),require$$0$1.createTextVNode(" "+require$$0$1.toDisplayString(t.i18n2t(`designer.widgetLabel.${h.type}`,`extension.widgetLabel.${h.type}`)),1)])],40,_hoisted_2$i)]),_:1},8,["list","clone","move","onEnd"])]),_:1},8,["title"]),require$$0$1.createVNode(i,{name:"2",title:t.i18nt("designer.basicFieldTitle")},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(c,{tag:"ul",list:m.basicFields,"item-key":"key",group:{name:"dragGroup",pull:"clone",put:!1},move:g.checkFieldMove,clone:g.handleFieldWidgetClone,"ghost-class":"ghost",sort:!1},{item:require$$0$1.withCtx(({element:h})=>[require$$0$1.createElementVNode("li",{class:"field-widget-item",title:h.displayName,onDblclick:$=>g.addFieldByDbClick(h)},[require$$0$1.createElementVNode("span",null,[require$$0$1.createVNode(s,{"icon-class":h.icon,"class-name":"color-svg-icon"},null,8,["icon-class"]),require$$0$1.createTextVNode(" "+require$$0$1.toDisplayString(t.i18n2t(`designer.widgetLabel.${h.type}`,`extension.widgetLabel.${h.type}`)),1)])],40,_hoisted_3$e)]),_:1},8,["list","move","clone"])]),_:1},8,["title"]),require$$0$1.createVNode(i,{name:"3",title:t.i18nt("designer.advancedFieldTitle")},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(c,{tag:"ul",list:m.advancedFields,"item-key":"key",group:{name:"dragGroup",pull:"clone",put:!1},move:g.checkFieldMove,clone:g.handleFieldWidgetClone,"ghost-class":"ghost",sort:!1},{item:require$$0$1.withCtx(({element:h})=>[require$$0$1.createElementVNode("li",{class:"field-widget-item",title:h.displayName,onDblclick:$=>g.addFieldByDbClick(h)},[require$$0$1.createElementVNode("span",null,[require$$0$1.createVNode(s,{"icon-class":h.icon,"class-name":"color-svg-icon"},null,8,["icon-class"]),require$$0$1.createTextVNode(" "+require$$0$1.toDisplayString(t.i18n2t(`designer.widgetLabel.${h.type}`,`extension.widgetLabel.${h.type}`)),1)])],40,_hoisted_4$e)]),_:1},8,["list","move","clone"])]),_:1},8,["title"]),require$$0$1.createVNode(i,{name:"4",title:t.i18nt("designer.customFieldTitle")},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(c,{tag:"ul",list:m.customFields,"item-key":"key",group:{name:"dragGroup",pull:"clone",put:!1},move:g.checkFieldMove,clone:g.handleFieldWidgetClone,"ghost-class":"ghost",sort:!1},{item:require$$0$1.withCtx(({element:h})=>[require$$0$1.createElementVNode("li",{class:"field-widget-item",title:h.displayName,onDblclick:$=>g.addFieldByDbClick(h)},[require$$0$1.createElementVNode("span",null,[require$$0$1.createVNode(s,{"icon-class":h.icon,"class-name":"color-svg-icon"},null,8,["icon-class"]),require$$0$1.createTextVNode(" "+require$$0$1.toDisplayString(t.i18n2t(`designer.widgetLabel.${h.type}`,`extension.widgetLabel.${h.type}`)),1)])],40,_hoisted_5$c)]),_:1},8,["list","move","clone"])]),_:1},8,["title"])]),_:1},8,["modelValue"])]),_:1}),g.showFormTemplates()?(require$$0$1.openBlock(),require$$0$1.createBlock(n,{key:0,name:"formLib",style:{padding:"8px"}},{label:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("span",null,[require$$0$1.createVNode(s,{"icon-class":"el-form-template"}),require$$0$1.createTextVNode(" "+require$$0$1.toDisplayString(t.i18nt("designer.formLib")),1)])]),default:require$$0$1.withCtx(()=>[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(m.formTemplates,(h,$)=>(require$$0$1.openBlock(),require$$0$1.createBlock(l,{"bord-style":{padding:"0"},shadow:"hover",class:"ft-card"},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(o,{placement:"right",trigger:"hover"},{reference:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("img",{src:h.imgUrl,style:{width:"200px"}},null,8,_hoisted_6$c)]),default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("img",{src:h.imgUrl,style:{height:"600px",width:"720px"}},null,8,_hoisted_7$9)]),_:2},1024),require$$0$1.createElementVNode("div",_hoisted_8$7,[require$$0$1.createElementVNode("span",_hoisted_9$3,"#"+require$$0$1.toDisplayString($+1)+" "+require$$0$1.toDisplayString(h.title),1),require$$0$1.createVNode(r,{link:"",type:"primary",class:"right-button",onClick:v=>g.loadFormTemplate(h.jsonUrl)},{default:require$$0$1.withCtx(()=>[require$$0$1.createTextVNode(require$$0$1.toDisplayString(t.i18nt("designer.hint.loadFormTemplate")),1)]),_:2},1032,["onClick"])])]),_:2},1024))),256))]),_:1})):require$$0$1.createCommentVNode("",!0)]),_:1},8,["modelValue"])])]),_:1},8,["style"])}var WidgetPanel=_export_sfc(_sfc_main$30,[["render",_sfc_render$30],["__scopeId","data-v-b7a1a47c"]]),emitter={data(){return{vfEvents:{}}},methods:{emit$(t,d){this.vfEvents[t]&&this.vfEvents[t].forEach(e=>{e(d)})},on$(t,d){this.vfEvents[t]=this.vfEvents[t]||[],this.vfEvents[t].push(d)},off$(t,d){if(this.vfEvents[t]){if(d==null){this.vfEvents[t].length=0;return}for(let e=0;e{if(this.widgetRefList[m].$options.componentName===d){let s=this.widgetRefList[m];s.emit$.call(s,e,p)}}),this.refList&&Object.keys(this.refList).forEach(m=>{if(this.refList[m].$options.componentName===d){let s=this.refList[m];s.emit$.call(s,e,p)}})}}};const _sfc_main$2$={name:"container-item-wrapper",props:{widget:Object},computed:{customClass(){return this.widget.options.customClass?this.widget.options.customClass.join(" "):""}}};function _sfc_render$2$(t,d,e,p,m,g){return require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{class:require$$0$1.normalizeClass(["container-wrapper",[g.customClass]])},[require$$0$1.renderSlot(t.$slots,"default")],2)}var ContainerItemWrapper=_export_sfc(_sfc_main$2$,[["render",_sfc_render$2$]]),__glob_0_0$3=Object.freeze(Object.defineProperty({__proto__:null,default:ContainerItemWrapper},Symbol.toStringTag,{value:"Module"})),refMixin={methods:{initRefList(){this.refList!==null&&!!this.widget.options.name&&(this.refList[this.widget.options.name]=this)},getWidgetRef(t,d){let e=this.refList[t];return!e&&!!d&&this.$message.error(this.i18nt("render.hint.refNotFound")+t),e},getFormRef(){return this.refList.v_form_ref},getComponentByContainer(t){return t.type==="grid"?"vf-grid-item":t.type+"-item"}}},staticContentWrapper_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2_={name:"static-content-wrapper",mixins:[i18n$1],components:{SvgIcon},props:{field:Object,designer:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designState:{type:Boolean,default:!1},displayStyle:{type:String,default:"block"},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},computed:{selected(){return!!this.designer&&this.field.id===this.designer.selectedId},customClass(){return this.field.options.customClass?this.field.options.customClass.join(" "):""}},methods:{selectField(t){this.designer&&(this.designer.setSelected(t),this.designer.emitEvent("field-selected",this.parentWidget))},selectParentWidget(){this.parentWidget?this.designer.setSelected(this.parentWidget):this.designer.clearSelected()},moveUpWidget(){this.designer.moveUpWidget(this.parentList,this.indexOfParentList),this.designer.emitHistoryChange()},moveDownWidget(){this.designer.moveDownWidget(this.parentList,this.indexOfParentList),this.designer.emitHistoryChange()},removeFieldWidget(){if(this.parentList){const t=this.designer.selectedWidgetName;let d=null;this.parentList.length===1?this.parentWidget&&(d=this.parentWidget):this.parentList.length===1+this.indexOfParentList?d=this.parentList[this.indexOfParentList-1]:d=this.parentList[this.indexOfParentList+1],this.$nextTick(()=>{this.parentList.splice(this.indexOfParentList,1),this.designer.setSelected(d),this.designer.formWidget.deleteWidgetRef(t),this.designer.emitHistoryChange()})}}}},_hoisted_1$v={key:0,class:"field-action"},_hoisted_2$h=["title"],_hoisted_3$d=["title"],_hoisted_4$d=["title"],_hoisted_5$b=["title"],_hoisted_6$b={key:1,class:"drag-handler background-opacity"},_hoisted_7$8=["title"],_hoisted_8$6={key:0};function _sfc_render$2_(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("svg-icon");return require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{class:require$$0$1.normalizeClass(["field-wrapper",{"design-time-bottom-margin":!!this.designer}]),style:require$$0$1.normalizeStyle({display:e.displayStyle})},[!e.field.options.hidden||e.designState===!0?(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{key:0,class:require$$0$1.normalizeClass(["static-content-item",[g.selected?"selected":"",g.customClass]]),style:require$$0$1.normalizeStyle({display:e.displayStyle}),onClick:d[0]||(d[0]=require$$0$1.withModifiers(c=>g.selectField(e.field),["stop"]))},[require$$0$1.renderSlot(t.$slots,"default",{},void 0,!0)],6)):require$$0$1.createCommentVNode("",!0),this.designer?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},[e.designer.selectedId===e.field.id?(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",_hoisted_1$v,[require$$0$1.createElementVNode("i",{title:t.i18nt("designer.hint.selectParentWidget"),onClick:d[1]||(d[1]=require$$0$1.withModifiers(c=>g.selectParentWidget(e.field),["stop"]))},[require$$0$1.createVNode(s,{"icon-class":"el-back"})],8,_hoisted_2$h),!!e.parentList&&e.parentList.length>1?(require$$0$1.openBlock(),require$$0$1.createElementBlock("i",{key:0,title:t.i18nt("designer.hint.moveUpWidget"),onClick:d[2]||(d[2]=require$$0$1.withModifiers(c=>g.moveUpWidget(e.field),["stop"]))},[require$$0$1.createVNode(s,{"icon-class":"el-move-up"})],8,_hoisted_3$d)):require$$0$1.createCommentVNode("",!0),!!e.parentList&&e.parentList.length>1?(require$$0$1.openBlock(),require$$0$1.createElementBlock("i",{key:1,title:t.i18nt("designer.hint.moveDownWidget"),onClick:d[3]||(d[3]=require$$0$1.withModifiers(c=>g.moveDownWidget(e.field),["stop"]))},[require$$0$1.createVNode(s,{"icon-class":"el-move-down"})],8,_hoisted_4$d)):require$$0$1.createCommentVNode("",!0),require$$0$1.createElementVNode("i",{title:t.i18nt("designer.hint.remove"),onClick:d[4]||(d[4]=require$$0$1.withModifiers((...c)=>g.removeFieldWidget&&g.removeFieldWidget(...c),["stop"]))},[require$$0$1.createVNode(s,{"icon-class":"el-delete"})],8,_hoisted_5$b)])):require$$0$1.createCommentVNode("",!0),e.designer.selectedId===e.field.id?(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",_hoisted_6$b,[require$$0$1.createElementVNode("i",{title:t.i18nt("designer.hint.dragHandler")},[require$$0$1.createVNode(s,{"icon-class":"el-drag-move"})],8,_hoisted_7$8),require$$0$1.createElementVNode("i",null,require$$0$1.toDisplayString(t.i18n2t(`designer.widgetLabel.${e.field.type}`,`extension.widgetLabel.${e.field.type}`)),1),e.field.options.hidden===!0?(require$$0$1.openBlock(),require$$0$1.createElementBlock("i",_hoisted_8$6,[require$$0$1.createVNode(s,{"icon-class":"el-hide"})])):require$$0$1.createCommentVNode("",!0)])):require$$0$1.createCommentVNode("",!0)],64)):require$$0$1.createCommentVNode("",!0)],6)}var StaticContentWrapper=_export_sfc(_sfc_main$2_,[["render",_sfc_render$2_],["__scopeId","data-v-244033de"]]),__glob_0_19$1=Object.freeze(Object.defineProperty({__proto__:null,default:StaticContentWrapper},Symbol.toStringTag,{value:"Module"}));const getRegExp=function(t){return{number:"/^[-]?\\d+(\\.\\d+)?$/",letter:"/^[A-Za-z]+$/",letterAndNumber:"/^[A-Za-z0-9]+$/",mobilePhone:"/^[1][3-9][0-9]{9}$/",letterStartNumberIncluded:"/^[A-Za-z]+[A-Za-z\\d]*$/",noChinese:"/^[^\u4E00-\u9FA5]+$/",chinese:"/^[\u4E00-\u9FA5]+$/",email:"/^([-_A-Za-z0-9.]+)@([_A-Za-z0-9]+\\.)+[A-Za-z0-9]{2,3}$/",url:"/^([hH][tT]{2}[pP]:\\/\\/|[hH][tT]{2}[pP][sS]:\\/\\/)(([A-Za-z0-9-~]+)\\.)+([A-Za-z0-9-~\\/])+$/"}[t]},validateFn=function(validatorName,rule,value,callback,defaultErrorMsg){if(isNull(value)||value.length<=0){callback();return}const reg=eval(getRegExp(validatorName));if(reg.test(value))callback();else{let t=rule.errorMsg||defaultErrorMsg;callback(new Error(t))}},FormValidators={number(t,d,e){validateFn("number",t,d,e,"["+t.label+"]\u5305\u542B\u975E\u6570\u5B57\u5B57\u7B26")},letter(t,d,e){validateFn("letter",t,d,e,"["+t.label+"]\u5305\u542B\u975E\u5B57\u6BCD\u5B57\u7B26")},letterAndNumber(t,d,e){validateFn("letterAndNumber",t,d,e,"["+t.label+"]\u53EA\u80FD\u8F93\u5165\u5B57\u6BCD\u6216\u6570\u5B57")},mobilePhone(t,d,e){validateFn("mobilePhone",t,d,e,"["+t.label+"]\u624B\u673A\u53F7\u7801\u683C\u5F0F\u6709\u8BEF")},noBlankStart(t,d,e){},noBlankEnd(t,d,e){},letterStartNumberIncluded(t,d,e){validateFn("letterStartNumberIncluded",t,d,e,"["+t.label+"]\u5FC5\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u53EF\u5305\u542B\u6570\u5B57")},noChinese(t,d,e){validateFn("noChinese",t,d,e,"["+t.label+"]\u4E0D\u53EF\u8F93\u5165\u4E2D\u6587\u5B57\u7B26")},chinese(t,d,e){validateFn("chinese",t,d,e,"["+t.label+"]\u53EA\u80FD\u8F93\u5165\u4E2D\u6587\u5B57\u7B26")},email(t,d,e){validateFn("email",t,d,e,"["+t.label+"]\u90AE\u7BB1\u683C\u5F0F\u6709\u8BEF")},url(t,d,e){validateFn("url",t,d,e,"["+t.label+"]URL\u683C\u5F0F\u6709\u8BEF")},regExp(rule,value,callback){if(isNull(value)||value.length<=0){callback();return}const pattern=eval(rule.regExp);if(pattern.test(value))callback();else{let t=rule.errorMsg||"["+rule.label+"]invalid value";callback(new Error(t))}}};function mitt(t){return{all:t=t||new Map,on:function(d,e){var p=t.get(d);p?p.push(e):t.set(d,[e])},off:function(d,e){var p=t.get(d);p&&(e?p.splice(p.indexOf(e)>>>0,1):t.set(d,[]))},emit:function(d,e){var p=t.get(d);p&&p.slice().map(function(m){m(e)}),(p=t.get("*"))&&p.slice().map(function(m){m(d,e)})}}}const instance=mitt(),eventBus={};eventBus.$on=instance.on,eventBus.$off=instance.off,eventBus.$emit=instance.emit;var fieldMixin={inject:["refList","getFormConfig","getGlobalDsv","globalOptionData","globalModel","getOptionData"],computed:{formConfig(){return this.getFormConfig()},widgetSize(){return this.field.options.size||"default"},subFormName(){return this.parentWidget?this.parentWidget.options.name:""},subFormItemFlag(){return this.parentWidget?this.parentWidget.type==="sub-form":!1},formModel:{cache:!1,get(){return this.globalModel.formModel}}},methods:{getPropName(){return this.subFormItemFlag&&!this.designState?this.subFormName+"."+this.subFormRowIndex+"."+this.field.options.name+"":this.field.options.name},initFieldModel(){if(!!this.field.formItemFlag){if(!!this.subFormItemFlag&&!this.designState){let t=this.formModel[this.subFormName];(t===void 0||t[this.subFormRowIndex]===void 0||t[this.subFormRowIndex][this.field.options.name]===void 0)&&this.field.options.defaultValue!==void 0?(this.fieldModel=this.field.options.defaultValue,t[this.subFormRowIndex][this.field.options.name]=this.field.options.defaultValue):t[this.subFormRowIndex][this.field.options.name]===void 0?(this.fieldModel=null,t[this.subFormRowIndex][this.field.options.name]=null):this.fieldModel=t[this.subFormRowIndex][this.field.options.name],setTimeout(()=>{this.handleOnChangeForSubForm(this.fieldModel,this.oldFieldValue,t,this.subFormRowId)},800),this.oldFieldValue=deepClone(this.fieldModel),this.initFileList();return}this.formModel[this.field.options.name]===void 0&&this.field.options.defaultValue!==void 0?this.fieldModel=this.field.options.defaultValue:this.formModel[this.field.options.name]===void 0?this.formModel[this.field.options.name]=null:this.fieldModel=this.formModel[this.field.options.name],this.oldFieldValue=deepClone(this.fieldModel),this.initFileList()}},initFileList(){this.field.type!=="picture-upload"&&this.field.type!=="file-upload"||this.designState===!0||this.fieldModel&&(Array.isArray(this.fieldModel)?this.fileList=deepClone(this.fieldModel):this.fileList.splice(0,0,deepClone(this.fieldModel)))},initEventHandler(){this.on$("setFormData",t=>{console.log("formModel of globalModel----------",this.globalModel.formModel),this.subFormItemFlag||this.setValue(t[this.field.options.name])}),this.on$("field-value-changed",t=>{if(this.subFormItemFlag){let d=this.formModel[this.subFormName];this.handleOnChangeForSubForm(t[0],t[1],d,this.subFormRowId)}else this.handleOnChange(t[0],t[1])}),this.on$("reloadOptionItems",t=>{(t.length===0||t.indexOf(this.field.options.name)>-1)&&this.initOptionItems(!0)})},handleOnCreated(){this.field.options.onCreated&&new Function(this.field.options.onCreated).call(this)},handleOnMounted(){this.field.options.onMounted&&new Function(this.field.options.onMounted).call(this)},registerToRefList(t){this.refList!==null&&!!this.field.options.name&&(this.subFormItemFlag&&!this.designState?(t&&delete this.refList[t+"@row"+this.subFormRowId],this.refList[this.field.options.name+"@row"+this.subFormRowId]=this):(t&&delete this.refList[t],this.refList[this.field.options.name]=this))},unregisterFromRefList(){if(this.refList!==null&&!!this.field.options.name){let t=this.field.options.name;this.subFormItemFlag&&!this.designState?delete this.refList[t+"@row"+this.subFormRowId]:delete this.refList[t]}},initOptionItems(t){if(!this.designState&&(this.field.type==="radio"||this.field.type==="checkbox"||this.field.type==="select"||this.field.type==="cascader")){const d=this.getOptionData();!!d&&d.hasOwnProperty(this.field.options.name)&&(t?this.reloadOptions(d[this.field.options.name]):this.loadOptions(d[this.field.options.name]))}},refreshDefaultValue(){this.designState===!0&&this.field.options.defaultValue!==void 0&&(this.fieldModel=this.field.options.defaultValue)},clearFieldRules(){!this.field.formItemFlag||this.rules.splice(0,this.rules.length)},buildFieldRules(){if(!(!this.field.formItemFlag&&this.field.options.hidden)){if(this.rules.splice(0,this.rules.length),this.field.options.required&&this.rules.push({required:!0,trigger:["blur"],message:this.field.options.requiredHint||this.i18nt("render.hint.fieldRequired")}),this.field.options.validation){let t=this.field.options.validation;FormValidators[t]?this.rules.push({validator:FormValidators[t],trigger:["blur","change"],label:this.field.options.label,errorMsg:this.field.options.validationHint}):this.rules.push({validator:FormValidators.regExp,trigger:["blur","change"],regExp:t,label:this.field.options.label,errorMsg:this.field.options.validationHint})}if(this.field.options.onValidate){let t=(d,e,p)=>new Function("rule","value","callback",this.field.options.onValidate).call(this,d,e,p);this.rules.push({validator:t,trigger:["blur","change"],label:this.field.options.label})}}},disableChangeValidate(){!this.rules||this.rules.forEach(t=>{t.trigger&&t.trigger.splice(0,t.trigger.length)})},enableChangeValidate(){!this.rules||this.rules.forEach(t=>{t.trigger&&(t.trigger.push("blur"),t.trigger.push("change"))})},disableOptionOfList(t,d){!!t&&t.length>0&&t.forEach(e=>{e.value===d&&(e.disabled=!0)})},enableOptionOfList(t,d){!!t&&t.length>0&&t.forEach(e=>{e.value===d&&(e.disabled=!1)})},emitFieldDataChange(t,d){this.emit$("field-value-changed",[t,d]),this.dispatch("VFormRender","fieldChange",[this.field.options.name,t,d,this.subFormName,this.subFormRowIndex])},syncUpdateFormModel(t){if(!this.designState)if(this.subFormItemFlag){let e=(this.formModel[this.subFormName]||[{}])[this.subFormRowIndex];e&&(e[this.field.options.name]=t)}else this.formModel[this.field.options.name]=t},handleChangeEvent(t){this.syncUpdateFormModel(t),this.emitFieldDataChange(t,this.oldFieldValue),this.oldFieldValue=deepClone(t),this.dispatch("VFormRender","fieldValidation",[this.getPropName()])},handleFocusCustomEvent(t){this.oldFieldValue=deepClone(this.fieldModel),this.field.options.onFocus&&new Function("event",this.field.options.onFocus).call(this,t)},handleBlurCustomEvent(t){this.field.options.onBlur&&new Function("event",this.field.options.onBlur).call(this,t)},handleInputCustomEvent(t){this.syncUpdateFormModel(t),this.dispatch("VFormRender","fieldValidation",[this.getPropName()]),this.field.options.onInput&&new Function("value",this.field.options.onInput).call(this,t)},emitAppendButtonClick(){this.designState||(this.field.options.onAppendButtonClick?new Function(this.field.options.onAppendButtonClick).call(this):this.dispatch("VFormRender","appendButtonClick",[this]))},handleOnChange(t,d){this.field.options.onChange&&new Function("value","oldValue",this.field.options.onChange).call(this,t,d)},handleOnChangeForSubForm(t,d,e,p){this.field.options.onChange&&new Function("value","oldValue","subFormData","rowId",this.field.options.onChange).call(this,t,d,e,p)},handleButtonWidgetClick(){this.designState||(this.field.options.onClick?new Function(this.field.options.onClick).call(this):this.dispatch("VFormRender","buttonClick",[this]))},remoteQuery(t){this.field.options.onRemoteQuery&&new Function("keyword",this.field.options.onRemoteQuery).call(this,t)},getFormRef(){return this.refList.v_form_ref},getWidgetRef(t,d){let e=this.refList[t];return!e&&!!d&&this.$message.error(this.i18nt("render.hint.refNotFound")+t),e},getFieldEditor(){return this.$refs.fieldEditor},setValue(t){if(this.field.formItemFlag){let d=deepClone(this.fieldModel);this.fieldModel=t,this.initFileList(),this.syncUpdateFormModel(t),this.emitFieldDataChange(t,d)}},getValue(){return this.fieldModel},resetField(){let t=this.field.options.defaultValue;this.setValue(t),this.$nextTick(()=>{}),(this.field.type==="picture-upload"||this.field.type==="file-upload")&&(this.$refs.fieldEditor.clearFiles(),this.fileList.splice(0,this.fileList.length))},setWidgetOption(t,d){this.field.options.hasOwnProperty(t)&&(this.field.options[t]=d)},setReadonly(t){this.field.options.readonly=t},setDisabled(t){this.field.options.disabled=t},setAppendButtonVisible(t){this.field.options.appendButton=t},setAppendButtonDisabled(t){this.field.options.appendButtonDisabled=t},setHidden(t){this.field.options.hidden=t,t?this.clearFieldRules():this.buildFieldRules()},setRequired(t){this.field.options.required=t,this.buildFieldRules()},setLabel(t){this.field.options.label=t},focus(){!!this.getFieldEditor()&&!!this.getFieldEditor().focus&&this.getFieldEditor().focus()},clearSelectedOptions(){this.field.type!=="checkbox"&&this.field.type!=="radio"&&this.field.type!=="select"||(this.field.type==="checkbox"||this.field.type==="select"&&this.field.options.multiple?this.fieldModel=[]:this.fieldModel="")},loadOptions(t){this.field.options.optionItems=deepClone(t)},reloadOptions(t){this.field.options.optionItems=deepClone(t)},disableOption(t){this.disableOptionOfList(this.field.options.optionItems,t)},enableOption(t){this.enableOptionOfList(this.field.options.optionItems,t)},getOptionItems(){return this.field.options.optionItems},setUploadHeader(t,d){this.uploadHeaders[t]=d},setUploadData(t,d){this.uploadData[t]=d},setToolbar(t){this.customToolbar=t},isSubFormItem(){return this.parentWidget?this.parentWidget.type==="sub-form":!1},addCssClass(t){this.field.options.customClass?this.field.options.customClass.push(t):this.field.options.customClass=[t]},removeCssClass(t){if(!this.field.options.customClass)return;let d=-1;this.field.options.customClass.map((e,p)=>{e===t&&(d=p)}),d>-1&&this.field.options.customClass.splice(d,1)}}},buttonWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2Z={name:"button-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{StaticContentWrapper},computed:{},beforeCreate(){},created(){this.registerToRefList(),this.initEventHandler(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2Z(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-button"),c=require$$0$1.resolveComponent("static-content-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,"design-state":e.designState,"display-style":e.field.options.displayStyle,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",type:e.field.options.type,size:t.widgetSize,plain:e.field.options.plain,round:e.field.options.round,circle:e.field.options.circle,icon:e.field.options.icon,disabled:e.field.options.disabled,onClick:t.handleButtonWidgetClick},{default:require$$0$1.withCtx(()=>[require$$0$1.createTextVNode(require$$0$1.toDisplayString(e.field.options.label),1)]),_:1},8,["type","size","plain","round","circle","icon","disabled","onClick"])]),_:1},8,["designer","field","design-state","display-style","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var buttonWidget=_export_sfc(_sfc_main$2Z,[["render",_sfc_render$2Z],["__scopeId","data-v-3784bbc2"]]),__glob_0_0$2=Object.freeze(Object.defineProperty({__proto__:null,default:buttonWidget},Symbol.toStringTag,{value:"Module"})),formItemWrapper_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2Y={name:"form-item-wrapper",mixins:[i18n$1],components:{SvgIcon},props:{field:Object,designer:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""},rules:Array},inject:["getFormConfig"],computed:{formConfig(){return this.getFormConfig()},selected(){return!!this.designer&&this.field.id===this.designer.selectedId},label(){return this.field.options.labelHidden?"":this.field.options.label},labelWidth(){return this.field.options.labelHidden?0:this.field.options.labelWidth?this.field.options.labelWidth:this.designer?this.designer.formConfig.labelWidth:this.formConfig.labelWidth},labelAlign(){return this.field.options.labelAlign?this.field.options.labelAlign:this.designer?this.designer.formConfig.labelAlign||"label-left-align":this.formConfig.labelAlign||"label-left-align"},customClass(){return this.field.options.customClass?this.field.options.customClass.join(" "):""},subFormName(){return this.parentWidget?this.parentWidget.options.name:""},subFormItemFlag(){return this.parentWidget?this.parentWidget.type==="sub-form":!1}},created(){},methods:{selectField(t){this.designer&&(this.designer.setSelected(t),this.designer.emitEvent("field-selected",this.parentWidget))},selectParentWidget(){this.parentWidget?this.designer.setSelected(this.parentWidget):this.designer.clearSelected()},moveUpWidget(){this.designer.moveUpWidget(this.parentList,this.indexOfParentList),this.designer.emitHistoryChange()},moveDownWidget(){this.designer.moveDownWidget(this.parentList,this.indexOfParentList),this.designer.emitHistoryChange()},removeFieldWidget(){if(this.parentList){const t=this.designer.selectedWidgetName;let d=null;this.parentList.length===1?this.parentWidget&&(d=this.parentWidget):this.parentList.length===1+this.indexOfParentList?d=this.parentList[this.indexOfParentList-1]:d=this.parentList[this.indexOfParentList+1],this.$nextTick(()=>{this.parentList.splice(this.indexOfParentList,1),this.designer.setSelected(d),this.designer.formWidget.deleteWidgetRef(t),this.designer.emitHistoryChange()})}},getPropName(){return this.subFormItemFlag&&!this.designState?this.subFormName+"."+this.subFormRowIndex+"."+this.field.options.name+"":this.field.options.name}}},_hoisted_1$u={key:0,class:"custom-label"},_hoisted_2$g={key:0,class:"field-action"},_hoisted_3$c=["title"],_hoisted_4$c=["title"],_hoisted_5$a=["title"],_hoisted_6$a=["title"],_hoisted_7$7={key:1,class:"drag-handler background-opacity"},_hoisted_8$5=["title"],_hoisted_9$2={key:0};function _sfc_render$2Y(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("svg-icon"),c=require$$0$1.resolveComponent("el-tooltip"),i=require$$0$1.resolveComponent("el-form-item");return require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{class:require$$0$1.normalizeClass(["field-wrapper",{"design-time-bottom-margin":!!this.designer}])},[!!e.field.formItemFlag&&(!e.field.options.hidden||e.designState===!0)?(require$$0$1.openBlock(),require$$0$1.createBlock(i,{key:0,label:g.label,"label-width":g.labelWidth+"px",title:e.field.options.labelTooltip,rules:e.rules,prop:g.getPropName(),class:require$$0$1.normalizeClass([g.selected?"selected":"",g.labelAlign,g.customClass,e.field.options.required?"required":""]),onClick:d[0]||(d[0]=require$$0$1.withModifiers(f=>g.selectField(e.field),["stop"]))},{label:require$$0$1.withCtx(()=>[e.field.options.labelIconClass?(require$$0$1.openBlock(),require$$0$1.createElementBlock("span",_hoisted_1$u,[e.field.options.labelIconPosition==="front"?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},[e.field.options.labelTooltip?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},[require$$0$1.createVNode(c,{content:e.field.options.labelTooltip,effect:"light"},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{"icon-class":e.field.options.labelIconClass},null,8,["icon-class"])]),_:1},8,["content"]),require$$0$1.createTextVNode(require$$0$1.toDisplayString(g.label),1)],64)):(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},[require$$0$1.createVNode(s,{"icon-class":e.field.options.labelIconClass},null,8,["icon-class"]),require$$0$1.createTextVNode(require$$0$1.toDisplayString(g.label),1)],64))],64)):e.field.options.labelIconPosition==="rear"?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},[e.field.options.labelTooltip?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},[require$$0$1.createTextVNode(require$$0$1.toDisplayString(g.label),1),require$$0$1.createVNode(c,{content:e.field.options.labelTooltip,effect:"light"},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{"icon-class":e.field.options.labelIconClass},null,8,["icon-class"])]),_:1},8,["content"])],64)):(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},[require$$0$1.createTextVNode(require$$0$1.toDisplayString(g.label),1),require$$0$1.createVNode(s,{"icon-class":e.field.options.labelIconClass},null,8,["icon-class"])],64))],64)):require$$0$1.createCommentVNode("",!0)])):require$$0$1.createCommentVNode("",!0)]),default:require$$0$1.withCtx(()=>[require$$0$1.renderSlot(t.$slots,"default",{},void 0,!0)]),_:3},8,["label","label-width","title","rules","prop","class"])):require$$0$1.createCommentVNode("",!0),this.designer?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},[e.designer.selectedId===e.field.id?(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",_hoisted_2$g,[require$$0$1.createElementVNode("i",{title:t.i18nt("designer.hint.selectParentWidget"),onClick:d[1]||(d[1]=require$$0$1.withModifiers(f=>g.selectParentWidget(e.field),["stop"]))},[require$$0$1.createVNode(s,{"icon-class":"el-back"})],8,_hoisted_3$c),!!e.parentList&&e.parentList.length>1?(require$$0$1.openBlock(),require$$0$1.createElementBlock("i",{key:0,title:t.i18nt("designer.hint.moveUpWidget"),onClick:d[2]||(d[2]=require$$0$1.withModifiers(f=>g.moveUpWidget(e.field),["stop"]))},[require$$0$1.createVNode(s,{"icon-class":"el-move-up"})],8,_hoisted_4$c)):require$$0$1.createCommentVNode("",!0),!!e.parentList&&e.parentList.length>1?(require$$0$1.openBlock(),require$$0$1.createElementBlock("i",{key:1,title:t.i18nt("designer.hint.moveDownWidget"),onClick:d[3]||(d[3]=require$$0$1.withModifiers(f=>g.moveDownWidget(e.field),["stop"]))},[require$$0$1.createVNode(s,{"icon-class":"el-move-down"})],8,_hoisted_5$a)):require$$0$1.createCommentVNode("",!0),require$$0$1.createElementVNode("i",{title:t.i18nt("designer.hint.remove"),onClick:d[4]||(d[4]=require$$0$1.withModifiers((...f)=>g.removeFieldWidget&&g.removeFieldWidget(...f),["stop"]))},[require$$0$1.createVNode(s,{"icon-class":"el-delete"})],8,_hoisted_6$a)])):require$$0$1.createCommentVNode("",!0),e.designer.selectedId===e.field.id?(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",_hoisted_7$7,[require$$0$1.createElementVNode("i",{title:t.i18nt("designer.hint.dragHandler")},[require$$0$1.createVNode(s,{"icon-class":"el-drag-move"})],8,_hoisted_8$5),require$$0$1.createElementVNode("i",null,require$$0$1.toDisplayString(t.i18n2t(`designer.widgetLabel.${e.field.type}`,`extension.widgetLabel.${e.field.type}`)),1),e.field.options.hidden===!0?(require$$0$1.openBlock(),require$$0$1.createElementBlock("i",_hoisted_9$2,[require$$0$1.createVNode(s,{"icon-class":"el-hide"})])):require$$0$1.createCommentVNode("",!0)])):require$$0$1.createCommentVNode("",!0)],64)):require$$0$1.createCommentVNode("",!0)],2)}var FormItemWrapper=_export_sfc(_sfc_main$2Y,[["render",_sfc_render$2Y],["__scopeId","data-v-6e673265"]]),__glob_0_8$1=Object.freeze(Object.defineProperty({__proto__:null,default:FormItemWrapper},Symbol.toStringTag,{value:"Module"})),cascaderWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2X={name:"cascader-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{showFullPath(){return this.field.options.showAllLevels===void 0||!!this.field.options.showAllLevels}},beforeCreate(){},created(){this.initOptionItems(),this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}},_hoisted_1$t={class:"full-width-input"};function _sfc_render$2X(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-cascader"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",_hoisted_1$t,[require$$0$1.createVNode(s,{ref:"fieldEditor",options:e.field.options.optionItems,modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),disabled:e.field.options.disabled,size:t.widgetSize,clearable:e.field.options.clearable,filterable:e.field.options.filterable,placeholder:e.field.options.placeholder||t.i18nt("render.hint.selectPlaceholder"),"show-all-levels":g.showFullPath,props:{checkStrictly:e.field.options.checkStrictly,multiple:e.field.options.multiple,expandTrigger:"hover"},onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onChange:t.handleChangeEvent},null,8,["options","modelValue","disabled","size","clearable","filterable","placeholder","show-all-levels","props","onFocus","onBlur","onChange"])])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var cascaderWidget=_export_sfc(_sfc_main$2X,[["render",_sfc_render$2X],["__scopeId","data-v-3ebbe3c0"]]),__glob_0_1$3=Object.freeze(Object.defineProperty({__proto__:null,default:cascaderWidget},Symbol.toStringTag,{value:"Module"})),checkboxWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2W={name:"checkbox-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initOptionItems(),this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2W(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-checkbox-button"),c=require$$0$1.resolveComponent("el-checkbox"),i=require$$0$1.resolveComponent("el-checkbox-group"),f=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(f,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(i,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=n=>m.fieldModel=n),disabled:e.field.options.disabled,size:t.widgetSize,onChange:t.handleChangeEvent},{default:require$$0$1.withCtx(()=>[e.field.options.buttonStyle?(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},require$$0$1.renderList(e.field.options.optionItems,(n,o)=>(require$$0$1.openBlock(),require$$0$1.createBlock(s,{key:o,label:n.value,disabled:n.disabled,border:e.field.options.border,style:require$$0$1.normalizeStyle({display:e.field.options.displayStyle})},{default:require$$0$1.withCtx(()=>[require$$0$1.createTextVNode(require$$0$1.toDisplayString(n.label),1)]),_:2},1032,["label","disabled","border","style"]))),128)):(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},require$$0$1.renderList(e.field.options.optionItems,(n,o)=>(require$$0$1.openBlock(),require$$0$1.createBlock(c,{key:o,label:n.value,disabled:n.disabled,border:e.field.options.border,style:require$$0$1.normalizeStyle({display:e.field.options.displayStyle})},{default:require$$0$1.withCtx(()=>[require$$0$1.createTextVNode(require$$0$1.toDisplayString(n.label),1)]),_:2},1032,["label","disabled","border","style"]))),128))]),_:1},8,["modelValue","disabled","size","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var checkboxWidget=_export_sfc(_sfc_main$2W,[["render",_sfc_render$2W],["__scopeId","data-v-33320a4d"]]),__glob_0_2$3=Object.freeze(Object.defineProperty({__proto__:null,default:checkboxWidget},Symbol.toStringTag,{value:"Module"})),colorWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2V={name:"color-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2V(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-color-picker"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),size:t.widgetSize,disabled:e.field.options.disabled,onChange:t.handleChangeEvent},null,8,["modelValue","size","disabled","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var colorWidget=_export_sfc(_sfc_main$2V,[["render",_sfc_render$2V],["__scopeId","data-v-5c8214c6"]]),__glob_0_3$3=Object.freeze(Object.defineProperty({__proto__:null,default:colorWidget},Symbol.toStringTag,{value:"Module"})),dateRangeWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2U={name:"date-range-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2U(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-date-picker"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",{class:require$$0$1.normalizeClass([e.field.options.autoFullWidth?"auto-full-width":""])},[require$$0$1.createVNode(s,{ref:"fieldEditor",type:e.field.options.type,modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),disabled:e.field.options.disabled,readonly:e.field.options.readonly,size:t.widgetSize,clearable:e.field.options.clearable,editable:e.field.options.editable,format:e.field.options.format,"value-format":e.field.options.valueFormat,"start-placeholder":e.field.options.startPlaceholder||t.i18nt("render.hint.startDatePlaceholder"),"end-placeholder":e.field.options.endPlaceholder||t.i18nt("render.hint.endDatePlaceholder"),onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onChange:t.handleChangeEvent},null,8,["type","modelValue","disabled","readonly","size","clearable","editable","format","value-format","start-placeholder","end-placeholder","onFocus","onBlur","onChange"])],2)]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var dateRangeWidget=_export_sfc(_sfc_main$2U,[["render",_sfc_render$2U],["__scopeId","data-v-9b0f3514"]]),__glob_0_4$3=Object.freeze(Object.defineProperty({__proto__:null,default:dateRangeWidget},Symbol.toStringTag,{value:"Module"})),dateWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2T={name:"date-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2T(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-date-picker"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",type:e.field.options.type,modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),class:require$$0$1.normalizeClass([e.field.options.autoFullWidth?"auto-full-width":""]),readonly:e.field.options.readonly,disabled:e.field.options.disabled,size:t.widgetSize,clearable:e.field.options.clearable,editable:e.field.options.editable,format:e.field.options.format,"value-format":e.field.options.valueFormat,placeholder:e.field.options.placeholder||t.i18nt("render.hint.datePlaceholder"),onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onChange:t.handleChangeEvent},null,8,["type","modelValue","class","readonly","disabled","size","clearable","editable","format","value-format","placeholder","onFocus","onBlur","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var dateWidget=_export_sfc(_sfc_main$2T,[["render",_sfc_render$2T],["__scopeId","data-v-f05b3708"]]),__glob_0_5$3=Object.freeze(Object.defineProperty({__proto__:null,default:dateWidget},Symbol.toStringTag,{value:"Module"})),dividerWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2S={name:"divider-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{StaticContentWrapper},computed:{},beforeCreate(){},created(){this.registerToRefList(),this.initEventHandler(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2S(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-divider"),c=require$$0$1.resolveComponent("static-content-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",direction:"horizontal","content-position":e.field.options.contentPosition},{default:require$$0$1.withCtx(()=>[require$$0$1.createTextVNode(require$$0$1.toDisplayString(e.field.options.label),1)]),_:1},8,["content-position"])]),_:1},8,["designer","field","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var dividerWidget=_export_sfc(_sfc_main$2S,[["render",_sfc_render$2S],["__scopeId","data-v-208e9558"]]),__glob_0_6$3=Object.freeze(Object.defineProperty({__proto__:null,default:dividerWidget},Symbol.toStringTag,{value:"Module"})),fileUploadWidget_vue_vue_type_style_index_0_scoped_true_lang="";let selectFileText="'"+translate("render.hint.selectFile")+"'";const _sfc_main$2R={name:"file-upload-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{SvgIcon,FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:[],rules:[],uploadHeaders:{},uploadData:{key:""},fileList:[],uploadBtnHidden:!1,styleVariables:{"--select-file-action":selectFileText}}},computed:{realUploadURL(){let t=this.field.options.uploadURL;if(!!t&&(t.indexOf("DSV.")>-1||t.indexOf("DSV[")>-1)){let d=this.getGlobalDsv();return console.log("test DSV: ",d),evalFn(this.field.options.uploadURL,d)}return this.field.options.uploadURL}},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{handleFileExceed(){let t=this.field.options.limit;this.$message.warning(this.i18nt("render.hint.uploadExceed").replace("${uploadLimit}",t))},beforeFileUpload(t){let d=!1,e=t.name.substring(t.name.lastIndexOf(".")+1);if(!!this.field.options&&!!this.field.options.fileTypes){let g=this.field.options.fileTypes;g.length>0&&(d=g.some(s=>e.toLowerCase()===s.toLowerCase()))}if(!d)return this.$message.error(this.i18nt("render.hint.unsupportedFileType")+e),!1;let p=!1,m=5;return!!this.field.options&&!!this.field.options.fileMaxSize&&(m=this.field.options.fileMaxSize),p=t.size/1024/1024<=m,p?(this.uploadData.key=t.name,this.handleOnBeforeUpload(t)):(this.$message.error(this.i18nt("render.hint.fileSizeExceed")+m+"MB"),!1)},handleOnBeforeUpload(t){if(this.field.options.onBeforeUpload){let e=new Function("file",this.field.options.onBeforeUpload).call(this,t);return typeof e=="boolean"?e:!0}return!0},updateFieldModelAndEmitDataChangeForUpload(t,d,e){let p=deepClone(this.fieldModel);!!d&&!!d.name&&!!d.url?this.fieldModel.push({name:d.name,url:d.url}):!!e&&!!e.name&&!!e.url?this.fieldModel.push({name:e.name,url:e.url}):this.fieldModel=deepClone(t),this.syncUpdateFormModel(this.fieldModel),this.emitFieldDataChange(this.fieldModel,p)},handleFileUpload(t,d,e){if(d.status==="success"){let p=null;this.field.options.onUploadSuccess&&(p=new Function("result","file","fileList",this.field.options.onUploadSuccess).call(this,t,d,e)),this.updateFieldModelAndEmitDataChangeForUpload(e,p,t),!!p&&!!p.name?d.name=p.name:d.name=d.name||t.name||t.fileName||t.filename,!!p&&!!p.url?d.url=p.url:d.url=d.url||t.url,this.fileList=deepClone(e),this.uploadBtnHidden=e.length>=this.field.options.limit}},updateFieldModelAndEmitDataChangeForRemove(t,d){let e=deepClone(this.fieldModel);this.fieldModel.splice(t,1),this.syncUpdateFormModel(this.fieldModel),this.emitFieldDataChange(this.fieldModel,e)},removeUploadFile(t,d,e){let p=-1,m=null;this.fileList.forEach((g,s)=>{g.name===t&&(g.url===d||!!e&&g.uid===e)&&(p=s,m=g)}),p>=0&&(this.fileList.splice(p,1),this.updateFieldModelAndEmitDataChangeForRemove(p,this.fileList),this.uploadBtnHidden=this.fileList.length>=this.field.options.limit,this.field.options.onFileRemove&&new Function("file","fileList",this.field.options.onFileRemove).call(this,m,this.fileList))},handleUploadError(t,d,e){this.field.options.onUploadError?new Function("error","file","fileList",this.field.options.onUploadError).call(this,t,d,e):this.$message({message:this.i18nt("render.hint.uploadError")+t,duration:3e3,type:"error"})}}},_hoisted_1$s={key:0,class:"el-upload__tip"},_hoisted_2$f={class:"upload-file-list"},_hoisted_3$b=["title"],_hoisted_4$b=["href"],_hoisted_5$9=["title"],_hoisted_6$9=["title","onClick"];function _sfc_render$2R(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("svg-icon"),c=require$$0$1.resolveComponent("el-upload"),i=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(i,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(c,{ref:"fieldEditor",disabled:e.field.options.disabled,style:require$$0$1.normalizeStyle(m.styleVariables),class:require$$0$1.normalizeClass(["dynamicPseudoAfter",{hideUploadDiv:m.uploadBtnHidden}]),action:g.realUploadURL,headers:m.uploadHeaders,data:m.uploadData,"with-credentials":e.field.options.withCredentials,multiple:e.field.options.multipleSelect,"file-list":m.fileList,"show-file-list":e.field.options.showFileList,limit:e.field.options.limit,"on-exceed":g.handleFileExceed,"before-upload":g.beforeFileUpload,"on-success":g.handleFileUpload,"on-error":g.handleUploadError},{tip:require$$0$1.withCtx(()=>[e.field.options.uploadTip?(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",_hoisted_1$s,require$$0$1.toDisplayString(e.field.options.uploadTip),1)):require$$0$1.createCommentVNode("",!0)]),default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{"icon-class":"el-plus"}),d[0]||(d[0]=require$$0$1.createElementVNode("i",{class:"el-icon-plus avatar-uploader-icon"},null,-1))]),file:require$$0$1.withCtx(({file:f})=>[require$$0$1.createElementVNode("div",_hoisted_2$f,[require$$0$1.createElementVNode("span",{class:"upload-file-name",title:f.name},require$$0$1.toDisplayString(f.name),9,_hoisted_3$b),require$$0$1.createElementVNode("a",{href:f.url,download:"",target:"_blank"},[require$$0$1.createElementVNode("span",{class:"el-icon-download file-action",title:t.i18nt("render.hint.downloadFile")},[require$$0$1.createVNode(s,{"icon-class":"el-download"})],8,_hoisted_5$9)],8,_hoisted_4$b),e.field.options.disabled?require$$0$1.createCommentVNode("",!0):(require$$0$1.openBlock(),require$$0$1.createElementBlock("span",{key:0,class:"file-action",title:t.i18nt("render.hint.removeFile"),onClick:n=>g.removeUploadFile(f.name,f.url,f.uid)},[require$$0$1.createVNode(s,{"icon-class":"el-delete"})],8,_hoisted_6$9))])]),_:1},8,["disabled","style","action","headers","data","with-credentials","multiple","file-list","show-file-list","class","limit","on-exceed","before-upload","on-success","on-error"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var fileUploadWidget=_export_sfc(_sfc_main$2R,[["render",_sfc_render$2R],["__scopeId","data-v-335cf656"]]),__glob_0_7$1=Object.freeze(Object.defineProperty({__proto__:null,default:fileUploadWidget},Symbol.toStringTag,{value:"Module"})),htmlTextWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2Q={name:"html-text-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{StaticContentWrapper},computed:{},beforeCreate(){},created(){this.registerToRefList(),this.initEventHandler(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}},_hoisted_1$r=["innerHTML"];function _sfc_render$2Q(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("static-content-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(s,{designer:e.designer,field:e.field,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",{ref:"fieldEditor",innerHTML:e.field.options.htmlContent},null,8,_hoisted_1$r)]),_:1},8,["designer","field","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var htmlTextWidget=_export_sfc(_sfc_main$2Q,[["render",_sfc_render$2Q],["__scopeId","data-v-1ad6f874"]]),__glob_0_9$1=Object.freeze(Object.defineProperty({__proto__:null,default:htmlTextWidget},Symbol.toStringTag,{value:"Module"})),inputWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2P={name:"input-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper,SvgIcon},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{inputType(){return this.field.options.type==="number"?"text":this.field.options.type}},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2P(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("svg-icon"),c=require$$0$1.resolveComponent("el-button"),i=require$$0$1.resolveComponent("el-input"),f=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(f,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(i,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=n=>m.fieldModel=n),disabled:e.field.options.disabled,readonly:e.field.options.readonly,size:t.widgetSize,class:"hide-spin-button",type:g.inputType,"show-password":e.field.options.showPassword,placeholder:e.field.options.placeholder,clearable:e.field.options.clearable,minlength:e.field.options.minLength,maxlength:e.field.options.maxLength,"show-word-limit":e.field.options.showWordLimit,"prefix-icon":e.field.options.prefixIcon,"suffix-icon":e.field.options.suffixIcon,onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onInput:t.handleInputCustomEvent,onChange:t.handleChangeEvent},require$$0$1.createSlots({_:2},[e.field.options.appendButton?{name:"append",fn:require$$0$1.withCtx(()=>[require$$0$1.createVNode(c,{disabled:e.field.options.disabled||e.field.options.appendButtonDisabled,onClick:t.emitAppendButtonClick},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{"icon-class":e.field.options.buttonIcon},null,8,["icon-class"])]),_:1},8,["disabled","onClick"])]),key:"0"}:void 0]),1032,["modelValue","disabled","readonly","size","type","show-password","placeholder","clearable","minlength","maxlength","show-word-limit","prefix-icon","suffix-icon","onFocus","onBlur","onInput","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var inputWidget=_export_sfc(_sfc_main$2P,[["render",_sfc_render$2P],["__scopeId","data-v-35bcee25"]]),__glob_0_10$1=Object.freeze(Object.defineProperty({__proto__:null,default:inputWidget},Symbol.toStringTag,{value:"Module"})),numberWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2O={name:"number-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2O(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-input-number"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),class:"full-width-input",disabled:e.field.options.disabled,size:t.widgetSize,"controls-position":e.field.options.controlsPosition,placeholder:e.field.options.placeholder,min:e.field.options.min,max:e.field.options.max,precision:e.field.options.precision,step:e.field.options.step,onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onChange:t.handleChangeEvent},null,8,["modelValue","disabled","size","controls-position","placeholder","min","max","precision","step","onFocus","onBlur","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var numberWidget=_export_sfc(_sfc_main$2O,[["render",_sfc_render$2O],["__scopeId","data-v-612b9efe"]]),__glob_0_11$1=Object.freeze(Object.defineProperty({__proto__:null,default:numberWidget},Symbol.toStringTag,{value:"Module"})),pictureUploadWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2N={name:"picture-upload-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper,SvgIcon},data(){return{oldFieldValue:null,fieldModel:[],rules:[],uploadHeaders:{},uploadData:{key:""},fileList:[],fileListBeforeRemove:[],uploadBtnHidden:!1,previewIndex:1}},computed:{previewList(){return this.fileList.map(t=>t.url)},realUploadURL(){let t=this.field.options.uploadURL;if(!!t&&(t.indexOf("DSV.")>-1||t.indexOf("DSV[")>-1)){let d=this.getGlobalDsv();return console.log("test DSV: ",d),evalFn(this.field.options.uploadURL,d)}return this.field.options.uploadURL}},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{handlePictureExceed(){let t=this.field.options.limit;this.$message.warning(this.i18nt("render.hint.uploadExceed").replace("${uploadLimit}",t))},beforePictureUpload(t){let d=!1;if(!!this.field.options&&!!this.field.options.fileTypes){let m=this.field.options.fileTypes;m.length>0&&(d=m.some(g=>t.type==="image/"+g))}if(!d)return this.$message.error(this.i18nt("render.hint.unsupportedFileType")+t.type),!1;let e=!1,p=5;return!!this.field.options&&!!this.field.options.fileMaxSize&&(p=this.field.options.fileMaxSize),e=t.size/1024/1024<=p,e?(this.uploadData.key=t.name,this.handleOnBeforeUpload(t)):(this.$message.error(this.$("render.hint.fileSizeExceed")+p+"MB"),!1)},handleOnBeforeUpload(t){if(this.field.options.onBeforeUpload){let e=new Function("file",this.field.options.onBeforeUpload).call(this,t);return typeof e=="boolean"?e:!0}return!0},updateFieldModelAndEmitDataChangeForUpload(t,d,e){let p=deepClone(this.fieldModel);!!d&&!!d.name&&!!d.url?this.fieldModel.push({name:d.name,url:d.url}):!!e&&!!e.name&&!!e.url?this.fieldModel.push({name:e.name,url:e.url}):this.fieldModel=deepClone(t),this.syncUpdateFormModel(this.fieldModel),this.emitFieldDataChange(this.fieldModel,p)},handlePictureUpload(t,d,e){if(d.status==="success"){let p=null;this.field.options.onUploadSuccess&&(p=new Function("result","file","fileList",this.field.options.onUploadSuccess).call(this,t,d,e)),this.updateFieldModelAndEmitDataChangeForUpload(e,p,t),this.fileList=deepClone(e),this.uploadBtnHidden=e.length>=this.field.options.limit}},updateFieldModelAndEmitDataChangeForRemove(t){let d=deepClone(this.fieldModel),e=-1;this.fileListBeforeRemove.map((p,m)=>{p.name===t.name&&(p.url===t.url||!!p.uid&&p.uid===t.uid)&&(e=m)}),e>-1&&this.fieldModel.splice(e,1),this.syncUpdateFormModel(this.fieldModel),this.emitFieldDataChange(this.fieldModel,d)},handleBeforeRemove(t){this.fileListBeforeRemove=deepClone(t)},handlePictureRemove(t){this.handleBeforeRemove(this.fileList),this.fileList.splice(this.fileList.indexOf(t),1),this.updateFieldModelAndEmitDataChangeForRemove(t);let d=deepClone(this.fileList);this.uploadBtnHidden=d.length>=this.field.options.limit,this.field.options.onFileRemove&&new Function("file","fileList",this.field.options.onFileRemove).call(this,t,d)},handleUploadError(t,d,e){this.field.options.onUploadError?new Function("error","file","fileList",this.field.options.onUploadError).call(this,t,d,e):this.$message({message:this.i18nt("render.hint.uploadError")+t,duration:3e3,type:"error"})},handlePictureCardPreview({url:t}){this.previewIndex=this.previewList.indexOf(t),this.$refs.imageRef.$el.children[0].click()}}},_hoisted_1$q={class:"el-upload-list__item-status-label"},_hoisted_2$e={class:"el-icon--upload-success",style:{color:"#FFF"}},_hoisted_3$a={class:"el-upload-list__item-actions"},_hoisted_4$a=["onClick"],_hoisted_5$8=["onClick"],_hoisted_6$8={key:0,class:"el-upload__tip"},_hoisted_7$6={class:"uploader-icon"};function _sfc_render$2N(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-image"),c=require$$0$1.resolveComponent("svg-icon"),i=require$$0$1.resolveComponent("el-upload"),f=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(f,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(i,{ref:"fieldEditor",disabled:e.field.options.disabled,action:g.realUploadURL,headers:m.uploadHeaders,data:m.uploadData,"with-credentials":e.field.options.withCredentials,multiple:e.field.options.multipleSelect,"file-list":m.fileList,"show-file-list":e.field.options.showFileList,"list-type":"picture-card",class:require$$0$1.normalizeClass({hideUploadDiv:m.uploadBtnHidden}),limit:e.field.options.limit,"on-exceed":g.handlePictureExceed,"before-upload":g.beforePictureUpload,"on-preview":g.handlePictureCardPreview,"on-success":g.handlePictureUpload,"on-error":g.handleUploadError},{file:require$$0$1.withCtx(({file:n})=>[require$$0$1.createVNode(s,{ref:"imageRef",style:{width:"100%",height:"100%"},src:n.url,"preview-src-list":g.previewList,"initial-index":m.previewIndex,fit:"cover","preview-teleported":""},null,8,["src","preview-src-list","initial-index"]),require$$0$1.createElementVNode("label",_hoisted_1$q,[require$$0$1.createElementVNode("i",_hoisted_2$e,[require$$0$1.createVNode(c,{class:"","icon-class":"el-check"})])]),require$$0$1.createElementVNode("span",_hoisted_3$a,[require$$0$1.createElementVNode("span",{class:"el-upload-list__item-preview",onClick:o=>g.handlePictureCardPreview(n)},[require$$0$1.createVNode(c,{"icon-class":"el-zoom-in"})],8,_hoisted_4$a),require$$0$1.createElementVNode("span",{class:"el-upload-list__item-delete",onClick:o=>g.handlePictureRemove(n)},[require$$0$1.createVNode(c,{"icon-class":"el-delete"})],8,_hoisted_5$8)])]),tip:require$$0$1.withCtx(()=>[e.field.options.uploadTip?(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",_hoisted_6$8,require$$0$1.toDisplayString(e.field.options.uploadTip),1)):require$$0$1.createCommentVNode("",!0)]),default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",_hoisted_7$6,[require$$0$1.createVNode(c,{"icon-class":"el-plus"})])]),_:1},8,["disabled","action","headers","data","with-credentials","multiple","file-list","show-file-list","class","limit","on-exceed","before-upload","on-preview","on-success","on-error"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var pictureUploadWidget=_export_sfc(_sfc_main$2N,[["render",_sfc_render$2N],["__scopeId","data-v-6bdae02e"]]),__glob_0_12$1=Object.freeze(Object.defineProperty({__proto__:null,default:pictureUploadWidget},Symbol.toStringTag,{value:"Module"})),radioWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2M={name:"radio-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initOptionItems(),this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2M(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-radio-button"),c=require$$0$1.resolveComponent("el-radio"),i=require$$0$1.resolveComponent("el-radio-group"),f=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(f,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(i,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=n=>m.fieldModel=n),class:require$$0$1.normalizeClass({"radio-group-block":e.field.options.displayStyle==="block"}),disabled:e.field.options.disabled,size:t.widgetSize,onChange:t.handleChangeEvent},{default:require$$0$1.withCtx(()=>[e.field.options.buttonStyle?(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},require$$0$1.renderList(e.field.options.optionItems,(n,o)=>(require$$0$1.openBlock(),require$$0$1.createBlock(s,{key:o,value:n.value,disabled:n.disabled,border:e.field.options.border,style:require$$0$1.normalizeStyle({display:e.field.options.displayStyle})},{default:require$$0$1.withCtx(()=>[require$$0$1.createTextVNode(require$$0$1.toDisplayString(n.label),1)]),_:2},1032,["value","disabled","border","style"]))),128)):(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},require$$0$1.renderList(e.field.options.optionItems,(n,o)=>(require$$0$1.openBlock(),require$$0$1.createBlock(c,{key:o,value:n.value,disabled:n.disabled,border:e.field.options.border,style:require$$0$1.normalizeStyle({display:e.field.options.displayStyle})},{default:require$$0$1.withCtx(()=>[require$$0$1.createTextVNode(require$$0$1.toDisplayString(n.label),1)]),_:2},1032,["value","disabled","border","style"]))),128))]),_:1},8,["modelValue","class","disabled","size","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var radioWidget=_export_sfc(_sfc_main$2M,[["render",_sfc_render$2M],["__scopeId","data-v-06d5ed13"]]),__glob_0_13$1=Object.freeze(Object.defineProperty({__proto__:null,default:radioWidget},Symbol.toStringTag,{value:"Module"})),rateWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2L={name:"rate-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2L(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-rate"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),disabled:e.field.options.disabled,max:e.field.options.max,"low-threshold":e.field.options.lowThreshold,"high-threshold":e.field.options.highThreshold,"allow-half":e.field.options.allowHalf,"show-text":e.field.options.showText,"show-score":e.field.options.showScore,onChange:t.handleChangeEvent},null,8,["modelValue","disabled","max","low-threshold","high-threshold","allow-half","show-text","show-score","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var rateWidget=_export_sfc(_sfc_main$2L,[["render",_sfc_render$2L],["__scopeId","data-v-29a21d5b"]]),__glob_0_14$1=Object.freeze(Object.defineProperty({__proto__:null,default:rateWidget},Symbol.toStringTag,{value:"Module"})),quill={exports:{}};/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */(function(t,d){(function(p,m){t.exports=m()})(typeof self!="undefined"?self:commonjsGlobal,function(){return function(e){var p={};function m(g){if(p[g])return p[g].exports;var s=p[g]={i:g,l:!1,exports:{}};return e[g].call(s.exports,s,s.exports,m),s.l=!0,s.exports}return m.m=e,m.c=p,m.d=function(g,s,c){m.o(g,s)||Object.defineProperty(g,s,{configurable:!1,enumerable:!0,get:c})},m.n=function(g){var s=g&&g.__esModule?function(){return g.default}:function(){return g};return m.d(s,"a",s),s},m.o=function(g,s){return Object.prototype.hasOwnProperty.call(g,s)},m.p="",m(m.s=109)}([function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=m(17),s=m(18),c=m(19),i=m(45),f=m(46),n=m(47),o=m(48),r=m(49),l=m(12),a=m(32),u=m(33),h=m(31),$=m(1),v={Scope:$.Scope,create:$.create,find:$.find,query:$.query,register:$.register,Container:g.default,Format:s.default,Leaf:c.default,Embed:o.default,Scroll:i.default,Block:n.default,Inline:f.default,Text:r.default,Attributor:{Attribute:l.default,Class:a.default,Style:u.default,Store:h.default}};p.default=v},function(e,p,m){var g=this&&this.__extends||function(){var h=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function($,v){$.__proto__=v}||function($,v){for(var w in v)v.hasOwnProperty(w)&&($[w]=v[w])};return function($,v){h($,v);function w(){this.constructor=$}$.prototype=v===null?Object.create(v):(w.prototype=v.prototype,new w)}}();Object.defineProperty(p,"__esModule",{value:!0});var s=function(h){g($,h);function $(v){var w=this;return v="[Parchment] "+v,w=h.call(this,v)||this,w.message=v,w.name=w.constructor.name,w}return $}(Error);p.ParchmentError=s;var c={},i={},f={},n={};p.DATA_KEY="__blot";var o;(function(h){h[h.TYPE=3]="TYPE",h[h.LEVEL=12]="LEVEL",h[h.ATTRIBUTE=13]="ATTRIBUTE",h[h.BLOT=14]="BLOT",h[h.INLINE=7]="INLINE",h[h.BLOCK=11]="BLOCK",h[h.BLOCK_BLOT=10]="BLOCK_BLOT",h[h.INLINE_BLOT=6]="INLINE_BLOT",h[h.BLOCK_ATTRIBUTE=9]="BLOCK_ATTRIBUTE",h[h.INLINE_ATTRIBUTE=5]="INLINE_ATTRIBUTE",h[h.ANY=15]="ANY"})(o=p.Scope||(p.Scope={}));function r(h,$){var v=a(h);if(v==null)throw new s("Unable to create "+h+" blot");var w=v,y=h instanceof Node||h.nodeType===Node.TEXT_NODE?h:w.create($);return new w(y,$)}p.create=r;function l(h,$){return $===void 0&&($=!1),h==null?null:h[p.DATA_KEY]!=null?h[p.DATA_KEY].blot:$?l(h.parentNode,$):null}p.find=l;function a(h,$){$===void 0&&($=o.ANY);var v;if(typeof h=="string")v=n[h]||c[h];else if(h instanceof Text||h.nodeType===Node.TEXT_NODE)v=n.text;else if(typeof h=="number")h&o.LEVEL&o.BLOCK?v=n.block:h&o.LEVEL&o.INLINE&&(v=n.inline);else if(h instanceof HTMLElement){var w=(h.getAttribute("class")||"").split(/\s+/);for(var y in w)if(v=i[w[y]],v)break;v=v||f[h.tagName]}return v==null?null:$&o.LEVEL&v.scope&&$&o.TYPE&v.scope?v:null}p.query=a;function u(){for(var h=[],$=0;$1)return h.map(function(y){return u(y)});var v=h[0];if(typeof v.blotName!="string"&&typeof v.attrName!="string")throw new s("Invalid definition");if(v.blotName==="abstract")throw new s("Cannot register abstract class");if(n[v.blotName||v.attrName]=v,typeof v.keyName=="string")c[v.keyName]=v;else if(v.className!=null&&(i[v.className]=v),v.tagName!=null){Array.isArray(v.tagName)?v.tagName=v.tagName.map(function(y){return y.toUpperCase()}):v.tagName=v.tagName.toUpperCase();var w=Array.isArray(v.tagName)?v.tagName:[v.tagName];w.forEach(function(y){(f[y]==null||v.className==null)&&(f[y]=v)})}return v}p.register=u},function(e,p,m){var g=m(51),s=m(11),c=m(3),i=m(20),f=String.fromCharCode(0),n=function(o){Array.isArray(o)?this.ops=o:o!=null&&Array.isArray(o.ops)?this.ops=o.ops:this.ops=[]};n.prototype.insert=function(o,r){var l={};return o.length===0?this:(l.insert=o,r!=null&&typeof r=="object"&&Object.keys(r).length>0&&(l.attributes=r),this.push(l))},n.prototype.delete=function(o){return o<=0?this:this.push({delete:o})},n.prototype.retain=function(o,r){if(o<=0)return this;var l={retain:o};return r!=null&&typeof r=="object"&&Object.keys(r).length>0&&(l.attributes=r),this.push(l)},n.prototype.push=function(o){var r=this.ops.length,l=this.ops[r-1];if(o=c(!0,{},o),typeof l=="object"){if(typeof o.delete=="number"&&typeof l.delete=="number")return this.ops[r-1]={delete:l.delete+o.delete},this;if(typeof l.delete=="number"&&o.insert!=null&&(r-=1,l=this.ops[r-1],typeof l!="object"))return this.ops.unshift(o),this;if(s(o.attributes,l.attributes)){if(typeof o.insert=="string"&&typeof l.insert=="string")return this.ops[r-1]={insert:l.insert+o.insert},typeof o.attributes=="object"&&(this.ops[r-1].attributes=o.attributes),this;if(typeof o.retain=="number"&&typeof l.retain=="number")return this.ops[r-1]={retain:l.retain+o.retain},typeof o.attributes=="object"&&(this.ops[r-1].attributes=o.attributes),this}}return r===this.ops.length?this.ops.push(o):this.ops.splice(r,0,o),this},n.prototype.chop=function(){var o=this.ops[this.ops.length-1];return o&&o.retain&&!o.attributes&&this.ops.pop(),this},n.prototype.filter=function(o){return this.ops.filter(o)},n.prototype.forEach=function(o){this.ops.forEach(o)},n.prototype.map=function(o){return this.ops.map(o)},n.prototype.partition=function(o){var r=[],l=[];return this.forEach(function(a){var u=o(a)?r:l;u.push(a)}),[r,l]},n.prototype.reduce=function(o,r){return this.ops.reduce(o,r)},n.prototype.changeLength=function(){return this.reduce(function(o,r){return r.insert?o+i.length(r):r.delete?o-r.delete:o},0)},n.prototype.length=function(){return this.reduce(function(o,r){return o+i.length(r)},0)},n.prototype.slice=function(o,r){o=o||0,typeof r!="number"&&(r=1/0);for(var l=[],a=i.iterator(this.ops),u=0;u0&&l.next(u.retain-h)}for(var $=new n(a);r.hasNext()||l.hasNext();)if(l.peekType()==="insert")$.push(l.next());else if(r.peekType()==="delete")$.push(r.next());else{var v=Math.min(r.peekLength(),l.peekLength()),w=r.next(v),y=l.next(v);if(typeof y.retain=="number"){var _={};typeof w.retain=="number"?_.retain=v:_.insert=w.insert;var b=i.attributes.compose(w.attributes,y.attributes,typeof w.retain=="number");if(b&&(_.attributes=b),$.push(_),!l.hasNext()&&s($.ops[$.ops.length-1],_)){var S=new n(r.rest());return $.concat(S).chop()}}else typeof y.delete=="number"&&typeof w.retain=="number"&&$.push(y)}return $.chop()},n.prototype.concat=function(o){var r=new n(this.ops.slice());return o.ops.length>0&&(r.push(o.ops[0]),r.ops=r.ops.concat(o.ops.slice(1))),r},n.prototype.diff=function(o,r){if(this.ops===o.ops)return new n;var l=[this,o].map(function(v){return v.map(function(w){if(w.insert!=null)return typeof w.insert=="string"?w.insert:f;var y=v===o?"on":"with";throw new Error("diff() called "+y+" non-document")}).join("")}),a=new n,u=g(l[0],l[1],r),h=i.iterator(this.ops),$=i.iterator(o.ops);return u.forEach(function(v){for(var w=v[1].length;w>0;){var y=0;switch(v[0]){case g.INSERT:y=Math.min($.peekLength(),w),a.push($.next(y));break;case g.DELETE:y=Math.min(w,h.peekLength()),h.next(y),a.delete(y);break;case g.EQUAL:y=Math.min(h.peekLength(),$.peekLength(),w);var _=h.next(y),b=$.next(y);s(_.insert,b.insert)?a.retain(y,i.attributes.diff(_.attributes,b.attributes)):a.push(b).delete(y);break}w-=y}}),a.chop()},n.prototype.eachLine=function(o,r){r=r||` +`;for(var l=i.iterator(this.ops),a=new n,u=0;l.hasNext();){if(l.peekType()!=="insert")return;var h=l.peek(),$=i.length(h)-l.peekLength(),v=typeof h.insert=="string"?h.insert.indexOf(r,$)-$:-1;if(v<0)a.push(l.next());else if(v>0)a.push(l.next(v));else{if(o(a,l.next(1).attributes||{},u)===!1)return;u+=1,a=new n}}a.length()>0&&o(a,{},u)},n.prototype.transform=function(o,r){if(r=!!r,typeof o=="number")return this.transformPosition(o,r);for(var l=i.iterator(this.ops),a=i.iterator(o.ops),u=new n;l.hasNext()||a.hasNext();)if(l.peekType()==="insert"&&(r||a.peekType()!=="insert"))u.retain(i.length(l.next()));else if(a.peekType()==="insert")u.push(a.next());else{var h=Math.min(l.peekLength(),a.peekLength()),$=l.next(h),v=a.next(h);if($.delete)continue;v.delete?u.push(v):u.retain(h,i.attributes.transform($.attributes,v.attributes,r))}return u.chop()},n.prototype.transformPosition=function(o,r){r=!!r;for(var l=i.iterator(this.ops),a=0;l.hasNext()&&a<=o;){var u=l.peekLength(),h=l.peekType();if(l.next(),h==="delete"){o-=Math.min(u,o-a);continue}else h==="insert"&&(a0&&(C1&&arguments[1]!==void 0?arguments[1]:!1;if(x&&(C===0||C>=this.length()-S)){var L=this.clone();return C===0?(this.parent.insertBefore(L,this),this):(this.parent.insertBefore(L,this.next),L)}else{var q=s(T.prototype.__proto__||Object.getPrototypeOf(T.prototype),"split",this).call(this,C,x);return this.cache={},q}}}]),T}(r.default.Block);O.blotName="block",O.tagName="P",O.defaultChild="break",O.allowedChildren=[h.default,r.default.Embed,v.default];function k(A){var T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return A==null||(typeof A.formats=="function"&&(T=(0,i.default)(T,A.formats())),A.parent==null||A.parent.blotName=="scroll"||A.parent.statics.scope!==A.statics.scope)?T:k(A.parent,T)}p.bubbleFormats=k,p.BlockEmbed=M,p.default=O},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.default=p.overload=p.expandConfig=void 0;var g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(F){return typeof F}:function(F){return F&&typeof Symbol=="function"&&F.constructor===Symbol&&F!==Symbol.prototype?"symbol":typeof F},s=function(){function F(I,R){var B=[],D=!0,P=!1,j=void 0;try{for(var V=I[Symbol.iterator](),W;!(D=(W=V.next()).done)&&(B.push(W.value),!(R&&B.length===R));D=!0);}catch(H){P=!0,j=H}finally{try{!D&&V.return&&V.return()}finally{if(P)throw j}}return B}return function(I,R){if(Array.isArray(I))return I;if(Symbol.iterator in Object(I))return F(I,R);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c=function(){function F(I,R){for(var B=0;B2&&arguments[2]!==void 0?arguments[2]:!1;if(typeof R!="string"){var j=R.attrName||R.blotName;typeof j=="string"?this.register("formats/"+j,R,B):Object.keys(R).forEach(function(V){D.register(V,R[V],B)})}else this.imports[R]!=null&&!P&&E.warn("Overwriting "+R+" with",B),this.imports[R]=B,(R.startsWith("blots/")||R.startsWith("formats/"))&&B.blotName!=="abstract"?$.default.register(B):R.startsWith("modules")&&typeof B.register=="function"&&B.register()}}]);function F(I){var R=this,B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(T(this,F),this.options=x(I,B),this.container=this.options.container,this.container==null)return E.error("Invalid Quill container",I);this.options.debug&&F.debug(this.options.debug);var D=this.container.innerHTML.trim();this.container.classList.add("ql-container"),this.container.innerHTML="",this.container.__quill=this,this.root=this.addContainer("ql-editor"),this.root.classList.add("ql-blank"),this.root.setAttribute("data-gramm",!1),this.scrollingContainer=this.options.scrollingContainer||this.root,this.emitter=new l.default,this.scroll=$.default.create(this.root,{emitter:this.emitter,whitelist:this.options.formats}),this.editor=new o.default(this.scroll),this.selection=new w.default(this.scroll,this.emitter),this.theme=new this.options.theme(this,this.options),this.keyboard=this.theme.addModule("keyboard"),this.clipboard=this.theme.addModule("clipboard"),this.history=this.theme.addModule("history"),this.theme.init(),this.emitter.on(l.default.events.EDITOR_CHANGE,function(j){j===l.default.events.TEXT_CHANGE&&R.root.classList.toggle("ql-blank",R.editor.isBlank())}),this.emitter.on(l.default.events.SCROLL_UPDATE,function(j,V){var W=R.selection.lastRange,H=W&&W.length===0?W.index:void 0;L.call(R,function(){return R.editor.update(null,V,H)},j)});var P=this.clipboard.convert(`
`+D+"


");this.setContents(P),this.history.clear(),this.options.placeholder&&this.root.setAttribute("data-placeholder",this.options.placeholder),this.options.readOnly&&this.disable()}return c(F,[{key:"addContainer",value:function(R){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(typeof R=="string"){var D=R;R=document.createElement("div"),R.classList.add(D)}return this.container.insertBefore(R,B),R}},{key:"blur",value:function(){this.selection.setRange(null)}},{key:"deleteText",value:function(R,B,D){var P=this,j=q(R,B,D),V=s(j,4);return R=V[0],B=V[1],D=V[3],L.call(this,function(){return P.editor.deleteText(R,B)},D,R,-1*B)}},{key:"disable",value:function(){this.enable(!1)}},{key:"enable",value:function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.scroll.enable(R),this.container.classList.toggle("ql-disabled",!R)}},{key:"focus",value:function(){var R=this.scrollingContainer.scrollTop;this.selection.focus(),this.scrollingContainer.scrollTop=R,this.scrollIntoView()}},{key:"format",value:function(R,B){var D=this,P=arguments.length>2&&arguments[2]!==void 0?arguments[2]:l.default.sources.API;return L.call(this,function(){var j=D.getSelection(!0),V=new f.default;if(j==null)return V;if($.default.query(R,$.default.Scope.BLOCK))V=D.editor.formatLine(j.index,j.length,A({},R,B));else{if(j.length===0)return D.selection.format(R,B),V;V=D.editor.formatText(j.index,j.length,A({},R,B))}return D.setSelection(j,l.default.sources.SILENT),V},P)}},{key:"formatLine",value:function(R,B,D,P,j){var V=this,W=void 0,H=q(R,B,D,P,j),z=s(H,4);return R=z[0],B=z[1],W=z[2],j=z[3],L.call(this,function(){return V.editor.formatLine(R,B,W)},j,R,0)}},{key:"formatText",value:function(R,B,D,P,j){var V=this,W=void 0,H=q(R,B,D,P,j),z=s(H,4);return R=z[0],B=z[1],W=z[2],j=z[3],L.call(this,function(){return V.editor.formatText(R,B,W)},j,R,0)}},{key:"getBounds",value:function(R){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,D=void 0;typeof R=="number"?D=this.selection.getBounds(R,B):D=this.selection.getBounds(R.index,R.length);var P=this.container.getBoundingClientRect();return{bottom:D.bottom-P.top,height:D.height,left:D.left-P.left,right:D.right-P.left,top:D.top-P.top,width:D.width}}},{key:"getContents",value:function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.getLength()-R,D=q(R,B),P=s(D,2);return R=P[0],B=P[1],this.editor.getContents(R,B)}},{key:"getFormat",value:function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.getSelection(!0),B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return typeof R=="number"?this.editor.getFormat(R,B):this.editor.getFormat(R.index,R.length)}},{key:"getIndex",value:function(R){return R.offset(this.scroll)}},{key:"getLength",value:function(){return this.scroll.length()}},{key:"getLeaf",value:function(R){return this.scroll.leaf(R)}},{key:"getLine",value:function(R){return this.scroll.line(R)}},{key:"getLines",value:function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Number.MAX_VALUE;return typeof R!="number"?this.scroll.lines(R.index,R.length):this.scroll.lines(R,B)}},{key:"getModule",value:function(R){return this.theme.modules[R]}},{key:"getSelection",value:function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;return R&&this.focus(),this.update(),this.selection.getRange()[0]}},{key:"getText",value:function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.getLength()-R,D=q(R,B),P=s(D,2);return R=P[0],B=P[1],this.editor.getText(R,B)}},{key:"hasFocus",value:function(){return this.selection.hasFocus()}},{key:"insertEmbed",value:function(R,B,D){var P=this,j=arguments.length>3&&arguments[3]!==void 0?arguments[3]:F.sources.API;return L.call(this,function(){return P.editor.insertEmbed(R,B,D)},j,R)}},{key:"insertText",value:function(R,B,D,P,j){var V=this,W=void 0,H=q(R,0,D,P,j),z=s(H,4);return R=z[0],W=z[2],j=z[3],L.call(this,function(){return V.editor.insertText(R,B,W)},j,R,B.length)}},{key:"isEnabled",value:function(){return!this.container.classList.contains("ql-disabled")}},{key:"off",value:function(){return this.emitter.off.apply(this.emitter,arguments)}},{key:"on",value:function(){return this.emitter.on.apply(this.emitter,arguments)}},{key:"once",value:function(){return this.emitter.once.apply(this.emitter,arguments)}},{key:"pasteHTML",value:function(R,B,D){this.clipboard.dangerouslyPasteHTML(R,B,D)}},{key:"removeFormat",value:function(R,B,D){var P=this,j=q(R,B,D),V=s(j,4);return R=V[0],B=V[1],D=V[3],L.call(this,function(){return P.editor.removeFormat(R,B)},D,R)}},{key:"scrollIntoView",value:function(){this.selection.scrollIntoView(this.scrollingContainer)}},{key:"setContents",value:function(R){var B=this,D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:l.default.sources.API;return L.call(this,function(){R=new f.default(R);var P=B.getLength(),j=B.editor.deleteText(0,P),V=B.editor.applyDelta(R),W=V.ops[V.ops.length-1];W!=null&&typeof W.insert=="string"&&W.insert[W.insert.length-1]===` +`&&(B.editor.deleteText(B.getLength()-1,1),V.delete(1));var H=j.compose(V);return H},D)}},{key:"setSelection",value:function(R,B,D){if(R==null)this.selection.setRange(null,B||F.sources.API);else{var P=q(R,B,D),j=s(P,4);R=j[0],B=j[1],D=j[3],this.selection.setRange(new v.Range(R,B),D),D!==l.default.sources.SILENT&&this.selection.scrollIntoView(this.scrollingContainer)}}},{key:"setText",value:function(R){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:l.default.sources.API,D=new f.default().insert(R);return this.setContents(D,B)}},{key:"update",value:function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:l.default.sources.USER,B=this.scroll.update(R);return this.selection.update(R),B}},{key:"updateContents",value:function(R){var B=this,D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:l.default.sources.API;return L.call(this,function(){return R=new f.default(R),B.editor.applyDelta(R,D)},D,!0)}}]),F}();C.DEFAULTS={bounds:null,formats:null,modules:{},placeholder:"",readOnly:!1,scrollingContainer:null,strict:!0,theme:"default"},C.events=l.default.events,C.sources=l.default.sources,C.version="1.3.7",C.imports={delta:f.default,parchment:$.default,"core/module":u.default,"core/theme":O.default};function x(F,I){if(I=(0,_.default)(!0,{container:F,modules:{clipboard:!0,keyboard:!0,history:!0}},I),!I.theme||I.theme===C.DEFAULTS.theme)I.theme=O.default;else if(I.theme=C.import("themes/"+I.theme),I.theme==null)throw new Error("Invalid theme "+I.theme+". Did you register it?");var R=(0,_.default)(!0,{},I.theme.DEFAULTS);[R,I].forEach(function(P){P.modules=P.modules||{},Object.keys(P.modules).forEach(function(j){P.modules[j]===!0&&(P.modules[j]={})})});var B=Object.keys(R.modules).concat(Object.keys(I.modules)),D=B.reduce(function(P,j){var V=C.import("modules/"+j);return V==null?E.error("Cannot load "+j+" module. Are you sure you registered it?"):P[j]=V.DEFAULTS||{},P},{});return I.modules!=null&&I.modules.toolbar&&I.modules.toolbar.constructor!==Object&&(I.modules.toolbar={container:I.modules.toolbar}),I=(0,_.default)(!0,{},C.DEFAULTS,{modules:D},R,I),["bounds","container","scrollingContainer"].forEach(function(P){typeof I[P]=="string"&&(I[P]=document.querySelector(I[P]))}),I.modules=Object.keys(I.modules).reduce(function(P,j){return I.modules[j]&&(P[j]=I.modules[j]),P},{}),I}function L(F,I,R,B){if(this.options.strict&&!this.isEnabled()&&I===l.default.sources.USER)return new f.default;var D=R==null?null:this.getSelection(),P=this.editor.delta,j=F();if(D!=null&&(R===!0&&(R=D.index),B==null?D=N(D,j,I):B!==0&&(D=N(D,R,B,I)),this.setSelection(D,l.default.sources.SILENT)),j.length()>0){var V,W=[l.default.events.TEXT_CHANGE,j,P,I];if((V=this.emitter).emit.apply(V,[l.default.events.EDITOR_CHANGE].concat(W)),I!==l.default.sources.SILENT){var H;(H=this.emitter).emit.apply(H,W)}}return j}function q(F,I,R,B,D){var P={};return typeof F.index=="number"&&typeof F.length=="number"?typeof I!="number"?(D=B,B=R,R=I,I=F.length,F=F.index):(I=F.length,F=F.index):typeof I!="number"&&(D=B,B=R,R=I,I=0),(typeof R=="undefined"?"undefined":g(R))==="object"?(P=R,D=B):typeof R=="string"&&(B!=null?P[R]=B:D=R),D=D||l.default.sources.API,[F,I,P,D]}function N(F,I,R,B){if(F==null)return null;var D=void 0,P=void 0;if(I instanceof f.default){var j=[F.index,F.index+F.length].map(function(z){return I.transformPosition(z,B!==l.default.sources.USER)}),V=s(j,2);D=V[0],P=V[1]}else{var W=[F.index,F.index+F.length].map(function(z){return z=0?z+R:Math.max(I,z+R)}),H=s(W,2);D=H[0],P=H[1]}return new v.Range(D,P-D)}p.expandConfig=x,p.overload=q,p.default=C},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function h($,v){for(var w=0;w0){var y=this.parent.isolate(this.offset(),this.length());this.moveChildren(y),y.wrap(this)}}}],[{key:"compare",value:function(w,y){var _=$.order.indexOf(w),b=$.order.indexOf(y);return _>=0||b>=0?_-b:w===y?0:w1?b-1:0),M=1;M1&&arguments[1]!==void 0?arguments[1]:{};g(this,c),this.quill=i,this.options=f};s.DEFAULTS={},p.default=s},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=["error","warn","log","info"],s="warn";function c(f){if(g.indexOf(f)<=g.indexOf(s)){for(var n,o=arguments.length,r=Array(o>1?o-1:0),l=1;l0&&typeof r[0]!="number")}function o(r,l,a){var u,h;if(f(r)||f(l)||r.prototype!==l.prototype)return!1;if(c(r))return c(l)?(r=g.call(r),l=g.call(l),i(r,l,a)):!1;if(n(r)){if(!n(l)||r.length!==l.length)return!1;for(u=0;u=0;u--)if($[u]!=v[u])return!1;for(u=$.length-1;u>=0;u--)if(h=$[u],!i(r[h],l[h],a))return!1;return typeof r==typeof l}},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=m(1),s=function(){function c(i,f,n){n===void 0&&(n={}),this.attrName=i,this.keyName=f;var o=g.Scope.TYPE&g.Scope.ATTRIBUTE;n.scope!=null?this.scope=n.scope&g.Scope.LEVEL|o:this.scope=g.Scope.ATTRIBUTE,n.whitelist!=null&&(this.whitelist=n.whitelist)}return c.keys=function(i){return[].map.call(i.attributes,function(f){return f.name})},c.prototype.add=function(i,f){return this.canAdd(i,f)?(i.setAttribute(this.keyName,f),!0):!1},c.prototype.canAdd=function(i,f){var n=g.query(i,g.Scope.BLOT&(this.scope|g.Scope.TYPE));return n==null?!1:this.whitelist==null?!0:typeof f=="string"?this.whitelist.indexOf(f.replace(/["']/g,""))>-1:this.whitelist.indexOf(f)>-1},c.prototype.remove=function(i){i.removeAttribute(this.keyName)},c.prototype.value=function(i){var f=i.getAttribute(this.keyName);return this.canAdd(i,f)&&f?f:""},c}();p.default=s},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.default=p.Code=void 0;var g=function(){function M(O,k){var A=[],T=!0,E=!1,C=void 0;try{for(var x=O[Symbol.iterator](),L;!(T=(L=x.next()).done)&&(A.push(L.value),!(k&&A.length===k));T=!0);}catch(q){E=!0,C=q}finally{try{!T&&x.return&&x.return()}finally{if(E)throw C}}return A}return function(O,k){if(Array.isArray(O))return O;if(Symbol.iterator in Object(O))return M(O,k);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function M(O,k){for(var A=0;A=A+T)){var L=this.newlineIndex(A,!0)+1,q=x-L+1,N=this.isolate(L,q),F=N.next;N.format(E,C),F instanceof O&&F.formatAt(0,A-L+T-q,E,C)}}}},{key:"insertAt",value:function(A,T,E){if(E==null){var C=this.descendant($.default,A),x=g(C,2),L=x[0],q=x[1];L.insertAt(q,T)}}},{key:"length",value:function(){var A=this.domNode.textContent.length;return this.domNode.textContent.endsWith(` +`)?A:A+1}},{key:"newlineIndex",value:function(A){var T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(T)return this.domNode.textContent.slice(0,A).lastIndexOf(` +`);var E=this.domNode.textContent.slice(A).indexOf(` +`);return E>-1?A+E:-1}},{key:"optimize",value:function(A){this.domNode.textContent.endsWith(` +`)||this.appendChild(o.default.create("text",` +`)),c(O.prototype.__proto__||Object.getPrototypeOf(O.prototype),"optimize",this).call(this,A);var T=this.next;T!=null&&T.prev===this&&T.statics.blotName===this.statics.blotName&&this.statics.formats(this.domNode)===T.statics.formats(T.domNode)&&(T.optimize(A),T.moveChildren(this),T.remove())}},{key:"replace",value:function(A){c(O.prototype.__proto__||Object.getPrototypeOf(O.prototype),"replace",this).call(this,A),[].slice.call(this.domNode.querySelectorAll("*")).forEach(function(T){var E=o.default.find(T);E==null?T.parentNode.removeChild(T):E instanceof o.default.Embed?E.remove():E.unwrap()})}}],[{key:"create",value:function(A){var T=c(O.__proto__||Object.getPrototypeOf(O),"create",this).call(this,A);return T.setAttribute("spellcheck",!1),T}},{key:"formats",value:function(){return!0}}]),O}(l.default);S.blotName="code-block",S.tagName="PRE",S.TAB=" ",p.Code=b,p.default=S},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(F){return typeof F}:function(F){return F&&typeof Symbol=="function"&&F.constructor===Symbol&&F!==Symbol.prototype?"symbol":typeof F},s=function(){function F(I,R){var B=[],D=!0,P=!1,j=void 0;try{for(var V=I[Symbol.iterator](),W;!(D=(W=V.next()).done)&&(B.push(W.value),!(R&&B.length===R));D=!0);}catch(H){P=!0,j=H}finally{try{!D&&V.return&&V.return()}finally{if(P)throw j}}return B}return function(I,R){if(Array.isArray(I))return I;if(Symbol.iterator in Object(I))return F(I,R);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c=function(){function F(I,R){for(var B=0;B=P&&!z.endsWith(` +`)&&(D=!0),B.scroll.insertAt(j,z);var U=B.scroll.line(j),Z=s(U,2),ne=Z[0],re=Z[1],ue=(0,A.default)({},(0,v.bubbleFormats)(ne));if(ne instanceof w.default){var fe=ne.descendant(l.default.Leaf,re),ye=s(fe,1),_e=ye[0];ue=(0,A.default)(ue,(0,v.bubbleFormats)(_e))}H=o.default.attributes.diff(ue,H)||{}}else if(g(V.insert)==="object"){var X=Object.keys(V.insert)[0];if(X==null)return j;B.scroll.insertAt(j,X,V.insert[X])}P+=W}return Object.keys(H).forEach(function(Q){B.scroll.formatAt(j,W,Q,H[Q])}),j+W},0),R.reduce(function(j,V){return typeof V.delete=="number"?(B.scroll.deleteAt(j,V.delete),j):j+(V.retain||V.insert.length||1)},0),this.scroll.batchEnd(),this.update(R)}},{key:"deleteText",value:function(R,B){return this.scroll.deleteAt(R,B),this.update(new f.default().retain(R).delete(B))}},{key:"formatLine",value:function(R,B){var D=this,P=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.scroll.update(),Object.keys(P).forEach(function(j){if(!(D.scroll.whitelist!=null&&!D.scroll.whitelist[j])){var V=D.scroll.lines(R,Math.max(B,1)),W=B;V.forEach(function(H){var z=H.length();if(!(H instanceof u.default))H.format(j,P[j]);else{var U=R-H.offset(D.scroll),Z=H.newlineIndex(U+W)-U+1;H.formatAt(U,Z,j,P[j])}W-=z})}}),this.scroll.optimize(),this.update(new f.default().retain(R).retain(B,(0,S.default)(P)))}},{key:"formatText",value:function(R,B){var D=this,P=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return Object.keys(P).forEach(function(j){D.scroll.formatAt(R,B,j,P[j])}),this.update(new f.default().retain(R).retain(B,(0,S.default)(P)))}},{key:"getContents",value:function(R,B){return this.delta.slice(R,R+B)}},{key:"getDelta",value:function(){return this.scroll.lines().reduce(function(R,B){return R.concat(B.delta())},new f.default)}},{key:"getFormat",value:function(R){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,D=[],P=[];B===0?this.scroll.path(R).forEach(function(V){var W=s(V,1),H=W[0];H instanceof w.default?D.push(H):H instanceof l.default.Leaf&&P.push(H)}):(D=this.scroll.lines(R,B),P=this.scroll.descendants(l.default.Leaf,R,B));var j=[D,P].map(function(V){if(V.length===0)return{};for(var W=(0,v.bubbleFormats)(V.shift());Object.keys(W).length>0;){var H=V.shift();if(H==null)return W;W=q((0,v.bubbleFormats)(H),W)}return W});return A.default.apply(A.default,j)}},{key:"getText",value:function(R,B){return this.getContents(R,B).filter(function(D){return typeof D.insert=="string"}).map(function(D){return D.insert}).join("")}},{key:"insertEmbed",value:function(R,B,D){return this.scroll.insertAt(R,B,D),this.update(new f.default().retain(R).insert(E({},B,D)))}},{key:"insertText",value:function(R,B){var D=this,P=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return B=B.replace(/\r\n/g,` +`).replace(/\r/g,` +`),this.scroll.insertAt(R,B),Object.keys(P).forEach(function(j){D.scroll.formatAt(R,B.length,j,P[j])}),this.update(new f.default().retain(R).insert(B,(0,S.default)(P)))}},{key:"isBlank",value:function(){if(this.scroll.children.length==0)return!0;if(this.scroll.children.length>1)return!1;var R=this.scroll.children.head;return R.statics.blotName!==w.default.blotName||R.children.length>1?!1:R.children.head instanceof _.default}},{key:"removeFormat",value:function(R,B){var D=this.getText(R,B),P=this.scroll.line(R+B),j=s(P,2),V=j[0],W=j[1],H=0,z=new f.default;V!=null&&(V instanceof u.default?H=V.newlineIndex(W)-W+1:H=V.length()-W,z=V.delta().slice(W,W+H-1).insert(` +`));var U=this.getContents(R,B+H),Z=U.diff(new f.default().insert(D).concat(z)),ne=new f.default().retain(R).concat(Z);return this.applyDelta(ne)}},{key:"update",value:function(R){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],D=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0,P=this.delta;if(B.length===1&&B[0].type==="characterData"&&B[0].target.data.match(x)&&l.default.find(B[0].target)){var j=l.default.find(B[0].target),V=(0,v.bubbleFormats)(j),W=j.offset(this.scroll),H=B[0].oldValue.replace($.default.CONTENTS,""),z=new f.default().insert(H),U=new f.default().insert(j.value()),Z=new f.default().retain(W).concat(z.diff(U,D));R=Z.reduce(function(ne,re){return re.insert?ne.insert(re.insert,V):ne.push(re)},new f.default),this.delta=P.compose(R)}else this.delta=this.getDelta(),(!R||!(0,O.default)(P.compose(R),this.delta))&&(R=P.diff(this.delta,D));return R}}]),F}();function q(F,I){return Object.keys(I).reduce(function(R,B){return F[B]==null||(I[B]===F[B]?R[B]=I[B]:Array.isArray(I[B])?I[B].indexOf(F[B])<0&&(R[B]=I[B].concat([F[B]])):R[B]=[I[B],F[B]]),R},{})}function N(F){return F.reduce(function(I,R){if(R.insert===1){var B=(0,S.default)(R.attributes);return delete B.image,I.insert({image:R.attributes.image},B)}if(R.attributes!=null&&(R.attributes.list===!0||R.attributes.bullet===!0)&&(R=(0,S.default)(R),R.attributes.list?R.attributes.list="ordered":(R.attributes.list="bullet",delete R.attributes.bullet)),typeof R.insert=="string"){var D=R.insert.replace(/\r\n/g,` +`).replace(/\r/g,` +`);return I.insert(D,R.attributes)}return I.push(R)},new f.default)}p.default=L},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.default=p.Range=void 0;var g=function(){function M(O,k){var A=[],T=!0,E=!1,C=void 0;try{for(var x=O[Symbol.iterator](),L;!(T=(L=x.next()).done)&&(A.push(L.value),!(k&&A.length===k));T=!0);}catch(q){E=!0,C=q}finally{try{!T&&x.return&&x.return()}finally{if(E)throw C}}return A}return function(O,k){if(Array.isArray(O))return O;if(Symbol.iterator in Object(O))return M(O,k);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function M(O,k){for(var A=0;A1&&arguments[1]!==void 0?arguments[1]:0;w(this,M),this.index=O,this.length=k},b=function(){function M(O,k){var A=this;w(this,M),this.emitter=k,this.scroll=O,this.composing=!1,this.mouseDown=!1,this.root=this.scroll.domNode,this.cursor=i.default.create("cursor",this),this.lastRange=this.savedRange=new _(0,0),this.handleComposition(),this.handleDragging(),this.emitter.listenDOM("selectionchange",document,function(){A.mouseDown||setTimeout(A.update.bind(A,a.default.sources.USER),1)}),this.emitter.on(a.default.events.EDITOR_CHANGE,function(T,E){T===a.default.events.TEXT_CHANGE&&E.length()>0&&A.update(a.default.sources.SILENT)}),this.emitter.on(a.default.events.SCROLL_BEFORE_UPDATE,function(){if(!!A.hasFocus()){var T=A.getNativeRange();T!=null&&T.start.node!==A.cursor.textNode&&A.emitter.once(a.default.events.SCROLL_UPDATE,function(){try{A.setNativeRange(T.start.node,T.start.offset,T.end.node,T.end.offset)}catch{}})}}),this.emitter.on(a.default.events.SCROLL_OPTIMIZE,function(T,E){if(E.range){var C=E.range,x=C.startNode,L=C.startOffset,q=C.endNode,N=C.endOffset;A.setNativeRange(x,L,q,N)}}),this.update(a.default.sources.SILENT)}return s(M,[{key:"handleComposition",value:function(){var k=this;this.root.addEventListener("compositionstart",function(){k.composing=!0}),this.root.addEventListener("compositionend",function(){if(k.composing=!1,k.cursor.parent){var A=k.cursor.restore();if(!A)return;setTimeout(function(){k.setNativeRange(A.startNode,A.startOffset,A.endNode,A.endOffset)},1)}})}},{key:"handleDragging",value:function(){var k=this;this.emitter.listenDOM("mousedown",document.body,function(){k.mouseDown=!0}),this.emitter.listenDOM("mouseup",document.body,function(){k.mouseDown=!1,k.update(a.default.sources.USER)})}},{key:"focus",value:function(){this.hasFocus()||(this.root.focus(),this.setRange(this.savedRange))}},{key:"format",value:function(k,A){if(!(this.scroll.whitelist!=null&&!this.scroll.whitelist[k])){this.scroll.update();var T=this.getNativeRange();if(!(T==null||!T.native.collapsed||i.default.query(k,i.default.Scope.BLOCK))){if(T.start.node!==this.cursor.textNode){var E=i.default.find(T.start.node,!1);if(E==null)return;if(E instanceof i.default.Leaf){var C=E.split(T.start.offset);E.parent.insertBefore(this.cursor,C)}else E.insertBefore(this.cursor,T.start.node);this.cursor.attach()}this.cursor.format(k,A),this.scroll.optimize(),this.setNativeRange(this.cursor.textNode,this.cursor.textNode.data.length),this.update()}}}},{key:"getBounds",value:function(k){var A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,T=this.scroll.length();k=Math.min(k,T-1),A=Math.min(k+A,T-1)-k;var E=void 0,C=this.scroll.leaf(k),x=g(C,2),L=x[0],q=x[1];if(L==null)return null;var N=L.position(q,!0),F=g(N,2);E=F[0],q=F[1];var I=document.createRange();if(A>0){I.setStart(E,q);var R=this.scroll.leaf(k+A),B=g(R,2);if(L=B[0],q=B[1],L==null)return null;var D=L.position(q,!0),P=g(D,2);return E=P[0],q=P[1],I.setEnd(E,q),I.getBoundingClientRect()}else{var j="left",V=void 0;return E instanceof Text?(q0&&(j="right")),{bottom:V.top+V.height,height:V.height,left:V[j],right:V[j],top:V.top,width:0}}}},{key:"getNativeRange",value:function(){var k=document.getSelection();if(k==null||k.rangeCount<=0)return null;var A=k.getRangeAt(0);if(A==null)return null;var T=this.normalizeNative(A);return y.info("getNativeRange",T),T}},{key:"getRange",value:function(){var k=this.getNativeRange();if(k==null)return[null,null];var A=this.normalizedToRange(k);return[A,k]}},{key:"hasFocus",value:function(){return document.activeElement===this.root}},{key:"normalizedToRange",value:function(k){var A=this,T=[[k.start.node,k.start.offset]];k.native.collapsed||T.push([k.end.node,k.end.offset]);var E=T.map(function(L){var q=g(L,2),N=q[0],F=q[1],I=i.default.find(N,!0),R=I.offset(A.scroll);return F===0?R:I instanceof i.default.Container?R+I.length():R+I.index(N,F)}),C=Math.min(Math.max.apply(Math,v(E)),this.scroll.length()-1),x=Math.min.apply(Math,[C].concat(v(E)));return new _(x,C-x)}},{key:"normalizeNative",value:function(k){if(!S(this.root,k.startContainer)||!k.collapsed&&!S(this.root,k.endContainer))return null;var A={start:{node:k.startContainer,offset:k.startOffset},end:{node:k.endContainer,offset:k.endOffset},native:k};return[A.start,A.end].forEach(function(T){for(var E=T.node,C=T.offset;!(E instanceof Text)&&E.childNodes.length>0;)if(E.childNodes.length>C)E=E.childNodes[C],C=0;else if(E.childNodes.length===C)E=E.lastChild,C=E instanceof Text?E.data.length:E.childNodes.length+1;else break;T.node=E,T.offset=C}),A}},{key:"rangeToNative",value:function(k){var A=this,T=k.collapsed?[k.index]:[k.index,k.index+k.length],E=[],C=this.scroll.length();return T.forEach(function(x,L){x=Math.min(C-1,x);var q=void 0,N=A.scroll.leaf(x),F=g(N,2),I=F[0],R=F[1],B=I.position(R,L!==0),D=g(B,2);q=D[0],R=D[1],E.push(q,R)}),E.length<2&&(E=E.concat(E)),E}},{key:"scrollIntoView",value:function(k){var A=this.lastRange;if(A!=null){var T=this.getBounds(A.index,A.length);if(T!=null){var E=this.scroll.length()-1,C=this.scroll.line(Math.min(A.index,E)),x=g(C,1),L=x[0],q=L;if(A.length>0){var N=this.scroll.line(Math.min(A.index+A.length,E)),F=g(N,1);q=F[0]}if(!(L==null||q==null)){var I=k.getBoundingClientRect();T.topI.bottom&&(k.scrollTop+=T.bottom-I.bottom)}}}}},{key:"setNativeRange",value:function(k,A){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:k,E=arguments.length>3&&arguments[3]!==void 0?arguments[3]:A,C=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;if(y.info("setNativeRange",k,A,T,E),!(k!=null&&(this.root.parentNode==null||k.parentNode==null||T.parentNode==null))){var x=document.getSelection();if(x!=null)if(k!=null){this.hasFocus()||this.root.focus();var L=(this.getNativeRange()||{}).native;if(L==null||C||k!==L.startContainer||A!==L.startOffset||T!==L.endContainer||E!==L.endOffset){k.tagName=="BR"&&(A=[].indexOf.call(k.parentNode.childNodes,k),k=k.parentNode),T.tagName=="BR"&&(E=[].indexOf.call(T.parentNode.childNodes,T),T=T.parentNode);var q=document.createRange();q.setStart(k,A),q.setEnd(T,E),x.removeAllRanges(),x.addRange(q)}}else x.removeAllRanges(),this.root.blur(),document.body.focus()}}},{key:"setRange",value:function(k){var A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:a.default.sources.API;if(typeof A=="string"&&(T=A,A=!1),y.info("setRange",k),k!=null){var E=this.rangeToNative(k);this.setNativeRange.apply(this,v(E).concat([A]))}else this.setNativeRange(null);this.update(T)}},{key:"update",value:function(){var k=arguments.length>0&&arguments[0]!==void 0?arguments[0]:a.default.sources.USER,A=this.lastRange,T=this.getRange(),E=g(T,2),C=E[0],x=E[1];if(this.lastRange=C,this.lastRange!=null&&(this.savedRange=this.lastRange),!(0,r.default)(A,this.lastRange)){var L;!this.composing&&x!=null&&x.native.collapsed&&x.start.node!==this.cursor.textNode&&this.cursor.restore();var q=[a.default.events.SELECTION_CHANGE,(0,n.default)(this.lastRange),(0,n.default)(A),k];if((L=this.emitter).emit.apply(L,[a.default.events.EDITOR_CHANGE].concat(q)),k!==a.default.sources.SILENT){var N;(N=this.emitter).emit.apply(N,q)}}}}]),M}();function S(M,O){try{O.parentNode}catch{return!1}return O instanceof Text&&(O=O.parentNode),M.contains(O)}p.Range=_,p.default=b},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function a(u,h){for(var $=0;$0&&(l+=1),[this.parent.domNode,l]},n.prototype.value=function(){var o;return o={},o[this.statics.blotName]=this.statics.value(this.domNode)||!0,o},n.scope=c.Scope.INLINE_BLOT,n}(s.default);p.default=i},function(e,p,m){var g=m(11),s=m(3),c={attributes:{compose:function(f,n,o){typeof f!="object"&&(f={}),typeof n!="object"&&(n={});var r=s(!0,{},n);o||(r=Object.keys(r).reduce(function(a,u){return r[u]!=null&&(a[u]=r[u]),a},{}));for(var l in f)f[l]!==void 0&&n[l]===void 0&&(r[l]=f[l]);return Object.keys(r).length>0?r:void 0},diff:function(f,n){typeof f!="object"&&(f={}),typeof n!="object"&&(n={});var o=Object.keys(f).concat(Object.keys(n)).reduce(function(r,l){return g(f[l],n[l])||(r[l]=n[l]===void 0?null:n[l]),r},{});return Object.keys(o).length>0?o:void 0},transform:function(f,n,o){if(typeof f!="object")return n;if(typeof n=="object"){if(!o)return n;var r=Object.keys(n).reduce(function(l,a){return f[a]===void 0&&(l[a]=n[a]),l},{});return Object.keys(r).length>0?r:void 0}}},iterator:function(f){return new i(f)},length:function(f){return typeof f.delete=="number"?f.delete:typeof f.retain=="number"?f.retain:typeof f.insert=="string"?f.insert.length:1}};function i(f){this.ops=f,this.index=0,this.offset=0}i.prototype.hasNext=function(){return this.peekLength()<1/0},i.prototype.next=function(f){f||(f=1/0);var n=this.ops[this.index];if(n){var o=this.offset,r=c.length(n);if(f>=r-o?(f=r-o,this.index+=1,this.offset=0):this.offset+=f,typeof n.delete=="number")return{delete:f};var l={};return n.attributes&&(l.attributes=n.attributes),typeof n.retain=="number"?l.retain=f:typeof n.insert=="string"?l.insert=n.insert.substr(o,f):l.insert=n.insert,l}else return{retain:1/0}},i.prototype.peek=function(){return this.ops[this.index]},i.prototype.peekLength=function(){return this.ops[this.index]?c.length(this.ops[this.index])-this.offset:1/0},i.prototype.peekType=function(){return this.ops[this.index]?typeof this.ops[this.index].delete=="number"?"delete":typeof this.ops[this.index].retain=="number"?"retain":"insert":"retain"},i.prototype.rest=function(){if(this.hasNext()){if(this.offset===0)return this.ops.slice(this.index);var f=this.offset,n=this.index,o=this.next(),r=this.ops.slice(this.index);return this.offset=f,this.index=n,[o].concat(r)}else return[]},e.exports=c},function(e,p){var m=function(){function g(u,h){return h!=null&&u instanceof h}var s;try{s=Map}catch{s=function(){}}var c;try{c=Set}catch{c=function(){}}var i;try{i=Promise}catch{i=function(){}}function f(u,h,$,v,w){typeof h=="object"&&($=h.depth,v=h.prototype,w=h.includeNonEnumerable,h=h.circular);var y=[],_=[],b=typeof Buffer!="undefined";typeof h=="undefined"&&(h=!0),typeof $=="undefined"&&($=1/0);function S(M,O){if(M===null)return null;if(O===0)return M;var k,A;if(typeof M!="object")return M;if(g(M,s))k=new s;else if(g(M,c))k=new c;else if(g(M,i))k=new i(function(I,R){M.then(function(B){I(S(B,O-1))},function(B){R(S(B,O-1))})});else if(f.__isArray(M))k=[];else if(f.__isRegExp(M))k=new RegExp(M.source,a(M)),M.lastIndex&&(k.lastIndex=M.lastIndex);else if(f.__isDate(M))k=new Date(M.getTime());else{if(b&&Buffer.isBuffer(M))return Buffer.allocUnsafe?k=Buffer.allocUnsafe(M.length):k=new Buffer(M.length),M.copy(k),k;g(M,Error)?k=Object.create(M):typeof v=="undefined"?(A=Object.getPrototypeOf(M),k=Object.create(A)):(k=Object.create(v),A=v)}if(h){var T=y.indexOf(M);if(T!=-1)return _[T];y.push(M),_.push(k)}g(M,s)&&M.forEach(function(I,R){var B=S(R,O-1),D=S(I,O-1);k.set(B,D)}),g(M,c)&&M.forEach(function(I){var R=S(I,O-1);k.add(R)});for(var E in M){var C;A&&(C=Object.getOwnPropertyDescriptor(A,E)),!(C&&C.set==null)&&(k[E]=S(M[E],O-1))}if(Object.getOwnPropertySymbols)for(var x=Object.getOwnPropertySymbols(M),E=0;E0){if(q instanceof r.BlockEmbed||R instanceof r.BlockEmbed){this.optimize();return}if(q instanceof $.default){var B=q.newlineIndex(q.length(),!0);if(B>-1&&(q=q.split(B+1),q===R)){this.optimize();return}}else if(R instanceof $.default){var D=R.newlineIndex(0);D>-1&&R.split(D+1)}var P=R.children.head instanceof u.default?null:R.children.head;q.moveChildren(R,P),q.remove()}this.optimize()}},{key:"enable",value:function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.domNode.setAttribute("contenteditable",E)}},{key:"formatAt",value:function(E,C,x,L){this.whitelist!=null&&!this.whitelist[x]||(c(A.prototype.__proto__||Object.getPrototypeOf(A.prototype),"formatAt",this).call(this,E,C,x,L),this.optimize())}},{key:"insertAt",value:function(E,C,x){if(!(x!=null&&this.whitelist!=null&&!this.whitelist[C])){if(E>=this.length())if(x==null||f.default.query(C,f.default.Scope.BLOCK)==null){var L=f.default.create(this.statics.defaultChild);this.appendChild(L),x==null&&C.endsWith(` +`)&&(C=C.slice(0,-1)),L.insertAt(0,C,x)}else{var q=f.default.create(C,x);this.appendChild(q)}else c(A.prototype.__proto__||Object.getPrototypeOf(A.prototype),"insertAt",this).call(this,E,C,x);this.optimize()}}},{key:"insertBefore",value:function(E,C){if(E.statics.scope===f.default.Scope.INLINE_BLOT){var x=f.default.create(this.statics.defaultChild);x.appendChild(E),E=x}c(A.prototype.__proto__||Object.getPrototypeOf(A.prototype),"insertBefore",this).call(this,E,C)}},{key:"leaf",value:function(E){return this.path(E).pop()||[null,-1]}},{key:"line",value:function(E){return E===this.length()?this.line(E-1):this.descendant(M,E)}},{key:"lines",value:function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Number.MAX_VALUE,x=function L(q,N,F){var I=[],R=F;return q.children.forEachAt(N,F,function(B,D,P){M(B)?I.push(B):B instanceof f.default.Container&&(I=I.concat(L(B,D,R))),R-=P}),I};return x(this,E,C)}},{key:"optimize",value:function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.batch!==!0&&(c(A.prototype.__proto__||Object.getPrototypeOf(A.prototype),"optimize",this).call(this,E,C),E.length>0&&this.emitter.emit(o.default.events.SCROLL_OPTIMIZE,E,C))}},{key:"path",value:function(E){return c(A.prototype.__proto__||Object.getPrototypeOf(A.prototype),"path",this).call(this,E).slice(1)}},{key:"update",value:function(E){if(this.batch!==!0){var C=o.default.sources.USER;typeof E=="string"&&(C=E),Array.isArray(E)||(E=this.observer.takeRecords()),E.length>0&&this.emitter.emit(o.default.events.SCROLL_BEFORE_UPDATE,C,E),c(A.prototype.__proto__||Object.getPrototypeOf(A.prototype),"update",this).call(this,E.concat([])),E.length>0&&this.emitter.emit(o.default.events.SCROLL_UPDATE,C,E)}}}]),A}(f.default.Scroll);O.blotName="scroll",O.className="ql-editor",O.tagName="DIV",O.defaultChild="block",O.allowedChildren=[l.default,r.BlockEmbed,w.default],p.default=O},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.SHORTKEY=p.default=void 0;var g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(V){return typeof V}:function(V){return V&&typeof Symbol=="function"&&V.constructor===Symbol&&V!==Symbol.prototype?"symbol":typeof V},s=function(){function V(W,H){var z=[],U=!0,Z=!1,ne=void 0;try{for(var re=W[Symbol.iterator](),ue;!(U=(ue=re.next()).done)&&(z.push(ue.value),!(H&&z.length===H));U=!0);}catch(fe){Z=!0,ne=fe}finally{try{!U&&re.return&&re.return()}finally{if(Z)throw ne}}return z}return function(W,H){if(Array.isArray(W))return W;if(Symbol.iterator in Object(W))return V(W,H);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c=function(){function V(W,H){for(var z=0;z1&&arguments[1]!==void 0?arguments[1]:{},Z=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},ne=j(z);if(ne==null||ne.key==null)return x.warn("Attempted to add invalid keyboard binding",ne);typeof U=="function"&&(U={handler:U}),typeof Z=="function"&&(Z={handler:Z}),ne=(0,l.default)(ne,U,Z),this.bindings[ne.key]=this.bindings[ne.key]||[],this.bindings[ne.key].push(ne)}},{key:"listen",value:function(){var z=this;this.quill.root.addEventListener("keydown",function(U){if(!U.defaultPrevented){var Z=U.which||U.keyCode,ne=(z.bindings[Z]||[]).filter(function(G){return W.match(U,G)});if(ne.length!==0){var re=z.quill.getSelection();if(!(re==null||!z.quill.hasFocus())){var ue=z.quill.getLine(re.index),fe=s(ue,2),ye=fe[0],_e=fe[1],X=z.quill.getLeaf(re.index),Q=s(X,2),ie=Q[0],ae=Q[1],te=re.length===0?[ie,ae]:z.quill.getLeaf(re.index+re.length),ge=s(te,2),$e=ge[0],be=ge[1],J=ie instanceof w.default.Text?ie.value().slice(0,ae):"",se=$e instanceof w.default.Text?$e.value().slice(be):"",le={collapsed:re.length===0,empty:re.length===0&&ye.length()<=1,format:z.quill.getFormat(re),offset:_e,prefix:J,suffix:se},K=ne.some(function(G){if(G.collapsed!=null&&G.collapsed!==le.collapsed||G.empty!=null&&G.empty!==le.empty||G.offset!=null&&G.offset!==le.offset)return!1;if(Array.isArray(G.format)){if(G.format.every(function(Y){return le.format[Y]==null}))return!1}else if(g(G.format)==="object"&&!Object.keys(G.format).every(function(Y){return G.format[Y]===!0?le.format[Y]!=null:G.format[Y]===!1?le.format[Y]==null:(0,o.default)(G.format[Y],le.format[Y])}))return!1;return G.prefix!=null&&!G.prefix.test(le.prefix)||G.suffix!=null&&!G.suffix.test(le.suffix)?!1:G.handler.call(z,re,le)!==!0});K&&U.preventDefault()}}}})}}]),W}(O.default);q.keys={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46},q.DEFAULTS={bindings:{bold:P("bold"),italic:P("italic"),underline:P("underline"),indent:{key:q.keys.TAB,format:["blockquote","indent","list"],handler:function(W,H){if(H.collapsed&&H.offset!==0)return!0;this.quill.format("indent","+1",_.default.sources.USER)}},outdent:{key:q.keys.TAB,shiftKey:!0,format:["blockquote","indent","list"],handler:function(W,H){if(H.collapsed&&H.offset!==0)return!0;this.quill.format("indent","-1",_.default.sources.USER)}},"outdent backspace":{key:q.keys.BACKSPACE,collapsed:!0,shiftKey:null,metaKey:null,ctrlKey:null,altKey:null,format:["indent","list"],offset:0,handler:function(W,H){H.format.indent!=null?this.quill.format("indent","-1",_.default.sources.USER):H.format.list!=null&&this.quill.format("list",!1,_.default.sources.USER)}},"indent code-block":D(!0),"outdent code-block":D(!1),"remove tab":{key:q.keys.TAB,shiftKey:!0,collapsed:!0,prefix:/\t$/,handler:function(W){this.quill.deleteText(W.index-1,1,_.default.sources.USER)}},tab:{key:q.keys.TAB,handler:function(W){this.quill.history.cutoff();var H=new u.default().retain(W.index).delete(W.length).insert(" ");this.quill.updateContents(H,_.default.sources.USER),this.quill.history.cutoff(),this.quill.setSelection(W.index+1,_.default.sources.SILENT)}},"list empty enter":{key:q.keys.ENTER,collapsed:!0,format:["list"],empty:!0,handler:function(W,H){this.quill.format("list",!1,_.default.sources.USER),H.format.indent&&this.quill.format("indent",!1,_.default.sources.USER)}},"checklist enter":{key:q.keys.ENTER,collapsed:!0,format:{list:"checked"},handler:function(W){var H=this.quill.getLine(W.index),z=s(H,2),U=z[0],Z=z[1],ne=(0,l.default)({},U.formats(),{list:"checked"}),re=new u.default().retain(W.index).insert(` +`,ne).retain(U.length()-Z-1).retain(1,{list:"unchecked"});this.quill.updateContents(re,_.default.sources.USER),this.quill.setSelection(W.index+1,_.default.sources.SILENT),this.quill.scrollIntoView()}},"header enter":{key:q.keys.ENTER,collapsed:!0,format:["header"],suffix:/^$/,handler:function(W,H){var z=this.quill.getLine(W.index),U=s(z,2),Z=U[0],ne=U[1],re=new u.default().retain(W.index).insert(` +`,H.format).retain(Z.length()-ne-1).retain(1,{header:null});this.quill.updateContents(re,_.default.sources.USER),this.quill.setSelection(W.index+1,_.default.sources.SILENT),this.quill.scrollIntoView()}},"list autofill":{key:" ",collapsed:!0,format:{list:!1},prefix:/^\s*?(\d+\.|-|\*|\[ ?\]|\[x\])$/,handler:function(W,H){var z=H.prefix.length,U=this.quill.getLine(W.index),Z=s(U,2),ne=Z[0],re=Z[1];if(re>z)return!0;var ue=void 0;switch(H.prefix.trim()){case"[]":case"[ ]":ue="unchecked";break;case"[x]":ue="checked";break;case"-":case"*":ue="bullet";break;default:ue="ordered"}this.quill.insertText(W.index," ",_.default.sources.USER),this.quill.history.cutoff();var fe=new u.default().retain(W.index-re).delete(z+1).retain(ne.length()-2-re).retain(1,{list:ue});this.quill.updateContents(fe,_.default.sources.USER),this.quill.history.cutoff(),this.quill.setSelection(W.index-z,_.default.sources.SILENT)}},"code exit":{key:q.keys.ENTER,collapsed:!0,format:["code-block"],prefix:/\n\n$/,suffix:/^\s+$/,handler:function(W){var H=this.quill.getLine(W.index),z=s(H,2),U=z[0],Z=z[1],ne=new u.default().retain(W.index+U.length()-Z-2).retain(1,{"code-block":null}).delete(1);this.quill.updateContents(ne,_.default.sources.USER)}},"embed left":N(q.keys.LEFT,!1),"embed left shift":N(q.keys.LEFT,!0),"embed right":N(q.keys.RIGHT,!1),"embed right shift":N(q.keys.RIGHT,!0)}};function N(V,W){var H,z=V===q.keys.LEFT?"prefix":"suffix";return H={key:V,shiftKey:W,altKey:null},A(H,z,/^$/),A(H,"handler",function(Z){var ne=Z.index;V===q.keys.RIGHT&&(ne+=Z.length+1);var re=this.quill.getLeaf(ne),ue=s(re,1),fe=ue[0];return fe instanceof w.default.Embed?(V===q.keys.LEFT?W?this.quill.setSelection(Z.index-1,Z.length+1,_.default.sources.USER):this.quill.setSelection(Z.index-1,_.default.sources.USER):W?this.quill.setSelection(Z.index,Z.length+1,_.default.sources.USER):this.quill.setSelection(Z.index+Z.length+1,_.default.sources.USER),!1):!0}),H}function F(V,W){if(!(V.index===0||this.quill.getLength()<=1)){var H=this.quill.getLine(V.index),z=s(H,1),U=z[0],Z={};if(W.offset===0){var ne=this.quill.getLine(V.index-1),re=s(ne,1),ue=re[0];if(ue!=null&&ue.length()>1){var fe=U.formats(),ye=this.quill.getFormat(V.index-1,1);Z=$.default.attributes.diff(fe,ye)||{}}}var _e=/[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(W.prefix)?2:1;this.quill.deleteText(V.index-_e,_e,_.default.sources.USER),Object.keys(Z).length>0&&this.quill.formatLine(V.index-_e,_e,Z,_.default.sources.USER),this.quill.focus()}}function I(V,W){var H=/^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(W.suffix)?2:1;if(!(V.index>=this.quill.getLength()-H)){var z={},U=0,Z=this.quill.getLine(V.index),ne=s(Z,1),re=ne[0];if(W.offset>=re.length()-1){var ue=this.quill.getLine(V.index+1),fe=s(ue,1),ye=fe[0];if(ye){var _e=re.formats(),X=this.quill.getFormat(V.index,1);z=$.default.attributes.diff(_e,X)||{},U=ye.length()}}this.quill.deleteText(V.index,H,_.default.sources.USER),Object.keys(z).length>0&&this.quill.formatLine(V.index+U-1,H,z,_.default.sources.USER)}}function R(V){var W=this.quill.getLines(V),H={};if(W.length>1){var z=W[0].formats(),U=W[W.length-1].formats();H=$.default.attributes.diff(U,z)||{}}this.quill.deleteText(V,_.default.sources.USER),Object.keys(H).length>0&&this.quill.formatLine(V.index,1,H,_.default.sources.USER),this.quill.setSelection(V.index,_.default.sources.SILENT),this.quill.focus()}function B(V,W){var H=this;V.length>0&&this.quill.scroll.deleteAt(V.index,V.length);var z=Object.keys(W.format).reduce(function(U,Z){return w.default.query(Z,w.default.Scope.BLOCK)&&!Array.isArray(W.format[Z])&&(U[Z]=W.format[Z]),U},{});this.quill.insertText(V.index,` +`,z,_.default.sources.USER),this.quill.setSelection(V.index+1,_.default.sources.SILENT),this.quill.focus(),Object.keys(W.format).forEach(function(U){z[U]==null&&(Array.isArray(W.format[U])||U!=="link"&&H.quill.format(U,W.format[U],_.default.sources.USER))})}function D(V){return{key:q.keys.TAB,shiftKey:!V,format:{"code-block":!0},handler:function(H){var z=w.default.query("code-block"),U=H.index,Z=H.length,ne=this.quill.scroll.descendant(z,U),re=s(ne,2),ue=re[0],fe=re[1];if(ue!=null){var ye=this.quill.getIndex(ue),_e=ue.newlineIndex(fe,!0)+1,X=ue.newlineIndex(ye+fe+Z),Q=ue.domNode.textContent.slice(_e,X).split(` +`);fe=0,Q.forEach(function(ie,ae){V?(ue.insertAt(_e+fe,z.TAB),fe+=z.TAB.length,ae===0?U+=z.TAB.length:Z+=z.TAB.length):ie.startsWith(z.TAB)&&(ue.deleteAt(_e+fe,z.TAB.length),fe-=z.TAB.length,ae===0?U-=z.TAB.length:Z-=z.TAB.length),fe+=ie.length+1}),this.quill.update(_.default.sources.USER),this.quill.setSelection(U,Z,_.default.sources.SILENT)}}}}function P(V){return{key:V[0].toUpperCase(),shortKey:!0,handler:function(H,z){this.quill.format(V,!z.format[V],_.default.sources.USER)}}}function j(V){if(typeof V=="string"||typeof V=="number")return j({key:V});if((typeof V=="undefined"?"undefined":g(V))==="object"&&(V=(0,f.default)(V,!1)),typeof V.key=="string")if(q.keys[V.key.toUpperCase()]!=null)V.key=q.keys[V.key.toUpperCase()];else if(V.key.length===1)V.key=V.key.toUpperCase().charCodeAt(0);else return null;return V.shortKey&&(V[L]=V.shortKey,delete V.shortKey),V}p.default=q,p.SHORTKEY=L},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function $(v,w){var y=[],_=!0,b=!1,S=void 0;try{for(var M=v[Symbol.iterator](),O;!(_=(O=M.next()).done)&&(y.push(O.value),!(w&&y.length===w));_=!0);}catch(k){b=!0,S=k}finally{try{!_&&M.return&&M.return()}finally{if(b)throw S}}return y}return function(v,w){if(Array.isArray(v))return v;if(Symbol.iterator in Object(v))return $(v,w);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function $(v,w,y){v===null&&(v=Function.prototype);var _=Object.getOwnPropertyDescriptor(v,w);if(_===void 0){var b=Object.getPrototypeOf(v);return b===null?void 0:$(b,w,y)}else{if("value"in _)return _.value;var S=_.get;return S===void 0?void 0:S.call(y)}},c=function(){function $(v,w){for(var y=0;y-1}p.default=l,p.sanitize=a},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(h){return typeof h}:function(h){return h&&typeof Symbol=="function"&&h.constructor===Symbol&&h!==Symbol.prototype?"symbol":typeof h},s=function(){function h($,v){for(var w=0;w1&&arguments[1]!==void 0?arguments[1]:!1,y=this.container.querySelector(".ql-selected");if(v!==y&&(y!=null&&y.classList.remove("ql-selected"),v!=null&&(v.classList.add("ql-selected"),this.select.selectedIndex=[].indexOf.call(v.parentNode.children,v),v.hasAttribute("data-value")?this.label.setAttribute("data-value",v.getAttribute("data-value")):this.label.removeAttribute("data-value"),v.hasAttribute("data-label")?this.label.setAttribute("data-label",v.getAttribute("data-label")):this.label.removeAttribute("data-label"),w))){if(typeof Event=="function")this.select.dispatchEvent(new Event("change"));else if((typeof Event=="undefined"?"undefined":g(Event))==="object"){var _=document.createEvent("Event");_.initEvent("change",!0,!0),this.select.dispatchEvent(_)}this.close()}}},{key:"update",value:function(){var v=void 0;if(this.select.selectedIndex>-1){var w=this.container.querySelector(".ql-picker-options").children[this.select.selectedIndex];v=this.select.options[this.select.selectedIndex],this.selectItem(w)}else this.selectItem(null);var y=v!=null&&v!==this.select.querySelector("option[selected]");this.label.classList.toggle("ql-active",y)}}]),h}();p.default=u},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=m(0),s=x(g),c=m(5),i=x(c),f=m(4),n=x(f),o=m(16),r=x(o),l=m(25),a=x(l),u=m(24),h=x(u),$=m(35),v=x($),w=m(6),y=x(w),_=m(22),b=x(_),S=m(7),M=x(S),O=m(55),k=x(O),A=m(42),T=x(A),E=m(23),C=x(E);function x(L){return L&&L.__esModule?L:{default:L}}i.default.register({"blots/block":n.default,"blots/block/embed":f.BlockEmbed,"blots/break":r.default,"blots/container":a.default,"blots/cursor":h.default,"blots/embed":v.default,"blots/inline":y.default,"blots/scroll":b.default,"blots/text":M.default,"modules/clipboard":k.default,"modules/history":T.default,"modules/keyboard":C.default}),s.default.register(n.default,r.default,h.default,y.default,b.default,M.default),p.default=i.default},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=m(1),s=function(){function c(i){this.domNode=i,this.domNode[g.DATA_KEY]={blot:this}}return Object.defineProperty(c.prototype,"statics",{get:function(){return this.constructor},enumerable:!0,configurable:!0}),c.create=function(i){if(this.tagName==null)throw new g.ParchmentError("Blot definition missing tagName");var f;return Array.isArray(this.tagName)?(typeof i=="string"&&(i=i.toUpperCase(),parseInt(i).toString()===i&&(i=parseInt(i))),typeof i=="number"?f=document.createElement(this.tagName[i-1]):this.tagName.indexOf(i)>-1?f=document.createElement(i):f=document.createElement(this.tagName[0])):f=document.createElement(this.tagName),this.className&&f.classList.add(this.className),f},c.prototype.attach=function(){this.parent!=null&&(this.scroll=this.parent.scroll)},c.prototype.clone=function(){var i=this.domNode.cloneNode(!1);return g.create(i)},c.prototype.detach=function(){this.parent!=null&&this.parent.removeChild(this),delete this.domNode[g.DATA_KEY]},c.prototype.deleteAt=function(i,f){var n=this.isolate(i,f);n.remove()},c.prototype.formatAt=function(i,f,n,o){var r=this.isolate(i,f);if(g.query(n,g.Scope.BLOT)!=null&&o)r.wrap(n,o);else if(g.query(n,g.Scope.ATTRIBUTE)!=null){var l=g.create(this.statics.scope);r.wrap(l),l.format(n,o)}},c.prototype.insertAt=function(i,f,n){var o=n==null?g.create("text",f):g.create(f,n),r=this.split(i);this.parent.insertBefore(o,r)},c.prototype.insertInto=function(i,f){f===void 0&&(f=null),this.parent!=null&&this.parent.children.remove(this);var n=null;i.children.insertBefore(this,f),f!=null&&(n=f.domNode),(this.domNode.parentNode!=i.domNode||this.domNode.nextSibling!=n)&&i.domNode.insertBefore(this.domNode,n),this.parent=i,this.attach()},c.prototype.isolate=function(i,f){var n=this.split(i);return n.split(f),n},c.prototype.length=function(){return 1},c.prototype.offset=function(i){return i===void 0&&(i=this.parent),this.parent==null||this==i?0:this.parent.children.offset(this)+this.parent.offset(i)},c.prototype.optimize=function(i){this.domNode[g.DATA_KEY]!=null&&delete this.domNode[g.DATA_KEY].mutations},c.prototype.remove=function(){this.domNode.parentNode!=null&&this.domNode.parentNode.removeChild(this.domNode),this.detach()},c.prototype.replace=function(i){i.parent!=null&&(i.parent.insertBefore(this,i.next),i.remove())},c.prototype.replaceWith=function(i,f){var n=typeof i=="string"?g.create(i,f):i;return n.replace(this),n},c.prototype.split=function(i,f){return i===0?this:this.next},c.prototype.update=function(i,f){},c.prototype.wrap=function(i,f){var n=typeof i=="string"?g.create(i,f):i;return this.parent!=null&&this.parent.insertBefore(n,this.next),n.appendChild(this),n},c.blotName="abstract",c}();p.default=s},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=m(12),s=m(32),c=m(33),i=m(1),f=function(){function n(o){this.attributes={},this.domNode=o,this.build()}return n.prototype.attribute=function(o,r){r?o.add(this.domNode,r)&&(o.value(this.domNode)!=null?this.attributes[o.attrName]=o:delete this.attributes[o.attrName]):(o.remove(this.domNode),delete this.attributes[o.attrName])},n.prototype.build=function(){var o=this;this.attributes={};var r=g.default.keys(this.domNode),l=s.default.keys(this.domNode),a=c.default.keys(this.domNode);r.concat(l).concat(a).forEach(function(u){var h=i.query(u,i.Scope.ATTRIBUTE);h instanceof g.default&&(o.attributes[h.attrName]=h)})},n.prototype.copy=function(o){var r=this;Object.keys(this.attributes).forEach(function(l){var a=r.attributes[l].value(r.domNode);o.format(l,a)})},n.prototype.move=function(o){var r=this;this.copy(o),Object.keys(this.attributes).forEach(function(l){r.attributes[l].remove(r.domNode)}),this.attributes={}},n.prototype.values=function(){var o=this;return Object.keys(this.attributes).reduce(function(r,l){return r[l]=o.attributes[l].value(o.domNode),r},{})},n}();p.default=f},function(e,p,m){var g=this&&this.__extends||function(){var f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var r in o)o.hasOwnProperty(r)&&(n[r]=o[r])};return function(n,o){f(n,o);function r(){this.constructor=n}n.prototype=o===null?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(p,"__esModule",{value:!0});var s=m(12);function c(f,n){var o=f.getAttribute("class")||"";return o.split(/\s+/).filter(function(r){return r.indexOf(n+"-")===0})}var i=function(f){g(n,f);function n(){return f!==null&&f.apply(this,arguments)||this}return n.keys=function(o){return(o.getAttribute("class")||"").split(/\s+/).map(function(r){return r.split("-").slice(0,-1).join("-")})},n.prototype.add=function(o,r){return this.canAdd(o,r)?(this.remove(o),o.classList.add(this.keyName+"-"+r),!0):!1},n.prototype.remove=function(o){var r=c(o,this.keyName);r.forEach(function(l){o.classList.remove(l)}),o.classList.length===0&&o.removeAttribute("class")},n.prototype.value=function(o){var r=c(o,this.keyName)[0]||"",l=r.slice(this.keyName.length+1);return this.canAdd(o,l)?l:""},n}(s.default);p.default=i},function(e,p,m){var g=this&&this.__extends||function(){var f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var r in o)o.hasOwnProperty(r)&&(n[r]=o[r])};return function(n,o){f(n,o);function r(){this.constructor=n}n.prototype=o===null?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(p,"__esModule",{value:!0});var s=m(12);function c(f){var n=f.split("-"),o=n.slice(1).map(function(r){return r[0].toUpperCase()+r.slice(1)}).join("");return n[0]+o}var i=function(f){g(n,f);function n(){return f!==null&&f.apply(this,arguments)||this}return n.keys=function(o){return(o.getAttribute("style")||"").split(";").map(function(r){var l=r.split(":");return l[0].trim()})},n.prototype.add=function(o,r){return this.canAdd(o,r)?(o.style[c(this.keyName)]=r,!0):!1},n.prototype.remove=function(o){o.style[c(this.keyName)]="",o.getAttribute("style")||o.removeAttribute("style")},n.prototype.value=function(o){var r=o.style[c(this.keyName)];return this.canAdd(o,r)?r:""},n}(s.default);p.default=i},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function i(f,n){for(var o=0;oO&&this.stack.undo.length>0){var k=this.stack.undo.pop();M=M.compose(k.undo),b=k.redo.compose(b)}else this.lastRecorded=O;this.stack.undo.push({redo:b,undo:M}),this.stack.undo.length>this.options.maxStack&&this.stack.undo.shift()}}},{key:"redo",value:function(){this.change("redo","undo")}},{key:"transform",value:function(b){this.stack.undo.forEach(function(S){S.undo=b.transform(S.undo,!0),S.redo=b.transform(S.redo,!0)}),this.stack.redo.forEach(function(S){S.undo=b.transform(S.undo,!0),S.redo=b.transform(S.redo,!0)})}},{key:"undo",value:function(){this.change("undo","redo")}}]),y}(o.default);h.DEFAULTS={delay:1e3,maxStack:100,userOnly:!1};function $(w){var y=w.ops[w.ops.length-1];return y==null?!1:y.insert!=null?typeof y.insert=="string"&&y.insert.endsWith(` +`):y.attributes!=null?Object.keys(y.attributes).some(function(_){return c.default.query(_,c.default.Scope.BLOCK)!=null}):!1}function v(w){var y=w.reduce(function(b,S){return b+=S.delete||0,b},0),_=w.length()-y;return $(w)&&(_-=1),_}p.default=h,p.getLastChangeIndex=v},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.default=p.BaseTooltip=void 0;var g=function(){function B(D,P){for(var j=0;j0&&arguments[0]!==void 0?arguments[0]:"link",V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;this.root.classList.remove("ql-hidden"),this.root.classList.add("ql-editing"),V!=null?this.textbox.value=V:j!==this.root.getAttribute("data-mode")&&(this.textbox.value=""),this.position(this.quill.getBounds(this.quill.selection.savedRange)),this.textbox.select(),this.textbox.setAttribute("placeholder",this.textbox.getAttribute("data-"+j)||""),this.root.setAttribute("data-mode",j)}},{key:"restoreFocus",value:function(){var j=this.quill.scrollingContainer.scrollTop;this.quill.focus(),this.quill.scrollingContainer.scrollTop=j}},{key:"save",value:function(){var j=this.textbox.value;switch(this.root.getAttribute("data-mode")){case"link":{var V=this.quill.root.scrollTop;this.linkRange?(this.quill.formatText(this.linkRange,"link",j,r.default.sources.USER),delete this.linkRange):(this.restoreFocus(),this.quill.format("link",j,r.default.sources.USER)),this.quill.root.scrollTop=V;break}case"video":j=I(j);case"formula":{if(!j)break;var W=this.quill.getSelection(!0);if(W!=null){var H=W.index+W.length;this.quill.insertEmbed(H,this.root.getAttribute("data-mode"),j,r.default.sources.USER),this.root.getAttribute("data-mode")==="formula"&&this.quill.insertText(H+1," ",r.default.sources.USER),this.quill.setSelection(H+2,r.default.sources.USER)}break}}this.textbox.value="",this.hide()}}]),D}(M.default);function I(B){var D=B.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/)||B.match(/^(?:(https?):\/\/)?(?:(?:www|m)\.)?youtu\.be\/([a-zA-Z0-9_-]+)/);return D?(D[1]||"https")+"://www.youtube.com/embed/"+D[2]+"?showinfo=0":(D=B.match(/^(?:(https?):\/\/)?(?:www\.)?vimeo\.com\/(\d+)/))?(D[1]||"https")+"://player.vimeo.com/video/"+D[2]+"/":B}function R(B,D){var P=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;D.forEach(function(j){var V=document.createElement("option");j===P?V.setAttribute("selected","selected"):V.setAttribute("value",j),B.appendChild(V)})}p.BaseTooltip=F,p.default=N},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function s(){this.head=this.tail=null,this.length=0}return s.prototype.append=function(){for(var c=[],i=0;i1&&this.append.apply(this,c.slice(1))},s.prototype.contains=function(c){for(var i,f=this.iterator();i=f();)if(i===c)return!0;return!1},s.prototype.insertBefore=function(c,i){!c||(c.next=i,i!=null?(c.prev=i.prev,i.prev!=null&&(i.prev.next=c),i.prev=c,i===this.head&&(this.head=c)):this.tail!=null?(this.tail.next=c,c.prev=this.tail,this.tail=c):(c.prev=null,this.head=this.tail=c),this.length+=1)},s.prototype.offset=function(c){for(var i=0,f=this.head;f!=null;){if(f===c)return i;i+=f.length(),f=f.next}return-1},s.prototype.remove=function(c){!this.contains(c)||(c.prev!=null&&(c.prev.next=c.next),c.next!=null&&(c.next.prev=c.prev),c===this.head&&(this.head=c.next),c===this.tail&&(this.tail=c.prev),this.length-=1)},s.prototype.iterator=function(c){return c===void 0&&(c=this.head),function(){var i=c;return c!=null&&(c=c.next),i}},s.prototype.find=function(c,i){i===void 0&&(i=!1);for(var f,n=this.iterator();f=n();){var o=f.length();if(ca?f(l,c-a,Math.min(i,a+h-c)):f(l,0,Math.min(h,c+i-a)),a+=h}},s.prototype.map=function(c){return this.reduce(function(i,f){return i.push(c(f)),i},[])},s.prototype.reduce=function(c,i){for(var f,n=this.iterator();f=n();)i=c(i,f);return i},s}();p.default=g},function(e,p,m){var g=this&&this.__extends||function(){var o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,l){r.__proto__=l}||function(r,l){for(var a in l)l.hasOwnProperty(a)&&(r[a]=l[a])};return function(r,l){o(r,l);function a(){this.constructor=r}r.prototype=l===null?Object.create(l):(a.prototype=l.prototype,new a)}}();Object.defineProperty(p,"__esModule",{value:!0});var s=m(17),c=m(1),i={attributes:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0},f=100,n=function(o){g(r,o);function r(l){var a=o.call(this,l)||this;return a.scroll=a,a.observer=new MutationObserver(function(u){a.update(u)}),a.observer.observe(a.domNode,i),a.attach(),a}return r.prototype.detach=function(){o.prototype.detach.call(this),this.observer.disconnect()},r.prototype.deleteAt=function(l,a){this.update(),l===0&&a===this.length()?this.children.forEach(function(u){u.remove()}):o.prototype.deleteAt.call(this,l,a)},r.prototype.formatAt=function(l,a,u,h){this.update(),o.prototype.formatAt.call(this,l,a,u,h)},r.prototype.insertAt=function(l,a,u){this.update(),o.prototype.insertAt.call(this,l,a,u)},r.prototype.optimize=function(l,a){var u=this;l===void 0&&(l=[]),a===void 0&&(a={}),o.prototype.optimize.call(this,a);for(var h=[].slice.call(this.observer.takeRecords());h.length>0;)l.push(h.pop());for(var $=function(_,b){b===void 0&&(b=!0),!(_==null||_===u)&&_.domNode.parentNode!=null&&(_.domNode[c.DATA_KEY].mutations==null&&(_.domNode[c.DATA_KEY].mutations=[]),b&&$(_.parent))},v=function(_){_.domNode[c.DATA_KEY]==null||_.domNode[c.DATA_KEY].mutations==null||(_ instanceof s.default&&_.children.forEach(v),_.optimize(a))},w=l,y=0;w.length>0;y+=1){if(y>=f)throw new Error("[Parchment] Maximum optimize iterations reached");for(w.forEach(function(_){var b=c.find(_.target,!0);b!=null&&(b.domNode===_.target&&(_.type==="childList"?($(c.find(_.previousSibling,!1)),[].forEach.call(_.addedNodes,function(S){var M=c.find(S,!1);$(M,!1),M instanceof s.default&&M.children.forEach(function(O){$(O,!1)})})):_.type==="attributes"&&$(b.prev)),$(b))}),this.children.forEach(v),w=[].slice.call(this.observer.takeRecords()),h=w.slice();h.length>0;)l.push(h.pop())}},r.prototype.update=function(l,a){var u=this;a===void 0&&(a={}),l=l||this.observer.takeRecords(),l.map(function(h){var $=c.find(h.target,!0);return $==null?null:$.domNode[c.DATA_KEY].mutations==null?($.domNode[c.DATA_KEY].mutations=[h],$):($.domNode[c.DATA_KEY].mutations.push(h),null)}).forEach(function(h){h==null||h===u||h.domNode[c.DATA_KEY]==null||h.update(h.domNode[c.DATA_KEY].mutations||[],a)}),this.domNode[c.DATA_KEY].mutations!=null&&o.prototype.update.call(this,this.domNode[c.DATA_KEY].mutations,a),this.optimize(l,a)},r.blotName="scroll",r.defaultChild="block",r.scope=c.Scope.BLOCK_BLOT,r.tagName="DIV",r}(s.default);p.default=n},function(e,p,m){var g=this&&this.__extends||function(){var n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,r){o.__proto__=r}||function(o,r){for(var l in r)r.hasOwnProperty(l)&&(o[l]=r[l])};return function(o,r){n(o,r);function l(){this.constructor=o}o.prototype=r===null?Object.create(r):(l.prototype=r.prototype,new l)}}();Object.defineProperty(p,"__esModule",{value:!0});var s=m(18),c=m(1);function i(n,o){if(Object.keys(n).length!==Object.keys(o).length)return!1;for(var r in n)if(n[r]!==o[r])return!1;return!0}var f=function(n){g(o,n);function o(){return n!==null&&n.apply(this,arguments)||this}return o.formats=function(r){if(r.tagName!==o.tagName)return n.formats.call(this,r)},o.prototype.format=function(r,l){var a=this;r===this.statics.blotName&&!l?(this.children.forEach(function(u){u instanceof s.default||(u=u.wrap(o.blotName,!0)),a.attributes.copy(u)}),this.unwrap()):n.prototype.format.call(this,r,l)},o.prototype.formatAt=function(r,l,a,u){if(this.formats()[a]!=null||c.query(a,c.Scope.ATTRIBUTE)){var h=this.isolate(r,l);h.format(a,u)}else n.prototype.formatAt.call(this,r,l,a,u)},o.prototype.optimize=function(r){n.prototype.optimize.call(this,r);var l=this.formats();if(Object.keys(l).length===0)return this.unwrap();var a=this.next;a instanceof o&&a.prev===this&&i(l,a.formats())&&(a.moveChildren(this),a.remove())},o.blotName="inline",o.scope=c.Scope.INLINE_BLOT,o.tagName="SPAN",o}(s.default);p.default=f},function(e,p,m){var g=this&&this.__extends||function(){var f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var r in o)o.hasOwnProperty(r)&&(n[r]=o[r])};return function(n,o){f(n,o);function r(){this.constructor=n}n.prototype=o===null?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(p,"__esModule",{value:!0});var s=m(18),c=m(1),i=function(f){g(n,f);function n(){return f!==null&&f.apply(this,arguments)||this}return n.formats=function(o){var r=c.query(n.blotName).tagName;if(o.tagName!==r)return f.formats.call(this,o)},n.prototype.format=function(o,r){c.query(o,c.Scope.BLOCK)!=null&&(o===this.statics.blotName&&!r?this.replaceWith(n.blotName):f.prototype.format.call(this,o,r))},n.prototype.formatAt=function(o,r,l,a){c.query(l,c.Scope.BLOCK)!=null?this.format(l,a):f.prototype.formatAt.call(this,o,r,l,a)},n.prototype.insertAt=function(o,r,l){if(l==null||c.query(r,c.Scope.INLINE)!=null)f.prototype.insertAt.call(this,o,r,l);else{var a=this.split(o),u=c.create(r,l);a.parent.insertBefore(u,a)}},n.prototype.update=function(o,r){navigator.userAgent.match(/Trident/)?this.build():f.prototype.update.call(this,o,r)},n.blotName="block",n.scope=c.Scope.BLOCK_BLOT,n.tagName="P",n}(s.default);p.default=i},function(e,p,m){var g=this&&this.__extends||function(){var i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,n){f.__proto__=n}||function(f,n){for(var o in n)n.hasOwnProperty(o)&&(f[o]=n[o])};return function(f,n){i(f,n);function o(){this.constructor=f}f.prototype=n===null?Object.create(n):(o.prototype=n.prototype,new o)}}();Object.defineProperty(p,"__esModule",{value:!0});var s=m(19),c=function(i){g(f,i);function f(){return i!==null&&i.apply(this,arguments)||this}return f.formats=function(n){},f.prototype.format=function(n,o){i.prototype.formatAt.call(this,0,this.length(),n,o)},f.prototype.formatAt=function(n,o,r,l){n===0&&o===this.length()?this.format(r,l):i.prototype.formatAt.call(this,n,o,r,l)},f.prototype.formats=function(){return this.statics.formats(this.domNode)},f}(s.default);p.default=c},function(e,p,m){var g=this&&this.__extends||function(){var f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var r in o)o.hasOwnProperty(r)&&(n[r]=o[r])};return function(n,o){f(n,o);function r(){this.constructor=n}n.prototype=o===null?Object.create(o):(r.prototype=o.prototype,new r)}}();Object.defineProperty(p,"__esModule",{value:!0});var s=m(19),c=m(1),i=function(f){g(n,f);function n(o){var r=f.call(this,o)||this;return r.text=r.statics.value(r.domNode),r}return n.create=function(o){return document.createTextNode(o)},n.value=function(o){var r=o.data;return r.normalize&&(r=r.normalize()),r},n.prototype.deleteAt=function(o,r){this.domNode.data=this.text=this.text.slice(0,o)+this.text.slice(o+r)},n.prototype.index=function(o,r){return this.domNode===o?r:-1},n.prototype.insertAt=function(o,r,l){l==null?(this.text=this.text.slice(0,o)+r+this.text.slice(o),this.domNode.data=this.text):f.prototype.insertAt.call(this,o,r,l)},n.prototype.length=function(){return this.text.length},n.prototype.optimize=function(o){f.prototype.optimize.call(this,o),this.text=this.statics.value(this.domNode),this.text.length===0?this.remove():this.next instanceof n&&this.next.prev===this&&(this.insertAt(this.length(),this.next.value()),this.next.remove())},n.prototype.position=function(o,r){return[this.domNode,o]},n.prototype.split=function(o,r){if(r===void 0&&(r=!1),!r){if(o===0)return this;if(o===this.length())return this.next}var l=c.create(this.domNode.splitText(o));return this.parent.insertBefore(l,this.next),this.text=this.statics.value(this.domNode),l},n.prototype.update=function(o,r){var l=this;o.some(function(a){return a.type==="characterData"&&a.target===l.domNode})&&(this.text=this.statics.value(this.domNode))},n.prototype.value=function(){return this.text},n.blotName="text",n.scope=c.Scope.INLINE_BLOT,n}(s.default);p.default=i},function(e,p,m){var g=document.createElement("div");if(g.classList.toggle("test-class",!1),g.classList.contains("test-class")){var s=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(c,i){return arguments.length>1&&!this.contains(c)==!i?i:s.call(this,c)}}String.prototype.startsWith||(String.prototype.startsWith=function(c,i){return i=i||0,this.substr(i,c.length)===c}),String.prototype.endsWith||(String.prototype.endsWith=function(c,i){var f=this.toString();(typeof i!="number"||!isFinite(i)||Math.floor(i)!==i||i>f.length)&&(i=f.length),i-=c.length;var n=f.indexOf(c,i);return n!==-1&&n===i}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(i){if(this===null)throw new TypeError("Array.prototype.find called on null or undefined");if(typeof i!="function")throw new TypeError("predicate must be a function");for(var f=Object(this),n=f.length>>>0,o=arguments[1],r,l=0;l_.length?y:_,M=y.length>_.length?_:y,O=S.indexOf(M);if(O!=-1)return b=[[g,S.substring(0,O)],[s,M],[g,S.substring(O+M.length)]],y.length>_.length&&(b[0][0]=b[2][0]=m),b;if(M.length==1)return[[m,y],[g,_]];var k=l(y,_);if(k){var A=k[0],T=k[1],E=k[2],C=k[3],x=k[4],L=c(A,E),q=c(T,C);return L.concat([[s,x]],q)}return f(y,_)}function f(y,_){for(var b=y.length,S=_.length,M=Math.ceil((b+S)/2),O=M,k=2*M,A=new Array(k),T=new Array(k),E=0;Eb)q+=2;else if(P>S)L+=2;else if(x){var j=O+C-R;if(j>=0&&j=V)return n(y,_,D,P)}}}for(var W=-I+N;W<=I-F;W+=2){var j=O+W,V;W==-I||W!=I&&T[j-1]b)F+=2;else if(H>S)N+=2;else if(!x){var B=O+C-W;if(B>=0&&B=V)return n(y,_,D,P)}}}}return[[m,y],[g,_]]}function n(y,_,b,S){var M=y.substring(0,b),O=_.substring(0,S),k=y.substring(b),A=_.substring(S),T=c(M,O),E=c(k,A);return T.concat(E)}function o(y,_){if(!y||!_||y.charAt(0)!=_.charAt(0))return 0;for(var b=0,S=Math.min(y.length,_.length),M=S,O=0;b_.length?y:_,S=y.length>_.length?_:y;if(b.length<4||S.length*2=q.length?[D,P,j,V,B]:null}var O=M(b,S,Math.ceil(b.length/4)),k=M(b,S,Math.ceil(b.length/2)),A;if(!O&&!k)return null;k?O?A=O[4].length>k[4].length?O:k:A=k:A=O;var T,E,C,x;y.length>_.length?(T=A[0],E=A[1],C=A[2],x=A[3]):(C=A[0],x=A[1],T=A[2],E=A[3]);var L=A[4];return[T,E,C,x,L]}function a(y){y.push([s,""]);for(var _=0,b=0,S=0,M="",O="",k;_1?(b!==0&&S!==0&&(k=o(O,M),k!==0&&(_-b-S>0&&y[_-b-S-1][0]==s?y[_-b-S-1][1]+=O.substring(0,k):(y.splice(0,0,[s,O.substring(0,k)]),_++),O=O.substring(k),M=M.substring(k)),k=r(O,M),k!==0&&(y[_][1]=O.substring(O.length-k)+y[_][1],O=O.substring(0,O.length-k),M=M.substring(0,M.length-k))),b===0?y.splice(_-S,b+S,[g,O]):S===0?y.splice(_-b,b+S,[m,M]):y.splice(_-b-S,b+S,[m,M],[g,O]),_=_-b-S+(b?1:0)+(S?1:0)+1):_!==0&&y[_-1][0]==s?(y[_-1][1]+=y[_][1],y.splice(_,1)):_++,S=0,b=0,M="",O="";break}y[y.length-1][1]===""&&y.pop();var A=!1;for(_=1;_0&&S.splice(M+2,0,[k[0],A]),w(S,M,3)}else return y}function v(y){for(var _=!1,b=function(k){return k.charCodeAt(0)>=56320&&k.charCodeAt(0)<=57343},S=function(k){return k.charCodeAt(k.length-1)>=55296&&k.charCodeAt(k.length-1)<=56319},M=2;M0&&O.push(y[M]);return O}function w(y,_,b){for(var S=_+b-1;S>=0&&S>=_-1;S--)if(S+1\r?\n +\<"),this.convert();var te=this.quill.getFormat(this.quill.selection.savedRange.index);if(te[S.default.blotName]){var ge=this.container.innerText;return this.container.innerHTML="",new o.default().insert(ge,E({},S.default.blotName,te[S.default.blotName]))}var $e=this.prepareMatching(),be=s($e,2),J=be[0],se=be[1],le=W(this.container,J,se);return j(le,` +`)&&le.ops[le.ops.length-1].attributes==null&&(le=le.compose(new o.default().retain(le.length()-1).delete(1))),q.log("convert",this.container.innerHTML,le),this.container.innerHTML="",le}},{key:"dangerouslyPasteHTML",value:function(ae,te){var ge=arguments.length>2&&arguments[2]!==void 0?arguments[2]:u.default.sources.API;if(typeof ae=="string")this.quill.setContents(this.convert(ae),te),this.quill.setSelection(0,u.default.sources.SILENT);else{var $e=this.convert(te);this.quill.updateContents(new o.default().retain(ae).concat($e),ge),this.quill.setSelection(ae+$e.length(),u.default.sources.SILENT)}}},{key:"onPaste",value:function(ae){var te=this;if(!(ae.defaultPrevented||!this.quill.isEnabled())){var ge=this.quill.getSelection(),$e=new o.default().retain(ge.index),be=this.quill.scrollingContainer.scrollTop;this.container.focus(),this.quill.selection.update(u.default.sources.SILENT),setTimeout(function(){$e=$e.concat(te.convert()).delete(ge.length),te.quill.updateContents($e,u.default.sources.USER),te.quill.setSelection($e.length()-ge.length,u.default.sources.SILENT),te.quill.scrollingContainer.scrollTop=be,te.quill.focus()},1)}}},{key:"prepareMatching",value:function(){var ae=this,te=[],ge=[];return this.matchers.forEach(function($e){var be=s($e,2),J=be[0],se=be[1];switch(J){case Node.TEXT_NODE:ge.push(se);break;case Node.ELEMENT_NODE:te.push(se);break;default:[].forEach.call(ae.container.querySelectorAll(J),function(le){le[N]=le[N]||[],le[N].push(se)});break}}),[te,ge]}}]),Q}(w.default);B.DEFAULTS={matchers:[],matchVisual:!0};function D(X,Q,ie){return(typeof Q=="undefined"?"undefined":g(Q))==="object"?Object.keys(Q).reduce(function(ae,te){return D(ae,te,Q[te])},X):X.reduce(function(ae,te){return te.attributes&&te.attributes[Q]?ae.push(te):ae.insert(te.insert,(0,f.default)({},E({},Q,ie),te.attributes))},new o.default)}function P(X){if(X.nodeType!==Node.ELEMENT_NODE)return{};var Q="__ql-computed-style";return X[Q]||(X[Q]=window.getComputedStyle(X))}function j(X,Q){for(var ie="",ae=X.ops.length-1;ae>=0&&ie.length-1}function W(X,Q,ie){return X.nodeType===X.TEXT_NODE?ie.reduce(function(ae,te){return te(X,ae)},new o.default):X.nodeType===X.ELEMENT_NODE?[].reduce.call(X.childNodes||[],function(ae,te){var ge=W(te,Q,ie);return te.nodeType===X.ELEMENT_NODE&&(ge=Q.reduce(function($e,be){return be(te,$e)},ge),ge=(te[N]||[]).reduce(function($e,be){return be(te,$e)},ge)),ae.concat(ge)},new o.default):new o.default}function H(X,Q,ie){return D(ie,X,!0)}function z(X,Q){var ie=l.default.Attributor.Attribute.keys(X),ae=l.default.Attributor.Class.keys(X),te=l.default.Attributor.Style.keys(X),ge={};return ie.concat(ae).concat(te).forEach(function($e){var be=l.default.query($e,l.default.Scope.ATTRIBUTE);be!=null&&(ge[be.attrName]=be.value(X),ge[be.attrName])||(be=I[$e],be!=null&&(be.attrName===$e||be.keyName===$e)&&(ge[be.attrName]=be.value(X)||void 0),be=R[$e],be!=null&&(be.attrName===$e||be.keyName===$e)&&(be=R[$e],ge[be.attrName]=be.value(X)||void 0))}),Object.keys(ge).length>0&&(Q=D(Q,ge)),Q}function U(X,Q){var ie=l.default.query(X);if(ie==null)return Q;if(ie.prototype instanceof l.default.Embed){var ae={},te=ie.value(X);te!=null&&(ae[ie.blotName]=te,Q=new o.default().insert(ae,ie.formats(X)))}else typeof ie.formats=="function"&&(Q=D(Q,ie.blotName,ie.formats(X)));return Q}function Z(X,Q){return j(Q,` +`)||Q.insert(` +`),Q}function ne(){return new o.default}function re(X,Q){var ie=l.default.query(X);if(ie==null||ie.blotName!=="list-item"||!j(Q,` +`))return Q;for(var ae=-1,te=X.parentNode;!te.classList.contains("ql-clipboard");)(l.default.query(te)||{}).blotName==="list"&&(ae+=1),te=te.parentNode;return ae<=0?Q:Q.compose(new o.default().retain(Q.length()-1).retain(1,{indent:ae}))}function ue(X,Q){return j(Q,` +`)||(V(X)||Q.length()>0&&X.nextSibling&&V(X.nextSibling))&&Q.insert(` +`),Q}function fe(X,Q){if(V(X)&&X.nextElementSibling!=null&&!j(Q,` + +`)){var ie=X.offsetHeight+parseFloat(P(X).marginTop)+parseFloat(P(X).marginBottom);X.nextElementSibling.offsetTop>X.offsetTop+ie*1.5&&Q.insert(` +`)}return Q}function ye(X,Q){var ie={},ae=X.style||{};return ae.fontStyle&&P(X).fontStyle==="italic"&&(ie.italic=!0),ae.fontWeight&&(P(X).fontWeight.startsWith("bold")||parseInt(P(X).fontWeight)>=700)&&(ie.bold=!0),Object.keys(ie).length>0&&(Q=D(Q,ie)),parseFloat(ae.textIndent||0)>0&&(Q=new o.default().insert(" ").concat(Q)),Q}function _e(X,Q){var ie=X.data;if(X.parentNode.tagName==="O:P")return Q.insert(ie.trim());if(ie.trim().length===0&&X.parentNode.classList.contains("ql-clipboard"))return Q;if(!P(X.parentNode).whiteSpace.startsWith("pre")){var ae=function(ge,$e){return $e=$e.replace(/[^\u00a0]/g,""),$e.length<1&&ge?" ":$e};ie=ie.replace(/\r\n/g," ").replace(/\n/g," "),ie=ie.replace(/\s\s+/g,ae.bind(ae,!0)),(X.previousSibling==null&&V(X.parentNode)||X.previousSibling!=null&&V(X.previousSibling))&&(ie=ie.replace(/^\s+/,ae.bind(ae,!1))),(X.nextSibling==null&&V(X.parentNode)||X.nextSibling!=null&&V(X.nextSibling))&&(ie=ie.replace(/\s+$/,ae.bind(ae,!1)))}return Q.insert(ie)}p.default=B,p.matchAttributor=z,p.matchBlot=U,p.matchNewline=ue,p.matchSpacing=fe,p.matchText=_e},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function a(u,h){for(var $=0;$ '},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function a(u,h){for(var $=0;$l.right&&(u=l.right-a.right,this.root.style.left=o+u+"px"),a.leftl.bottom){var h=a.bottom-a.top,$=n.bottom-n.top+h;this.root.style.top=r-$+"px",this.root.classList.add("ql-flip")}return u}},{key:"show",value:function(){this.root.classList.remove("ql-editing"),this.root.classList.remove("ql-hidden")}}]),i}();p.default=c},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function k(A,T){var E=[],C=!0,x=!1,L=void 0;try{for(var q=A[Symbol.iterator](),N;!(C=(N=q.next()).done)&&(E.push(N.value),!(T&&E.length===T));C=!0);}catch(F){x=!0,L=F}finally{try{!C&&q.return&&q.return()}finally{if(x)throw L}}return E}return function(A,T){if(Array.isArray(A))return A;if(Symbol.iterator in Object(A))return k(A,T);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function k(A,T,E){A===null&&(A=Function.prototype);var C=Object.getOwnPropertyDescriptor(A,T);if(C===void 0){var x=Object.getPrototypeOf(A);return x===null?void 0:k(x,T,E)}else{if("value"in C)return C.value;var L=C.get;return L===void 0?void 0:L.call(E)}},c=function(){function k(A,T){for(var E=0;E','','',''].join(""),p.default=M},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=m(29),s=te(g),c=m(36),i=m(38),f=m(64),n=m(65),o=te(n),r=m(66),l=te(r),a=m(67),u=te(a),h=m(37),$=m(26),v=m(39),w=m(40),y=m(56),_=te(y),b=m(68),S=te(b),M=m(27),O=te(M),k=m(69),A=te(k),T=m(70),E=te(T),C=m(71),x=te(C),L=m(72),q=te(L),N=m(73),F=te(N),I=m(13),R=te(I),B=m(74),D=te(B),P=m(75),j=te(P),V=m(57),W=te(V),H=m(41),z=te(H),U=m(28),Z=te(U),ne=m(59),re=te(ne),ue=m(60),fe=te(ue),ye=m(61),_e=te(ye),X=m(108),Q=te(X),ie=m(62),ae=te(ie);function te(ge){return ge&&ge.__esModule?ge:{default:ge}}s.default.register({"attributors/attribute/direction":i.DirectionAttribute,"attributors/class/align":c.AlignClass,"attributors/class/background":h.BackgroundClass,"attributors/class/color":$.ColorClass,"attributors/class/direction":i.DirectionClass,"attributors/class/font":v.FontClass,"attributors/class/size":w.SizeClass,"attributors/style/align":c.AlignStyle,"attributors/style/background":h.BackgroundStyle,"attributors/style/color":$.ColorStyle,"attributors/style/direction":i.DirectionStyle,"attributors/style/font":v.FontStyle,"attributors/style/size":w.SizeStyle},!0),s.default.register({"formats/align":c.AlignClass,"formats/direction":i.DirectionClass,"formats/indent":f.IndentClass,"formats/background":h.BackgroundStyle,"formats/color":$.ColorStyle,"formats/font":v.FontClass,"formats/size":w.SizeClass,"formats/blockquote":o.default,"formats/code-block":R.default,"formats/header":l.default,"formats/list":u.default,"formats/bold":_.default,"formats/code":I.Code,"formats/italic":S.default,"formats/link":O.default,"formats/script":A.default,"formats/strike":E.default,"formats/underline":x.default,"formats/image":q.default,"formats/video":F.default,"formats/list/item":a.ListItem,"modules/formula":D.default,"modules/syntax":j.default,"modules/toolbar":W.default,"themes/bubble":Q.default,"themes/snow":ae.default,"ui/icons":z.default,"ui/picker":Z.default,"ui/icon-picker":fe.default,"ui/color-picker":re.default,"ui/tooltip":_e.default},!0),p.default=s.default},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.IndentClass=void 0;var g=function(){function u(h,$){for(var v=0;v<$.length;v++){var w=$[v];w.enumerable=w.enumerable||!1,w.configurable=!0,"value"in w&&(w.writable=!0),Object.defineProperty(h,w.key,w)}}return function(h,$,v){return $&&u(h.prototype,$),v&&u(h,v),h}}(),s=function u(h,$,v){h===null&&(h=Function.prototype);var w=Object.getOwnPropertyDescriptor(h,$);if(w===void 0){var y=Object.getPrototypeOf(h);return y===null?void 0:u(y,$,v)}else{if("value"in w)return w.value;var _=w.get;return _===void 0?void 0:_.call(v)}},c=m(0),i=f(c);function f(u){return u&&u.__esModule?u:{default:u}}function n(u,h){if(!(u instanceof h))throw new TypeError("Cannot call a class as a function")}function o(u,h){if(!u)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return h&&(typeof h=="object"||typeof h=="function")?h:u}function r(u,h){if(typeof h!="function"&&h!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof h);u.prototype=Object.create(h&&h.prototype,{constructor:{value:u,enumerable:!1,writable:!0,configurable:!0}}),h&&(Object.setPrototypeOf?Object.setPrototypeOf(u,h):u.__proto__=h)}var l=function(u){r(h,u);function h(){return n(this,h),o(this,(h.__proto__||Object.getPrototypeOf(h)).apply(this,arguments))}return g(h,[{key:"add",value:function(v,w){if(w==="+1"||w==="-1"){var y=this.value(v)||0;w=w==="+1"?y+1:y-1}return w===0?(this.remove(v),!0):s(h.prototype.__proto__||Object.getPrototypeOf(h.prototype),"add",this).call(this,v,w)}},{key:"canAdd",value:function(v,w){return s(h.prototype.__proto__||Object.getPrototypeOf(h.prototype),"canAdd",this).call(this,v,w)||s(h.prototype.__proto__||Object.getPrototypeOf(h.prototype),"canAdd",this).call(this,v,parseInt(w))}},{key:"value",value:function(v){return parseInt(s(h.prototype.__proto__||Object.getPrototypeOf(h.prototype),"value",this).call(this,v))||void 0}}]),h}(i.default.Attributor.Class),a=new l("indent","ql-indent",{scope:i.default.Scope.BLOCK,whitelist:[1,2,3,4,5,6,7,8]});p.IndentClass=a},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=m(4),s=c(g);function c(r){return r&&r.__esModule?r:{default:r}}function i(r,l){if(!(r instanceof l))throw new TypeError("Cannot call a class as a function")}function f(r,l){if(!r)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return l&&(typeof l=="object"||typeof l=="function")?l:r}function n(r,l){if(typeof l!="function"&&l!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof l);r.prototype=Object.create(l&&l.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),l&&(Object.setPrototypeOf?Object.setPrototypeOf(r,l):r.__proto__=l)}var o=function(r){n(l,r);function l(){return i(this,l),f(this,(l.__proto__||Object.getPrototypeOf(l)).apply(this,arguments))}return l}(s.default);o.blotName="blockquote",o.tagName="blockquote",p.default=o},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function l(a,u){for(var h=0;h0&&this.children.tail.format(S,M)}},{key:"formats",value:function(){return a({},this.statics.blotName,this.statics.formats(this.domNode))}},{key:"insertBefore",value:function(S,M){if(S instanceof v)s(_.prototype.__proto__||Object.getPrototypeOf(_.prototype),"insertBefore",this).call(this,S,M);else{var O=M==null?this.length():M.offset(this),k=this.split(O);k.parent.insertBefore(S,k)}}},{key:"optimize",value:function(S){s(_.prototype.__proto__||Object.getPrototypeOf(_.prototype),"optimize",this).call(this,S);var M=this.next;M!=null&&M.prev===this&&M.statics.blotName===this.statics.blotName&&M.domNode.tagName===this.domNode.tagName&&M.domNode.getAttribute("data-checked")===this.domNode.getAttribute("data-checked")&&(M.moveChildren(this),M.remove())}},{key:"replace",value:function(S){if(S.statics.blotName!==this.statics.blotName){var M=i.default.create(this.statics.defaultChild);S.moveChildren(M),this.appendChild(M)}s(_.prototype.__proto__||Object.getPrototypeOf(_.prototype),"replace",this).call(this,S)}}]),_}(r.default);w.blotName="list",w.scope=i.default.Scope.BLOCK_BLOT,w.tagName=["OL","UL"],w.defaultChild="list-item",w.allowedChildren=[v],p.ListItem=v,p.default=w},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=m(56),s=c(g);function c(r){return r&&r.__esModule?r:{default:r}}function i(r,l){if(!(r instanceof l))throw new TypeError("Cannot call a class as a function")}function f(r,l){if(!r)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return l&&(typeof l=="object"||typeof l=="function")?l:r}function n(r,l){if(typeof l!="function"&&l!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof l);r.prototype=Object.create(l&&l.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),l&&(Object.setPrototypeOf?Object.setPrototypeOf(r,l):r.__proto__=l)}var o=function(r){n(l,r);function l(){return i(this,l),f(this,(l.__proto__||Object.getPrototypeOf(l)).apply(this,arguments))}return l}(s.default);o.blotName="italic",o.tagName=["EM","I"],p.default=o},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function a(u,h){for(var $=0;$-1?y?this.domNode.setAttribute(w,y):this.domNode.removeAttribute(w):s($.prototype.__proto__||Object.getPrototypeOf($.prototype),"format",this).call(this,w,y)}}],[{key:"create",value:function(w){var y=s($.__proto__||Object.getPrototypeOf($),"create",this).call(this,w);return typeof w=="string"&&y.setAttribute("src",this.sanitize(w)),y}},{key:"formats",value:function(w){return a.reduce(function(y,_){return w.hasAttribute(_)&&(y[_]=w.getAttribute(_)),y},{})}},{key:"match",value:function(w){return/\.(jpe?g|gif|png)$/.test(w)||/^data:image\/.+;base64/.test(w)}},{key:"sanitize",value:function(w){return(0,f.sanitize)(w,["http","https","data"])?w:"//:0"}},{key:"value",value:function(w){return w.getAttribute("src")}}]),$}(i.default.Embed);u.blotName="image",u.tagName="IMG",p.default=u},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0});var g=function(){function h($,v){for(var w=0;w-1?y?this.domNode.setAttribute(w,y):this.domNode.removeAttribute(w):s($.prototype.__proto__||Object.getPrototypeOf($.prototype),"format",this).call(this,w,y)}}],[{key:"create",value:function(w){var y=s($.__proto__||Object.getPrototypeOf($),"create",this).call(this,w);return y.setAttribute("frameborder","0"),y.setAttribute("allowfullscreen",!0),y.setAttribute("src",this.sanitize(w)),y}},{key:"formats",value:function(w){return a.reduce(function(y,_){return w.hasAttribute(_)&&(y[_]=w.getAttribute(_)),y},{})}},{key:"sanitize",value:function(w){return f.default.sanitize(w)}},{key:"value",value:function(w){return w.getAttribute("src")}}]),$}(c.BlockEmbed);u.blotName="video",u.className="ql-video",u.tagName="IFRAME",p.default=u},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.default=p.FormulaBlot=void 0;var g=function(){function w(y,_){for(var b=0;b<_.length;b++){var S=_[b];S.enumerable=S.enumerable||!1,S.configurable=!0,"value"in S&&(S.writable=!0),Object.defineProperty(y,S.key,S)}}return function(y,_,b){return _&&w(y.prototype,_),b&&w(y,b),y}}(),s=function w(y,_,b){y===null&&(y=Function.prototype);var S=Object.getOwnPropertyDescriptor(y,_);if(S===void 0){var M=Object.getPrototypeOf(y);return M===null?void 0:w(M,_,b)}else{if("value"in S)return S.value;var O=S.get;return O===void 0?void 0:O.call(b)}},c=m(35),i=l(c),f=m(5),n=l(f),o=m(9),r=l(o);function l(w){return w&&w.__esModule?w:{default:w}}function a(w,y){if(!(w instanceof y))throw new TypeError("Cannot call a class as a function")}function u(w,y){if(!w)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return y&&(typeof y=="object"||typeof y=="function")?y:w}function h(w,y){if(typeof y!="function"&&y!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof y);w.prototype=Object.create(y&&y.prototype,{constructor:{value:w,enumerable:!1,writable:!0,configurable:!0}}),y&&(Object.setPrototypeOf?Object.setPrototypeOf(w,y):w.__proto__=y)}var $=function(w){h(y,w);function y(){return a(this,y),u(this,(y.__proto__||Object.getPrototypeOf(y)).apply(this,arguments))}return g(y,null,[{key:"create",value:function(b){var S=s(y.__proto__||Object.getPrototypeOf(y),"create",this).call(this,b);return typeof b=="string"&&(window.katex.render(b,S,{throwOnError:!1,errorColor:"#f00"}),S.setAttribute("data-value",b)),S}},{key:"value",value:function(b){return b.getAttribute("data-value")}}]),y}(i.default);$.blotName="formula",$.className="ql-formula",$.tagName="SPAN";var v=function(w){h(y,w),g(y,null,[{key:"register",value:function(){n.default.register($,!0)}}]);function y(){a(this,y);var _=u(this,(y.__proto__||Object.getPrototypeOf(y)).call(this));if(window.katex==null)throw new Error("Formula module requires KaTeX.");return _}return y}(r.default);p.FormulaBlot=$,p.default=v},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.default=p.CodeToken=p.CodeBlock=void 0;var g=function(){function b(S,M){for(var O=0;O0||this.cachedText==null)&&(this.domNode.innerHTML=O(k),this.domNode.normalize(),this.attach()),this.cachedText=k)}}]),S}(a.default);w.className="ql-syntax";var y=new i.default.Attributor.Class("token","hljs",{scope:i.default.Scope.INLINE}),_=function(b){v(S,b),g(S,null,[{key:"register",value:function(){n.default.register(y,!0),n.default.register(w,!0)}}]);function S(M,O){h(this,S);var k=$(this,(S.__proto__||Object.getPrototypeOf(S)).call(this,M,O));if(typeof k.options.highlight!="function")throw new Error("Syntax module requires highlight.js. Please include the library on the page before Quill.");var A=null;return k.quill.on(n.default.events.SCROLL_OPTIMIZE,function(){clearTimeout(A),A=setTimeout(function(){k.highlight(),A=null},k.options.interval)}),k.highlight(),k}return g(S,[{key:"highlight",value:function(){var O=this;if(!this.quill.selection.composing){this.quill.update(n.default.sources.USER);var k=this.quill.getSelection();this.quill.scroll.descendants(w).forEach(function(A){A.highlight(O.options.highlight)}),this.quill.update(n.default.sources.SILENT),k!=null&&this.quill.setSelection(k,n.default.sources.SILENT)}}}]),S}(r.default);_.DEFAULTS={highlight:function(){return window.hljs==null?null:function(b){var S=window.hljs.highlightAuto(b);return S.value}}(),interval:1e3},p.CodeBlock=w,p.CodeToken=y,p.default=_},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p){e.exports=' '},function(e,p,m){Object.defineProperty(p,"__esModule",{value:!0}),p.default=p.BubbleTooltip=void 0;var g=function S(M,O,k){M===null&&(M=Function.prototype);var A=Object.getOwnPropertyDescriptor(M,O);if(A===void 0){var T=Object.getPrototypeOf(M);return T===null?void 0:S(T,O,k)}else{if("value"in A)return A.value;var E=A.get;return E===void 0?void 0:E.call(k)}},s=function(){function S(M,O){for(var k=0;k0&&x===n.default.sources.USER){A.show(),A.root.style.left="0px",A.root.style.width="",A.root.style.width=A.root.offsetWidth+"px";var L=A.quill.getLines(E.index,E.length);if(L.length===1)A.position(A.quill.getBounds(E));else{var q=L[L.length-1],N=A.quill.getIndex(q),F=Math.min(q.length()-1,E.index+E.length-N),I=A.quill.getBounds(new l.Range(N,F));A.position(I)}}else document.activeElement!==A.textbox&&A.quill.hasFocus()&&A.hide()}),A}return s(M,[{key:"listen",value:function(){var k=this;g(M.prototype.__proto__||Object.getPrototypeOf(M.prototype),"listen",this).call(this),this.root.querySelector(".ql-close").addEventListener("click",function(){k.root.classList.remove("ql-editing")}),this.quill.on(n.default.events.SCROLL_OPTIMIZE,function(){setTimeout(function(){if(!k.root.classList.contains("ql-hidden")){var A=k.quill.getSelection();A!=null&&k.position(k.quill.getBounds(A))}},1)})}},{key:"cancel",value:function(){this.show()}},{key:"position",value:function(k){var A=g(M.prototype.__proto__||Object.getPrototypeOf(M.prototype),"position",this).call(this,k),T=this.root.querySelector(".ql-tooltip-arrow");if(T.style.marginLeft="",A===0)return A;T.style.marginLeft=-1*A-T.offsetWidth/2+"px"}}]),M}(o.BaseTooltip);b.TEMPLATE=['','
','','',"
"].join(""),p.BubbleTooltip=b,p.default=_},function(e,p,m){e.exports=m(63)}]).default})})(quill);var Quill=getDefaultExportFromCjs(quill.exports),quill_core="",quill_snow="",quill_bubble="";const defaultOptions={theme:"snow",boundary:document.body,modules:{toolbar:[["bold","italic","underline","strike"],["blockquote","code-block"],[{header:1},{header:2}],[{list:"ordered"},{list:"bullet"}],[{script:"sub"},{script:"super"}],[{indent:"-1"},{indent:"+1"}],[{direction:"rtl"}],[{size:["small",!1,"large","huge"]}],[{header:[1,2,3,4,5,6,!1]}],[{color:[]},{background:[]}],[{font:[]}],[{align:[]}],["clean"],["link","image","video"]]},placeholder:"Insert content here ...",readOnly:!1},_sfc_main$2K={name:"quill-editor",props:{content:String,value:String,disabled:{type:Boolean,default:!1},options:{type:Object,required:!1,default:()=>({})}},emits:["ready","change","input","blur","focus","update:value"],setup(t,d){const e={editorOption:{},quill:null};let p="";require$$0$1.watch(()=>t.value,c=>{e.quill&&(c&&c!==p?(p=c,e.quill.pasteHTML(c)):c||e.quill.setText(""))}),require$$0$1.watch(()=>t.content,c=>{e.quill&&(c&&c!==p?(p=c,e.quill.pasteHTML(c)):c||e.quill.setText(""))}),require$$0$1.watch(()=>t.disabled,c=>{e.quill&&e.quill.enable(!c)});const m=require$$0$1.ref(null),g=(c,i)=>{for(const f in i)!c[f]||f!=="modules"?c[f]=i[f]:g(c[f],i[f]);return c},s=()=>{m.value&&(e.editorOption=g(defaultOptions,t.options),e.editorOption.readOnly=!!t.disabled,e.quill=new Quill(m.value,e.editorOption),t.value&&e.quill.pasteHTML(t.value),e.quill.on("selection-change",c=>{c?d.emit("focus",e.quill):d.emit("blur",e.quill)}),e.quill.on("text-change",()=>{t.disabled&&e.quill.enable(!1);let c=m.value.children[0].innerHTML;const i=e.quill,f=e.quill.getText();c==="


"&&(c=""),p=c,d.emit("update:value",p),d.emit("change",{html:c,text:f,quill:i})}),d.emit("ready",e.quill))};return require$$0$1.onBeforeUnmount(()=>{const c=m.value.previousSibling;c&&c.className.indexOf("ql-toolbar")>-1&&c.parentNode.removeChild(c)}),require$$0$1.onMounted(()=>{s()}),require$$0$1.onUnmounted(()=>{e.quill=null}),{editor:m}}},_hoisted_1$p={ref:"editor"};function _sfc_render$2K(t,d,e,p,m,g){return require$$0$1.openBlock(),require$$0$1.createElementBlock("section",_hoisted_1$p,null,512)}var quillEditor=_export_sfc(_sfc_main$2K,[["render",_sfc_render$2K]]);quillEditor.install=function(t){t.component(quillEditor.name,quillEditor)};var richEditorWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2J={name:"rich-editor-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper,quillEditor},data(){return{oldFieldValue:null,fieldModel:null,rules:[],customToolbar:[],valueChangedFlag:!1}},computed:{editorOption(){return{placeholder:this.field.options.placeholder,modules:{}}}},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{handleRichEditorChangeEvent(){this.valueChangedFlag=!0,this.syncUpdateFormModel(this.fieldModel)},handleRichEditorFocusEvent(){this.oldFieldValue=deepClone(this.fieldModel)},handleRichEditorBlurEvent(){this.valueChangedFlag&&(this.emitFieldDataChange(this.fieldModel,this.oldFieldValue),this.valueChangedFlag=!1)}}};function _sfc_render$2J(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("quill-editor"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",null,[require$$0$1.createVNode(s,{value:m.fieldModel,"onUpdate:value":d[0]||(d[0]=i=>m.fieldModel=i),options:g.editorOption,disabled:e.field.options.disabled,onBlur:g.handleRichEditorBlurEvent,onFocus:g.handleRichEditorFocusEvent,onChange:g.handleRichEditorChangeEvent,style:require$$0$1.normalizeStyle(e.field.options.contentHeight?`height: ${e.field.options.contentHeight};`:"")},null,8,["value","options","disabled","onBlur","onFocus","onChange","style"])])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var richEditorWidget=_export_sfc(_sfc_main$2J,[["render",_sfc_render$2J],["__scopeId","data-v-697b5022"]]),__glob_0_15$1=Object.freeze(Object.defineProperty({__proto__:null,default:richEditorWidget},Symbol.toStringTag,{value:"Module"})),selectWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2I={name:"select-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{allowDefaultFirstOption(){return!!this.field.options.filterable&&!!this.field.options.allowCreate},remoteMethod(){if(!!this.field.options.remote&&!!this.field.options.onRemoteQuery)return this.remoteQuery}},beforeCreate(){},created(){this.initOptionItems(),this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2I(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-option"),c=require$$0$1.resolveComponent("el-select"),i=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(i,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(c,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=f=>m.fieldModel=f),class:"full-width-input",disabled:e.field.options.disabled,size:t.widgetSize,clearable:e.field.options.clearable,filterable:e.field.options.filterable,"allow-create":e.field.options.allowCreate,"default-first-option":g.allowDefaultFirstOption,"automatic-dropdown":e.field.options.automaticDropdown,multiple:e.field.options.multiple,"multiple-limit":e.field.options.multipleLimit,placeholder:e.field.options.placeholder||t.i18nt("render.hint.selectPlaceholder"),remote:e.field.options.remote,"remote-method":g.remoteMethod,onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onChange:t.handleChangeEvent},{default:require$$0$1.withCtx(()=>[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(e.field.options.optionItems,f=>(require$$0$1.openBlock(),require$$0$1.createBlock(s,{key:f.value,label:f.label,value:f.value,disabled:f.disabled},null,8,["label","value","disabled"]))),128))]),_:1},8,["modelValue","disabled","size","clearable","filterable","allow-create","default-first-option","automatic-dropdown","multiple","multiple-limit","placeholder","remote","remote-method","onFocus","onBlur","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var selectWidget=_export_sfc(_sfc_main$2I,[["render",_sfc_render$2I],["__scopeId","data-v-3a0f316d"]]),__glob_0_16$1=Object.freeze(Object.defineProperty({__proto__:null,default:selectWidget},Symbol.toStringTag,{value:"Module"})),sliderWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2H={name:"slider-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2H(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-slider"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),disabled:e.field.options.disabled,"show-stops":e.field.options.showStops,min:e.field.options.min,max:e.field.options.max,step:e.field.options.step,range:e.field.options.range,vertical:e.field.options.vertical,onChange:t.handleChangeEvent},null,8,["modelValue","disabled","show-stops","min","max","step","range","vertical","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var sliderWidget=_export_sfc(_sfc_main$2H,[["render",_sfc_render$2H],["__scopeId","data-v-0de324ac"]]),__glob_0_17$1=Object.freeze(Object.defineProperty({__proto__:null,default:sliderWidget},Symbol.toStringTag,{value:"Module"})),slotWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2G={name:"slot-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{StaticContentWrapper},computed:{},beforeCreate(){},created(){this.registerToRefList(),this.initEventHandler(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}},_hoisted_1$o={key:0,class:"slot-title"};function _sfc_render$2G(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("static-content-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(s,{designer:e.designer,field:e.field,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",{class:require$$0$1.normalizeClass([e.designState?"slot-wrapper-design":"slot-wrapper-render"])},[require$$0$1.renderSlot(t.$slots,e.field.options.name,{formModel:t.formModel},void 0,!0),e.designState?(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",_hoisted_1$o,require$$0$1.toDisplayString(e.field.options.label),1)):require$$0$1.createCommentVNode("",!0)],2)]),_:3},8,["designer","field","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var slotWidget=_export_sfc(_sfc_main$2G,[["render",_sfc_render$2G],["__scopeId","data-v-95f13fca"]]),__glob_0_18$1=Object.freeze(Object.defineProperty({__proto__:null,default:slotWidget},Symbol.toStringTag,{value:"Module"})),staticTextWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2F={name:"static-text-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{StaticContentWrapper},computed:{},beforeCreate(){},created(){this.registerToRefList(),this.initEventHandler(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2F(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("static-content-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(s,{designer:e.designer,field:e.field,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",{ref:"fieldEditor",style:require$$0$1.normalizeStyle(e.field.options.fontSize?`font-size: ${e.field.options.fontSize};`:"")},[require$$0$1.createElementVNode("pre",{style:require$$0$1.normalizeStyle({"white-space":e.field.options.preWrap?"pre-wrap":"pre","text-align":e.field.options.textAlign?e.field.options.textAlign:"left"})},require$$0$1.toDisplayString(e.field.options.textContent),5)],4)]),_:1},8,["designer","field","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var staticTextWidget=_export_sfc(_sfc_main$2F,[["render",_sfc_render$2F],["__scopeId","data-v-9a1dfacc"]]),__glob_0_20$1=Object.freeze(Object.defineProperty({__proto__:null,default:staticTextWidget},Symbol.toStringTag,{value:"Module"})),switchWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2E={name:"switch-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2E(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-switch"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),disabled:e.field.options.disabled,"active-text":e.field.options.activeText,"inactive-text":e.field.options.inactiveText,"active-color":e.field.options.activeColor,"inactive-color":e.field.options.inactiveColor,width:e.field.options.switchWidth,onChange:t.handleChangeEvent},null,8,["modelValue","disabled","active-text","inactive-text","active-color","inactive-color","width","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var switchWidget=_export_sfc(_sfc_main$2E,[["render",_sfc_render$2E],["__scopeId","data-v-22bb2b91"]]),__glob_0_21$1=Object.freeze(Object.defineProperty({__proto__:null,default:switchWidget},Symbol.toStringTag,{value:"Module"})),textareaWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2D={name:"textarea-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2D(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-input"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{type:"textarea",ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),disabled:e.field.options.disabled,readonly:e.field.options.readonly,size:t.widgetSize,placeholder:e.field.options.placeholder,rows:e.field.options.rows,minlength:e.field.options.minLength,maxlength:e.field.options.maxLength,"show-word-limit":e.field.options.showWordLimit,onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onInput:t.handleInputCustomEvent,onChange:t.handleChangeEvent},null,8,["modelValue","disabled","readonly","size","placeholder","rows","minlength","maxlength","show-word-limit","onFocus","onBlur","onInput","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var textareaWidget=_export_sfc(_sfc_main$2D,[["render",_sfc_render$2D],["__scopeId","data-v-4cec7068"]]),__glob_0_22$1=Object.freeze(Object.defineProperty({__proto__:null,default:textareaWidget},Symbol.toStringTag,{value:"Module"})),timeRangeWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2C={name:"time-range-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2C(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-time-picker"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",{class:require$$0$1.normalizeClass([e.field.options.autoFullWidth?"auto-full-width":""])},[require$$0$1.createVNode(s,{ref:"fieldEditor","is-range":"",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),class:require$$0$1.normalizeClass([e.field.options.autoFullWidth?"full-width-input":""]),disabled:e.field.options.disabled,readonly:e.field.options.readonly,size:t.widgetSize,clearable:e.field.options.clearable,editable:e.field.options.editable,format:e.field.options.format,"value-format":"HH:mm:ss","start-placeholder":e.field.options.startPlaceholder||t.i18nt("render.hint.startTimePlaceholder"),"end-placeholder":e.field.options.endPlaceholder||t.i18nt("render.hint.endTimePlaceholder"),onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onChange:t.handleChangeEvent},null,8,["modelValue","class","disabled","readonly","size","clearable","editable","format","start-placeholder","end-placeholder","onFocus","onBlur","onChange"])],2)]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var timeRangeWidget=_export_sfc(_sfc_main$2C,[["render",_sfc_render$2C],["__scopeId","data-v-8d758ba4"]]),__glob_0_23$1=Object.freeze(Object.defineProperty({__proto__:null,default:timeRangeWidget},Symbol.toStringTag,{value:"Module"})),timeWidget_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2B={name:"time-widget",componentName:"FieldWidget",mixins:[emitter,fieldMixin,i18n$1],props:{field:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,designer:Object,designState:{type:Boolean,default:!1},subFormRowIndex:{type:Number,default:-1},subFormColIndex:{type:Number,default:-1},subFormRowId:{type:String,default:""}},components:{FormItemWrapper},data(){return{oldFieldValue:null,fieldModel:null,rules:[]}},computed:{},beforeCreate(){},created(){this.initFieldModel(),this.registerToRefList(),this.initEventHandler(),this.buildFieldRules(),this.handleOnCreated()},mounted(){this.handleOnMounted()},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2B(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-time-picker"),c=require$$0$1.resolveComponent("form-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{designer:e.designer,field:e.field,rules:m.rules,"design-state":e.designState,"parent-widget":e.parentWidget,"parent-list":e.parentList,"index-of-parent-list":e.indexOfParentList,"sub-form-row-index":e.subFormRowIndex,"sub-form-col-index":e.subFormColIndex,"sub-form-row-id":e.subFormRowId},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{ref:"fieldEditor",modelValue:m.fieldModel,"onUpdate:modelValue":d[0]||(d[0]=i=>m.fieldModel=i),class:require$$0$1.normalizeClass([e.field.options.autoFullWidth?"auto-full-width":""]),disabled:e.field.options.disabled,readonly:e.field.options.readonly,size:t.widgetSize,clearable:e.field.options.clearable,editable:e.field.options.editable,format:e.field.options.format,"value-format":"HH:mm:ss",placeholder:e.field.options.placeholder||t.i18nt("render.hint.timePlaceholder"),onFocus:t.handleFocusCustomEvent,onBlur:t.handleBlurCustomEvent,onChange:t.handleChangeEvent},null,8,["modelValue","class","disabled","readonly","size","clearable","editable","format","placeholder","onFocus","onBlur","onChange"])]),_:1},8,["designer","field","rules","design-state","parent-widget","parent-list","index-of-parent-list","sub-form-row-index","sub-form-col-index","sub-form-row-id"])}var timeWidget=_export_sfc(_sfc_main$2B,[["render",_sfc_render$2B],["__scopeId","data-v-2dd889c0"]]),__glob_0_24$1=Object.freeze(Object.defineProperty({__proto__:null,default:timeWidget},Symbol.toStringTag,{value:"Module"}));let comps$1={};const modules$3={"./button-widget.vue":__glob_0_0$2,"./cascader-widget.vue":__glob_0_1$3,"./checkbox-widget.vue":__glob_0_2$3,"./color-widget.vue":__glob_0_3$3,"./date-range-widget.vue":__glob_0_4$3,"./date-widget.vue":__glob_0_5$3,"./divider-widget.vue":__glob_0_6$3,"./file-upload-widget.vue":__glob_0_7$1,"./form-item-wrapper.vue":__glob_0_8$1,"./html-text-widget.vue":__glob_0_9$1,"./input-widget.vue":__glob_0_10$1,"./number-widget.vue":__glob_0_11$1,"./picture-upload-widget.vue":__glob_0_12$1,"./radio-widget.vue":__glob_0_13$1,"./rate-widget.vue":__glob_0_14$1,"./rich-editor-widget.vue":__glob_0_15$1,"./select-widget.vue":__glob_0_16$1,"./slider-widget.vue":__glob_0_17$1,"./slot-widget.vue":__glob_0_18$1,"./static-content-wrapper.vue":__glob_0_19$1,"./static-text-widget.vue":__glob_0_20$1,"./switch-widget.vue":__glob_0_21$1,"./textarea-widget.vue":__glob_0_22$1,"./time-range-widget.vue":__glob_0_23$1,"./time-widget.vue":__glob_0_24$1};for(const t in modules$3){let d=modules$3[t].default.name;comps$1[d]=modules$3[t].default}var gridColItem_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2A={name:"GridColItem",componentName:"ContainerItem",mixins:[emitter,i18n$1,refMixin],components:Se({},comps$1),props:{widget:Object,parentWidget:Object,parentList:Array,indexOfParentList:Number,colHeight:{type:String,default:null}},inject:["refList","globalModel","getFormConfig","previewState"],data(){return{layoutProps:{span:this.widget.options.span,md:this.widget.options.md||12,sm:this.widget.options.sm||12,xs:this.widget.options.xs||12,offset:this.widget.options.offset||0,push:this.widget.options.push||0,pull:this.widget.options.pull||0}}},computed:{formConfig(){return this.getFormConfig()},customClass(){return this.widget.options.customClass||""},colHeightStyle(){return this.colHeight?{height:this.colHeight+"px"}:{}}},created(){this.initLayoutProps(),this.initRefList()},methods:{initLayoutProps(){if(this.widget.options.responsive)if(this.previewState){this.layoutProps.md=void 0,this.layoutProps.sm=void 0,this.layoutProps.xs=void 0;let t=this.formConfig.layoutType;t==="H5"?this.layoutProps.span=this.widget.options.xs||12:t==="Pad"?this.layoutProps.span=this.widget.options.sm||12:this.layoutProps.span=this.widget.options.md||12}else this.layoutProps.span=void 0;else this.layoutProps.md=void 0,this.layoutProps.sm=void 0,this.layoutProps.xs=void 0}}},_hoisted_1$n={class:"blank-cell"},_hoisted_2$d={class:"invisible-content"};function _sfc_render$2A(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-col");return require$$0$1.withDirectives((require$$0$1.openBlock(),require$$0$1.createBlock(s,require$$0$1.mergeProps({class:["grid-cell",[g.customClass]]},m.layoutProps,{style:g.colHeightStyle,key:e.widget.id}),{default:require$$0$1.withCtx(()=>[!!e.widget.widgetList&&e.widget.widgetList.length>0?(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},require$$0$1.renderList(e.widget.widgetList,(c,i)=>(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,null,[c.category==="container"?(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(t.getComponentByContainer(c)),{widget:c,key:i,"parent-list":e.widget.widgetList,"index-of-parent-list":i,"parent-widget":e.widget},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),f=>({name:f,fn:require$$0$1.withCtx(n=>[require$$0$1.renderSlot(t.$slots,f,require$$0$1.mergeProps({ref_for:!0},n),void 0,!0)])}))]),1032,["widget","parent-list","index-of-parent-list","parent-widget"])):(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(c.type+"-widget"),{field:c,designer:null,key:i,"parent-list":e.widget.widgetList,"index-of-parent-list":i,"parent-widget":e.widget},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),f=>({name:f,fn:require$$0$1.withCtx(n=>[require$$0$1.renderSlot(t.$slots,f,require$$0$1.mergeProps({ref_for:!0},n),void 0,!0)])}))]),1032,["field","parent-list","index-of-parent-list","parent-widget"]))],64))),256)):(require$$0$1.openBlock(),require$$0$1.createBlock(s,{key:1},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",_hoisted_1$n,[require$$0$1.createElementVNode("span",_hoisted_2$d,require$$0$1.toDisplayString(t.i18nt("render.hint.blankCellContent")),1)])]),_:1}))]),_:3},16,["class","style"])),[[require$$0$1.vShow,!e.widget.options.hidden]])}var GridColItem=_export_sfc(_sfc_main$2A,[["render",_sfc_render$2A],["__scopeId","data-v-9332ab84"]]),__glob_0_1$2=Object.freeze(Object.defineProperty({__proto__:null,default:GridColItem},Symbol.toStringTag,{value:"Module"})),containerItemMixin={inject:["getFormConfig","getGlobalDsv"],computed:{customClass(){return this.widget.options.customClass||""},formModel:{cache:!1,get(){return this.globalModel.formModel}}},mounted(){this.callSetHidden()},methods:{unregisterFromRefList(){if(this.refList!==null&&!!this.widget.options.name){let t=this.widget.options.name;delete this.refList[t]}},callSetHidden(){this.widget.options.hidden===!0&&this.setHidden(!0)},setHidden(t){this.widget.options.hidden=t;let d=e=>{let p=e.options.name,m=this.getWidgetRef(p);t&&!!m&&!!m.clearFieldRules&&m.clearFieldRules(),!t&&!!m&&!!m.buildFieldRules&&m.buildFieldRules()};traverseFieldWidgetsOfContainer(this.widget,d)},activeTab(t){t>=0&&t{d.options.active=e===t,e===t&&(this.activeTabName=d.options.name)})},disableTab(t){t>=0&&t=0&&t=0&&t=0&&t{let e=d.options.name+"@row"+this.rowIdData[t],p=this.getWidgetRef(e);p&&p.setDisabled(!0)})},enableSubFormRow(t){this.widget.widgetList.forEach(d=>{let e=d.options.name+"@row"+this.rowIdData[t],p=this.getWidgetRef(e);p&&p.setDisabled(!1)})},disableSubForm(){this.rowIdData.length>0&&this.rowIdData.forEach((t,d)=>{this.disableSubFormRow(d)}),this.actionDisabled=!0},enableSubForm(){this.rowIdData.length>0&&this.rowIdData.forEach((t,d)=>{this.enableSubFormRow(d)}),this.actionDisabled=!1},resetSubForm(){if(this.widget.type==="sub-form"){let t=this.formModel[this.widget.options.name];t&&(t.splice(0,t.length),this.rowIdData.splice(0,this.rowIdData.length)),this.widget.options.showBlankRow&&this.addSubFormRow()}},getSubFormValues(t=!0){if(this.widget.type==="sub-form")return this.formModel[this.widget.options.name];this.$message.error(this.i18nt("render.hint.nonSubFormType"))},addCssClass(t){this.widget.options.customClass?this.widget.options.customClass.push(t):this.widget.options.customClass=[t]},removeCssClass(t){if(!this.widget.options.customClass)return;let d=-1;this.widget.options.customClass.map((e,p)=>{e===t&&(d=p)}),d>-1&&this.widget.options.customClass.splice(d,1)}}};const _sfc_main$2z={name:"vf-grid-item",componentName:"ContainerItem",mixins:[emitter,i18n$1,refMixin,containerItemMixin],components:{ContainerItemWrapper,GridColItem},props:{widget:Object},inject:["refList","sfRefList","globalModel"],created(){this.initRefList()},mounted(){},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2z(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("grid-col-item"),c=require$$0$1.resolveComponent("el-row"),i=require$$0$1.resolveComponent("container-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(i,{widget:e.widget},{default:require$$0$1.withCtx(()=>[require$$0$1.withDirectives((require$$0$1.openBlock(),require$$0$1.createBlock(c,{key:e.widget.id,gutter:e.widget.options.gutter,class:require$$0$1.normalizeClass(["grid-container",[t.customClass]]),ref:e.widget.id},{default:require$$0$1.withCtx(()=>[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(e.widget.cols,(f,n)=>(require$$0$1.openBlock(),require$$0$1.createBlock(s,{key:n,widget:f,"parent-list":e.widget.cols,"index-of-parent-list":n,"parent-widget":e.widget,"col-height":e.widget.options.colHeight},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),o=>({name:o,fn:require$$0$1.withCtx(r=>[require$$0$1.renderSlot(t.$slots,o,require$$0$1.mergeProps({ref_for:!0},r))])}))]),1032,["widget","parent-list","index-of-parent-list","parent-widget","col-height"]))),128))]),_:3},8,["gutter","class"])),[[require$$0$1.vShow,!e.widget.options.hidden]])]),_:3},8,["widget"])}var gridItem=_export_sfc(_sfc_main$2z,[["render",_sfc_render$2z]]),__glob_0_2$2=Object.freeze(Object.defineProperty({__proto__:null,default:gridItem},Symbol.toStringTag,{value:"Module"})),subFormItem_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2y={name:"sub-form-item",componentName:"ContainerItem",mixins:[emitter,i18n$1,refMixin,containerItemMixin],components:ke(Se({ContainerItemWrapper},comps$1),{SvgIcon}),props:{widget:Object},inject:["refList","sfRefList","globalModel"],data(){return{rowIdData:[],fieldSchemaData:[],actionDisabled:!1}},created(){this.initRefList(),this.registerSubFormToRefList(),this.initRowIdData(!0),this.initFieldSchemaData(),this.initEventHandler()},mounted(){this.handleSubFormFirstRowAdd()},beforeUnmount(){this.unregisterFromRefList()},methods:{getLabelAlign(t,d){return d.options.labelAlign||t.options.labelAlign},registerSubFormToRefList(){this.widget.type==="sub-form"&&(this.sfRefList[this.widget.options.name]=this)},initRowIdData(t){if(this.widget.type==="sub-form"){this.rowIdData.splice(0,this.rowIdData.length);let d=this.formModel[this.widget.options.name];!!d&&d.length>0&&(d.forEach(()=>{this.rowIdData.push("id"+generateId())}),t&&setTimeout(()=>{this.handleSubFormRowChange(d)},800))}},addToRowIdData(){this.rowIdData.push("id"+generateId())},insertToRowIdData(t){this.rowIdData.splice(t,0,"id"+generateId())},deleteFromRowIdData(t){this.rowIdData.splice(t,1)},getRowIdData(){return this.rowIdData},getWidgetRefOfSubForm(t,d){let e=t+"@row"+this.rowIdData[d];return this.getWidgetRef(e)},initFieldSchemaData(){if(this.widget.type!=="sub-form")return;let t=this.rowIdData.length;if(this.fieldSchemaData.splice(0,this.fieldSchemaData.length),t>0)for(let d=0;d{e.push(this.cloneFieldSchema(p))}),this.fieldSchemaData.push(e)}},addToFieldSchemaData(t){let d=[];this.widget.widgetList.forEach(e=>{d.push(this.cloneFieldSchema(e))}),t===void 0?this.fieldSchemaData.push(d):this.fieldSchemaData.splice(t,0,d)},deleteFromFieldSchemaData(t){this.fieldSchemaData.splice(t,1)},cloneFieldSchema(t){let d=deepClone(t);return d.id=t.type+generateId(),d},initEventHandler(){this.widget.type==="sub-form"&&this.on$("setFormData",t=>{this.initRowIdData(!1),this.initFieldSchemaData();let d=t[this.widget.options.name]||[];setTimeout(()=>{this.handleSubFormRowChange(d)},800)})},handleSubFormFirstRowAdd(){if(this.widget.type==="sub-form"&&!!this.widget.options.showBlankRow&&this.rowIdData.length===1){let t=this.formModel[this.widget.options.name]||[];this.handleSubFormRowAdd(t,this.rowIdData[0]),this.handleSubFormRowChange(t)}},addSubFormRow(){let t={};this.widget.widgetList.forEach(e=>{e.formItemFlag&&(t[e.options.name]=e.options.defaultValue)});let d=this.formModel[this.widget.options.name]||[];d.push(t),this.addToRowIdData(),this.addToFieldSchemaData(),this.handleSubFormRowAdd(d,this.rowIdData[d.length-1]),this.handleSubFormRowChange(d)},insertSubFormRow(t){let d={};this.widget.widgetList.forEach(p=>{p.formItemFlag&&(d[p.options.name]=p.options.defaultValue)});let e=this.formModel[this.widget.options.name]||[];e.splice(t,0,d),this.insertToRowIdData(t),this.addToFieldSchemaData(t),this.handleSubFormRowInsert(e,this.rowIdData[t]),this.handleSubFormRowChange(e)},deleteSubFormRow(t){this.$confirm(this.i18nt("render.hint.deleteSubFormRow")+"?",this.i18nt("render.hint.prompt"),{confirmButtonText:this.i18nt("render.hint.confirm"),cancelButtonText:this.i18nt("render.hint.cancel")}).then(()=>{let d=this.formModel[this.widget.options.name]||[],e=deepClone(d[t]);d.splice(t,1),this.deleteFromRowIdData(t),this.deleteFromFieldSchemaData(t),this.handleSubFormRowDelete(d,e),this.handleSubFormRowChange(d)}).catch(()=>{})},handleSubFormRowChange(t){this.widget.options.onSubFormRowChange&&new Function("subFormData",this.widget.options.onSubFormRowChange).call(this,t)},handleSubFormRowAdd(t,d){this.widget.options.onSubFormRowAdd&&new Function("subFormData","newRowId",this.widget.options.onSubFormRowAdd).call(this,t,d)},handleSubFormRowInsert(t,d){this.widget.options.onSubFormRowInsert&&new Function("subFormData","newRowId",this.widget.options.onSubFormRowInsert).call(this,t,d)},handleSubFormRowDelete(t,d){this.widget.options.onSubFormRowDelete&&new Function("subFormData","deletedDataRow",this.widget.options.onSubFormRowDelete).call(this,t,d)}}},_hoisted_1$m={class:"action-header-column"},_hoisted_2$c={class:"action-label"},_hoisted_3$9={key:0,class:"custom-label"},_hoisted_4$9=["title"],_hoisted_5$7={class:"sub-form-action-column hide-label"},_hoisted_6$7={class:"action-button-column"},_hoisted_7$5={key:0,class:"row-number-span"};function _sfc_render$2y(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("svg-icon"),c=require$$0$1.resolveComponent("el-button"),i=require$$0$1.resolveComponent("el-tooltip"),f=require$$0$1.resolveComponent("el-row"),n=require$$0$1.resolveComponent("container-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(n,{widget:e.widget},{default:require$$0$1.withCtx(()=>[require$$0$1.withDirectives((require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{key:e.widget.id,class:"sub-form-container"},[require$$0$1.createVNode(f,{class:"header-row"},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",_hoisted_1$m,[require$$0$1.createElementVNode("span",_hoisted_2$c,require$$0$1.toDisplayString(t.i18nt("render.hint.subFormAction")),1),require$$0$1.createVNode(c,{disabled:m.actionDisabled,round:"",type:"primary",size:"small",class:"action-button",onClick:g.addSubFormRow,title:t.i18nt("render.hint.subFormAddActionHint")},{default:require$$0$1.withCtx(()=>[require$$0$1.createTextVNode(require$$0$1.toDisplayString(t.i18nt("render.hint.subFormAddAction")),1),require$$0$1.createVNode(s,{"icon-class":"el-plus"})]),_:1},8,["disabled","onClick","title"])]),(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(e.widget.widgetList,o=>(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{key:o.id+"thc",class:require$$0$1.normalizeClass(["field-header-column",[g.getLabelAlign(e.widget,o),o.options.required?"is-required":""]]),style:require$$0$1.normalizeStyle({width:o.options.columnWidth})},[o.options.labelIconClass?(require$$0$1.openBlock(),require$$0$1.createElementBlock("span",_hoisted_3$9,[o.options.labelIconPosition==="front"?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},[o.options.labelTooltip?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},[require$$0$1.createVNode(i,{content:o.options.labelTooltip,effect:"light"},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{"icon-class":o.options.labelIconClass},null,8,["icon-class"])]),_:2},1032,["content"]),require$$0$1.createTextVNode(require$$0$1.toDisplayString(o.options.label),1)],64)):(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},[require$$0$1.createVNode(s,{"icon-class":o.options.labelIconClass},null,8,["icon-class"]),require$$0$1.createTextVNode(require$$0$1.toDisplayString(o.options.label),1)],64))],64)):o.options.labelIconPosition==="rear"?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},[o.options.labelTooltip?(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:0},[require$$0$1.createTextVNode(require$$0$1.toDisplayString(o.options.label),1),require$$0$1.createVNode(i,{content:o.options.labelTooltip,effect:"light"},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{"icon-class":o.options.labelIconClass},null,8,["icon-class"])]),_:2},1032,["content"])],64)):(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,{key:1},[require$$0$1.createTextVNode(require$$0$1.toDisplayString(o.options.label),1),require$$0$1.createVNode(s,{"icon-class":o.options.labelIconClass},null,8,["icon-class"])],64))],64)):require$$0$1.createCommentVNode("",!0)])):(require$$0$1.openBlock(),require$$0$1.createElementBlock("span",{key:1,title:o.options.labelTooltip},require$$0$1.toDisplayString(o.options.label),9,_hoisted_4$9))],6))),128))]),_:1}),(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(m.rowIdData,(o,r)=>(require$$0$1.openBlock(),require$$0$1.createBlock(f,{class:"sub-form-row",key:o},{default:require$$0$1.withCtx(()=>[require$$0$1.createElementVNode("div",_hoisted_5$7,[require$$0$1.createElementVNode("div",_hoisted_6$7,[require$$0$1.createVNode(c,{disabled:m.actionDisabled,circle:"",onClick:l=>g.insertSubFormRow(r),title:t.i18nt("render.hint.insertSubFormRow")},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{"icon-class":"el-plus"})]),_:2},1032,["disabled","onClick","title"]),require$$0$1.createVNode(c,{disabled:m.actionDisabled,circle:"",onClick:l=>g.deleteSubFormRow(r),title:t.i18nt("render.hint.deleteSubFormRow")},{default:require$$0$1.withCtx(()=>[require$$0$1.createVNode(s,{"icon-class":"el-delete"})]),_:2},1032,["disabled","onClick","title"]),e.widget.options.showRowNumber?(require$$0$1.openBlock(),require$$0$1.createElementBlock("span",_hoisted_7$5,"#"+require$$0$1.toDisplayString(r+1),1)):require$$0$1.createCommentVNode("",!0)])]),(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(e.widget.widgetList,(l,a)=>(require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{key:l.id+"tc"+o,class:"sub-form-table-column hide-label",style:require$$0$1.normalizeStyle({width:l.options.columnWidth})},[(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(l.type+"-widget"),{field:m.fieldSchemaData[r][a],key:m.fieldSchemaData[r][a].id,"parent-list":e.widget.widgetList,"index-of-parent-list":a,"parent-widget":e.widget,"sub-form-row-id":o,"sub-form-row-index":r,"sub-form-col-index":a},null,8,["field","parent-list","index-of-parent-list","parent-widget","sub-form-row-id","sub-form-row-index","sub-form-col-index"]))],4))),128))]),_:2},1024))),128))])),[[require$$0$1.vShow,!e.widget.options.hidden]])]),_:1},8,["widget"])}var subFormItem=_export_sfc(_sfc_main$2y,[["render",_sfc_render$2y],["__scopeId","data-v-2eb559e6"]]),__glob_0_3$2=Object.freeze(Object.defineProperty({__proto__:null,default:subFormItem},Symbol.toStringTag,{value:"Module"}));const _sfc_main$2x={name:"tab-item",componentName:"ContainerItem",mixins:[emitter,i18n$1,refMixin,containerItemMixin],components:Se({ContainerItemWrapper},comps$1),props:{widget:Object},inject:["refList","sfRefList","globalModel"],data(){return{activeTabName:""}},computed:{visibleTabs(){return this.widget.tabs.filter(t=>!t.options.hidden)}},created(){this.initRefList()},mounted(){this.initActiveTab()},beforeUnmount(){this.unregisterFromRefList()},methods:{initActiveTab(){if(this.widget.type==="tab"&&this.widget.tabs.length>0){let t=this.widget.tabs.filter(d=>d.options.active===!0);t.length>0?this.activeTabName=t[0].options.name:this.activeTabName=this.widget.tabs[0].options.name}}}};function _sfc_render$2x(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-tab-pane"),c=require$$0$1.resolveComponent("el-tabs"),i=require$$0$1.resolveComponent("container-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(i,{widget:e.widget},{default:require$$0$1.withCtx(()=>[require$$0$1.withDirectives((require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{key:e.widget.id,class:"tab-container"},[require$$0$1.createVNode(c,{modelValue:m.activeTabName,"onUpdate:modelValue":d[0]||(d[0]=f=>m.activeTabName=f),type:e.widget.displayType,ref:e.widget.id,class:require$$0$1.normalizeClass([t.customClass])},{default:require$$0$1.withCtx(()=>[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(g.visibleTabs,(f,n)=>(require$$0$1.openBlock(),require$$0$1.createBlock(s,{key:n,label:f.options.label,disabled:f.options.disabled,name:f.options.name},{default:require$$0$1.withCtx(()=>[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(f.widgetList,(o,r)=>(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,null,[o.category==="container"?(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(t.getComponentByContainer(o)),{widget:o,key:r,"parent-list":f.widgetList,"index-of-parent-list":r,"parent-widget":e.widget},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),l=>({name:l,fn:require$$0$1.withCtx(a=>[require$$0$1.renderSlot(t.$slots,l,require$$0$1.mergeProps({ref_for:!0},a))])}))]),1032,["widget","parent-list","index-of-parent-list","parent-widget"])):(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(o.type+"-widget"),{field:o,key:r,"parent-list":f.widgetList,"index-of-parent-list":r,"parent-widget":e.widget},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),l=>({name:l,fn:require$$0$1.withCtx(a=>[require$$0$1.renderSlot(t.$slots,l,require$$0$1.mergeProps({ref_for:!0},a))])}))]),1032,["field","parent-list","index-of-parent-list","parent-widget"]))],64))),256))]),_:2},1032,["label","disabled","name"]))),128))]),_:3},8,["modelValue","type","class"])])),[[require$$0$1.vShow,!e.widget.options.hidden]])]),_:3},8,["widget"])}var tabItem=_export_sfc(_sfc_main$2x,[["render",_sfc_render$2x]]),__glob_0_4$2=Object.freeze(Object.defineProperty({__proto__:null,default:tabItem},Symbol.toStringTag,{value:"Module"})),tableCellItem_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2w={name:"TableCellItem",componentName:"ContainerItem",mixins:[emitter,i18n$1,refMixin],components:Se({},comps$1),props:{widget:Object,rowIndex:Number,colIndex:Number},inject:["refList","globalModel"],computed:{customClass(){return this.widget.options.customClass||""}},created(){},methods:{}},_hoisted_1$l=["colspan","rowspan"];function _sfc_render$2w(t,d,e,p,m,g){return require$$0$1.openBlock(),require$$0$1.createElementBlock("td",{class:require$$0$1.normalizeClass(["table-cell",[g.customClass]]),colspan:e.widget.options.colspan||1,rowspan:e.widget.options.rowspan||1,style:require$$0$1.normalizeStyle({width:e.widget.options.cellWidth+" !important"||"",height:e.widget.options.cellHeight+" !important"||"","word-break":e.widget.options.wordBreak?"break-all":"normal"})},[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(e.widget.widgetList,(s,c)=>(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,null,[s.category==="container"?(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(t.getComponentByContainer(s)),{widget:s,key:c,"parent-list":e.widget.widgetList,"index-of-parent-list":c,"parent-widget":e.widget},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),i=>({name:i,fn:require$$0$1.withCtx(f=>[require$$0$1.renderSlot(t.$slots,i,require$$0$1.mergeProps({ref_for:!0},f),void 0,!0)])}))]),1032,["widget","parent-list","index-of-parent-list","parent-widget"])):(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(s.type+"-widget"),{field:s,key:c,"parent-list":e.widget.widgetList,"index-of-parent-list":c,"parent-widget":e.widget},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),i=>({name:i,fn:require$$0$1.withCtx(f=>[require$$0$1.renderSlot(t.$slots,i,require$$0$1.mergeProps({ref_for:!0},f),void 0,!0)])}))]),1032,["field","parent-list","index-of-parent-list","parent-widget"]))],64))),256))],14,_hoisted_1$l)}var TableCellItem=_export_sfc(_sfc_main$2w,[["render",_sfc_render$2w],["__scopeId","data-v-1825ed0b"]]),__glob_0_5$2=Object.freeze(Object.defineProperty({__proto__:null,default:TableCellItem},Symbol.toStringTag,{value:"Module"})),tableItem_vue_vue_type_style_index_0_scoped_true_lang="";const _sfc_main$2v={name:"table-item",componentName:"ContainerItem",mixins:[emitter,i18n$1,refMixin,containerItemMixin],components:{ContainerItemWrapper,TableCellItem},props:{widget:Object},inject:["refList","sfRefList","globalModel"],created(){this.initRefList()},mounted(){},beforeUnmount(){this.unregisterFromRefList()},methods:{}};function _sfc_render$2v(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("table-cell-item"),c=require$$0$1.resolveComponent("container-item-wrapper");return require$$0$1.openBlock(),require$$0$1.createBlock(c,{widget:e.widget},{default:require$$0$1.withCtx(()=>[require$$0$1.withDirectives((require$$0$1.openBlock(),require$$0$1.createElementBlock("div",{key:e.widget.id,class:"table-container"},[require$$0$1.createElementVNode("table",{ref:e.widget.id,class:require$$0$1.normalizeClass(["table-layout",[t.customClass]])},[require$$0$1.createElementVNode("tbody",null,[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(e.widget.rows,(i,f)=>(require$$0$1.openBlock(),require$$0$1.createElementBlock("tr",{key:i.id},[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(i.cols,(n,o)=>(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,null,[n.merged?require$$0$1.createCommentVNode("",!0):(require$$0$1.openBlock(),require$$0$1.createBlock(s,{widget:n,key:o,"parent-list":e.widget.cols,"row-index":f,"col-index":o,"parent-widget":e.widget},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),r=>({name:r,fn:require$$0$1.withCtx(l=>[require$$0$1.renderSlot(t.$slots,r,require$$0$1.mergeProps({ref_for:!0},l),void 0,!0)])}))]),1032,["widget","parent-list","row-index","col-index","parent-widget"]))],64))),256))]))),128))])],2)])),[[require$$0$1.vShow,!e.widget.options.hidden]])]),_:3},8,["widget"])}var tableItem=_export_sfc(_sfc_main$2v,[["render",_sfc_render$2v],["__scopeId","data-v-dfc6ca8e"]]),__glob_0_6$2=Object.freeze(Object.defineProperty({__proto__:null,default:tableItem},Symbol.toStringTag,{value:"Module"}));const modules$2={"./container-item-wrapper.vue":__glob_0_0$3,"./grid-col-item.vue":__glob_0_1$2,"./grid-item.vue":__glob_0_2$2,"./sub-form-item.vue":__glob_0_3$2,"./tab-item.vue":__glob_0_4$2,"./table-cell-item.vue":__glob_0_5$2,"./table-item.vue":__glob_0_6$2};var ContainerItems={install(t){for(const d in modules$2){let e=modules$2[d].default.name;t.component(e,modules$2[d].default)}}},index_vue_vue_type_style_index_0_scoped_true_lang$5="";const _sfc_main$2u={name:"VFormRender",componentName:"VFormRender",mixins:[emitter,i18n$1],components:Se({},comps$1),props:{formJson:{type:Object,default:()=>buildDefaultFormJson()},formData:{type:Object,default:()=>({})},optionData:{type:Object,default:()=>({})},previewState:{type:Boolean,default:!1},globalDsv:{type:Object,default:()=>({})}},provide(){return{refList:this.widgetRefList,sfRefList:this.subFormRefList,getFormConfig:()=>this.formJsonObj.formConfig,getGlobalDsv:()=>this.globalDsv,globalOptionData:this.optionData,getOptionData:()=>this.optionData,globalModel:{formModel:this.formDataModel},previewState:this.previewState}},data(){return{formJsonObj:this.formJson,formDataModel:{},widgetRefList:{},subFormRefList:{},formId:null,externalComponents:{}}},computed:{formConfig(){return this.formJsonObj.formConfig},widgetList(){return this.formJsonObj.widgetList},labelPosition(){return!!this.formConfig&&!!this.formConfig.labelPosition?this.formConfig.labelPosition:"left"},labelWidth(){return!!this.formConfig&&!!this.formConfig.labelWidth?this.formConfig.labelWidth+"px":"80px"},size(){return!!this.formConfig&&!!this.formConfig.size?this.formConfig.size:"default"},customClass(){return!!this.formConfig&&!!this.formConfig.customClass?this.formConfig.customClass:""}},watch:{},created(){this.buildFormModel(this.formJsonObj?this.formJsonObj.widgetList:null),this.initFormObject()},mounted(){this.initLocale(),this.handleOnMounted()},methods:{initFormObject(t=!0){this.formId="vfRender"+generateId(),t&&this.insertCustomStyleAndScriptNode(),this.addFieldChangeEventHandler(),this.addFieldValidateEventHandler(),this.registerFormToRefList(),this.handleOnCreated()},getContainerWidgetName(t){return t.type==="grid"?"vf-grid-item":t.type+"-item"},getWidgetName(t){return t.type+"-widget"},initLocale(){let t=localStorage.getItem("v_form_locale")||"zh-CN";this.changeLanguage(t)},insertCustomStyleAndScriptNode(){!!this.formConfig&&!!this.formConfig.cssCode&&insertCustomCssToHead(this.formConfig.cssCode,this.previewState?"":this.formId),!!this.formConfig&&!!this.formConfig.functions&&insertGlobalFunctionsToHtml(this.formConfig.functions,this.previewState?"":this.formId)},buildFormModel(t){!!t&&t.length>0&&t.forEach(d=>{this.buildDataFromWidget(d)})},buildDataFromWidget(t){if(t.category==="container")if(t.type==="grid")!!t.cols&&t.cols.length>0&&t.cols.forEach(d=>{this.buildDataFromWidget(d)});else if(t.type==="table")!!t.rows&&t.rows.length>0&&t.rows.forEach(d=>{!!d.cols&&d.cols.length>0&&d.cols.forEach(e=>{this.buildDataFromWidget(e)})});else if(t.type==="tab")!!t.tabs&&t.tabs.length>0&&t.tabs.forEach(d=>{!!d.widgetList&&d.widgetList.length>0&&d.widgetList.forEach(e=>{this.buildDataFromWidget(e)})});else if(t.type==="sub-form"){let d=t.options.name;if(this.formData.hasOwnProperty(d)){let e=this.formData[d];this.formDataModel[d]=deepClone(e)}else{let e={};t.options.showBlankRow?(t.widgetList.forEach(p=>{p.formItemFlag&&(e[p.options.name]=p.options.defaultValue)}),this.formDataModel[d]=[e]):this.formDataModel[d]=[]}}else t.type==="grid-col"||t.type==="table-cell"?!!t.widgetList&&t.widgetList.length>0&&t.widgetList.forEach(d=>{this.buildDataFromWidget(d)}):!!t.widgetList&&t.widgetList.length>0&&t.widgetList.forEach(d=>{this.buildDataFromWidget(d)});else if(t.formItemFlag)if(!this.formData.hasOwnProperty(t.options.name))this.formDataModel[t.options.name]=t.options.defaultValue;else{let d=this.formData[t.options.name];this.formDataModel[t.options.name]=deepClone(d)}},addFieldChangeEventHandler(){this.off$("fieldChange"),this.on$("fieldChange",(t,d,e,p,m)=>{this.handleFieldDataChange(t,d,e,p,m),this.$emit("formChange",t,d,e,this.formDataModel,p,m)})},addFieldValidateEventHandler(){this.off$("fieldValidation"),this.on$("fieldValidation",t=>{this.$refs.renderForm.validateField(t)})},registerFormToRefList(){this.widgetRefList.v_form_ref=this},handleFieldDataChange(t,d,e,p,m){!!this.formConfig&&!!this.formConfig.onFormDataChange&&new Function("fieldName","newValue","oldValue","formModel","subFormName","subFormRowIndex",this.formConfig.onFormDataChange).call(this,t,d,e,this.formDataModel,p,m)},handleOnCreated(){!!this.formConfig&&!!this.formConfig.onFormCreated&&new Function(this.formConfig.onFormCreated).call(this)},handleOnMounted(){!!this.formConfig&&!!this.formConfig.onFormMounted&&new Function(this.formConfig.onFormMounted).call(this)},findWidgetAndSetDisabled(t,d){let e=this.getWidgetRef(t);e?e.setDisabled(d):this.findWidgetOfSubFormAndSetDisabled(t,d)},findWidgetOfSubFormAndSetDisabled(t,d){this.findWidgetNameInSubForm(t).forEach(e=>{let p=this.getWidgetRef(e);p&&p.setDisabled(d)})},findWidgetAndSetHidden(t,d){let e=this.getWidgetRef(t);e?e.setHidden(d):this.findWidgetOfSubFormAndSetHidden(t,d)},findWidgetOfSubFormAndSetHidden(t,d){this.findWidgetNameInSubForm(t).forEach(e=>{let p=this.getWidgetRef(e);p&&p.setHidden(d)})},findWidgetNameInSubForm(t){let d=[],e=null,p=(m,g)=>{!!m.options&&m.options.name===t&&(e=g.options.name)};if(traverseFieldWidgets(this.widgetList,p),e){let m=this.getWidgetRef(e);if(m){let g=m.getRowIdData();!!g&&g.length>0&&g.forEach(s=>{d.push(t+"@row"+s)})}}return d},changeLanguage(t){changeLocale(t)},getNativeForm(){return this.$refs.renderForm},getFormRef(){return this},getWidgetRef(t,d=!1){let e=this.widgetRefList[t];return!e&&!!d&&this.$message.error(this.i18nt("render.hint.refNotFound")+t),e},clearFormDataModel(){for(let t in this.formDataModel)delete this.formDataModel[t]},setFormJson(t){if(t)if(typeof t=="string"||t.constructor===Object){let d=null;if(typeof t=="string"?d=JSON.parse(t):d=t,!d.formConfig||!d.widgetList){this.$message.error("Invalid format of form json.");return}this.clearFormDataModel(),this.buildFormModel(d.widgetList),this.formJsonObj.formConfig=d.formConfig,this.formJsonObj.widgetList=d.widgetList,this.insertCustomStyleAndScriptNode(),this.$nextTick(()=>{this.initFormObject(!1),this.handleOnMounted()})}else this.$message.error("Set form json failed.")},reloadOptionData(t){let d=[];!!t&&typeof t=="string"?d=[t]:!!t&&Array.isArray(t)&&(d=[...t]),this.broadcast("FieldWidget","reloadOptionItems",d)},getFormData(t=!0){if(!t)return this.formDataModel;let d=function(){},e=new window.Promise(function(p,m){d=function(g,s){s?m(s):p(g)}});return this.$refs.renderForm.validate(p=>{p?d(this.formDataModel):d(this.formDataModel,this.i18nt("render.hint.validationFailed"))}),e},setFormData(t){Object.keys(this.formDataModel).forEach(d=>{!!t&&t.hasOwnProperty(d)&&(this.formDataModel[d]=deepClone(t[d]))}),this.broadcast("ContainerItem","setFormData",this.formDataModel),this.broadcast("FieldWidget","setFormData",this.formDataModel)},getFieldValue(t){let d=this.getWidgetRef(t);if(!!d&&!!d.getValue)return d.getValue();if(!d){let e=[];return this.findWidgetNameInSubForm(t).forEach(p=>{let m=this.getWidgetRef(p);!!m&&!!m.getValue&&e.push(m.getValue())}),e}},setFieldValue(t,d){let e=this.getWidgetRef(t);!!e&&!!e.setValue&&e.setValue(d),e||this.findWidgetNameInSubForm(t).forEach(p=>{let m=this.getWidgetRef(p);!!m&&!!m.setValue&&m.setValue(d)})},getSubFormValues(t,d=!0){return this.subFormRefList[t].getSubFormValues(d)},disableForm(){Object.keys(this.widgetRefList).forEach(d=>{let e=this.getWidgetRef(d);if(e)if(!!e.widget&&e.widget.type==="sub-form")e.disableSubForm();else{//!!foundW.setDisabled && foundW.setDisabled(true) +e.setDisabled&&e.setDisabled(!0)}})},enableForm(){Object.keys(this.widgetRefList).forEach(d=>{let e=this.getWidgetRef(d);if(e)if(!!e.widget&&e.widget.type==="sub-form")e.enableSubForm();else{//!!foundW.setDisabled && foundW.setDisabled(false) +e.setDisabled&&e.setDisabled(!1)}})},resetForm(){Object.keys(this.subFormRefList).forEach(e=>{this.subFormRefList[e].resetSubForm&&this.subFormRefList[e].resetSubForm()}),Object.keys(this.widgetRefList).forEach(e=>{let p=this.getWidgetRef(e);!!p&&!p.subFormItemFlag&&!!p.resetField&&p.resetField()}),this.$nextTick(()=>{this.clearValidate()})},clearValidate(t){this.$refs.renderForm.clearValidate(t)},validateForm(t){this.$refs.renderForm.validate(d=>{t(d)})},validateFields(){},disableWidgets(t){t&&(typeof t=="string"?this.findWidgetAndSetDisabled(t,!0):Array.isArray(t)&&t.forEach(d=>{this.findWidgetAndSetDisabled(d,!0)}))},enableWidgets(t){t&&(typeof t=="string"?this.findWidgetAndSetDisabled(t,!1):Array.isArray(t)&&t.forEach(d=>{this.findWidgetAndSetDisabled(d,!1)}))},hideWidgets(t){t&&(typeof t=="string"?this.findWidgetAndSetHidden(t,!0):Array.isArray(t)&&t.forEach(d=>{this.findWidgetAndSetHidden(d,!0)}))},showWidgets(t){t&&(typeof t=="string"?this.findWidgetAndSetHidden(t,!1):Array.isArray(t)&&t.forEach(d=>{this.findWidgetAndSetHidden(d,!1)}))},getFieldWidgets(){return getAllFieldWidgets(this.formJsonObj.widgetList)},getContainerWidgets(){return getAllContainerWidgets(this.formJsonObj.widgetList)},addEC(t,d){this.externalComponents[t]=d},hasEC(t){return this.externalComponents.hasOwnProperty(t)},getEC(t){return this.externalComponents[t]},getGlobalDsv(){return this.globalDsv}}};function _sfc_render$2u(t,d,e,p,m,g){const s=require$$0$1.resolveComponent("el-form");return require$$0$1.openBlock(),require$$0$1.createBlock(s,{"label-position":g.labelPosition,size:g.size,class:require$$0$1.normalizeClass([[g.customClass],"render-form"]),"label-width":g.labelWidth,"validate-on-rule-change":!1,model:m.formDataModel,ref:"renderForm",onSubmit:d[0]||(d[0]=require$$0$1.withModifiers(()=>{},["prevent"]))},{default:require$$0$1.withCtx(()=>[(require$$0$1.openBlock(!0),require$$0$1.createElementBlock(require$$0$1.Fragment,null,require$$0$1.renderList(g.widgetList,(c,i)=>(require$$0$1.openBlock(),require$$0$1.createElementBlock(require$$0$1.Fragment,null,[c.category==="container"?(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(g.getContainerWidgetName(c)),{widget:c,key:c.id,"parent-list":g.widgetList,"index-of-parent-list":i,"parent-widget":null},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),f=>({name:f,fn:require$$0$1.withCtx(n=>[require$$0$1.renderSlot(t.$slots,f,require$$0$1.mergeProps({ref_for:!0},n),void 0,!0)])}))]),1032,["widget","parent-list","index-of-parent-list"])):(require$$0$1.openBlock(),require$$0$1.createBlock(require$$0$1.resolveDynamicComponent(g.getWidgetName(c)),{field:c,"form-model":m.formDataModel,designer:null,key:c.id,"parent-list":g.widgetList,"index-of-parent-list":i,"parent-widget":null},require$$0$1.createSlots({_:2},[require$$0$1.renderList(Object.keys(t.$slots),f=>({name:f,fn:require$$0$1.withCtx(n=>[require$$0$1.renderSlot(t.$slots,f,require$$0$1.mergeProps({ref_for:!0},n),void 0,!0)])}))]),1032,["field","form-model","parent-list","index-of-parent-list"]))],64))),256))]),_:3},8,["label-position","size","class","label-width","model"])}var VFormRender=_export_sfc(_sfc_main$2u,[["render",_sfc_render$2u],["__scopeId","data-v-544703a2"]]),ace$2={exports:{}};(function(t,d){(function(){var e="ace",p=function(){return this}();!p&&typeof window!="undefined"&&(p=window);var m=function(n,o,r){if(typeof n!="string"){m.original?m.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=o),m.modules[n]||(m.payloads[n]=r,m.modules[n]=null)};m.modules={},m.payloads={};var g=function(n,o,r){if(typeof o=="string"){var l=i(n,o);if(l!=null)return r&&r(),l}else if(Object.prototype.toString.call(o)==="[object Array]"){for(var a=[],u=0,h=o.length;ui.length)&&(c=i.length),c-=s.length;var f=i.indexOf(s,c);return f!==-1&&f===c}),String.prototype.repeat||g(String.prototype,"repeat",function(s){for(var c="",i=this;s>0;)s&1&&(c+=i),(s>>=1)&&(i+=i);return c}),String.prototype.includes||g(String.prototype,"includes",function(s,c){return this.indexOf(s,c)!=-1}),Object.assign||(Object.assign=function(s){if(s==null)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(s),i=1;i>>0,f=arguments[1],n=f>>0,o=n<0?Math.max(i+n,0):Math.min(n,i),r=arguments[2],l=r===void 0?i:r>>0,a=l<0?Math.max(i+l,0):Math.min(l,i);o0;)i&1&&(f+=c),(i>>=1)&&(c+=c);return f};var g=/^\s\s*/,s=/\s\s*$/;p.stringTrimLeft=function(c){return c.replace(g,"")},p.stringTrimRight=function(c){return c.replace(s,"")},p.copyObject=function(c){var i={};for(var f in c)i[f]=c[f];return i},p.copyArray=function(c){for(var i=[],f=0,n=c.length;f65535?2:1}}),ace.define("ace/lib/useragent",["require","exports","module"],function(e,p,m){p.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},p.getOS=function(){return p.isMac?p.OS.MAC:p.isLinux?p.OS.LINUX:p.OS.WINDOWS};var g=typeof navigator=="object"?navigator:{},s=(/mac|win|linux/i.exec(g.platform)||["other"])[0].toLowerCase(),c=g.userAgent||"",i=g.appName||"";p.isWin=s=="win",p.isMac=s=="mac",p.isLinux=s=="linux",p.isIE=i=="Microsoft Internet Explorer"||i.indexOf("MSAppHost")>=0?parseFloat((c.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((c.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),p.isOldIE=p.isIE&&p.isIE<9,p.isGecko=p.isMozilla=c.match(/ Gecko\/\d+/),p.isOpera=typeof opera=="object"&&Object.prototype.toString.call(window.opera)=="[object Opera]",p.isWebKit=parseFloat(c.split("WebKit/")[1])||void 0,p.isChrome=parseFloat(c.split(" Chrome/")[1])||void 0,p.isSafari=parseFloat(c.split(" Safari/")[1])&&!p.isChrome||void 0,p.isEdge=parseFloat(c.split(" Edge/")[1])||void 0,p.isAIR=c.indexOf("AdobeAIR")>=0,p.isAndroid=c.indexOf("Android")>=0,p.isChromeOS=c.indexOf(" CrOS ")>=0,p.isIOS=/iPad|iPhone|iPod/.test(c)&&!window.MSStream,p.isIOS&&(p.isMac=!0),p.isMobile=p.isIOS||p.isAndroid}),ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"],function(e,p,m){var g=e("./useragent"),s="http://www.w3.org/1999/xhtml";p.buildDom=function r(l,a,u){if(typeof l=="string"&&l){var h=document.createTextNode(l);return a&&a.appendChild(h),h}if(!Array.isArray(l))return l&&l.appendChild&&a&&a.appendChild(l),l;if(typeof l[0]!="string"||!l[0]){for(var $=[],v=0;v=1.5:!0,g.isChromeOS&&(p.HI_DPI=!1),typeof document!="undefined"){var o=document.createElement("div");p.HI_DPI&&o.style.transform!==void 0&&(p.HAS_CSS_TRANSFORMS=!0),!g.isEdge&&typeof o.style.animationName!="undefined"&&(p.HAS_CSS_ANIMATION=!0),o=null}p.HAS_CSS_TRANSFORMS?p.translate=function(r,l,a){r.style.transform="translate("+Math.round(l)+"px, "+Math.round(a)+"px)"}:p.translate=function(r,l,a){r.style.top=Math.round(a)+"px",r.style.left=Math.round(l)+"px"}}),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],function(e,p,m){/* +* based on code from: +* +* @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. +* Available via the MIT or new BSD license. +* see: http://github.com/jrburke/requirejs for details +*/var g=e("./dom");p.get=function(s,c){var i=new XMLHttpRequest;i.open("GET",s,!0),i.onreadystatechange=function(){i.readyState===4&&c(i.responseText)},i.send(null)},p.loadScript=function(s,c){var i=g.getDocumentHead(),f=document.createElement("script");f.src=s,i.appendChild(f),f.onload=f.onreadystatechange=function(n,o){(o||!f.readyState||f.readyState=="loaded"||f.readyState=="complete")&&(f=f.onload=f.onreadystatechange=null,o||c())}},p.qualifyURL=function(s){var c=document.createElement("a");return c.href=s,c.href}}),ace.define("ace/lib/oop",["require","exports","module"],function(e,p,m){p.inherits=function(g,s){g.super_=s,g.prototype=Object.create(s.prototype,{constructor:{value:g,enumerable:!1,writable:!0,configurable:!0}})},p.mixin=function(g,s){for(var c in s)g[c]=s[c];return g},p.implement=function(g,s){p.mixin(g,s)}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,p,m){var g={},s=function(){this.propagationStopped=!0},c=function(){this.defaultPrevented=!0};g._emit=g._dispatchEvent=function(i,f){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[i]||[],o=this._defaultHandlers[i];if(!(!n.length&&!o)){(typeof f!="object"||!f)&&(f={}),f.type||(f.type=i),f.stopPropagation||(f.stopPropagation=s),f.preventDefault||(f.preventDefault=c),n=n.slice();for(var r=0;r1&&($=u[u.length-2]);var w=f[a+"Path"];return w==null?w=f.basePath:h=="/"&&(a=h=""),w&&w.slice(-1)!="/"&&(w+="/"),w+a+h+$+this.get("suffix")},p.setModuleUrl=function(l,a){return f.$moduleUrls[l]=a};var n=function(l,a){if(l==="ace/theme/textmate"||l==="./theme/textmate")return a(null,e("./theme/textmate"));if(o)return o(l,a);console.error("loader is not configured")},o;p.setLoader=function(l){o=l},p.dynamicModules=Object.create(null),p.$loading={},p.$loaded={},p.loadModule=function(l,a){var u;if(Array.isArray(l))var h=l[0],$=l[1];else if(typeof l=="string")var $=l;var v=function(w){if(w&&!p.$loading[$])return a&&a(w);if(p.$loading[$]||(p.$loading[$]=[]),p.$loading[$].push(a),!(p.$loading[$].length>1)){var y=function(){n($,function(_,b){b&&(p.$loaded[$]=b),p._emit("load.module",{name:$,module:b});var S=p.$loading[$];p.$loading[$]=null,S.forEach(function(M){M&&M(b)})})};if(!p.get("packaged"))return y();s.loadScript(p.moduleUrl($,h),y),r()}};if(p.dynamicModules[$])p.dynamicModules[$]().then(function(w){w.default?v(w.default):v(w)});else{try{u=this.$require($)}catch{}v(u||p.$loaded[$])}},p.$require=function(l){if(typeof m.require=="function"){var a="require";return m[a](l)}},p.setModuleLoader=function(l,a){p.dynamicModules[l]=a};var r=function(){!f.basePath&&!f.workerPath&&!f.modePath&&!f.themePath&&!Object.keys(f.$moduleUrls).length&&(console.error("Unable to infer path to ace from script src,","use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes","or with webpack use ace/webpack-resolver"),r=function(){})};p.version="1.41.0"}),ace.define("ace/loader_build",["require","exports","module","ace/lib/fixoldbrowsers","ace/config"],function(e,p,m){e("./lib/fixoldbrowsers");var g=e("./config");g.setLoader(function(f,n){e([f],function(o){n(null,o)})});var s=function(){return this||typeof window!="undefined"&&window}();m.exports=function(f){g.init=c,g.$require=e,f.require=e},c(!0);function c(f){if(!(!s||!s.document)){g.set("packaged",f||e.packaged||m.packaged||s.define&&(void 0).packaged);var n={},o="",r=document.currentScript||document._currentScript,l=r&&r.ownerDocument||document;r&&r.src&&(o=r.src.split(/[?#]/)[0].split("/").slice(0,-1).join("/")||"");for(var a=l.getElementsByTagName("script"),u=0;u ["+this.end.row+"/"+this.end.column+"]"},s.prototype.contains=function(c,i){return this.compare(c,i)==0},s.prototype.compareRange=function(c){var i,f=c.end,n=c.start;return i=this.compare(f.row,f.column),i==1?(i=this.compare(n.row,n.column),i==1?2:i==0?1:0):i==-1?-2:(i=this.compare(n.row,n.column),i==-1?-1:i==1?42:0)},s.prototype.comparePoint=function(c){return this.compare(c.row,c.column)},s.prototype.containsRange=function(c){return this.comparePoint(c.start)==0&&this.comparePoint(c.end)==0},s.prototype.intersects=function(c){var i=this.compareRange(c);return i==-1||i==0||i==1},s.prototype.isEnd=function(c,i){return this.end.row==c&&this.end.column==i},s.prototype.isStart=function(c,i){return this.start.row==c&&this.start.column==i},s.prototype.setStart=function(c,i){typeof c=="object"?(this.start.column=c.column,this.start.row=c.row):(this.start.row=c,this.start.column=i)},s.prototype.setEnd=function(c,i){typeof c=="object"?(this.end.column=c.column,this.end.row=c.row):(this.end.row=c,this.end.column=i)},s.prototype.inside=function(c,i){return this.compare(c,i)==0?!(this.isEnd(c,i)||this.isStart(c,i)):!1},s.prototype.insideStart=function(c,i){return this.compare(c,i)==0?!this.isEnd(c,i):!1},s.prototype.insideEnd=function(c,i){return this.compare(c,i)==0?!this.isStart(c,i):!1},s.prototype.compare=function(c,i){return!this.isMultiLine()&&c===this.start.row?ithis.end.column?1:0:cthis.end.row?1:this.start.row===c?i>=this.start.column?0:-1:this.end.row===c?i<=this.end.column?0:1:0},s.prototype.compareStart=function(c,i){return this.start.row==c&&this.start.column==i?-1:this.compare(c,i)},s.prototype.compareEnd=function(c,i){return this.end.row==c&&this.end.column==i?1:this.compare(c,i)},s.prototype.compareInside=function(c,i){return this.end.row==c&&this.end.column==i?1:this.start.row==c&&this.start.column==i?-1:this.compare(c,i)},s.prototype.clipRows=function(c,i){if(this.end.row>i)var f={row:i+1,column:0};else if(this.end.rowi)var n={row:i+1,column:0};else if(this.start.row1?(M++,M>4&&(M=1)):M=1,s.isIE){var x=Math.abs(C.clientX-O)>5||Math.abs(C.clientY-k)>5;(!A||x)&&(M=1),A&&clearTimeout(A),A=setTimeout(function(){A=null},y[M-1]||600),M==1&&(O=C.clientX,k=C.clientY)}if(C._clicks=M,_[b]("mousedown",C),M>4)M=0;else if(M>1)return _[b](T[M],C)}Array.isArray(w)||(w=[w]),w.forEach(function(C){l(C,"mousedown",E,S)})};function u(w){return 0|(w.ctrlKey?1:0)|(w.altKey?2:0)|(w.shiftKey?4:0)|(w.metaKey?8:0)}p.getModifierString=function(w){return g.KEY_MODS[u(w)]};function h(w,y,_){var b=u(y);if(!_&&y.code&&(_=g.$codeToKeyCode[y.code]||_),!s.isMac&&c){if(y.getModifierState&&(y.getModifierState("OS")||y.getModifierState("Win"))&&(b|=8),c.altGr)if((3&b)!=3)c.altGr=0;else return;if(_===18||_===17){var S=y.location;if(_===17&&S===1)c[_]==1&&(i=y.timeStamp);else if(_===18&&b===3&&S===2){var M=y.timeStamp-i;M<50&&(c.altGr=!0)}}}if(_ in g.MODIFIER_KEYS&&(_=-1),!(!b&&_===13&&y.location===3&&(w(y,b,-_),y.defaultPrevented))){if(s.isChromeOS&&b&8){if(w(y,b,_),y.defaultPrevented)return;b&=~8}return!b&&!(_ in g.FUNCTION_KEYS)&&!(_ in g.PRINTABLE_KEYS)?!1:w(y,b,_)}}p.addCommandKeyListener=function(w,y,_){var b=null;l(w,"keydown",function(S){c[S.keyCode]=(c[S.keyCode]||0)+1;var M=h(y,S,S.keyCode);return b=S.defaultPrevented,M},_),l(w,"keypress",function(S){b&&(S.ctrlKey||S.altKey||S.shiftKey||S.metaKey)&&(p.stopEvent(S),b=null)},_),l(w,"keyup",function(S){c[S.keyCode]=null},_),c||($(),l(window,"focus",$))};function $(){c=Object.create(null)}if(typeof window=="object"&&window.postMessage&&!s.isOldIE){var v=1;p.nextTick=function(w,y){y=y||window;var _="zero-timeout-message-"+v++,b=function(S){S.data==_&&(p.stopPropagation(S),a(y,"message",b),w())};l(y,"message",b),y.postMessage(_,"*")}}p.$idleBlocked=!1,p.onIdle=function(w,y){return setTimeout(function _(){p.$idleBlocked?setTimeout(_,100):w()},y)},p.$idleBlockId=null,p.blockIdle=function(w){p.$idleBlockId&&clearTimeout(p.$idleBlockId),p.$idleBlocked=!0,p.$idleBlockId=setTimeout(function(){p.$idleBlocked=!1},w||100)},p.nextFrame=typeof window=="object"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),p.nextFrame?p.nextFrame=p.nextFrame.bind(window):p.nextFrame=function(w){setTimeout(w,17)}}),ace.define("ace/clipboard",["require","exports","module"],function(e,p,m){var g;m.exports={lineMode:!1,pasteCancelled:function(){return g&&g>Date.now()-50?!0:g=!1},cancel:function(){g=Date.now()}}}),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/config","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/clipboard","ace/lib/keys"],function(e,p,m){var g=e("../lib/event"),s=e("../config").nls,c=e("../lib/useragent"),i=e("../lib/dom"),f=e("../lib/lang"),n=e("../clipboard"),o=c.isChrome<18,r=c.isIE,l=c.isChrome>63,a=400,u=e("../lib/keys"),h=u.KEY_MODS,$=c.isIOS,v=$?/\s/:/\n/,w=c.isMobile,y;y=function(_,b){var S=i.createElement("textarea");S.className="ace_text-input",S.setAttribute("wrap","off"),S.setAttribute("autocorrect","off"),S.setAttribute("autocapitalize","off"),S.setAttribute("spellcheck","false"),S.style.opacity="0",_.insertBefore(S,_.firstChild),this.setHost=function(J){b=J};var M=!1,O=!1,k=!1,A=!1,T="";w||(S.style.fontSize="1px");var E=!1,C=!1,x="",L=0,q=0,N=0,F=Number.MAX_SAFE_INTEGER,I=Number.MIN_SAFE_INTEGER,R=0;try{var B=document.activeElement===S}catch{}this.setNumberOfExtraLines=function(J){if(F=Number.MAX_SAFE_INTEGER,I=Number.MIN_SAFE_INTEGER,J<0){R=0;return}R=J},this.setAriaLabel=function(){var J="";if(b.$textInputAriaLabel&&(J+="".concat(b.$textInputAriaLabel,", ")),b.session){var se=b.session.selection.cursor.row;J+=s("text-input.aria-label","Cursor at row $0",[se+1])}S.setAttribute("aria-label",J)},this.setAriaOptions=function(J){J.activeDescendant?(S.setAttribute("aria-haspopup","true"),S.setAttribute("aria-autocomplete",J.inline?"both":"list"),S.setAttribute("aria-activedescendant",J.activeDescendant)):(S.setAttribute("aria-haspopup","false"),S.setAttribute("aria-autocomplete","both"),S.removeAttribute("aria-activedescendant")),J.role&&S.setAttribute("role",J.role),J.setLabel&&(S.setAttribute("aria-roledescription",s("text-input.aria-roledescription","editor")),this.setAriaLabel())},this.setAriaOptions({role:"textbox"}),g.addListener(S,"blur",function(J){C||(b.onBlur(J),B=!1)},b),g.addListener(S,"focus",function(J){if(!C){if(B=!0,c.isEdge)try{if(!document.hasFocus())return}catch{}b.onFocus(J),c.isEdge?setTimeout(P):P()}},b),this.$focusScroll=!1,this.focus=function(){if(this.setAriaOptions({setLabel:b.renderer.enableKeyboardAccessibility}),T||l||this.$focusScroll=="browser")return S.focus({preventScroll:!0});var J=S.style.top;S.style.position="fixed",S.style.top="0px";try{var se=S.getBoundingClientRect().top!=0}catch{return}var le=[];if(se)for(var K=S.parentElement;K&&K.nodeType==1;)le.push(K),K.setAttribute("ace_nocontext","true"),!K.parentElement&&K.getRootNode?K=K.getRootNode().host:K=K.parentElement;S.focus({preventScroll:!0}),se&&le.forEach(function(G){G.removeAttribute("ace_nocontext")}),setTimeout(function(){S.style.position="",S.style.top=="0px"&&(S.style.top=J)},0)},this.blur=function(){S.blur()},this.isFocused=function(){return B},b.on("beforeEndOperation",function(){var J=b.curOp,se=J&&J.command&&J.command.name;if(se!="insertstring"){var le=se&&(J.docChanged||J.selectionChanged);k&&le&&(x=S.value="",X()),P()}}),b.on("changeSelection",this.setAriaLabel);var D=function(J,se){for(var le=se,K=1;K<=J-F&&K<2*R+1;K++)le+=b.session.getLine(J-K).length+1;return le},P=$?function(J){if(!(!B||M&&!J||A)){J||(J="");var se=` + ab`+J+`cde fg +`;se!=S.value&&(S.value=x=se);var le=4,K=4+(J.length||(b.selection.isEmpty()?0:1));(L!=le||q!=K)&&S.setSelectionRange(le,K),L=le,q=K}}:function(){if(!(k||A)&&!(!B&&!H)){k=!0;var J=0,se=0,le="";if(b.session){var K=b.selection,G=K.getRange(),Y=K.cursor.row;Y===I+1?(F=I+1,I=F+2*R):Y===F-1?(I=F-1,F=I-2*R):(YI+1)&&(F=Y>R?Y-R:0,I=Y>R?Y+R:2*R);for(var ee=[],oe=F;oe<=I;oe++)ee.push(b.session.getLine(oe));if(le=ee.join(` +`),J=D(G.start.row,G.start.column),se=D(G.end.row,G.end.column),G.start.rowI){var ce=b.session.getLine(I+1);se=G.end.row>I+1?ce.length:G.end.column,se+=le.length+1,le=le+` +`+ce}else w&&Y>0&&(le=` +`+le,se+=1,J+=1);le.length>a&&(J=x.length&&J.value===x&&x&&J.selectionEnd!==q},V=function(J){k||(M?M=!1:j(S)?(b.selectAll(),P()):w&&S.selectionStart!=L&&P())},W=null;this.setInputHandler=function(J){W=J},this.getInputHandler=function(){return W};var H=!1,z=function(J,se){if(H&&(H=!1),O)return P(),J&&b.onPaste(J),O=!1,"";for(var le=S.selectionStart,K=S.selectionEnd,G=L,Y=x.length-q,ee=J,oe=J.length-le,de=J.length-K,ce=0;G>0&&x[ce]==J[ce];)ce++,G--;for(ee=ee.slice(ce),ce=1;Y>0&&x.length-ce>L-1&&x[x.length-ce]==J[J.length-ce];)ce++,Y--;oe-=ce-1,de-=ce-1;var ve=ee.length-ce+1;if(ve<0&&(G=-ve,ve=0),ee=ee.slice(0,ve),!se&&!ee&&!oe&&!G&&!Y&&!de)return"";A=!0;var xe=!1;return c.isAndroid&&ee==". "&&(ee=" ",xe=!0),ee&&!G&&!Y&&!oe&&!de||E?b.onTextInput(ee):b.onTextInput(ee,{extendLeft:G,extendRight:Y,restoreStart:oe,restoreEnd:de}),A=!1,x=J,L=le,q=K,N=de,xe?` +`:ee},U=function(J){if(k)return _e();if(J&&J.inputType){if(J.inputType=="historyUndo")return b.execCommand("undo");if(J.inputType=="historyRedo")return b.execCommand("redo")}var se=S.value,le=z(se,!0);(se.length>a+100||v.test(le)||w&&L<1&&L==q)&&P()},Z=function(J,se,le){var K=J.clipboardData||window.clipboardData;if(!(!K||o)){var G=r||le?"Text":"text/plain";try{return se?K.setData(G,se)!==!1:K.getData(G)}catch(Y){if(!le)return Z(Y,se,!0)}}},ne=function(J,se){var le=b.getCopyText();if(!le)return g.preventDefault(J);Z(J,le)?($&&(P(le),M=le,setTimeout(function(){M=!1},10)),se?b.onCut():b.onCopy(),g.preventDefault(J)):(M=!0,S.value=le,S.select(),setTimeout(function(){M=!1,P(),se?b.onCut():b.onCopy()}))},re=function(J){ne(J,!0)},ue=function(J){ne(J,!1)},fe=function(J){var se=Z(J);n.pasteCancelled()||(typeof se=="string"?(se&&b.onPaste(se,J),c.isIE&&setTimeout(P),g.preventDefault(J)):(S.value="",O=!0))};g.addCommandKeyListener(S,function(J,se,le){if(!k)return b.onCommandKey(J,se,le)},b),g.addListener(S,"select",V,b),g.addListener(S,"input",U,b),g.addListener(S,"cut",re,b),g.addListener(S,"copy",ue,b),g.addListener(S,"paste",fe,b),(!("oncut"in S)||!("oncopy"in S)||!("onpaste"in S))&&g.addListener(_,"keydown",function(J){if(!(c.isMac&&!J.metaKey||!J.ctrlKey))switch(J.keyCode){case 67:ue(J);break;case 86:fe(J);break;case 88:re(J);break}},b);var ye=function(J){if(!(k||!b.onCompositionStart||b.$readOnly)&&(k={},!E)){J.data&&(k.useTextareaForIME=!1),setTimeout(_e,0),b._signal("compositionStart"),b.on("mousedown",Q);var se=b.getSelectionRange();se.end.row=se.start.row,se.end.column=se.start.column,k.markerRange=se,k.selectionStart=L,b.onCompositionStart(k),k.useTextareaForIME?(x=S.value="",L=0,q=0):(S.msGetInputContext&&(k.context=S.msGetInputContext()),S.getInputContext&&(k.context=S.getInputContext()))}},_e=function(){if(!(!k||!b.onCompositionUpdate||b.$readOnly)){if(E)return Q();if(k.useTextareaForIME)b.onCompositionUpdate(S.value);else{var J=S.value;z(J),k.markerRange&&(k.context&&(k.markerRange.start.column=k.selectionStart=k.context.compositionStartOffset),k.markerRange.end.column=k.markerRange.start.column+q-k.selectionStart+N)}}},X=function(J){!b.onCompositionEnd||b.$readOnly||(k=!1,b.onCompositionEnd(),b.off("mousedown",Q),J&&U())};function Q(){C=!0,S.blur(),S.focus(),C=!1}var ie=f.delayedCall(_e,50).schedule.bind(null,null);function ae(J){J.keyCode==27&&S.value.lengthq&&x[de]==` +`?ce=u.end:oeq&&x.slice(0,de).split(` +`).length>2?ce=u.down:de>q&&x[de-1]==" "?(ce=u.right,ve=h.option):(de>q||de==q&&q!=L&&oe==de)&&(ce=u.right),oe!==de&&(ve|=h.shift),ce){var xe=se.onCommandKey({},ve,ce);if(!xe&&se.commands){ce=u.keyCodeToString(ce);var me=se.commands.findKeyCommand(ve,ce);me&&se.execCommand(me)}L=oe,q=de,P("")}}};document.addEventListener("selectionchange",Y),se.on("destroy",function(){document.removeEventListener("selectionchange",Y)})}this.destroy=function(){S.parentElement&&S.parentElement.removeChild(S)}},p.TextInput=y,p.$setUserAgentForTests=function(_,b){w=_,$=b}}),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"],function(e,p,m){var g=e("../lib/useragent"),s=0,c=550,i=function(){function o(r){r.$clickSelection=null;var l=r.editor;l.setDefaultHandler("mousedown",this.onMouseDown.bind(r)),l.setDefaultHandler("dblclick",this.onDoubleClick.bind(r)),l.setDefaultHandler("tripleclick",this.onTripleClick.bind(r)),l.setDefaultHandler("quadclick",this.onQuadClick.bind(r)),l.setDefaultHandler("mousewheel",this.onMouseWheel.bind(r));var a=["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"];a.forEach(function(u){r[u]=this[u]},this),r.selectByLines=this.extendSelectionBy.bind(r,"getLineRange"),r.selectByWords=this.extendSelectionBy.bind(r,"getWordRange")}return o.prototype.onMouseDown=function(r){var l=r.inSelection(),a=r.getDocumentPosition();this.mousedownEvent=r;var u=this.editor,h=r.getButton();if(h!==0){var $=u.getSelectionRange(),v=$.isEmpty();(v||h==1)&&u.selection.moveToPosition(a),h==2&&(u.textInput.onContextMenu(r.domEvent),g.isMozilla||r.preventDefault());return}if(this.mousedownEvent.time=Date.now(),l&&!u.isFocused()&&(u.focus(),this.$focusTimeout&&!this.$clickSelection&&!u.inMultiSelectMode)){this.setState("focusWait"),this.captureMouse(r);return}return this.captureMouse(r),this.startSelect(a,r.domEvent._clicks>1),r.preventDefault()},o.prototype.startSelect=function(r,l){r=r||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var a=this.editor;!this.mousedownEvent||(this.mousedownEvent.getShiftKey()?a.selection.selectToPosition(r):l||a.selection.moveToPosition(r),l||this.select(),a.setStyle("ace_selecting"),this.setState("select"))},o.prototype.select=function(){var r,l=this.editor,a=l.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var u=this.$clickSelection.comparePoint(a);if(u==-1)r=this.$clickSelection.end;else if(u==1)r=this.$clickSelection.start;else{var h=n(this.$clickSelection,a);a=h.cursor,r=h.anchor}l.selection.setSelectionAnchor(r.row,r.column)}l.selection.selectToPosition(a),l.renderer.scrollCursorIntoView()},o.prototype.extendSelectionBy=function(r){var l,a=this.editor,u=a.renderer.screenToTextCoordinates(this.x,this.y),h=a.selection[r](u.row,u.column);if(this.$clickSelection){var $=this.$clickSelection.comparePoint(h.start),v=this.$clickSelection.comparePoint(h.end);if($==-1&&v<=0)l=this.$clickSelection.end,(h.end.row!=u.row||h.end.column!=u.column)&&(u=h.start);else if(v==1&&$>=0)l=this.$clickSelection.start,(h.start.row!=u.row||h.start.column!=u.column)&&(u=h.end);else if($==-1&&v==1)u=h.end,l=h.start;else{var w=n(this.$clickSelection,u);u=w.cursor,l=w.anchor}a.selection.setSelectionAnchor(l.row,l.column)}a.selection.selectToPosition(u),a.renderer.scrollCursorIntoView()},o.prototype.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting")},o.prototype.focusWait=function(){var r=f(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),l=Date.now();(r>s||l-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},o.prototype.onDoubleClick=function(r){var l=r.getDocumentPosition(),a=this.editor,u=a.session,h=u.getBracketRange(l);h?(h.isEmpty()&&(h.start.column--,h.end.column++),this.setState("select")):(h=a.selection.getWordRange(l.row,l.column),this.setState("selectByWords")),this.$clickSelection=h,this.select()},o.prototype.onTripleClick=function(r){var l=r.getDocumentPosition(),a=this.editor;this.setState("selectByLines");var u=a.getSelectionRange();u.isMultiLine()&&u.contains(l.row,l.column)?(this.$clickSelection=a.selection.getLineRange(u.start.row),this.$clickSelection.end=a.selection.getLineRange(u.end.row).end):this.$clickSelection=a.selection.getLineRange(l.row),this.select()},o.prototype.onQuadClick=function(r){var l=this.editor;l.selectAll(),this.$clickSelection=l.getSelectionRange(),this.setState("selectAll")},o.prototype.onMouseWheel=function(r){if(!r.getAccelKey()){r.getShiftKey()&&r.wheelY&&!r.wheelX&&(r.wheelX=r.wheelY,r.wheelY=0);var l=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var a=this.$lastScroll,u=r.domEvent.timeStamp,h=u-a.t,$=h?r.wheelX/h:a.vx,v=h?r.wheelY/h:a.vy;h=1&&l.renderer.isScrollableBy(r.wheelX*r.speed,0)&&(y=!0),w<=1&&l.renderer.isScrollableBy(0,r.wheelY*r.speed)&&(y=!0),y)a.allowed=u;else if(u-a.allowedc.clientHeight;i||s.preventDefault()}}),ace.define("ace/tooltip",["require","exports","module","ace/lib/dom","ace/lib/event","ace/range","ace/lib/scroll"],function(e,p,m){var g=this&&this.__extends||function(){var u=function(h,$){return u=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(v,w){v.__proto__=w}||function(v,w){for(var y in w)Object.prototype.hasOwnProperty.call(w,y)&&(v[y]=w[y])},u(h,$)};return function(h,$){if(typeof $!="function"&&$!==null)throw new TypeError("Class extends value "+String($)+" is not a constructor or null");u(h,$);function v(){this.constructor=h}h.prototype=$===null?Object.create($):(v.prototype=$.prototype,new v)}}(),s=this&&this.__values||function(u){var h=typeof Symbol=="function"&&Symbol.iterator,$=h&&u[h],v=0;if($)return $.call(u);if(u&&typeof u.length=="number")return{next:function(){return u&&v>=u.length&&(u=void 0),{value:u&&u[v++],done:!u}}};throw new TypeError(h?"Object is not iterable.":"Symbol.iterator is not defined.")},c=e("./lib/dom");e("./lib/event");var i=e("./range").Range,f=e("./lib/scroll").preventParentScroll,n="ace_tooltip",o=function(){function u(h){this.isOpen=!1,this.$element=null,this.$parentNode=h}return u.prototype.$init=function(){return this.$element=c.createElement("div"),this.$element.className=n,this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},u.prototype.getElement=function(){return this.$element||this.$init()},u.prototype.setText=function(h){this.getElement().textContent=h},u.prototype.setHtml=function(h){this.getElement().innerHTML=h},u.prototype.setPosition=function(h,$){this.getElement().style.left=h+"px",this.getElement().style.top=$+"px"},u.prototype.setClassName=function(h){c.addCssClass(this.getElement(),h)},u.prototype.setTheme=function(h){this.$element.className=n+" "+(h.isDark?"ace_dark ":"")+(h.cssClass||"")},u.prototype.show=function(h,$,v){h!=null&&this.setText(h),$!=null&&v!=null&&this.setPosition($,v),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},u.prototype.hide=function(h){this.isOpen&&(this.getElement().style.display="none",this.getElement().className=n,this.isOpen=!1)},u.prototype.getHeight=function(){return this.getElement().offsetHeight},u.prototype.getWidth=function(){return this.getElement().offsetWidth},u.prototype.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)},u}(),r=function(){function u(){this.popups=[]}return u.prototype.addPopup=function(h){this.popups.push(h),this.updatePopups()},u.prototype.removePopup=function(h){var $=this.popups.indexOf(h);$!==-1&&(this.popups.splice($,1),this.updatePopups())},u.prototype.updatePopups=function(){var h,$,v,w;this.popups.sort(function(T,E){return E.priority-T.priority});var y=[];try{for(var _=s(this.popups),b=_.next();!b.done;b=_.next()){var S=b.value,M=!0;try{for(var O=(v=void 0,s(y)),k=O.next();!k.done;k=O.next()){var A=k.value;if(this.doPopupsOverlap(A,S)){M=!1;break}}}catch(T){v={error:T}}finally{try{k&&!k.done&&(w=O.return)&&w.call(O)}finally{if(v)throw v.error}}M?y.push(S):S.hide()}}catch(T){h={error:T}}finally{try{b&&!b.done&&($=_.return)&&$.call(_)}finally{if(h)throw h.error}}},u.prototype.doPopupsOverlap=function(h,$){var v=h.getElement().getBoundingClientRect(),w=$.getElement().getBoundingClientRect();return v.leftw.left&&v.topw.top},u}(),l=new r;p.popupManager=l,p.Tooltip=o;var a=function(u){g(h,u);function h($){$===void 0&&($=document.body);var v=u.call(this,$)||this;v.timeout=void 0,v.lastT=0,v.idleTime=350,v.lastEvent=void 0,v.onMouseOut=v.onMouseOut.bind(v),v.onMouseMove=v.onMouseMove.bind(v),v.waitForHover=v.waitForHover.bind(v),v.hide=v.hide.bind(v);var w=v.getElement();return w.style.whiteSpace="pre-wrap",w.style.pointerEvents="auto",w.addEventListener("mouseout",v.onMouseOut),w.tabIndex=-1,w.addEventListener("blur",function(){w.contains(document.activeElement)||this.hide()}.bind(v)),w.addEventListener("wheel",f),v}return h.prototype.addToEditor=function($){$.on("mousemove",this.onMouseMove),$.on("mousedown",this.hide),$.renderer.getMouseEventTarget().addEventListener("mouseout",this.onMouseOut,!0)},h.prototype.removeFromEditor=function($){$.off("mousemove",this.onMouseMove),$.off("mousedown",this.hide),$.renderer.getMouseEventTarget().removeEventListener("mouseout",this.onMouseOut,!0),this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},h.prototype.onMouseMove=function($,v){this.lastEvent=$,this.lastT=Date.now();var w=v.$mouseHandler.isMousePressed;if(this.isOpen){var y=this.lastEvent&&this.lastEvent.getDocumentPosition();(!this.range||!this.range.contains(y.row,y.column)||w||this.isOutsideOfText(this.lastEvent))&&this.hide()}this.timeout||w||(this.lastEvent=$,this.timeout=setTimeout(this.waitForHover,this.idleTime))},h.prototype.waitForHover=function(){this.timeout&&clearTimeout(this.timeout);var $=Date.now()-this.lastT;if(this.idleTime-$>10){this.timeout=setTimeout(this.waitForHover,this.idleTime-$);return}this.timeout=null,this.lastEvent&&!this.isOutsideOfText(this.lastEvent)&&this.$gatherData(this.lastEvent,this.lastEvent.editor)},h.prototype.isOutsideOfText=function($){var v=$.editor,w=$.getDocumentPosition(),y=v.session.getLine(w.row);if(w.column==y.length){var _=v.renderer.pixelToScreenCoordinates($.clientX,$.clientY),b=v.session.documentToScreenPosition(w.row,w.column);if(b.column!=_.column||b.row!=_.row)return!0}return!1},h.prototype.setDataProvider=function($){this.$gatherData=$},h.prototype.showForRange=function($,v,w,y){var _=10;if(!(y&&y!=this.lastEvent)&&!(this.isOpen&&document.activeElement==this.getElement())){var b=$.renderer;this.isOpen||(l.addPopup(this),this.$registerCloseEvents(),this.setTheme(b.theme)),this.isOpen=!0,this.addMarker(v,$.session),this.range=i.fromPoints(v.start,v.end);var S=b.textToScreenCoordinates(v.start.row,v.start.column),M=b.scroller.getBoundingClientRect();S.pageX=u.length&&(u=void 0),{value:u&&u[v++],done:!u}}};throw new TypeError(h?"Object is not iterable.":"Symbol.iterator is not defined.")},c=e("../lib/dom"),i=e("../lib/event"),f=e("../tooltip").Tooltip,n=e("../config").nls,o=5,r=3;p.GUTTER_TOOLTIP_LEFT_OFFSET=o,p.GUTTER_TOOLTIP_TOP_OFFSET=r;function l(u){var h=u.editor,$=h.renderer.$gutterLayer,v=new a(h,!0);u.editor.setDefaultHandler("guttermousedown",function(M){if(!(!h.isFocused()||M.getButton()!=0)){var O=$.getRegion(M);if(O!="foldWidgets"){var k=M.getDocumentPosition().row,A=h.session.selection;if(M.getShiftKey())A.selectTo(k,0);else{if(M.domEvent.detail==2)return h.selectAll(),M.preventDefault();u.$clickSelection=h.selection.getLineRange(k)}return u.setState("selectByLines"),u.captureMouse(M),M.preventDefault()}}});var w,y;function _(){var M=y.getDocumentPosition().row,O=h.session.getLength();if(M==O){var k=h.renderer.pixelToScreenCoordinates(0,y.y).row,A=y.$pos;if(k>h.session.documentToScreenRow(A.row,A.column))return b()}if(v.showTooltip(M),!!v.isOpen)if(h.on("mousewheel",b),h.on("changeSession",b),window.addEventListener("keydown",b,!0),u.$tooltipFollowsMouse)S(y);else{var T=y.getGutterRow(),E=$.$lines.get(T);if(E){var C=E.element.querySelector(".ace_gutter_annotation"),x=C.getBoundingClientRect(),L=v.getElement().style;L.left=x.right-o+"px",L.top=x.bottom-r+"px"}else S(y)}}function b(M){M&&M.type==="keydown"&&(M.ctrlKey||M.metaKey)||M&&M.type==="mouseout"&&(!M.relatedTarget||v.getElement().contains(M.relatedTarget))||(w&&(w=clearTimeout(w)),v.isOpen&&(v.hideTooltip(),h.off("mousewheel",b),h.off("changeSession",b),window.removeEventListener("keydown",b,!0)))}function S(M){v.setPosition(M.x,M.y)}u.editor.setDefaultHandler("guttermousemove",function(M){var O=M.domEvent.target||M.domEvent.srcElement;if(c.hasCssClass(O,"ace_fold-widget")||c.hasCssClass(O,"ace_custom-widget"))return b();v.isOpen&&u.$tooltipFollowsMouse&&S(M),y=M,!w&&(w=setTimeout(function(){w=null,y&&!u.isMousePressed&&_()},50))}),i.addListener(h.renderer.$gutter,"mouseout",function(M){y=null,!!v.isOpen&&(w=setTimeout(function(){w=null,b(M)},50))},h)}p.GutterHandler=l;var a=function(u){g(h,u);function h($,v){v===void 0&&(v=!1);var w=u.call(this,$.container)||this;w.editor=$,w.visibleTooltipRow;var y=w.getElement();return y.setAttribute("role","tooltip"),y.style.pointerEvents="auto",v&&(w.onMouseOut=w.onMouseOut.bind(w),y.addEventListener("mouseout",w.onMouseOut)),w}return h.prototype.onMouseOut=function($){!this.isOpen||!$.relatedTarget||this.getElement().contains($.relatedTarget)||$&&$.currentTarget.contains($.relatedTarget)||this.hideTooltip()},h.prototype.setPosition=function($,v){var w=window.innerWidth||document.documentElement.clientWidth,y=window.innerHeight||document.documentElement.clientHeight,_=this.getWidth(),b=this.getHeight();$+=15,v+=15,$+_>w&&($-=$+_-w),v+b>y&&(v-=20+b),f.prototype.setPosition.call(this,$,v)},Object.defineProperty(h,"annotationLabels",{get:function(){return{error:{singular:n("gutter-tooltip.aria-label.error.singular","error"),plural:n("gutter-tooltip.aria-label.error.plural","errors")},security:{singular:n("gutter-tooltip.aria-label.security.singular","security finding"),plural:n("gutter-tooltip.aria-label.security.plural","security findings")},warning:{singular:n("gutter-tooltip.aria-label.warning.singular","warning"),plural:n("gutter-tooltip.aria-label.warning.plural","warnings")},info:{singular:n("gutter-tooltip.aria-label.info.singular","information message"),plural:n("gutter-tooltip.aria-label.info.plural","information messages")},hint:{singular:n("gutter-tooltip.aria-label.hint.singular","suggestion"),plural:n("gutter-tooltip.aria-label.hint.plural","suggestions")}}},enumerable:!1,configurable:!0}),h.prototype.showTooltip=function($){var v,w=this.editor.renderer.$gutterLayer,y=w.$annotations[$],_;y?_={displayText:Array.from(y.displayText),type:Array.from(y.type)}:_={displayText:[],type:[]};var b=w.session.getFoldLine($);if(b&&w.$showFoldedAnnotations){for(var S={error:[],security:[],warning:[],info:[],hint:[]},M={error:1,security:2,warning:3,info:4,hint:5},O,k=$+1;k<=b.end.row;k++)if(!!w.$annotations[k])for(var A=0;An?T=null:j-T>=f&&(a.renderer.scrollCursorIntoView(),T=null)}}function x(D,P){var j=Date.now(),V=a.renderer.layerConfig.lineHeight,W=a.renderer.layerConfig.characterWidth,H=a.renderer.scroller.getBoundingClientRect(),z={x:{left:w-H.left,right:H.right-w},y:{top:y-H.top,bottom:H.bottom-y}},U=Math.min(z.x.left,z.x.right),Z=Math.min(z.y.top,z.y.bottom),ne={row:D.row,column:D.column};U/W<=2&&(ne.column+=z.x.left=i&&a.renderer.scrollCursorIntoView(ne):A=j:A=null}function L(){var D=S;S=a.renderer.screenToTextCoordinates(w,y),C(S,D),x(S,D)}function q(){b=a.selection.toOrientedRange(),v=a.session.addMarker(b,"ace_selection",a.getSelectionStyle()),a.clearSelection(),a.isFocused()&&a.renderer.$cursorLayer.setBlinking(!1),clearInterval(_),L(),_=setInterval(L,20),M=0,s.addListener(document,"mousemove",I)}function N(){clearInterval(_),a.session.removeMarker(v),v=null,a.selection.fromOrientedRange(b),a.isFocused()&&!k&&a.$resetCursorStyle(),b=null,S=null,M=0,A=null,T=null,s.removeListener(document,"mousemove",I)}var F=null;function I(){F==null&&(F=setTimeout(function(){F!=null&&v&&N()},20))}function R(D){var P=D.types;return!P||Array.prototype.some.call(P,function(j){return j=="text/plain"||j=="Text"})}function B(D){var P=["copy","copymove","all","uninitialized"],j=["move","copymove","linkmove","all","uninitialized"],V=c.isMac?D.altKey:D.ctrlKey,W="uninitialized";try{W=D.dataTransfer.effectAllowed.toLowerCase()}catch{}var H="none";return V&&P.indexOf(W)>=0?H="copy":j.indexOf(W)>=0?H="move":P.indexOf(W)>=0&&(H="copy"),H}}(function(){this.dragWait=function(){var l=Date.now()-this.mousedownEvent.time;l>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var l=this.editor.container;l.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(l){this.editor.$resetCursorStyle(),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var l=this.editor,a=l.container;a.draggable=!0,l.renderer.$cursorLayer.setBlinking(!1),l.setStyle("ace_dragging");var u=c.isWin?"default":"move";l.renderer.setCursorStyle(u),this.setState("dragReady")},this.onMouseDrag=function(l){var a=this.editor.container;if(c.isIE&&this.state=="dragReady"){var u=r(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);u>3&&a.dragDrop()}if(this.state==="dragWait"){var u=r(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);u>0&&(a.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(l){if(!!this.$dragEnabled){this.mousedownEvent=l;var a=this.editor,u=l.inSelection(),h=l.getButton(),$=l.domEvent.detail||1;if($===1&&h===0&&u){if(l.editor.inMultiSelectMode&&(l.getAccelKey()||l.getShiftKey()))return;this.mousedownEvent.time=Date.now();var v=l.domEvent.target||l.domEvent.srcElement;if("unselectable"in v&&(v.unselectable="on"),a.getDragDelay()){if(c.isWebKit){this.cancelDrag=!0;var w=a.container;w.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(l,this.onMouseDrag.bind(this)),l.defaultPrevented=!0}}}}).call(o.prototype);function r(l,a,u,h){return Math.sqrt(Math.pow(u-l,2)+Math.pow(h-a,2))}p.DragdropHandler=o}),ace.define("ace/mouse/touch_handler",["require","exports","module","ace/mouse/mouse_event","ace/lib/event","ace/lib/dom"],function(e,p,m){var g=e("./mouse_event").MouseEvent,s=e("../lib/event"),c=e("../lib/dom");p.addTouchListeners=function(i,f){var n="scroll",o,r,l,a,u,h,$=0,v,w=0,y=0,_=0,b,S;function M(){var C=window.navigator&&window.navigator.clipboard,x=!1,L=function(){var F=f.getCopyText(),I=f.session.getUndoManager().hasUndo();S.replaceChild(c.buildDom(x?["span",!F&&q("selectall")&&["span",{class:"ace_mobile-button",action:"selectall"},"Select All"],F&&q("copy")&&["span",{class:"ace_mobile-button",action:"copy"},"Copy"],F&&q("cut")&&["span",{class:"ace_mobile-button",action:"cut"},"Cut"],C&&q("paste")&&["span",{class:"ace_mobile-button",action:"paste"},"Paste"],I&&q("undo")&&["span",{class:"ace_mobile-button",action:"undo"},"Undo"],q("find")&&["span",{class:"ace_mobile-button",action:"find"},"Find"],q("openCommandPalette")&&["span",{class:"ace_mobile-button",action:"openCommandPalette"},"Palette"]]:["span"]),S.firstChild)},q=function(F){return f.commands.canExecute(F,f)},N=function(F){var I=F.target.getAttribute("action");if(I=="more"||!x)return x=!x,L();I=="paste"?C.readText().then(function(R){f.execCommand(I,R)}):I&&((I=="cut"||I=="copy")&&(C?C.writeText(f.getCopyText()):document.execCommand("copy")),f.execCommand(I)),S.firstChild.style.display="none",x=!1,I!="openCommandPalette"&&f.focus()};S=c.buildDom(["div",{class:"ace_mobile-menu",ontouchstart:function(F){n="menu",F.stopPropagation(),F.preventDefault(),f.textInput.focus()},ontouchend:function(F){F.stopPropagation(),F.preventDefault(),N(F)},onclick:N},["span"],["span",{class:"ace_mobile-button",action:"more"},"..."]],f.container)}function O(){if(!f.getOption("enableMobileMenu")){S&&k();return}S||M();var C=f.selection.cursor,x=f.renderer.textToScreenCoordinates(C.row,C.column),L=f.renderer.textToScreenCoordinates(0,0).pageX,q=f.renderer.scrollLeft,N=f.container.getBoundingClientRect();S.style.top=x.pageY-N.top-3+"px",x.pageX-N.left=2?f.selection.getLineRange(v.row):f.session.getBracketRange(v);C&&!C.isEmpty()?f.selection.setRange(C):f.selection.selectWord(),n="wait"}s.addListener(i,"contextmenu",function(C){if(!!b){var x=f.textInput.getElement();x.focus()}},f),s.addListener(i,"touchstart",function(C){var x=C.touches;if(u||x.length>1){clearTimeout(u),u=null,l=-1,n="zoom";return}b=f.$mouseHandler.isMousePressed=!0;var L=f.renderer.layerConfig.lineHeight,q=f.renderer.layerConfig.lineHeight,N=C.timeStamp;a=N;var F=x[0],I=F.clientX,R=F.clientY;Math.abs(o-I)+Math.abs(r-R)>L&&(l=-1),o=C.clientX=I,r=C.clientY=R,y=_=0;var B=new g(C,f);if(v=B.getDocumentPosition(),N-l<500&&x.length==1&&!$)w++,C.preventDefault(),C.button=0,T();else{w=0;var D=f.selection.cursor,P=f.selection.isEmpty()?D:f.selection.anchor,j=f.renderer.$cursorLayer.getPixelPosition(D,!0),V=f.renderer.$cursorLayer.getPixelPosition(P,!0),W=f.renderer.scroller.getBoundingClientRect(),H=f.renderer.layerConfig.offset,z=f.renderer.scrollLeft,U=function(re,ue){return re=re/q,ue=ue/L-.75,re*re+ue*ue};if(C.clientXne?"cursor":"anchor"),ne<3.5?n="anchor":Z<3.5?n="cursor":n="scroll",u=setTimeout(A,450)}l=N},f),s.addListener(i,"touchend",function(C){b=f.$mouseHandler.isMousePressed=!1,h&&clearInterval(h),n=="zoom"?(n="",$=0):u?(f.selection.moveToPosition(v),$=0,O()):n=="scroll"?(E(),k()):O(),clearTimeout(u),u=null},f),s.addListener(i,"touchmove",function(C){u&&(clearTimeout(u),u=null);var x=C.touches;if(!(x.length>1||n=="zoom")){var L=x[0],q=o-L.clientX,N=r-L.clientY;if(n=="wait")if(q*q+N*N>4)n="cursor";else return C.preventDefault();o=L.clientX,r=L.clientY,C.clientX=L.clientX,C.clientY=L.clientY;var F=C.timeStamp,I=F-a;if(a=F,n=="scroll"){var R=new g(C,f);R.speed=1,R.wheelX=q,R.wheelY=N,10*Math.abs(q)0)if(ne==16){for(fe=ue;fe-1){for(fe=ue;fe=0&&V[X]==b;X--)P[X]=g}}}function I(D,P,j){if(!(s=D){for(H=W+1;H=D;)H++;for(z=W,U=H-1;z=P.length||(H=j[V-1])!=h&&H!=$||(z=P[V+1])!=h&&z!=$?v:(c&&(z=$),z==H?z:v);case M:return H=V>0?j[V-1]:w,H==h&&V+10&&j[V-1]==h)return h;if(c)return v;for(Z=V+1,U=P.length;Z=1425&&ne<=2303||ne==64286;if(H=P[Z],re&&(H==u||H==_))return u}return V<1||(H=P[V-1])==w?v:j[V-1];case w:return c=!1,i=!0,g;case y:return f=!0,v;case A:case T:case C:case x:case E:c=!1;case L:return v}}function B(D){var P=D.charCodeAt(0),j=P>>8;return j==0?P>191?a:q[P]:j==5?/[\u0591-\u05f4]/.test(D)?u:a:j==6?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(D)?k:/[\u0660-\u0669\u066b-\u066c]/.test(D)?$:P==1642?O:/[\u06f0-\u06f9]/.test(D)?h:_:j==32&&P<=8287?N[P&255]:j==254&&P>=65136?_:v}p.L=a,p.R=u,p.EN=h,p.ON_R=3,p.AN=4,p.R_H=5,p.B=6,p.RLE=7,p.DOT="\xB7",p.doBidiReorder=function(D,P,j){if(D.length<2)return{};var V=D.split(""),W=new Array(V.length),H=new Array(V.length),z=[];g=j?l:r,F(V,z,V.length,P);for(var U=0;U_&&P[U]0&&V[U-1]==="\u0644"&&/\u0622|\u0623|\u0625|\u0627/.test(V[U])&&(z[U-1]=z[U]=p.R_H,U++);V[V.length-1]===p.DOT&&(z[V.length-1]=p.B),V[0]==="\u202B"&&(z[0]=p.RLE);for(var U=0;U=0&&(n=this.session.$docRowCache[r])}return n},f.prototype.getSplitIndex=function(){var n=0,o=this.session.$screenRowCache;if(o.length)for(var r,l=this.session.$getRowCacheIndex(o,this.currentRow);this.currentRow-n>0&&(r=this.session.$getRowCacheIndex(o,this.currentRow-n-1),r===l);)l=r,n++;else n=this.currentRow;return n},f.prototype.updateRowLine=function(n,o){n===void 0&&(n=this.getDocumentRow());var r=n===this.session.getLength()-1,l=r?this.EOF:this.EOL;if(this.wrapIndent=0,this.line=this.session.getLine(n),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE,this.session.$useWrapMode){var a=this.session.$wrapData[n];a&&(o===void 0&&(o=this.getSplitIndex()),o>0&&a.length?(this.wrapIndent=a.indent,this.wrapOffset=this.wrapIndent*this.charWidths[g.L],this.line=oo?this.session.getOverwrite()?n:n-1:o,l=g.getVisualFromLogicalIdx(r,this.bidiMap),a=this.bidiMap.bidiLevels,u=0;!this.session.getOverwrite()&&n<=o&&a[l]%2!=0&&l++;for(var h=0;ho&&a[l]%2==0&&(u+=this.charWidths[a[l]]),this.wrapIndent&&(u+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(u+=this.rtlLineOffset),u},f.prototype.getSelections=function(n,o){var r=this.bidiMap,l=r.bidiLevels,a,u=[],h=0,$=Math.min(n,o)-this.wrapIndent,v=Math.max(n,o)-this.wrapIndent,w=!1,y=!1,_=0;this.wrapIndent&&(h+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var b,S=0;S=$&&br+u/2;){if(r+=u,l===a.length-1){u=0;break}u=this.charWidths[a[++l]]}return l>0&&a[l-1]%2!=0&&a[l]%2==0?(n0&&a[l-1]%2==0&&a[l]%2!=0?o=1+(n>r?this.bidiMap.logicalFromVisual[l]:this.bidiMap.logicalFromVisual[l-1]):this.isRtlDir&&l===a.length-1&&u===0&&a[l-1]%2==0||!this.isRtlDir&&l===0&&a[l]%2!=0?o=1+this.bidiMap.logicalFromVisual[l]:(l>0&&a[l-1]%2!=0&&u!==0&&l--,o=this.bidiMap.logicalFromVisual[l]),o===0&&this.isRtlDir&&o++,o+this.wrapIndent},f}();p.BidiHandler=i}),ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],function(e,p,m){var g=e("./lib/oop"),s=e("./lib/lang"),c=e("./lib/event_emitter").EventEmitter,i=e("./range").Range,f=function(){function n(o){this.session=o,this.doc=o.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var r=this;this.cursor.on("change",function(l){r.$cursorChanged=!0,r.$silent||r._emit("changeCursor"),!r.$isEmpty&&!r.$silent&&r._emit("changeSelection"),!r.$keepDesiredColumnOnChange&&l.old.column!=l.value.column&&(r.$desiredColumn=null)}),this.anchor.on("change",function(){r.$anchorChanged=!0,!r.$isEmpty&&!r.$silent&&r._emit("changeSelection")})}return n.prototype.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},n.prototype.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},n.prototype.getCursor=function(){return this.lead.getPosition()},n.prototype.setAnchor=function(o,r){this.$isEmpty=!1,this.anchor.setPosition(o,r)},n.prototype.getAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},n.prototype.getSelectionLead=function(){return this.lead.getPosition()},n.prototype.isBackwards=function(){var o=this.anchor,r=this.lead;return o.row>r.row||o.row==r.row&&o.column>r.column},n.prototype.getRange=function(){var o=this.anchor,r=this.lead;return this.$isEmpty?i.fromPoints(r,r):this.isBackwards()?i.fromPoints(r,o):i.fromPoints(o,r)},n.prototype.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},n.prototype.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},n.prototype.setRange=function(o,r){var l=r?o.end:o.start,a=r?o.start:o.end;this.$setSelection(l.row,l.column,a.row,a.column)},n.prototype.$setSelection=function(o,r,l,a){if(!this.$silent){var u=this.$isEmpty,h=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(o,r),this.cursor.setPosition(l,a),this.$isEmpty=!i.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit("changeCursor"),(this.$cursorChanged||this.$anchorChanged||u!=this.$isEmpty||h)&&this._emit("changeSelection")}},n.prototype.$moveSelection=function(o){var r=this.lead;this.$isEmpty&&this.setSelectionAnchor(r.row,r.column),o.call(this)},n.prototype.selectTo=function(o,r){this.$moveSelection(function(){this.moveCursorTo(o,r)})},n.prototype.selectToPosition=function(o){this.$moveSelection(function(){this.moveCursorToPosition(o)})},n.prototype.moveTo=function(o,r){this.clearSelection(),this.moveCursorTo(o,r)},n.prototype.moveToPosition=function(o){this.clearSelection(),this.moveCursorToPosition(o)},n.prototype.selectUp=function(){this.$moveSelection(this.moveCursorUp)},n.prototype.selectDown=function(){this.$moveSelection(this.moveCursorDown)},n.prototype.selectRight=function(){this.$moveSelection(this.moveCursorRight)},n.prototype.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},n.prototype.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},n.prototype.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},n.prototype.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},n.prototype.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},n.prototype.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},n.prototype.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},n.prototype.getWordRange=function(o,r){if(typeof r=="undefined"){var l=o||this.lead;o=l.row,r=l.column}return this.session.getWordRange(o,r)},n.prototype.selectWord=function(){this.setSelectionRange(this.getWordRange())},n.prototype.selectAWord=function(){var o=this.getCursor(),r=this.session.getAWordRange(o.row,o.column);this.setSelectionRange(r)},n.prototype.getLineRange=function(o,r){var l=typeof o=="number"?o:this.lead.row,a,u=this.session.getFoldLine(l);return u?(l=u.start.row,a=u.end.row):a=l,r===!0?new i(l,0,a,this.session.getLine(a).length):new i(l,0,a+1,0)},n.prototype.selectLine=function(){this.setSelectionRange(this.getLineRange())},n.prototype.moveCursorUp=function(){this.moveCursorBy(-1,0)},n.prototype.moveCursorDown=function(){this.moveCursorBy(1,0)},n.prototype.wouldMoveIntoSoftTab=function(o,r,l){var a=o.column,u=o.column+r;return l<0&&(a=o.column-r,u=o.column),this.session.isTabStop(o)&&this.doc.getLine(o.row).slice(a,u).split(" ").length-1==r},n.prototype.moveCursorLeft=function(){var o=this.lead.getPosition(),r;if(r=this.session.getFoldAt(o.row,o.column,-1))this.moveCursorTo(r.start.row,r.start.column);else if(o.column===0)o.row>0&&this.moveCursorTo(o.row-1,this.doc.getLine(o.row-1).length);else{var l=this.session.getTabSize();this.wouldMoveIntoSoftTab(o,l,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-l):this.moveCursorBy(0,-1)}},n.prototype.moveCursorRight=function(){var o=this.lead.getPosition(),r;if(r=this.session.getFoldAt(o.row,o.column,1))this.moveCursorTo(r.end.row,r.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(r.column=a)}}this.moveCursorTo(r.row,r.column)},n.prototype.moveCursorFileEnd=function(){var o=this.doc.getLength()-1,r=this.doc.getLine(o).length;this.moveCursorTo(o,r)},n.prototype.moveCursorFileStart=function(){this.moveCursorTo(0,0)},n.prototype.moveCursorLongWordRight=function(){var o=this.lead.row,r=this.lead.column,l=this.doc.getLine(o),a=l.substring(r);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var u=this.session.getFoldAt(o,r,1);if(u){this.moveCursorTo(u.end.row,u.end.column);return}if(this.session.nonTokenRe.exec(a)&&(r+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,a=l.substring(r)),r>=l.length){this.moveCursorTo(o,l.length),this.moveCursorRight(),o0&&this.moveCursorWordLeft();return}this.session.tokenRe.exec(u)&&(r-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(o,r)},n.prototype.$shortWordEndIndex=function(o){var r=0,l,a=/\s/,u=this.session.tokenRe;if(u.lastIndex=0,this.session.tokenRe.exec(o))r=this.session.tokenRe.lastIndex;else{for(;(l=o[r])&&a.test(l);)r++;if(r<1){for(u.lastIndex=0;(l=o[r])&&!u.test(l);)if(u.lastIndex=0,r++,a.test(l))if(r>2){r--;break}else{for(;(l=o[r])&&a.test(l);)r++;if(r>2)break}}}return u.lastIndex=0,r},n.prototype.moveCursorShortWordRight=function(){var o=this.lead.row,r=this.lead.column,l=this.doc.getLine(o),a=l.substring(r),u=this.session.getFoldAt(o,r,1);if(u)return this.moveCursorTo(u.end.row,u.end.column);if(r==l.length){var h=this.doc.getLength();do o++,a=this.doc.getLine(o);while(o0&&/^\s*$/.test(a));r=a.length,/\s+$/.test(a)||(a="")}var u=s.stringReverse(a),h=this.$shortWordEndIndex(u);return this.moveCursorTo(o,r-h)},n.prototype.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},n.prototype.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},n.prototype.moveCursorBy=function(o,r){var l=this.session.documentToScreenPosition(this.lead.row,this.lead.column),a;if(r===0&&(o!==0&&(this.session.$bidiHandler.isBidiRow(l.row,this.lead.row)?(a=this.session.$bidiHandler.getPosLeft(l.column),l.column=Math.round(a/this.session.$bidiHandler.charWidths[0])):a=l.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?l.column=this.$desiredColumn:this.$desiredColumn=l.column),o!=0&&this.session.lineWidgets&&this.session.lineWidgets[this.lead.row]){var u=this.session.lineWidgets[this.lead.row];o<0?o-=u.rowsAbove||0:o>0&&(o+=u.rowCount-(u.rowsAbove||0))}var h=this.session.screenToDocumentPosition(l.row+o,l.column,a);o!==0&&r===0&&h.row===this.lead.row&&h.column===this.lead.column,this.moveCursorTo(h.row,h.column+r,r===0)},n.prototype.moveCursorToPosition=function(o){this.moveCursorTo(o.row,o.column)},n.prototype.moveCursorTo=function(o,r,l){var a=this.session.getFoldAt(o,r,1);a&&(o=a.start.row,r=a.start.column),this.$keepDesiredColumnOnChange=!0;var u=this.session.getLine(o);/[\uDC00-\uDFFF]/.test(u.charAt(r))&&u.charAt(r-1)&&(this.lead.row==o&&this.lead.column==r+1?r=r-1:r=r+1),this.lead.setPosition(o,r),this.$keepDesiredColumnOnChange=!1,l||(this.$desiredColumn=null)},n.prototype.moveCursorToScreen=function(o,r,l){var a=this.session.screenToDocumentPosition(o,r);this.moveCursorTo(a.row,a.column,l)},n.prototype.detach=function(){this.lead.detach(),this.anchor.detach()},n.prototype.fromOrientedRange=function(o){this.setSelectionRange(o,o.cursor==o.start),this.$desiredColumn=o.desiredColumn||this.$desiredColumn},n.prototype.toOrientedRange=function(o){var r=this.getRange();return o?(o.start.column=r.start.column,o.start.row=r.start.row,o.end.column=r.end.column,o.end.row=r.end.row):o=r,o.cursor=this.isBackwards()?o.start:o.end,o.desiredColumn=this.$desiredColumn,o},n.prototype.getRangeOfMovements=function(o){var r=this.getCursor();try{o(this);var l=this.getCursor();return i.fromPoints(r,l)}catch{return i.fromPoints(r,r)}finally{this.moveCursorToPosition(r)}},n.prototype.toJSON=function(){if(this.rangeCount)var o=this.ranges.map(function(r){var l=r.clone();return l.isBackwards=r.cursor==r.start,l});else{var o=this.getRange();o.isBackwards=this.isBackwards()}return o},n.prototype.fromJSON=function(o){if(o.start==null)if(this.rangeList&&o.length>1){this.toSingleRange(o[0]);for(var r=o.length;r--;){var l=i.fromPoints(o[r].start,o[r].end);o[r].isBackwards&&(l.cursor=l.start),this.addRange(l,!0)}return}else o=o[0];this.rangeList&&this.toSingleRange(o),this.setSelectionRange(o,o.isBackwards)},n.prototype.isEqual=function(o){if((o.length||this.rangeCount)&&o.length!=this.rangeCount)return!1;if(!o.length||!this.ranges)return this.getRange().isEqual(o);for(var r=this.ranges.length;r--;)if(!this.ranges[r].isEqual(o[r]))return!1;return!0},n}();f.prototype.setSelectionAnchor=f.prototype.setAnchor,f.prototype.getSelectionAnchor=f.prototype.getAnchor,f.prototype.setSelectionRange=f.prototype.setRange,g.implement(f.prototype,c),p.Selection=f}),ace.define("ace/tokenizer",["require","exports","module","ace/lib/report_error"],function(e,p,m){var g=e("./lib/report_error").reportError,s=2e3,c=function(){function i(f){this.splitRegex,this.states=f,this.regExps={},this.matchMappings={};for(var n in this.states){for(var o=this.states[n],r=[],l=0,a=this.matchMappings[n]={defaultToken:"text"},u="g",h=[],$=0;$1?v.onMatch=this.$applyToken:v.onMatch=v.token),y>1&&(/\\\d/.test(v.regex)?w=v.regex.replace(/\\([0-9]+)/g,function(_,b){return"\\"+(parseInt(b,10)+l+1)}):(y=1,w=this.removeCapturingGroups(v.regex)),!v.splitRegex&&typeof v.token!="string"&&h.push(v)),a[l]=$,l+=y,r.push(w),v.onMatch||(v.onMatch=null)}}r.length||(a[0]=0,r.push("$")),h.forEach(function(_){_.splitRegex=this.createSplitterRegexp(_.regex,u)},this),this.regExps[n]=new RegExp("("+r.join(")|(")+")|($)",u)}}return i.prototype.$setMaxTokenCount=function(f){s=f|0},i.prototype.$applyToken=function(f){var n=this.splitRegex.exec(f).slice(1),o=this.token.apply(this,n);if(typeof o=="string")return[{type:o,value:f}];for(var r=[],l=0,a=o.length;lv){var O=f.substring(v,M-S.length);y.type==_?y.value+=O:(y.type&&$.push(y),y={type:_,value:O})}for(var k=0;ks){for(w>2*f.length&&this.reportError("infinite loop with in ace tokenizer",{startState:n,line:f});v1&&o[0]!==r&&o.unshift("#tmp",r),{tokens:$,state:o.length?o:r}},i}();c.prototype.reportError=g,p.Tokenizer=c}),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/deep_copy"],function(e,p,m){var g=e("../lib/deep_copy").deepCopy,s;s=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}},function(){this.addRules=function(f,n){if(!n){for(var o in f)this.$rules[o]=f[o];return}for(var o in f){for(var r=f[o],l=0;l=this.$rowTokens.length;){if(this.$row+=1,i||(i=this.$session.getLength()),this.$row>=i)return this.$row=i-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},c.prototype.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},c.prototype.getCurrentTokenRow=function(){return this.$row},c.prototype.getCurrentTokenColumn=function(){var i=this.$rowTokens,f=this.$tokenIndex,n=i[f].start;if(n!==void 0)return n;for(n=0;f>0;)f-=1,n+=i[f].value.length;return n},c.prototype.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},c.prototype.getCurrentTokenRange=function(){var i=this.$rowTokens[this.$tokenIndex],f=this.getCurrentTokenColumn();return new g(this.$row,f,this.$row,f+i.value.length)},c}();p.TokenIterator=s}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,p,m){var g=e("../../lib/oop"),s=e("../behaviour").Behaviour,c=e("../../token_iterator").TokenIterator,i=e("../../lib/lang"),f=["text","paren.rparen","rparen","paren","punctuation.operator"],n=["text","paren.rparen","rparen","paren","punctuation.operator","comment"],o,r={},l={'"':'"',"'":"'"},a=function($){var v=-1;if($.multiSelect&&(v=$.selection.index,r.rangeCount!=$.multiSelect.rangeCount&&(r={rangeCount:$.multiSelect.rangeCount})),r[v])return o=r[v];o=r[v]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},u=function($,v,w,y){var _=$.end.row-$.start.row;return{text:w+v+y,selection:[0,$.start.column+1,_,$.end.column+(_?0:1)]}},h;h=function($){$=$||{},this.add("braces","insertion",function(v,w,y,_,b){var S=y.getCursorPosition(),M=_.doc.getLine(S.row);if(b=="{"){a(y);var O=y.getSelectionRange(),k=_.doc.getTextRange(O),A=_.getTokenAt(S.row,S.column);if(k!==""&&k!=="{"&&y.getWrapBehavioursEnabled())return u(O,k,"{","}");if(A&&/(?:string)\.quasi|\.xml/.test(A.type)){var T=[/tag\-(?:open|name)/,/attribute\-name/];return T.some(function(F){return F.test(A.type)})||/(string)\.quasi/.test(A.type)&&A.value[S.column-A.start-1]!=="$"?void 0:(h.recordAutoInsert(y,_,"}"),{text:"{}",selection:[1,1]})}else if(h.isSaneInsertion(y,_))return/[\]\}\)]/.test(M[S.column])||y.inMultiSelectMode||$.braces?(h.recordAutoInsert(y,_,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(y,_,"{"),{text:"{",selection:[1,1]})}else if(b=="}"){a(y);var E=M.substring(S.column,S.column+1);if(E=="}"){var C=_.$findOpeningBracket("}",{column:S.column+1,row:S.row});if(C!==null&&h.isAutoInsertedClosing(S,M,b))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else if(b==` +`||b==`\r +`){a(y);var x="";h.isMaybeInsertedClosing(S,M)&&(x=i.stringRepeat("}",o.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var E=M.substring(S.column,S.column+1);if(E==="}"){var L=_.findMatchingBracket({row:S.row,column:S.column+1},"}");if(!L)return null;var q=this.$getIndent(_.getLine(L.row))}else if(x)var q=this.$getIndent(M);else{h.clearMaybeInsertedClosing();return}var N=q+_.getTabString();return{text:` +`+N+` +`+q+x,selection:[1,N.length,1,N.length]}}else h.clearMaybeInsertedClosing()}),this.add("braces","deletion",function(v,w,y,_,b){var S=_.doc.getTextRange(b);if(!b.isMultiLine()&&S=="{"){a(y);var M=_.doc.getLine(b.start.row),O=M.substring(b.end.column,b.end.column+1);if(O=="}")return b.end.column++,b;o.maybeInsertedBrackets--}}),this.add("parens","insertion",function(v,w,y,_,b){if(b=="("){a(y);var S=y.getSelectionRange(),M=_.doc.getTextRange(S);if(M!==""&&y.getWrapBehavioursEnabled())return u(S,M,"(",")");if(h.isSaneInsertion(y,_))return h.recordAutoInsert(y,_,")"),{text:"()",selection:[1,1]}}else if(b==")"){a(y);var O=y.getCursorPosition(),k=_.doc.getLine(O.row),A=k.substring(O.column,O.column+1);if(A==")"){var T=_.$findOpeningBracket(")",{column:O.column+1,row:O.row});if(T!==null&&h.isAutoInsertedClosing(O,k,b))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(v,w,y,_,b){var S=_.doc.getTextRange(b);if(!b.isMultiLine()&&S=="("){a(y);var M=_.doc.getLine(b.start.row),O=M.substring(b.start.column+1,b.start.column+2);if(O==")")return b.end.column++,b}}),this.add("brackets","insertion",function(v,w,y,_,b){if(b=="["){a(y);var S=y.getSelectionRange(),M=_.doc.getTextRange(S);if(M!==""&&y.getWrapBehavioursEnabled())return u(S,M,"[","]");if(h.isSaneInsertion(y,_))return h.recordAutoInsert(y,_,"]"),{text:"[]",selection:[1,1]}}else if(b=="]"){a(y);var O=y.getCursorPosition(),k=_.doc.getLine(O.row),A=k.substring(O.column,O.column+1);if(A=="]"){var T=_.$findOpeningBracket("]",{column:O.column+1,row:O.row});if(T!==null&&h.isAutoInsertedClosing(O,k,b))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(v,w,y,_,b){var S=_.doc.getTextRange(b);if(!b.isMultiLine()&&S=="["){a(y);var M=_.doc.getLine(b.start.row),O=M.substring(b.start.column+1,b.start.column+2);if(O=="]")return b.end.column++,b}}),this.add("string_dquotes","insertion",function(v,w,y,_,b){var S=_.$mode.$quotes||l;if(b.length==1&&S[b]){if(this.lineCommentStart&&this.lineCommentStart.indexOf(b)!=-1)return;a(y);var M=b,O=y.getSelectionRange(),k=_.doc.getTextRange(O);if(k!==""&&(k.length!=1||!S[k])&&y.getWrapBehavioursEnabled())return u(O,k,M,M);if(!k){var A=y.getCursorPosition(),T=_.doc.getLine(A.row),E=T.substring(A.column-1,A.column),C=T.substring(A.column,A.column+1),x=_.getTokenAt(A.row,A.column),L=_.getTokenAt(A.row,A.column+1);if(E=="\\"&&x&&/escape/.test(x.type))return null;var q=x&&/string|escape/.test(x.type),N=!L||/string|escape/.test(L.type),F;if(C==M)F=q!==N,F&&/string\.end/.test(L.type)&&(F=!1);else{if(q&&!N||q&&N)return null;var I=_.$mode.tokenRe;I.lastIndex=0;var R=I.test(E);I.lastIndex=0;var B=I.test(C),D=_.$mode.$pairQuotesAfter,P=D&&D[M]&&D[M].test(E);if(!P&&R||B||C&&!/[\s;,.})\]\\]/.test(C))return null;var j=T[A.column-2];if(E==M&&(j==M||I.test(j)))return null;F=!0}return{text:F?M+M:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(v,w,y,_,b){var S=_.$mode.$quotes||l,M=_.doc.getTextRange(b);if(!b.isMultiLine()&&S.hasOwnProperty(M)){a(y);var O=_.doc.getLine(b.start.row),k=O.substring(b.start.column+1,b.start.column+2);if(k==M)return b.end.column++,b}}),$.closeDocComment!==!1&&this.add("doc comment end","insertion",function(v,w,y,_,b){if(v==="doc-start"&&(b===` +`||b===`\r +`)&&y.selection.isEmpty()){var S=y.getCursorPosition();if(S.column===0)return;for(var M=_.doc.getLine(S.row),O=_.doc.getLine(S.row+1),k=_.getTokens(S.row),A=0,T=0;T=S.column){if(A===S.column){if(!/\.doc/.test(E.type))return;if(/\*\//.test(E.value)){var C=k[T+1];if(!C||!/\.doc/.test(C.type))return}}var x=S.column-(A-E.value.length),L=E.value.indexOf("*/"),q=E.value.indexOf("/**",L>-1?L+2:0);if(q!==-1&&x>q&&x=L&&x<=q||!/\.doc/.test(E.type))return;break}}var N=this.$getIndent(M);if(/\s*\*/.test(O))return/^\s*\*/.test(M)?{text:b+N+"* ",selection:[1,2+N.length,1,2+N.length]}:{text:b+N+" * ",selection:[1,3+N.length,1,3+N.length]};if(/\/\*\*/.test(M.substring(0,S.column)))return{text:b+N+" * "+b+" "+N+"*/",selection:[1,4+N.length,1,4+N.length]}}})},h.isSaneInsertion=function($,v){var w=$.getCursorPosition(),y=new c(v,w.row,w.column);if(!this.$matchTokenType(y.getCurrentToken()||"text",f)){if(/[)}\]]/.test($.session.getLine(w.row)[w.column]))return!0;var _=new c(v,w.row,w.column+1);if(!this.$matchTokenType(_.getCurrentToken()||"text",f))return!1}return y.stepForward(),y.getCurrentTokenRow()!==w.row||this.$matchTokenType(y.getCurrentToken()||"text",n)},h.$matchTokenType=function($,v){return v.indexOf($.type||$)>-1},h.recordAutoInsert=function($,v,w){var y=$.getCursorPosition(),_=v.doc.getLine(y.row);this.isAutoInsertedClosing(y,_,o.autoInsertedLineEnd[0])||(o.autoInsertedBrackets=0),o.autoInsertedRow=y.row,o.autoInsertedLineEnd=w+_.substr(y.column),o.autoInsertedBrackets++},h.recordMaybeInsert=function($,v,w){var y=$.getCursorPosition(),_=v.doc.getLine(y.row);this.isMaybeInsertedClosing(y,_)||(o.maybeInsertedBrackets=0),o.maybeInsertedRow=y.row,o.maybeInsertedLineStart=_.substr(0,y.column)+w,o.maybeInsertedLineEnd=_.substr(y.column),o.maybeInsertedBrackets++},h.isAutoInsertedClosing=function($,v,w){return o.autoInsertedBrackets>0&&$.row===o.autoInsertedRow&&w===o.autoInsertedLineEnd[0]&&v.substr($.column)===o.autoInsertedLineEnd},h.isMaybeInsertedClosing=function($,v){return o.maybeInsertedBrackets>0&&$.row===o.maybeInsertedRow&&v.substr($.column)===o.maybeInsertedLineEnd&&v.substr(0,$.column)==o.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){o.autoInsertedLineEnd=o.autoInsertedLineEnd.substr(1),o.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){o&&(o.maybeInsertedBrackets=0,o.maybeInsertedRow=-1)},g.inherits(h,s),p.CstyleBehaviour=h}),ace.define("ace/unicode",["require","exports","module"],function(e,p,m){for(var g=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],s=0,c=[],i=0;i2?j%b!=b-1:j%b==0}}else{if(!this.blockComment)return!1;var M=this.blockComment.start,O=this.blockComment.end,k=new RegExp("^(\\s*)(?:"+n.escapeRegExp(M)+")"),A=new RegExp("(?:"+n.escapeRegExp(O)+")\\s*$"),T=function(F,I){C(F,I)||(!w||/\S/.test(F))&&(v.insertInLine({row:I,column:F.length},O),v.insertInLine({row:I,column:_},M))},E=function(F,I){var R;(R=F.match(A))&&v.removeInLine(I,F.length-R[0].length,F.length),(R=F.match(k))&&v.removeInLine(I,R[1].length,R[0].length)},C=function(F,I){if(k.test(F))return!0;for(var R=u.getTokens(I),B=0;BF.length&&(N=F.length)}),_==1/0&&(_=N,w=!1,y=!1),S&&_%b!=0&&(_=Math.floor(_/b)*b),q(y?E:T)},this.toggleBlockComment=function(a,u,h,$){var v=this.blockComment;if(!!v){!v.start&&v[0]&&(v=v[0]);var w=new o(u,$.row,$.column),y=w.getCurrentToken();u.selection;var _=u.selection.toOrientedRange(),b,S;if(y&&/comment/.test(y.type)){for(var M,O;y&&/comment/.test(y.type);){var k=y.value.indexOf(v.start);if(k!=-1){var A=w.getCurrentTokenRow(),T=w.getCurrentTokenColumn()+k;M=new r(A,T,A,T+v.start.length);break}y=w.stepBackward()}for(var w=new o(u,$.row,$.column),y=w.getCurrentToken();y&&/comment/.test(y.type);){var k=y.value.indexOf(v.end);if(k!=-1){var A=w.getCurrentTokenRow(),T=w.getCurrentTokenColumn()+k;O=new r(A,T,A,T+v.end.length);break}y=w.stepForward()}O&&u.remove(O),M&&(u.remove(M),b=M.start.row,S=-v.start.length)}else S=v.start.length,b=h.start.row,u.insert(h.end,v.end),u.insert(h.start,v.start);_.start.row==b&&(_.start.column+=S),_.end.row==b&&(_.end.column+=S),u.selection.fromOrientedRange(_)}},this.getNextLineIndent=function(a,u,h){return this.$getIndent(u)},this.checkOutdent=function(a,u,h){return!1},this.autoOutdent=function(a,u,h){},this.$getIndent=function(a){return a.match(/^\s*/)[0]},this.createWorker=function(a){return null},this.createModeDelegates=function(a){this.$embeds=[],this.$modes={};for(var u in a)if(a[u]){var h=a[u],$=h.prototype.$id,v=g.$modes[$];v||(g.$modes[$]=v=new h),g.$modes[u]||(g.$modes[u]=v),this.$embeds.push(u),this.$modes[u]=v}for(var w=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"],y=function(b){(function(S){var M=w[b],O=S[M];S[w[b]]=function(){return this.$delegator(M,arguments,O)}})(_)},_=this,u=0;uf[n].column&&n++,l.unshift(n,0),f.splice.apply(f,l),this.$updateRows()}}},c.prototype.$updateRows=function(){var i=this.session.lineWidgets;if(!!i){var f=!0;i.forEach(function(n,o){if(n)for(f=!1,n.row=o;n.$oldWidget;)n.$oldWidget.row=o,n=n.$oldWidget}),f&&(this.session.lineWidgets=null)}},c.prototype.$registerLineWidget=function(i){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var f=this.session.lineWidgets[i.row];return f&&(i.$oldWidget=f,f.el&&f.el.parentNode&&(f.el.parentNode.removeChild(f.el),f._inDocument=!1)),this.session.lineWidgets[i.row]=i,i},c.prototype.addLineWidget=function(i){if(this.$registerLineWidget(i),i.session=this.session,!this.editor)return i;var f=this.editor.renderer;i.html&&!i.el&&(i.el=g.createElement("div"),i.el.innerHTML=i.html),i.text&&!i.el&&(i.el=g.createElement("div"),i.el.textContent=i.text),i.el&&(g.addCssClass(i.el,"ace_lineWidgetContainer"),i.className&&g.addCssClass(i.el,i.className),i.el.style.position="absolute",i.el.style.zIndex="5",f.container.appendChild(i.el),i._inDocument=!0,i.coverGutter||(i.el.style.zIndex="3"),i.pixelHeight==null&&(i.pixelHeight=i.el.offsetHeight)),i.rowCount==null&&(i.rowCount=i.pixelHeight/f.layerConfig.lineHeight);var n=this.session.getFoldAt(i.row,0);if(i.$fold=n,n){var o=this.session.lineWidgets;i.row==n.end.row&&!o[n.start.row]?o[n.start.row]=i:i.hidden=!0}return this.session._emit("changeFold",{data:{start:{row:i.row}}}),this.$updateRows(),this.renderWidgets(null,f),this.onWidgetChanged(i),i},c.prototype.removeLineWidget=function(i){if(i._inDocument=!1,i.session=null,i.el&&i.el.parentNode&&i.el.parentNode.removeChild(i.el),i.editor&&i.editor.destroy)try{i.editor.destroy()}catch{}if(this.session.lineWidgets){var f=this.session.lineWidgets[i.row];if(f==i)this.session.lineWidgets[i.row]=i.$oldWidget,i.$oldWidget&&this.onWidgetChanged(i.$oldWidget);else for(;f;){if(f.$oldWidget==i){f.$oldWidget=i.$oldWidget;break}f=f.$oldWidget}}this.session._emit("changeFold",{data:{start:{row:i.row}}}),this.$updateRows()},c.prototype.getWidgetsAtRow=function(i){for(var f=this.session.lineWidgets,n=f&&f[i],o=[];n;)o.push(n),n=n.$oldWidget;return o},c.prototype.onWidgetChanged=function(i){this.session._changedWidgets.push(i),this.editor&&this.editor.renderer.updateFull()},c.prototype.measureWidgets=function(i,f){var n=this.session._changedWidgets,o=f.layerConfig;if(!(!n||!n.length)){for(var r=1/0,l=0;l0&&!o[r];)r--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,f.$cursorLayer.config=n;for(var a=r;a<=l;a++){var u=o[a];if(!(!u||!u.el)){if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+"px";continue}u._inDocument||(u._inDocument=!0,f.container.appendChild(u.el));var h=f.$cursorLayer.getPixelPosition({row:a,column:0},!0).top;u.coverLine||(h+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=h-n.offset+"px";var $=u.coverGutter?0:f.gutterWidth;u.fixedWidth||($-=f.scrollLeft),u.el.style.left=$+"px",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+"px"),u.fixedWidth?u.el.style.right=f.scrollBar.getWidth()+"px":u.el.style.right=""}}}},c}();p.LineWidgets=s}),ace.define("ace/apply_delta",["require","exports","module"],function(e,p,m){p.applyDelta=function(g,s,c){var i=s.start.row,f=s.start.column,n=g[i]||"";switch(s.action){case"insert":var o=s.lines;if(o.length===1)g[i]=n.substring(0,f)+s.lines[0]+n.substring(f);else{var r=[i,1].concat(s.lines);g.splice.apply(g,r),g[i]=n.substring(0,f)+g[i],g[i+s.lines.length-1]+=n.substring(f)}break;case"remove":var l=s.end.column,a=s.end.row;i===a?g[i]=n.substring(0,f)+n.substring(l):g.splice(i,a-i+1,n.substring(0,f)+g[a].substring(l));break}}}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,p,m){var g=e("./lib/oop"),s=e("./lib/event_emitter").EventEmitter,c=function(){function n(o,r,l){this.$onChange=this.onChange.bind(this),this.attach(o),typeof r!="number"?this.setPosition(r.row,r.column):this.setPosition(r,l)}return n.prototype.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},n.prototype.getDocument=function(){return this.document},n.prototype.onChange=function(o){if(!(o.start.row==o.end.row&&o.start.row!=this.row)&&!(o.start.row>this.row)){var r=f(o,{row:this.row,column:this.column},this.$insertRight);this.setPosition(r.row,r.column,!0)}},n.prototype.setPosition=function(o,r,l){var a;if(l?a={row:o,column:r}:a=this.$clipPositionToDocument(o,r),!(this.row==a.row&&this.column==a.column)){var u={row:this.row,column:this.column};this.row=a.row,this.column=a.column,this._signal("change",{old:u,value:a})}},n.prototype.detach=function(){this.document.off("change",this.$onChange)},n.prototype.attach=function(o){this.document=o||this.document,this.document.on("change",this.$onChange)},n.prototype.$clipPositionToDocument=function(o,r){var l={};return o>=this.document.getLength()?(l.row=Math.max(0,this.document.getLength()-1),l.column=this.document.getLine(l.row).length):o<0?(l.row=0,l.column=0):(l.row=o,l.column=Math.min(this.document.getLine(l.row).length,Math.max(0,r))),r<0&&(l.column=0),l},n}();c.prototype.$insertRight=!1,g.implement(c.prototype,s);function i(n,o,r){var l=r?n.column<=o.column:n.column=a&&(r=a-1,l=void 0);var u=this.getLine(r);return l==null&&(l=u.length),l=Math.min(Math.max(l,0),u.length),{row:r,column:l}},o.prototype.clonePos=function(r){return{row:r.row,column:r.column}},o.prototype.pos=function(r,l){return{row:r,column:l}},o.prototype.$clipPosition=function(r){var l=this.getLength();return r.row>=l?(r.row=Math.max(0,l-1),r.column=this.getLine(l-1).length):(r.row=Math.max(0,r.row),r.column=Math.min(Math.max(r.column,0),this.getLine(r.row).length)),r},o.prototype.insertFullLines=function(r,l){r=Math.min(Math.max(r,0),this.getLength());var a=0;r0,u=l=0&&this.applyDelta({start:this.pos(r,this.getLine(r).length),end:this.pos(r+1,0),action:"remove",lines:["",""]})},o.prototype.replace=function(r,l){if(r instanceof i||(r=i.fromPoints(r.start,r.end)),l.length===0&&r.isEmpty())return r.start;if(l==this.getTextRange(r))return r.end;this.remove(r);var a;return l?a=this.insert(r.start,l):a=r.start,a},o.prototype.applyDeltas=function(r){for(var l=0;l=0;l--)this.revertDelta(r[l])},o.prototype.applyDelta=function(r,l){var a=r.action=="insert";(a?r.lines.length<=1&&!r.lines[0]:!i.comparePoints(r.start,r.end))||(a&&r.lines.length>2e4?this.$splitAndapplyLargeDelta(r,2e4):(s(this.$lines,r,l),this._signal("change",r)))},o.prototype.$safeApplyDelta=function(r){var l=this.$lines.length;(r.action=="remove"&&r.start.row20){o.running=setTimeout(o.$worker,20);break}}o.currentLine=l,a==-1&&(a=l),h<=a&&o.fireUpdateEvent(h,a)}}}return i.prototype.setTokenizer=function(f){this.tokenizer=f,this.lines=[],this.states=[],this.start(0)},i.prototype.setDocument=function(f){this.doc=f,this.lines=[],this.states=[],this.stop()},i.prototype.fireUpdateEvent=function(f,n){var o={first:f,last:n};this._signal("update",{data:o})},i.prototype.start=function(f){this.currentLine=Math.min(f||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},i.prototype.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},i.prototype.$updateOnChange=function(f){var n=f.start.row,o=f.end.row-n;if(o===0)this.lines[n]=null;else if(f.action=="remove")this.lines.splice(n,o+1,null),this.states.splice(n,o+1,null);else{var r=Array(o+1);r.unshift(n,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(n,this.currentLine,this.doc.getLength()),this.stop()},i.prototype.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},i.prototype.getTokens=function(f){return this.lines[f]||this.$tokenizeRow(f)},i.prototype.getState=function(f){return this.currentLine==f&&this.$tokenizeRow(f),this.states[f]||"start"},i.prototype.$tokenizeRow=function(f){var n=this.doc.getLine(f),o=this.states[f-1],r=this.tokenizer.getLineTokens(n,o,f);return this.states[f]+""!=r.state+""?(this.states[f]=r.state,this.lines[f+1]=null,this.currentLine>f+1&&(this.currentLine=f+1)):this.currentLine==f&&(this.currentLine=f+1),this.lines[f]=r.tokens},i.prototype.cleanup=function(){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.removeAllListeners()},i}();g.implement(c.prototype,s),p.BackgroundTokenizer=c}),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/range"],function(e,p,m){var g=e("./lib/lang"),s=e("./range").Range,c=function(){function i(f,n,o){o===void 0&&(o="text"),this.setRegexp(f),this.clazz=n,this.type=o,this.docLen=0}return i.prototype.setRegexp=function(f){this.regExp+""!=f+""&&(this.regExp=f,this.cache=[])},i.prototype.update=function(f,n,o,r){if(!!this.regExp){for(var l=r.firstRow,a=r.lastRow,u={},h=o.$editor&&o.$editor.$search,$=h&&h.$isMultilineSearch(o.$editor.getLastSearchOptions()),v=l;v<=a;v++){var w=this.cache[v];if(w==null||o.getValue().length!=this.docLen){if($){w=[];var y=h.$multiLineForward(o,this.regExp,v,a);if(y){var _=y.endRow<=a?y.endRow-1:a;_>v&&(v=_),w.push(new s(y.startRow,y.startCol,y.endRow,y.endCol))}w.length>this.MAX_RANGES&&(w=w.slice(0,this.MAX_RANGES))}else w=g.getMatchOffsets(o.getLine(v),this.regExp),w.length>this.MAX_RANGES&&(w=w.slice(0,this.MAX_RANGES)),w=w.map(function(O){return new s(v,O.offset,v,O.offset+O.length)});this.cache[v]=w.length?w:""}if(w.length!==0)for(var b=w.length;b--;){var S=w[b].toScreenRange(o),M=S.toString();u[M]||(u[M]=!0,n.drawSingleLineMarker(f,S,this.clazz,r))}}this.docLen=o.getValue().length}},i}();c.prototype.MAX_RANGES=500,p.SearchHighlight=c}),ace.define("ace/undomanager",["require","exports","module","ace/range"],function(e,p,m){var g=function(){function _(){this.$keepRedoStack,this.$maxRev=0,this.$fromUndo=!1,this.$undoDepth=1/0,this.reset()}return _.prototype.addSession=function(b){this.$session=b},_.prototype.add=function(b,S,M){if(!this.$fromUndo&&b!=this.$lastDelta){if(this.$keepRedoStack||(this.$redoStack.length=0),S===!1||!this.lastDeltas){this.lastDeltas=[];var O=this.$undoStack.length;O>this.$undoDepth-1&&this.$undoStack.splice(0,O-this.$undoDepth+1),this.$undoStack.push(this.lastDeltas),b.id=this.$rev=++this.$maxRev}(b.action=="remove"||b.action=="insert")&&(this.$lastDelta=b),this.lastDeltas.push(b)}},_.prototype.addSelection=function(b,S){this.selections.push({value:b,rev:S||this.$rev})},_.prototype.startNewGroup=function(){return this.lastDeltas=null,this.$rev},_.prototype.markIgnored=function(b,S){S==null&&(S=this.$rev+1);for(var M=this.$undoStack,O=M.length;O--;){var k=M[O][0];if(k.id<=b)break;k.id0},_.prototype.canRedo=function(){return this.$redoStack.length>0},_.prototype.bookmark=function(b){b==null&&(b=this.$rev),this.mark=b},_.prototype.isAtBookmark=function(){return this.$rev===this.mark},_.prototype.toJSON=function(){return{$redoStack:this.$redoStack,$undoStack:this.$undoStack}},_.prototype.fromJSON=function(b){this.reset(),this.$undoStack=b.$undoStack,this.$redoStack=b.$redoStack},_.prototype.$prettyPrint=function(b){return b?o(b):o(this.$undoStack)+` +--- +`+o(this.$redoStack)},_}();g.prototype.hasUndo=g.prototype.canUndo,g.prototype.hasRedo=g.prototype.canRedo,g.prototype.isClean=g.prototype.isAtBookmark,g.prototype.markClean=g.prototype.bookmark;function s(_,b){for(var S=b;S--;){var M=_[S];if(M&&!M[0].ignore){for(;S"+_.end.row+":"+_.end.column}function l(_,b){var S=_.action=="insert",M=b.action=="insert";if(S&&M)if(i(b.start,_.end)>=0)h(b,_,-1);else if(i(b.start,_.start)<=0)h(_,b,1);else return null;else if(S&&!M)if(i(b.start,_.end)>=0)h(b,_,-1);else if(i(b.end,_.start)<=0)h(_,b,-1);else return null;else if(!S&&M)if(i(b.start,_.start)>=0)h(b,_,1);else if(i(b.start,_.start)<=0)h(_,b,1);else return null;else if(!S&&!M)if(i(b.start,_.start)>=0)h(b,_,1);else if(i(b.end,_.start)<=0)h(_,b,-1);else return null;return[b,_]}function a(_,b){for(var S=_.length;S--;)for(var M=0;M=0?h(_,b,-1):(i(_.start,b.start)<=0||h(_,c.fromPoints(b.start,_.start),-1),h(b,_,1));else if(!S&&M)i(b.start,_.end)>=0?h(b,_,-1):(i(b.start,_.start)<=0||h(b,c.fromPoints(_.start,b.start),-1),h(_,b,1));else if(!S&&!M)if(i(b.start,_.end)>=0)h(b,_,-1);else if(i(b.end,_.start)<=0)h(_,b,-1);else{var O,k;return i(_.start,b.start)<0&&(O=_,_=v(_,b.start)),i(_.end,b.end)>0&&(k=v(_,b.end)),$(b.end,_.start,_.end,-1),k&&!O&&(_.lines=k.lines,_.start=k.start,_.end=k.end,k=_),[b,O,k].filter(Boolean)}return[b,_]}function h(_,b,S){$(_.start,b.start,b.end,S),$(_.end,b.start,b.end,S)}function $(_,b,S,M){_.row==(M==1?b:S).row&&(_.column+=M*(S.column-b.column)),_.row+=M*(S.row-b.row)}function v(_,b){var S=_.lines,M=_.end;_.end=f(b);var O=_.end.row-_.start.row,k=S.splice(O,S.length),A=O?b.column:b.column-_.start.column;S.push(k[0].substring(0,A)),k[0]=k[0].substr(A);var T={start:f(b),end:M,lines:k,action:_.action};return T}function w(_,b){b=n(b);for(var S=_.length;S--;){for(var M=_[S],O=0;Othis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(i),this.folds.sort(function(f,n){return-f.range.compareEnd(n.start.row,n.start.column)}),this.range.compareEnd(i.start.row,i.start.column)>0?(this.end.row=i.end.row,this.end.column=i.end.column):this.range.compareStart(i.end.row,i.end.column)<0&&(this.start.row=i.start.row,this.start.column=i.start.column)}else if(i.start.row==this.end.row)this.folds.push(i),this.end.row=i.end.row,this.end.column=i.end.column;else if(i.end.row==this.start.row)this.folds.unshift(i),this.start.row=i.start.row,this.start.column=i.start.column;else throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");i.foldLine=this},c.prototype.containsRow=function(i){return i>=this.start.row&&i<=this.end.row},c.prototype.walk=function(i,f,n){var o=0,r=this.folds,l,a,u,h=!0;f==null&&(f=this.end.row,n=this.end.column);for(var $=0;$0)){var h=s(f,a.start);return u===0?n&&h!==0?-l-2:l:h>0||h===0&&!n?l:-l-1}}return-l-1},i.prototype.add=function(f){var n=!f.isEmpty(),o=this.pointIndex(f.start,n);o<0&&(o=-o-1);var r=this.pointIndex(f.end,n,o);return r<0?r=-r-1:r++,this.ranges.splice(o,r-o,f)},i.prototype.addList=function(f){for(var n=[],o=f.length;o--;)n.push.apply(n,this.add(f[o]));return n},i.prototype.substractPoint=function(f){var n=this.pointIndex(f);if(n>=0)return this.ranges.splice(n,1)},i.prototype.merge=function(){var f=[],n=this.ranges;n=n.sort(function(u,h){return s(u.start,h.start)});for(var o=n[0],r,l=1;l=0},i.prototype.containsPoint=function(f){return this.pointIndex(f)>=0},i.prototype.rangeAtPoint=function(f){var n=this.pointIndex(f);if(n>=0)return this.ranges[n]},i.prototype.clipRows=function(f,n){var o=this.ranges;if(o[0].start.row>n||o[o.length-1].start.row=r)break}if(f.action=="insert")for(var v=l-r,w=-n.column+o.column;ur)break;if($.start.row==r&&$.start.column>=n.column&&($.start.column==n.column&&this.$bias<=0||($.start.column+=w,$.start.row+=v)),$.end.row==r&&$.end.column>=n.column){if($.end.column==n.column&&this.$bias<0)continue;$.end.column==n.column&&w>0&&u$.start.column&&$.end.column==a[u+1].start.column&&($.end.column-=w),$.end.column+=w,$.end.row+=v}}else for(var v=r-l,w=n.column-o.column;ul)break;$.end.rown.column)&&($.end.column=n.column,$.end.row=n.row):($.end.column+=w,$.end.row+=v):$.end.row>l&&($.end.row+=v),$.start.rown.column)&&($.start.column=n.column,$.start.row=n.row):($.start.column+=w,$.start.row+=v):$.start.row>l&&($.start.row+=v)}if(v!=0&&u=o)return u;if(u.end.row>o)return null}return null},this.getNextFoldLine=function(o,r){var l=this.$foldData,a=0;for(r&&(a=l.indexOf(r)),a==-1&&(a=0),a;a=o)return u}return null},this.getFoldedRowCount=function(o,r){for(var l=this.$foldData,a=r-o+1,u=0;u=r){v=o?a-=r-v:a=0);break}else $>=o&&(v>=o?a-=$-v:a-=$-o+1)}return a},this.$addFoldLine=function(o){return this.$foldData.push(o),this.$foldData.sort(function(r,l){return r.start.row-l.start.row}),o},this.addFold=function(o,r){var l=this.$foldData,a=!1,u;o instanceof c?u=o:(u=new c(r,o),u.collapseChildren=r.collapseChildren),this.$clipRangeToDocument(u.range);var h=u.start.row,$=u.start.column,v=u.end.row,w=u.end.column,y=this.getFoldAt(h,$,1),_=this.getFoldAt(v,w,-1);if(y&&_==y)return y.addSubFold(u);y&&!y.range.isStart(h,$)&&this.removeFold(y),_&&!_.range.isEnd(v,w)&&this.removeFold(_);var b=this.getFoldsInRange(u.range);b.length>0&&(this.removeFolds(b),u.collapseChildren||b.forEach(function(k){u.addSubFold(k)}));for(var S=0;S0&&this.foldAll(o.start.row+1,o.end.row,o.collapseChildren-1),o.subFolds=[]},this.expandFolds=function(o){o.forEach(function(r){this.expandFold(r)},this)},this.unfold=function(o,r){var l,a;if(o==null)l=new g(0,0,this.getLength(),0),r==null&&(r=!0);else if(typeof o=="number")l=new g(o,0,o,this.getLine(o).length);else if("row"in o)l=g.fromPoints(o,o);else{if(Array.isArray(o))return a=[],o.forEach(function(h){a=a.concat(this.unfold(h))},this),a;l=o}a=this.getFoldsInRangeList(l);for(var u=a;a.length==1&&g.comparePoints(a[0].start,l.start)<0&&g.comparePoints(a[0].end,l.end)>0;)this.expandFolds(a),a=this.getFoldsInRangeList(l);if(r!=!1?this.removeFolds(a):this.expandFolds(a),u.length)return u},this.isRowFolded=function(o,r){return!!this.getFoldLine(o,r)},this.getRowFoldEnd=function(o,r){var l=this.getFoldLine(o,r);return l?l.end.row:o},this.getRowFoldStart=function(o,r){var l=this.getFoldLine(o,r);return l?l.start.row:o},this.getFoldDisplayLine=function(o,r,l,a,u){a==null&&(a=o.start.row),u==null&&(u=0),r==null&&(r=o.end.row),l==null&&(l=this.getLine(r).length);var h=this.doc,$="";return o.walk(function(v,w,y,_){if(!(wy)break;while(u&&$.test(u.type));u=a.stepBackward()}else u=a.getCurrentToken();return v.end.row=a.getCurrentTokenRow(),v.end.column=a.getCurrentTokenColumn(),v.start.row==v.end.row&&v.start.column>v.end.column?void 0:v}},this.foldAll=function(o,r,l,a){l==null&&(l=1e5);var u=this.foldWidgets;if(!!u){r=r||this.getLength(),o=o||0;for(var h=o;h=o&&(h=$.end.row,$.collapseChildren=l,this.addFold("...",$))}}},this.foldToLevel=function(o){for(this.foldAll();o-- >0;)this.unfold(null,!1)},this.foldAllComments=function(){var o=this;this.foldAll(null,null,null,function(r){for(var l=o.getTokens(r),a=0;a=0;){var h=l[a];if(h==null&&(h=l[a]=this.getFoldWidget(a)),h=="start"){var $=this.getFoldWidgetRange(a);if(u||(u=$),$&&$.end.row>=o)break}a--}return{range:a!==-1&&$,firstRange:u}},this.onFoldWidgetClick=function(o,r){r instanceof f&&(r=r.domEvent);var l={children:r.shiftKey,all:r.ctrlKey||r.metaKey,siblings:r.altKey},a=this.$toggleFoldWidget(o,l);if(!a){var u=r.target||r.srcElement;u&&/ace_fold-widget/.test(u.className)&&(u.className+=" ace_invalid")}},this.$toggleFoldWidget=function(o,r){if(!!this.getFoldWidget){var l=this.getFoldWidget(o),a=this.getLine(o),u=l==="end"?-1:1,h=this.getFoldAt(o,u===-1?0:a.length,u);if(h)return r.children||r.all?this.removeFold(h):this.expandFold(h),h;var $=this.getFoldWidgetRange(o,!0);if($&&!$.isMultiLine()&&(h=this.getFoldAt($.start.row,$.start.column,1),h&&$.isEqual(h.range)))return this.removeFold(h),h;if(r.siblings){var v=this.getParentFoldRangeData(o);if(v.range)var w=v.range.start.row+1,y=v.range.end.row;this.foldAll(w,y,r.all?1e4:0)}else r.children?(y=$?$.end.row:this.getLength(),this.foldAll(o+1,y,r.all?1e4:0)):$&&(r.all&&($.collapseChildren=1e4),this.addFold("...",$));return $}},this.toggleFoldWidget=function(o){var r=this.selection.getCursor().row;r=this.getRowFoldStart(r);var l=this.$toggleFoldWidget(r,{});if(!l){var a=this.getParentFoldRangeData(r,!0);if(l=a.range||a.firstRange,l){r=l.start.row;var u=this.getFoldAt(r,this.getLine(r).length,1);u?this.removeFold(u):this.addFold("...",l)}}},this.updateFoldWidgets=function(o){var r=o.start.row,l=o.end.row-r;if(l===0)this.foldWidgets[r]=null;else if(o.action=="remove")this.foldWidgets.splice(r,l+1,null);else{var a=Array(l+1);a.unshift(r,1),this.foldWidgets.splice.apply(this.foldWidgets,a)}},this.tokenizerUpdateFoldWidgets=function(o){var r=o.data;r.first!=r.last&&this.foldWidgets.length>r.first&&this.foldWidgets.splice(r.first,this.foldWidgets.length)}}p.Folding=n}),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,p,m){var g=e("../token_iterator").TokenIterator,s=e("../range").Range;function c(){this.findMatchingBracket=function(i,f){if(i.column==0)return null;var n=f||this.getLine(i.row).charAt(i.column-1);if(n=="")return null;var o=n.match(/([\(\[\{])|([\)\]\}])/);return o?o[1]?this.$findClosingBracket(o[1],i):this.$findOpeningBracket(o[2],i):null},this.getBracketRange=function(i){var f=this.getLine(i.row),n=!0,o,r=f.charAt(i.column-1),l=r&&r.match(/([\(\[\{])|([\)\]\}])/);if(l||(r=f.charAt(i.column),i={row:i.row,column:i.column+1},l=r&&r.match(/([\(\[\{])|([\)\]\}])/),n=!1),!l)return null;if(l[1]){var a=this.$findClosingBracket(l[1],i);if(!a)return null;o=s.fromPoints(i,a),n||(o.end.column++,o.start.column--),o.cursor=o.end}else{var a=this.$findOpeningBracket(l[2],i);if(!a)return null;o=s.fromPoints(a,i),n||(o.start.column++,o.end.column--),o.cursor=o.start}return o},this.getMatchingBracketRanges=function(i,f){var n=this.getLine(i.row),o=/([\(\[\{])|([\)\]\}])/,r=!f&&n.charAt(i.column-1),l=r&&r.match(o);if(l||(r=(f===void 0||f)&&n.charAt(i.column),i={row:i.row,column:i.column+1},l=r&&r.match(o)),!l)return null;var a=new s(i.row,i.column-1,i.row,i.column),u=l[1]?this.$findClosingBracket(l[1],i):this.$findOpeningBracket(l[2],i);if(!u)return[a];var h=new s(u.row,u.column,u.row,u.column+1);return[a,h]},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{","<":">",">":"<"},this.$findOpeningBracket=function(i,f,n){var o=this.$brackets[i],r=1,l=new g(this,f.row,f.column),a=l.getCurrentToken();if(a||(a=l.stepForward()),!!a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)").replace(/-close\b/,"-(close|open)")+")+"));for(var u=f.column-l.getCurrentTokenColumn()-2,h=a.value;;){for(;u>=0;){var $=h.charAt(u);if($==o){if(r-=1,r==0)return{row:l.getCurrentTokenRow(),column:u+l.getCurrentTokenColumn()}}else $==i&&(r+=1);u-=1}do a=l.stepBackward();while(a&&!n.test(a.type));if(a==null)break;h=a.value,u=h.length-1}return null}},this.$findClosingBracket=function(i,f,n){var o=this.$brackets[i],r=1,l=new g(this,f.row,f.column),a=l.getCurrentToken();if(a||(a=l.stepForward()),!!a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)").replace(/-open\b/,"-(close|open)")+")+"));for(var u=f.column-l.getCurrentTokenColumn();;){for(var h=a.value,$=h.length;u<$;){var v=h.charAt(u);if(v==o){if(r-=1,r==0)return{row:l.getCurrentTokenRow(),column:u+l.getCurrentTokenColumn()}}else v==i&&(r+=1);u+=1}do a=l.stepForward();while(a&&!n.test(a.type));if(a==null)break;u=0}return null}},this.getMatchingTags=function(i){var f=new g(this,i.row,i.column),n=this.$findTagName(f);if(!!n){var o=f.stepBackward();return o.value==="<"?this.$findClosingTag(f,n):this.$findOpeningTag(f,n)}},this.$findTagName=function(i){var f=i.getCurrentToken(),n=!1,o=!1;if(f&&f.type.indexOf("tag-name")===-1)do o?f=i.stepBackward():f=i.stepForward(),f&&(f.value==="/>"?o=!0:f.type.indexOf("tag-name")!==-1&&(n=!0));while(f&&!n);return f},this.$findClosingTag=function(i,f){var n,o=f.value,r=f.value,l=0,a=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+1);f=i.stepForward();var u=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+f.value.length),h=!1;do{if(n=f,n.type.indexOf("tag-close")!==-1&&!h){var $=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+1);h=!0}if(f=i.stepForward(),f){if(f.value===">"&&!h){var $=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+1);h=!0}if(f.type.indexOf("tag-name")!==-1){if(o=f.value,r===o){if(n.value==="<")l++;else if(n.value==="")var y=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+1);else return}}}else if(r===o&&f.value==="/>"&&(l--,l<0))var v=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+2),w=v,y=w,$=new s(u.end.row,u.end.column,u.end.row,u.end.column+1)}}while(f&&l>=0);if(a&&$&&v&&y&&u&&w)return{openTag:new s(a.start.row,a.start.column,$.end.row,$.end.column),closeTag:new s(v.start.row,v.start.column,y.end.row,y.end.column),openTagName:u,closeTagName:w}},this.$findOpeningTag=function(i,f){var n=i.getCurrentToken(),o=f.value,r=0,l=i.getCurrentTokenRow(),a=i.getCurrentTokenColumn(),u=a+2,h=new s(l,a,l,u);i.stepForward();var $=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+f.value.length);if(f.type.indexOf("tag-close")===-1&&(f=i.stepForward()),!(!f||f.value!==">")){var v=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+1);i.stepBackward(),i.stepBackward();do if(f=n,l=i.getCurrentTokenRow(),a=i.getCurrentTokenColumn(),u=a+f.value.length,n=i.stepBackward(),f){if(f.type.indexOf("tag-name")!==-1){if(o===f.value)if(n.value==="<"){if(r++,r>0){var w=new s(l,a,l,u),y=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+1);do f=i.stepForward();while(f&&f.value!==">");var _=new s(i.getCurrentTokenRow(),i.getCurrentTokenColumn(),i.getCurrentTokenRow(),i.getCurrentTokenColumn()+1)}}else n.value===""){for(var b=0,S=n;S;){if(S.type.indexOf("tag-name")!==-1&&S.value===o){r--;break}else if(S.value==="<")break;S=i.stepBackward(),b++}for(var M=0;Mx&&(this.$docRowCache.splice(x,C),this.$screenRowCache.splice(x,C))},T.prototype.$getRowCacheIndex=function(E,C){for(var x=0,L=E.length-1;x<=L;){var q=x+L>>1,N=E[q];if(C>N)x=q+1;else if(C=C));N++);return L=x[N],L?(L.index=N,L.start=q-L.value.length,L):null},T.prototype.setUndoManager=function(E){if(this.$undoManager=E,this.$informUndoManager&&this.$informUndoManager.cancel(),E){var C=this;E.addSession(this),this.$syncInformUndoManager=function(){C.$informUndoManager.cancel(),C.mergeUndoDeltas=!1},this.$informUndoManager=s.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},T.prototype.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},T.prototype.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},T.prototype.getTabString=function(){return this.getUseSoftTabs()?s.stringRepeat(" ",this.getTabSize()):" "},T.prototype.setUseSoftTabs=function(E){this.setOption("useSoftTabs",E)},T.prototype.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},T.prototype.setTabSize=function(E){this.setOption("tabSize",E)},T.prototype.getTabSize=function(){return this.$tabSize},T.prototype.isTabStop=function(E){return this.$useSoftTabs&&E.column%this.$tabSize==0},T.prototype.setNavigateWithinSoftTabs=function(E){this.setOption("navigateWithinSoftTabs",E)},T.prototype.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},T.prototype.setOverwrite=function(E){this.setOption("overwrite",E)},T.prototype.getOverwrite=function(){return this.$overwrite},T.prototype.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},T.prototype.addGutterDecoration=function(E,C){this.$decorations[E]||(this.$decorations[E]=""),this.$decorations[E]+=" "+C,this._signal("changeBreakpoint",{})},T.prototype.removeGutterCustomWidget=function(E){this.$editor&&this.$editor.renderer.$gutterLayer.$removeCustomWidget(E)},T.prototype.addGutterCustomWidget=function(E,C){this.$editor&&this.$editor.renderer.$gutterLayer.$addCustomWidget(E,C)},T.prototype.removeGutterDecoration=function(E,C){this.$decorations[E]=(this.$decorations[E]||"").replace(" "+C,""),this._signal("changeBreakpoint",{})},T.prototype.getBreakpoints=function(){return this.$breakpoints},T.prototype.setBreakpoints=function(E){this.$breakpoints=[];for(var C=0;C0&&(L=!!x.charAt(C-1).match(this.tokenRe)),L||(L=!!x.charAt(C).match(this.tokenRe)),L)var q=this.tokenRe;else if(/^\s+$/.test(x.slice(C-1,C+1)))var q=/\s/;else var q=this.nonTokenRe;var N=C;if(N>0){do N--;while(N>=0&&x.charAt(N).match(q));N++}for(var F=C;FE&&(E=C.screenWidth)}),this.lineWidgetWidth=E},T.prototype.$computeWidth=function(E){if(this.$modified||E){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var C=this.doc.getAllLines(),x=this.$rowLengthCache,L=0,q=0,N=this.$foldData[q],F=N?N.start.row:1/0,I=C.length,R=0;RF){if(R=N.end.row+1,R>=I)break;N=this.$foldData[q++],F=N?N.start.row:1/0}x[R]==null&&(x[R]=this.$getStringScreenWidth(C[R])[0]),x[R]>L&&(L=x[R])}this.screenWidth=L}},T.prototype.getLine=function(E){return this.doc.getLine(E)},T.prototype.getLines=function(E,C){return this.doc.getLines(E,C)},T.prototype.getLength=function(){return this.doc.getLength()},T.prototype.getTextRange=function(E){return this.doc.getTextRange(E||this.selection.getRange())},T.prototype.insert=function(E,C){return this.doc.insert(E,C)},T.prototype.remove=function(E){return this.doc.remove(E)},T.prototype.removeFullLines=function(E,C){return this.doc.removeFullLines(E,C)},T.prototype.undoChanges=function(E,C){if(!!E.length){this.$fromUndo=!0;for(var x=E.length-1;x!=-1;x--){var L=E[x];L.action=="insert"||L.action=="remove"?this.doc.revertDelta(L):L.folds&&this.addFolds(L.folds)}!C&&this.$undoSelect&&(E.selectionBefore?this.selection.fromJSON(E.selectionBefore):this.selection.setRange(this.$getUndoSelection(E,!0))),this.$fromUndo=!1}},T.prototype.redoChanges=function(E,C){if(!!E.length){this.$fromUndo=!0;for(var x=0;xE.end.column&&(N.start.column+=I),N.end.row==E.end.row&&N.end.column>E.end.column&&(N.end.column+=I)),F&&N.start.row>=E.end.row&&(N.start.row+=F,N.end.row+=F)}if(N.end=this.insert(N.start,L),q.length){var R=E.start,B=N.start,F=B.row-R.row,I=B.column-R.column;this.addFolds(q.map(function(j){return j=j.clone(),j.start.row==R.row&&(j.start.column+=I),j.end.row==R.row&&(j.end.column+=I),j.start.row+=F,j.end.row+=F,j}))}return N},T.prototype.indentRows=function(E,C,x){x=x.replace(/\t/g,this.getTabString());for(var L=E;L<=C;L++)this.doc.insertInLine({row:L,column:0},x)},T.prototype.outdentRows=function(E){for(var C=E.collapseRows(),x=new r(0,0,0,0),L=this.getTabSize(),q=C.start.row;q<=C.end.row;++q){var N=this.getLine(q);x.start.row=q,x.end.row=q;for(var F=0;F0){var L=this.getRowFoldEnd(C+x);if(L>this.doc.getLength()-1)return 0;var q=L-C}else{E=this.$clipRowToDocument(E),C=this.$clipRowToDocument(C);var q=C-E+1}var N=new r(E,0,C,Number.MAX_VALUE),F=this.getFoldsInRange(N).map(function(R){return R=R.clone(),R.start.row+=q,R.end.row+=q,R}),I=x==0?this.doc.getLines(E,C):this.doc.removeFullLines(E,C);return this.doc.insertFullLines(E+q,I),F.length&&this.addFolds(F),q},T.prototype.moveLinesUp=function(E,C){return this.$moveLines(E,C,-1)},T.prototype.moveLinesDown=function(E,C){return this.$moveLines(E,C,1)},T.prototype.duplicateLines=function(E,C){return this.$moveLines(E,C,0)},T.prototype.$clipRowToDocument=function(E){return Math.max(0,Math.min(E,this.doc.getLength()-1))},T.prototype.$clipColumnToRow=function(E,C){return C<0?0:Math.min(this.doc.getLine(E).length,C)},T.prototype.$clipPositionToDocument=function(E,C){if(C=Math.max(0,C),E<0)E=0,C=0;else{var x=this.doc.getLength();E>=x?(E=x-1,C=this.doc.getLine(x-1).length):C=Math.min(this.doc.getLine(E).length,C)}return{row:E,column:C}},T.prototype.$clipRangeToDocument=function(E){E.start.row<0?(E.start.row=0,E.start.column=0):E.start.column=this.$clipColumnToRow(E.start.row,E.start.column);var C=this.doc.getLength()-1;return E.end.row>C?(E.end.row=C,E.end.column=this.doc.getLine(C).length):E.end.column=this.$clipColumnToRow(E.end.row,E.end.column),E},T.prototype.setUseWrapMode=function(E){if(E!=this.$useWrapMode){if(this.$useWrapMode=E,this.$modified=!0,this.$resetRowCache(0),E){var C=this.getLength();this.$wrapData=Array(C),this.$updateWrapData(0,C-1)}this._signal("changeWrapMode")}},T.prototype.getUseWrapMode=function(){return this.$useWrapMode},T.prototype.setWrapLimitRange=function(E,C){(this.$wrapLimitRange.min!==E||this.$wrapLimitRange.max!==C)&&(this.$wrapLimitRange={min:E,max:C},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},T.prototype.adjustWrapLimit=function(E,C){var x=this.$wrapLimitRange;x.max<0&&(x={min:C,max:C});var L=this.$constrainWrapLimit(E,x.min,x.max);return L!=this.$wrapLimit&&L>1?(this.$wrapLimit=L,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0):!1},T.prototype.$constrainWrapLimit=function(E,C,x){return C&&(E=Math.max(C,E)),x&&(E=Math.min(x,E)),E},T.prototype.getWrapLimit=function(){return this.$wrapLimit},T.prototype.setWrapLimit=function(E){this.setWrapLimitRange(E,E)},T.prototype.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},T.prototype.$updateInternalDataOnChange=function(E){var C=this.$useWrapMode,x=E.action,L=E.start,q=E.end,N=L.row,F=q.row,I=F-N,R=null;if(this.$updating=!0,I!=0)if(x==="remove"){this[C?"$wrapData":"$rowLengthCache"].splice(N,I);var B=this.$foldData;R=this.getFoldsInRange(E),this.removeFolds(R);var D=this.getFoldLine(q.row),P=0;if(D){D.addRemoveChars(q.row,q.column,L.column-q.column),D.shiftRow(-I);var j=this.getFoldLine(N);j&&j!==D&&(j.merge(D),D=j),P=B.indexOf(D)+1}for(P;P=q.row&&D.shiftRow(-I)}F=N}else{var V=Array(I);V.unshift(N,0);var W=C?this.$wrapData:this.$rowLengthCache;W.splice.apply(W,V);var B=this.$foldData,D=this.getFoldLine(N),P=0;if(D){var H=D.range.compareInside(L.row,L.column);H==0?(D=D.split(L.row,L.column),D&&(D.shiftRow(I),D.addRemoveChars(F,0,q.column-L.column))):H==-1&&(D.addRemoveChars(N,0,q.column-L.column),D.shiftRow(I)),P=B.indexOf(D)+1}for(P;P=N&&D.shiftRow(I)}}else{I=Math.abs(E.start.column-E.end.column),x==="remove"&&(R=this.getFoldsInRange(E),this.removeFolds(R),I=-I);var D=this.getFoldLine(N);D&&D.addRemoveChars(N,L.column,I)}return C&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,C?this.$updateWrapData(N,F):this.$updateRowLengthCache(N,F),R},T.prototype.$updateRowLengthCache=function(E,C){this.$rowLengthCache[E]=null,this.$rowLengthCache[C]=null},T.prototype.$updateWrapData=function(E,C){var x=this.doc.getAllLines(),L=this.getTabSize(),q=this.$wrapData,N=this.$wrapLimit,F,I,R=E;for(C=Math.min(C,x.length-1);R<=C;)I=this.getFoldLine(R,I),I?(F=[],I.walk(function(B,D,P,j){var V;if(B!=null){V=this.$getDisplayTokens(B,F.length),V[0]=_;for(var W=1;WC-j;){var V=N+C-j;if(E[V-1]>=M&&E[V]>=M){P(V);continue}if(E[V]==_||E[V]==b){for(V;V!=N-1&&E[V]!=_;V--);if(V>N){P(V);continue}for(V=N+C,V;V>2)),N-1);V>W&&E[V]<_;)V--;if(I){for(;V>W&&E[V]<_;)V--;for(;V>W&&E[V]==S;)V--}else for(;V>W&&E[V]W){P(++V);continue}V=N+C,E[V]==y&&V--,P(V-j)}return L},T.prototype.$getDisplayTokens=function(E,C){var x=[],L;C=C||0;for(var q=0;q39&&N<48||N>57&&N<64?x.push(S):N>=4352&&A(N)?x.push(w,y):x.push(w)}return x},T.prototype.$getStringScreenWidth=function(E,C,x){if(C==0)return[0,0];C==null&&(C=1/0),x=x||0;var L,q;for(q=0;q=4352&&A(L)?x+=2:x+=1,!(x>C));q++);return[x,q]},T.prototype.getRowLength=function(E){var C=1;return this.lineWidgets&&(C+=this.lineWidgets[E]&&this.lineWidgets[E].rowCount||0),!this.$useWrapMode||!this.$wrapData[E]?C:this.$wrapData[E].length+C},T.prototype.getRowLineCount=function(E){return!this.$useWrapMode||!this.$wrapData[E]?1:this.$wrapData[E].length+1},T.prototype.getRowWrapIndent=function(E){if(this.$useWrapMode){var C=this.screenToDocumentPosition(E,Number.MAX_VALUE),x=this.$wrapData[C.row];return x.length&&x[0]=0)var I=B[D],q=this.$docRowCache[D],j=E>B[P-1];else var j=!P;for(var V=this.getLength()-1,W=this.getNextFoldLine(q),H=W?W.start.row:1/0;I<=E&&(R=this.getRowLength(q),!(I+R>E||q>=V));)I+=R,q++,q>H&&(q=W.end.row+1,W=this.getNextFoldLine(q,W),H=W?W.start.row:1/0),j&&(this.$docRowCache.push(q),this.$screenRowCache.push(I));if(W&&W.start.row<=q)L=this.getFoldDisplayLine(W),q=W.start.row;else{if(I+R<=E||q>V)return{row:V,column:this.getLine(V).length};L=this.getLine(q),W=null}var z=0,U=Math.floor(E-I);if(this.$useWrapMode){var Z=this.$wrapData[q];Z&&(F=Z[U],U>0&&Z.length&&(z=Z.indent,N=Z[U-1]||Z[Z.length-1],L=L.substring(N)))}return x!==void 0&&this.$bidiHandler.isBidiRow(I+U,q,U)&&(C=this.$bidiHandler.offsetToCol(x)),N+=this.$getStringScreenWidth(L,C-z)[1],this.$useWrapMode&&N>=F&&(N=F-1),W?W.idxToPosition(N):{row:q,column:N}},T.prototype.documentToScreenPosition=function(E,C){if(typeof C=="undefined")var x=this.$clipPositionToDocument(E.row,E.column);else x=this.$clipPositionToDocument(E,C);E=x.row,C=x.column;var L=0,q=null,N=null;N=this.getFoldAt(E,C,1),N&&(E=N.start.row,C=N.start.column);var F,I=0,R=this.$docRowCache,B=this.$getRowCacheIndex(R,E),D=R.length;if(D&&B>=0)var I=R[B],L=this.$screenRowCache[B],P=E>R[D-1];else var P=!D;for(var j=this.getNextFoldLine(I),V=j?j.start.row:1/0;I=V){if(F=j.end.row+1,F>E)break;j=this.getNextFoldLine(F,j),V=j?j.start.row:1/0}else F=I+1;L+=this.getRowLength(I),I=F,P&&(this.$docRowCache.push(I),this.$screenRowCache.push(L))}var W="";j&&I>=V?(W=this.getFoldDisplayLine(j,E,C),q=j.start.row):(W=this.getLine(E).substring(0,C),q=E);var H=0;if(this.$useWrapMode){var z=this.$wrapData[q];if(z){for(var U=0;W.length>=z[U];)L++,U++;W=W.substring(z[U-1]||0,W.length),H=U>0?z.indent:0}}return this.lineWidgets&&this.lineWidgets[I]&&this.lineWidgets[I].rowsAbove&&(L+=this.lineWidgets[I].rowsAbove),{row:L,column:H+this.$getStringScreenWidth(W)[0]}},T.prototype.documentToScreenColumn=function(E,C){return this.documentToScreenPosition(E,C).column},T.prototype.documentToScreenRow=function(E,C){return this.documentToScreenPosition(E,C).row},T.prototype.getScreenLength=function(){var E=0,C=null;if(this.$useWrapMode)for(var q=this.$wrapData.length,N=0,L=0,C=this.$foldData[L++],F=C?C.start.row:1/0;NF&&(N=C.end.row+1,C=this.$foldData[L++],F=C?C.start.row:1/0)}else{E=this.getLength();for(var x=this.$foldData,L=0;Lx));N++);return[L,N]})},T.prototype.getPrecedingCharacter=function(){var E=this.selection.getCursor();if(E.column===0)return E.row===0?"":this.doc.getNewLineCharacter();var C=this.getLine(E.row);return C[E.column-1]},T.prototype.destroy=function(){this.destroyed||(this.bgTokenizer.setDocument(null),this.bgTokenizer.cleanup(),this.destroyed=!0),this.endOperation(),this.$stopWorker(),this.removeAllListeners(),this.doc&&this.doc.off("change",this.$onChange),this.selection&&(this.selection.off("changeCursor",this.$onSelectionChange),this.selection.off("changeSelection",this.$onSelectionChange)),this.selection.detach()},T}();v.$uid=0,v.prototype.$modes=i.$modes,v.prototype.getValue=v.prototype.toString,v.prototype.$defaultUndoManager={undo:function(){},redo:function(){},hasUndo:function(){},hasRedo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},v.prototype.$overwrite=!1,v.prototype.$mode=null,v.prototype.$modeId=null,v.prototype.$scrollTop=0,v.prototype.$scrollLeft=0,v.prototype.$wrapLimit=80,v.prototype.$useWrapMode=!1,v.prototype.$wrapLimitRange={min:null,max:null},v.prototype.lineWidgets=null,v.prototype.isFullWidth=A,g.implement(v.prototype,f);var w=1,y=2,_=3,b=4,S=9,M=10,O=11,k=12;function A(T){return T<4352?!1:T>=4352&&T<=4447||T>=4515&&T<=4519||T>=4602&&T<=4607||T>=9001&&T<=9002||T>=11904&&T<=11929||T>=11931&&T<=12019||T>=12032&&T<=12245||T>=12272&&T<=12283||T>=12288&&T<=12350||T>=12353&&T<=12438||T>=12441&&T<=12543||T>=12549&&T<=12589||T>=12593&&T<=12686||T>=12688&&T<=12730||T>=12736&&T<=12771||T>=12784&&T<=12830||T>=12832&&T<=12871||T>=12880&&T<=13054||T>=13056&&T<=19903||T>=19968&&T<=42124||T>=42128&&T<=42182||T>=43360&&T<=43388||T>=44032&&T<=55203||T>=55216&&T<=55238||T>=55243&&T<=55291||T>=63744&&T<=64255||T>=65040&&T<=65049||T>=65072&&T<=65106||T>=65108&&T<=65126||T>=65128&&T<=65131||T>=65281&&T<=65376||T>=65504&&T<=65510}e("./edit_session/folding").Folding.call(v.prototype),e("./edit_session/bracket_match").BracketMatch.call(v.prototype),i.defineOptions(v.prototype,"session",{wrap:{set:function(T){if(!T||T=="off"?T=!1:T=="free"?T=!0:T=="printMargin"?T=-1:typeof T=="string"&&(T=parseInt(T,10)||!1),this.$wrap!=T)if(this.$wrap=T,!T)this.setUseWrapMode(!1);else{var E=typeof T=="number"?T:null;this.setWrapLimitRange(E,E),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(T){T=T=="auto"?this.$mode.type!="text":T!="text",T!=this.$wrapAsCode&&(this.$wrapAsCode=T,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:"auto"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(T){this.$useWorker=T,this.$stopWorker(),T&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(T){T=parseInt(T),T>0&&this.$tabSize!==T&&(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=T,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(T){this.setFoldStyle(T)},handlesSet:!0},overwrite:{set:function(T){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(T){this.doc.setNewLineMode(T)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(T){this.setMode(T)},get:function(){return this.$modeId},handlesSet:!0}}),p.EditSession=v}),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,p,m){var g=e("./lib/lang"),s=e("./lib/oop"),c=e("./range").Range,i=function(){function r(){this.$options={}}return r.prototype.set=function(l){return s.mixin(this.$options,l),this},r.prototype.getOptions=function(){return g.copyObject(this.$options)},r.prototype.setOptions=function(l){this.$options=l},r.prototype.find=function(l){var a=this.$options,u=this.$matchIterator(l,a);if(!u)return!1;var h=null;return u.forEach(function($,v,w,y){return h=new c($,v,w,y),v==y&&a.start&&a.start.start&&a.skipCurrent!=!1&&h.isEqual(a.start)?(h=null,!1):!0}),h},r.prototype.findAll=function(l){var a=this.$options;if(!a.needle)return[];this.$assembleRegExp(a);var u=a.range,h=u?l.getLines(u.start.row,u.end.row):l.doc.getAllLines(),$=[],v=a.re;if(a.$isMultiLine){var w=v.length,y=h.length-w,_;e:for(var b=v.offset||0;b<=y;b++){for(var S=0;Sk||($.push(_=new c(b,k,b+w-1,A)),w>2&&(b=b+w-2))}}else for(var T,E=0;EE&&(E=x),$.push(new c(T.startRow,T.startCol,T.endRow,T.endCol))}}else{T=g.getMatchOffsets(h[E],v);for(var S=0;SN&&$[S].end.row==F;)S--;for($=$.slice(E,S+1),E=0,S=$.length;E=$){u+="\\";break}var w=l.charCodeAt(h);switch(w){case a.Backslash:u+="\\";break;case a.n:u+=` +`;break;case a.t:u+=" ";break}continue}if(v===a.DollarSign){if(h++,h>=$){u+="$";break}var y=l.charCodeAt(h);if(y===a.DollarSign){u+="$$";continue}if(y===a.Digit0||y===a.Ampersand){u+="$&";continue}if(a.Digit1<=y&&y<=a.Digit9){u+="$"+l[h];continue}}u+=l[h]}return u||l},r.prototype.replace=function(l,a){var u=this.$options,h=this.$assembleRegExp(u);if(u.$isMultiLine)return a;if(!!h){var $=this.$isMultilineSearch(u);$&&(l=l.replace(/\r\n|\r|\n/g,` +`));var v=h.exec(l);if(!v||!$&&v[0].length!=l.length)return null;if(a=u.regExp?this.parseReplaceString(a):a.replace(/\$/g,"$$$$"),a=l.replace(h,a),u.preserveCase){a=a.split("");for(var w=Math.min(l.length,l.length);w--;){var y=l[w];y&&y.toLowerCase()!=y?a[w]=a[w].toUpperCase():a[w]=a[w].toLowerCase()}a=a.join("")}return a}},r.prototype.$assembleRegExp=function(l,a){if(l.needle instanceof RegExp)return l.re=l.needle;var u=l.needle;if(!l.needle)return l.re=!1;l.regExp||(u=g.escapeRegExp(u));var h=l.caseSensitive?"gm":"gmi";try{new RegExp(u,"u"),l.$supportsUnicodeFlag=!0,h+="u"}catch{l.$supportsUnicodeFlag=!1}if(l.wholeWord&&(u=f(u,l)),l.$isMultiLine=!a&&/[\n\r]/.test(u),l.$isMultiLine)return l.re=this.$assembleMultilineRegExp(u,h);try{var $=new RegExp(u,h)}catch{$=!1}return l.re=$},r.prototype.$assembleMultilineRegExp=function(l,a){for(var u=l.replace(/\r\n|\r|\n/g,`$ +^`).split(` +`),h=[],$=0;$h);y++){var _=l.getLine(w++);$=$==null?_:$+` +`+_}var b=a.exec($);if(a.lastIndex=0,b){var S=$.slice(0,b.index).split(` +`),M=b[0].split(` +`),O=u+S.length-1,k=S[S.length-1].length,A=O+M.length-1,T=M.length==1?k+M[0].length:M[M.length-1].length;return{startRow:O,startCol:k,endRow:A,endCol:T}}}return null},r.prototype.$multiLineBackward=function(l,a,u,h,$){for(var v,w=o(l,h),y=l.getLine(h).length-u,_=h;_>=$;){for(var b=0;b=$;b++){var S=l.getLine(_--);v=v==null?S:S+` +`+v}var M=n(v,a,y);if(M){var O=v.slice(0,M.index).split(` +`),k=M[0].split(` +`),A=_+O.length,T=O[O.length-1].length,E=A+k.length-1,C=k.length==1?T+k[0].length:k[k.length-1].length;return{startRow:A,startCol:T,endRow:E,endCol:C}}}return null},r.prototype.$matchIterator=function(l,a){var u=this.$assembleRegExp(a);if(!u)return!1;var h=this.$isMultilineSearch(a),$=this.$multiLineForward,v=this.$multiLineBackward,w=a.backwards==!0,y=a.skipCurrent!=!1,_=u.unicode,b=a.range,S=a.start;S||(S=b?b[w?"end":"start"]:l.selection.getRange()),S.start&&(S=S[y!=w?"end":"start"]);var M=b?b.start.row:0,O=b?b.end.row:l.getLength()-1;if(w)var k=function(E){var C=S.row;if(!T(C,S.column,E)){for(C--;C>=M;C--)if(T(C,Number.MAX_VALUE,E))return;if(a.wrap!=!1){for(C=O,M=S.row;C>=M;C--)if(T(C,Number.MAX_VALUE,E))return}}};else var k=function(C){var x=S.row;if(!T(x,S.column,C)){for(x=x+1;x<=O;x++)if(T(x,0,C))return;if(a.wrap!=!1){for(x=M,O=S.row;x<=O;x++)if(T(x,0,C))return}}};if(a.$isMultiLine)var A=u.length,T=function(E,C,x){var L=w?E-A+1:E;if(!(L<0||L+A>l.getLength())){var q=l.getLine(L),N=q.search(u[0]);if(!(!w&&NC)&&x(L,N,L+A-1,I))return!0}}};else if(w)var T=function(C,x,L){if(h){var q=v(l,u,x,C,M);if(!q)return!1;if(L(q.startRow,q.startCol,q.endRow,q.endCol))return!0}else{var N=l.getLine(C),F=[],I,R=0;for(u.lastIndex=0;I=u.exec(N);){var B=I[0].length;if(R=I.index,!B){if(R>=N.length)break;u.lastIndex=R+=g.skipEmptyMatch(N,R,_)}if(I.index+B>x)break;F.push(I.index,B)}for(var D=F.length-1;D>=0;D-=2){var P=F[D-1],B=F[D];if(L(C,P,C,P+B))return!0}}};else var T=function(C,x,L){if(u.lastIndex=x,h){var q=$(l,u,C,O);if(q){var N=q.endRow<=O?q.endRow-1:O;N>C&&(C=N)}if(!q)return!1;if(L(q.startRow,q.startCol,q.endRow,q.endCol))return!0}else for(var F=l.getLine(C),I,R;R=u.exec(F);){var B=R[0].length;if(I=R.index,L(C,I,C,I+B))return!0;if(!B&&(u.lastIndex=I+=g.skipEmptyMatch(F,I,_),I>=F.length))return!1}};return{forEach:k}},r}();function f(r,l){var a=g.supportsLookbehind();function u(w,y){y===void 0&&(y=!0);var _=a&&l.$supportsUnicodeFlag?new RegExp("[\\p{L}\\p{N}_]","u"):new RegExp("\\w");return _.test(w)||l.regExp?a&&l.$supportsUnicodeFlag?y?"(?<=^|[^\\p{L}\\p{N}_])":"(?=[^\\p{L}\\p{N}_]|$)":"\\b":""}var h=Array.from(r),$=h[0],v=h[h.length-1];return u($)+r+u(v,!1)}function n(r,l,a){for(var u=null,h=0;h<=r.length;){l.lastIndex=h;var $=l.exec(r);if(!$)break;var v=$.index+$[0].length;if(v>r.length-a)break;(!u||v>u.index+u[0].length)&&(u=$),h=$.index+1}return u}function o(r,l){var a=5e3,u={row:l,column:0},h=r.doc.positionToIndex(u),$=h+a,v=r.doc.indexToPosition($),w=v.row;return w+1}p.Search=i}),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,p,m){var g=this&&this.__extends||function(){var r=function(l,a){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(u,h){u.__proto__=h}||function(u,h){for(var $ in h)Object.prototype.hasOwnProperty.call(h,$)&&(u[$]=h[$])},r(l,a)};return function(l,a){if(typeof a!="function"&&a!==null)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");r(l,a);function u(){this.constructor=l}l.prototype=a===null?Object.create(a):(u.prototype=a.prototype,new u)}}(),s=e("../lib/keys"),c=e("../lib/useragent"),i=s.KEY_MODS,f=function(){function r(l,a){this.$init(l,a,!1)}return r.prototype.$init=function(l,a,u){this.platform=a||(c.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(l),this.$singleCommand=u},r.prototype.addCommand=function(l){this.commands[l.name]&&this.removeCommand(l),this.commands[l.name]=l,l.bindKey&&this._buildKeyHash(l)},r.prototype.removeCommand=function(l,a){var u=l&&(typeof l=="string"?l:l.name);l=this.commands[u],a||delete this.commands[u];var h=this.commandKeyBinding;for(var $ in h){var v=h[$];if(v==l)delete h[$];else if(Array.isArray(v)){var w=v.indexOf(l);w!=-1&&(v.splice(w,1),v.length==1&&(h[$]=v[0]))}}},r.prototype.bindKey=function(l,a,u){if(typeof l=="object"&&l&&(u==null&&(u=l.position),l=l[this.platform]),!!l){if(typeof a=="function")return this.addCommand({exec:a,bindKey:l,name:a.name||l});l.split("|").forEach(function(h){var $="";if(h.indexOf(" ")!=-1){var v=h.split(/\s+/);h=v.pop(),v.forEach(function(_){var b=this.parseKeys(_),S=i[b.hashId]+b.key;$+=($?" ":"")+S,this._addCommandToBinding($,"chainKeys")},this),$+=" "}var w=this.parseKeys(h),y=i[w.hashId]+w.key;this._addCommandToBinding($+y,a,u)},this)}},r.prototype._addCommandToBinding=function(l,a,u){var h=this.commandKeyBinding,$;if(!a)delete h[l];else if(!h[l]||this.$singleCommand)h[l]=a;else{Array.isArray(h[l])?($=h[l].indexOf(a))!=-1&&h[l].splice($,1):h[l]=[h[l]],typeof u!="number"&&(u=n(a));var v=h[l];for($=0;$u)break}v.splice($,0,a)}},r.prototype.addCommands=function(l){l&&Object.keys(l).forEach(function(a){var u=l[a];if(!!u){if(typeof u=="string")return this.bindKey(u,a);typeof u=="function"&&(u={exec:u}),typeof u=="object"&&(u.name||(u.name=a),this.addCommand(u))}},this)},r.prototype.removeCommands=function(l){Object.keys(l).forEach(function(a){this.removeCommand(l[a])},this)},r.prototype.bindKeys=function(l){Object.keys(l).forEach(function(a){this.bindKey(a,l[a])},this)},r.prototype._buildKeyHash=function(l){this.bindKey(l.bindKey,l)},r.prototype.parseKeys=function(l){var a=l.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(y){return y}),u=a.pop(),h=s[u];if(s.FUNCTION_KEYS[h])u=s.FUNCTION_KEYS[h].toLowerCase();else if(a.length){if(a.length==1&&a[0]=="shift")return{key:u.toUpperCase(),hashId:-1}}else return{key:u,hashId:-1};for(var $=0,v=a.length;v--;){var w=s.KEY_MODS[a[v]];if(w==null)return typeof console!="undefined"&&console.error("invalid modifier "+a[v]+" in "+l),!1;$|=w}return{key:u,hashId:$}},r.prototype.findKeyCommand=function(l,a){var u=i[l]+a;return this.commandKeyBinding[u]},r.prototype.handleKeyboard=function(l,a,u,h){if(!(h<0)){var $=i[a]+u,v=this.commandKeyBinding[$];return l.$keyChain&&(l.$keyChain+=" "+$,v=this.commandKeyBinding[l.$keyChain]||v),v&&(v=="chainKeys"||v[v.length-1]=="chainKeys")?(l.$keyChain=l.$keyChain||$,{command:"null"}):(l.$keyChain&&((!a||a==4)&&u.length==1?l.$keyChain=l.$keyChain.slice(0,-$.length-1):(a==-1||h>0)&&(l.$keyChain="")),{command:v})}},r.prototype.getStatusText=function(l,a){return a.$keyChain||""},r}();function n(r){return typeof r=="object"&&r.bindKey&&r.bindKey.position||(r.isDefault?-100:0)}var o=function(r){g(l,r);function l(a,u){var h=r.call(this,a,u)||this;return h.$singleCommand=!0,h}return l}(f);o.call=function(r,l,a){f.prototype.$init.call(r,l,a,!0)},f.call=function(r,l,a){f.prototype.$init.call(r,l,a,!1)},p.HashHandler=o,p.MultiHashHandler=f}),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,p,m){var g=this&&this.__extends||function(){var n=function(o,r){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(l,a){l.__proto__=a}||function(l,a){for(var u in a)Object.prototype.hasOwnProperty.call(a,u)&&(l[u]=a[u])},n(o,r)};return function(o,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");n(o,r);function l(){this.constructor=o}o.prototype=r===null?Object.create(r):(l.prototype=r.prototype,new l)}}(),s=e("../lib/oop"),c=e("../keyboard/hash_handler").MultiHashHandler,i=e("../lib/event_emitter").EventEmitter,f=function(n){g(o,n);function o(r,l){var a=n.call(this,l,r)||this;return a.byName=a.commands,a.setDefaultHandler("exec",function(u){return u.args?u.command.exec(u.editor,u.args,u.event,!1):u.command.exec(u.editor,{},u.event,!0)}),a}return o.prototype.exec=function(r,l,a){if(Array.isArray(r)){for(var u=r.length;u--;)if(this.exec(r[u],l,a))return!0;return!1}typeof r=="string"&&(r=this.commands[r]);var h={editor:l,command:r,args:a};return this.canExecute(r,l)?(h.returnValue=this._emit("exec",h),this._signal("afterExec",h),h.returnValue!==!1):(this._signal("commandUnavailable",h),!1)},o.prototype.canExecute=function(r,l){return typeof r=="string"&&(r=this.commands[r]),!(!r||l&&l.$readOnly&&!r.readOnly||this.$checkCommandState!=!1&&r.isAvailable&&!r.isAvailable(l))},o.prototype.toggleRecording=function(r){if(!this.$inReplay)return r&&r._emit("changeStatus"),this.recording?(this.macro.pop(),this.off("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(l){this.macro.push([l.command,l.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},o.prototype.replay=function(r){if(!(this.$inReplay||!this.macro)){if(this.recording)return this.toggleRecording(r);try{this.$inReplay=!0,this.macro.forEach(function(l){typeof l=="string"?this.exec(l,r):this.exec(l[0],r,l[1])},this)}finally{this.$inReplay=!1}}},o.prototype.trimMacro=function(r){return r.map(function(l){return typeof l[0]!="string"&&(l[0]=l[0].name),l[1]||(l=l[0]),l})},o}(c);s.implement(f.prototype,i),p.CommandManager=f}),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],function(e,p,m){var g=e("../lib/lang"),s=e("../config"),c=e("../range").Range;function i(n,o){return{win:n,mac:o}}p.commands=[{name:"showSettingsMenu",description:"Show settings menu",bindKey:i("Ctrl-,","Command-,"),exec:function(n){s.loadModule("ace/ext/settings_menu",function(o){o.init(n),n.showSettingsMenu()})},readOnly:!0},{name:"goToNextError",description:"Go to next error",bindKey:i("Alt-E","F4"),exec:function(n){s.loadModule("ace/ext/error_marker",function(o){o.showErrorMarker(n,1)})},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",description:"Go to previous error",bindKey:i("Alt-Shift-E","Shift-F4"),exec:function(n){s.loadModule("ace/ext/error_marker",function(o){o.showErrorMarker(n,-1)})},scrollIntoView:"animate",readOnly:!0},{name:"selectall",description:"Select all",bindKey:i("Ctrl-A","Command-A"),exec:function(n){n.selectAll()},readOnly:!0},{name:"centerselection",description:"Center selection",bindKey:i(null,"Ctrl-L"),exec:function(n){n.centerSelection()},readOnly:!0},{name:"gotoline",description:"Go to line...",bindKey:i("Ctrl-L","Command-L"),exec:function(n,o){typeof o=="number"&&!isNaN(o)&&n.gotoLine(o),n.prompt({$type:"gotoLine"})},readOnly:!0},{name:"fold",bindKey:i("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(n){n.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:i("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(n){n.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",description:"Toggle fold widget",bindKey:i("F2","F2"),exec:function(n){n.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",description:"Toggle parent fold widget",bindKey:i("Alt-F2","Alt-F2"),exec:function(n){n.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",description:"Fold all",bindKey:i(null,"Ctrl-Command-Option-0"),exec:function(n){n.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldAllComments",description:"Fold all comments",bindKey:i(null,"Ctrl-Command-Option-0"),exec:function(n){n.session.foldAllComments()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",description:"Fold other",bindKey:i("Alt-0","Command-Option-0"),exec:function(n){n.session.foldAll(),n.session.unfold(n.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",description:"Unfold all",bindKey:i("Alt-Shift-0","Command-Option-Shift-0"),exec:function(n){n.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",description:"Find next",bindKey:i("Ctrl-K","Command-G"),exec:function(n){n.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",description:"Find previous",bindKey:i("Ctrl-Shift-K","Command-Shift-G"),exec:function(n){n.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",description:"Select or find next",bindKey:i("Alt-K","Ctrl-G"),exec:function(n){n.selection.isEmpty()?n.selection.selectWord():n.findNext()},readOnly:!0},{name:"selectOrFindPrevious",description:"Select or find previous",bindKey:i("Alt-Shift-K","Ctrl-Shift-G"),exec:function(n){n.selection.isEmpty()?n.selection.selectWord():n.findPrevious()},readOnly:!0},{name:"find",description:"Find",bindKey:i("Ctrl-F","Command-F"),exec:function(n){s.loadModule("ace/ext/searchbox",function(o){o.Search(n)})},readOnly:!0},{name:"overwrite",description:"Overwrite",bindKey:"Insert",exec:function(n){n.toggleOverwrite()},readOnly:!0},{name:"selecttostart",description:"Select to start",bindKey:i("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(n){n.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",description:"Go to start",bindKey:i("Ctrl-Home","Command-Home|Command-Up"),exec:function(n){n.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",description:"Select up",bindKey:i("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(n){n.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",description:"Go line up",bindKey:i("Up","Up|Ctrl-P"),exec:function(n,o){n.navigateUp(o.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",description:"Select to end",bindKey:i("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(n){n.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",description:"Go to end",bindKey:i("Ctrl-End","Command-End|Command-Down"),exec:function(n){n.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",description:"Select down",bindKey:i("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(n){n.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",description:"Go line down",bindKey:i("Down","Down|Ctrl-N"),exec:function(n,o){n.navigateDown(o.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",description:"Select word left",bindKey:i("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(n){n.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",description:"Go to word left",bindKey:i("Ctrl-Left","Option-Left"),exec:function(n){n.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",description:"Select to line start",bindKey:i("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(n){n.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",description:"Go to line start",bindKey:i("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(n){n.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",description:"Select left",bindKey:i("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(n){n.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",description:"Go to left",bindKey:i("Left","Left|Ctrl-B"),exec:function(n,o){n.navigateLeft(o.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",description:"Select word right",bindKey:i("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(n){n.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",description:"Go to word right",bindKey:i("Ctrl-Right","Option-Right"),exec:function(n){n.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",description:"Select to line end",bindKey:i("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(n){n.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",description:"Go to line end",bindKey:i("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(n){n.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",description:"Select right",bindKey:i("Shift-Right","Shift-Right"),exec:function(n){n.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",description:"Go to right",bindKey:i("Right","Right|Ctrl-F"),exec:function(n,o){n.navigateRight(o.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",description:"Select page down",bindKey:"Shift-PageDown",exec:function(n){n.selectPageDown()},readOnly:!0},{name:"pagedown",description:"Page down",bindKey:i(null,"Option-PageDown"),exec:function(n){n.scrollPageDown()},readOnly:!0},{name:"gotopagedown",description:"Go to page down",bindKey:i("PageDown","PageDown|Ctrl-V"),exec:function(n){n.gotoPageDown()},readOnly:!0},{name:"selectpageup",description:"Select page up",bindKey:"Shift-PageUp",exec:function(n){n.selectPageUp()},readOnly:!0},{name:"pageup",description:"Page up",bindKey:i(null,"Option-PageUp"),exec:function(n){n.scrollPageUp()},readOnly:!0},{name:"gotopageup",description:"Go to page up",bindKey:"PageUp",exec:function(n){n.gotoPageUp()},readOnly:!0},{name:"scrollup",description:"Scroll up",bindKey:i("Ctrl-Up",null),exec:function(n){n.renderer.scrollBy(0,-2*n.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",description:"Scroll down",bindKey:i("Ctrl-Down",null),exec:function(n){n.renderer.scrollBy(0,2*n.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",description:"Select line start",bindKey:"Shift-Home",exec:function(n){n.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",description:"Select line end",bindKey:"Shift-End",exec:function(n){n.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",description:"Toggle recording",bindKey:i("Ctrl-Alt-E","Command-Option-E"),exec:function(n){n.commands.toggleRecording(n)},readOnly:!0},{name:"replaymacro",description:"Replay macro",bindKey:i("Ctrl-Shift-E","Command-Shift-E"),exec:function(n){n.commands.replay(n)},readOnly:!0},{name:"jumptomatching",description:"Jump to matching",bindKey:i("Ctrl-\\|Ctrl-P","Command-\\"),exec:function(n){n.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",description:"Select to matching",bindKey:i("Ctrl-Shift-\\|Ctrl-Shift-P","Command-Shift-\\"),exec:function(n){n.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",description:"Expand to matching",bindKey:i("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(n){n.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",description:"Pass keys to browser",bindKey:i(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",description:"Copy",exec:function(n){},readOnly:!0},{name:"cut",description:"Cut",exec:function(n){var o=n.$copyWithEmptySelection&&n.selection.isEmpty(),r=o?n.selection.getLineRange():n.selection.getRange();n._emit("cut",r),r.isEmpty()||n.session.remove(r),n.clearSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",description:"Paste",exec:function(n,o){n.$handlePaste(o)},scrollIntoView:"cursor"},{name:"removeline",description:"Remove line",bindKey:i("Ctrl-D","Command-D"),exec:function(n){n.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",description:"Duplicate selection",bindKey:i("Ctrl-Shift-D","Command-Shift-D"),exec:function(n){n.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",description:"Sort lines",bindKey:i("Ctrl-Alt-S","Command-Alt-S"),exec:function(n){n.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",description:"Toggle comment",bindKey:i("Ctrl-/","Command-/"),exec:function(n){n.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",description:"Toggle block comment",bindKey:i("Ctrl-Shift-/","Command-Shift-/"),exec:function(n){n.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",description:"Modify number up",bindKey:i("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(n){n.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",description:"Modify number down",bindKey:i("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(n){n.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",description:"Replace",bindKey:i("Ctrl-H","Command-Option-F"),exec:function(n){s.loadModule("ace/ext/searchbox",function(o){o.Search(n,!0)})}},{name:"undo",description:"Undo",bindKey:i("Ctrl-Z","Command-Z"),exec:function(n){n.undo()}},{name:"redo",description:"Redo",bindKey:i("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(n){n.redo()}},{name:"copylinesup",description:"Copy lines up",bindKey:i("Alt-Shift-Up","Command-Option-Up"),exec:function(n){n.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",description:"Move lines up",bindKey:i("Alt-Up","Option-Up"),exec:function(n){n.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",description:"Copy lines down",bindKey:i("Alt-Shift-Down","Command-Option-Down"),exec:function(n){n.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",description:"Move lines down",bindKey:i("Alt-Down","Option-Down"),exec:function(n){n.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",description:"Delete",bindKey:i("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(n){n.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",description:"Backspace",bindKey:i("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(n){n.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",description:"Cut or delete",bindKey:i("Shift-Delete",null),exec:function(n){if(n.selection.isEmpty())n.remove("left");else return!1},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",description:"Remove to line start",bindKey:i("Alt-Backspace","Command-Backspace"),exec:function(n){n.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",description:"Remove to line end",bindKey:i("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(n){n.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",description:"Remove to line start hard",bindKey:i("Ctrl-Shift-Backspace",null),exec:function(n){var o=n.selection.getRange();o.start.column=0,n.session.remove(o)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",description:"Remove to line end hard",bindKey:i("Ctrl-Shift-Delete",null),exec:function(n){var o=n.selection.getRange();o.end.column=Number.MAX_VALUE,n.session.remove(o)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",description:"Remove word left",bindKey:i("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(n){n.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",description:"Remove word right",bindKey:i("Ctrl-Delete","Alt-Delete"),exec:function(n){n.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",description:"Outdent",bindKey:i("Shift-Tab","Shift-Tab"),exec:function(n){n.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",description:"Indent",bindKey:i("Tab","Tab"),exec:function(n){n.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",description:"Block outdent",bindKey:i("Ctrl-[","Ctrl-["),exec:function(n){n.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",description:"Block indent",bindKey:i("Ctrl-]","Ctrl-]"),exec:function(n){n.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",description:"Insert string",exec:function(n,o){n.insert(o)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",description:"Insert text",exec:function(n,o){n.insert(g.stringRepeat(o.text||"",o.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",description:"Split line",bindKey:i(null,"Ctrl-O"),exec:function(n){n.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",description:"Transpose letters",bindKey:i("Alt-Shift-X","Ctrl-T"),exec:function(n){n.transposeLetters()},multiSelectAction:function(n){n.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",description:"To uppercase",bindKey:i("Ctrl-U","Ctrl-U"),exec:function(n){n.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",description:"To lowercase",bindKey:i("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(n){n.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"autoindent",description:"Auto Indent",bindKey:i(null,null),exec:function(n){n.autoIndent()},scrollIntoView:"animate"},{name:"expandtoline",description:"Expand to line",bindKey:i("Ctrl-Shift-L","Command-Shift-L"),exec:function(n){var o=n.selection.getRange();o.start.column=o.end.column=0,o.end.row++,n.selection.setRange(o,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"openlink",bindKey:i("Ctrl+F3","F3"),exec:function(n){n.openLink()}},{name:"joinlines",description:"Join lines",bindKey:i(null,null),exec:function(n){for(var o=n.selection.isBackwards(),r=o?n.selection.getSelectionLead():n.selection.getSelectionAnchor(),l=o?n.selection.getSelectionAnchor():n.selection.getSelectionLead(),a=n.session.doc.getLine(r.row).length,u=n.session.doc.getTextRange(n.selection.getRange()),h=u.replace(/\n\s*/," ").length,$=n.session.doc.getLine(r.row),v=r.row+1;v<=l.row+1;v++){var w=g.stringTrimLeft(g.stringTrimRight(n.session.doc.getLine(v)));w.length!==0&&(w=" "+w),$+=w}l.row+10?(n.selection.moveCursorTo(r.row,r.column),n.selection.selectTo(r.row,r.column+h)):(a=n.session.doc.getLine(r.row).length>a?a+1:a,n.selection.moveCursorTo(r.row,a))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",description:"Invert selection",bindKey:i(null,null),exec:function(n){var o=n.session.doc.getLength()-1,r=n.session.doc.getLine(o).length,l=n.selection.rangeList.ranges,a=[];l.length<1&&(l=[n.selection.getRange()]);for(var u=0;u0||n+o=0&&this.$isCustomWidgetVisible(n-o))return n-o;if(n+o<=this.lines.getLength()-1&&this.$isCustomWidgetVisible(n+o))return n+o;if(n-o>=0&&this.$isFoldWidgetVisible(n-o))return n-o;if(n+o<=this.lines.getLength()-1&&this.$isFoldWidgetVisible(n+o))return n+o}return null},f.prototype.$findNearestAnnotation=function(n){if(this.$isAnnotationVisible(n))return n;for(var o=0;n-o>0||n+o=0&&this.$isAnnotationVisible(n-o))return n-o;if(n+o<=this.lines.getLength()-1&&this.$isAnnotationVisible(n+o))return n+o}return null},f.prototype.$focusFoldWidget=function(n){if(n!=null){var o=this.$getFoldWidget(n);o.classList.add(this.editor.renderer.keyboardFocusClassName),o.focus()}},f.prototype.$focusCustomWidget=function(n){if(n!=null){var o=this.$getCustomWidget(n);o&&(o.classList.add(this.editor.renderer.keyboardFocusClassName),o.focus())}},f.prototype.$focusAnnotation=function(n){if(n!=null){var o=this.$getAnnotation(n);o.classList.add(this.editor.renderer.keyboardFocusClassName),o.focus()}},f.prototype.$blurFoldWidget=function(n){var o=this.$getFoldWidget(n);o.classList.remove(this.editor.renderer.keyboardFocusClassName),o.blur()},f.prototype.$blurCustomWidget=function(n){var o=this.$getCustomWidget(n);o&&(o.classList.remove(this.editor.renderer.keyboardFocusClassName),o.blur())},f.prototype.$blurAnnotation=function(n){var o=this.$getAnnotation(n);o.classList.remove(this.editor.renderer.keyboardFocusClassName),o.blur()},f.prototype.$moveFoldWidgetUp=function(){for(var n=this.activeRowIndex;n>0;)if(n--,this.$isFoldWidgetVisible(n)||this.$isCustomWidgetVisible(n)){this.$blurFoldWidget(this.activeRowIndex),this.$blurCustomWidget(this.activeRowIndex),this.activeRowIndex=n,this.$isFoldWidgetVisible(n)?this.$focusFoldWidget(this.activeRowIndex):this.$focusCustomWidget(this.activeRowIndex);return}},f.prototype.$moveFoldWidgetDown=function(){for(var n=this.activeRowIndex;n0;)if(n--,this.$isAnnotationVisible(n)){this.$blurAnnotation(this.activeRowIndex),this.activeRowIndex=n,this.$focusAnnotation(this.activeRowIndex);return}},f.prototype.$moveAnnotationDown=function(){for(var n=this.activeRowIndex;n=C.length&&(C=void 0),{value:C&&C[q++],done:!C}}};throw new TypeError(x?"Object is not iterable.":"Symbol.iterator is not defined.")},s=e("./lib/oop"),c=e("./lib/dom"),i=e("./lib/lang"),f=e("./lib/useragent"),n=e("./keyboard/textinput").TextInput,o=e("./mouse/mouse_handler").MouseHandler,r=e("./mouse/fold_handler").FoldHandler,l=e("./keyboard/keybinding").KeyBinding,a=e("./edit_session").EditSession,u=e("./search").Search,h=e("./range").Range,$=e("./lib/event_emitter").EventEmitter,v=e("./commands/command_manager").CommandManager,w=e("./commands/default_commands").commands,y=e("./config"),_=e("./token_iterator").TokenIterator,b=e("./keyboard/gutter_handler").GutterKeyboardHandler,S=e("./config").nls,M=e("./clipboard"),O=e("./lib/keys"),k=e("./lib/event"),A=e("./tooltip").HoverTooltip,T=function(){function C(x,L,q){this.id="editor"+ ++C.$uid,this.session,this.$toDestroy=[];var N=x.getContainerElement();this.container=N,this.renderer=x,this.commands=new v(f.isMac?"mac":"win",w),typeof document=="object"&&(this.textInput=new n(x.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.$mouseHandler=new o(this),new r(this)),this.keyBinding=new l(this),this.$search=new u().set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on("exec",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=i.delayedCall(function(){this._signal("input",{}),this.session&&!this.session.destroyed&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on("change",function(F,I){I._$emitInputEvent.schedule(31)}),this.setSession(L||q&&q.session||new a("")),y.resetOptions(this),q&&this.setOptions(q),y._signal("editor",this)}return C.prototype.$initOperationListeners=function(){this.commands.on("exec",this.startOperation.bind(this),!0),this.commands.on("afterExec",this.endOperation.bind(this),!0)},C.prototype.startOperation=function(x){this.session.startOperation(x)},C.prototype.endOperation=function(x){this.session.endOperation(x)},C.prototype.onStartOperation=function(x){this.curOp=this.session.curOp,this.curOp.scrollTop=this.renderer.scrollTop,this.prevOp=this.session.prevOp,x||(this.previousCommand=null)},C.prototype.onEndOperation=function(x){if(this.curOp&&this.session){if(x&&x.returnValue===!1){this.curOp=null;return}if(this._signal("beforeEndOperation"),!this.curOp)return;var L=this.curOp.command,q=L&&L.scrollIntoView;if(q){switch(q){case"center-animate":q="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var N=this.selection.getRange(),F=this.renderer.layerConfig;(N.start.row>=F.lastRow||N.end.row<=F.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break}q=="animate"&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.$lastSel=this.session.selection.toJSON(),this.prevOp=this.curOp,this.curOp=null}},C.prototype.$historyTracker=function(x){if(!!this.$mergeUndoDeltas){var L=this.prevOp,q=this.$mergeableCommands,N=L.command&&x.command.name==L.command.name;if(x.command.name=="insertstring"){var F=x.args;this.mergeNextCommand===void 0&&(this.mergeNextCommand=!0),N=N&&this.mergeNextCommand&&(!/\s/.test(F)||/\s/.test(L.args)),this.mergeNextCommand=!0}else N=N&&q.indexOf(x.command.name)!==-1;this.$mergeUndoDeltas!="always"&&Date.now()-this.sequenceStartTime>2e3&&(N=!1),N?this.session.mergeUndoDeltas=!0:q.indexOf(x.command.name)!==-1&&(this.sequenceStartTime=Date.now())}},C.prototype.setKeyboardHandler=function(x,L){if(x&&typeof x=="string"&&x!="ace"){this.$keybindingId=x;var q=this;y.loadModule(["keybinding",x],function(N){q.$keybindingId==x&&q.keyBinding.setKeyboardHandler(N&&N.handler),L&&L()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(x),L&&L()},C.prototype.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},C.prototype.setSession=function(x){if(this.session!=x){this.curOp&&this.endOperation(),this.curOp={};var L=this.session;if(L){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange),this.session.off("startOperation",this.$onStartOperation),this.session.off("endOperation",this.$onEndOperation);var q=this.session.getSelection();q.off("changeCursor",this.$onCursorChange),q.off("changeSelection",this.$onSelectionChange)}this.session=x,x?(this.$onDocumentChange=this.onDocumentChange.bind(this),x.on("change",this.$onDocumentChange),this.renderer.setSession(x),this.$onChangeMode=this.onChangeMode.bind(this),x.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),x.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),x.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),x.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),x.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),x.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=x.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.$onStartOperation=this.onStartOperation.bind(this),this.session.on("startOperation",this.$onStartOperation),this.$onEndOperation=this.onEndOperation.bind(this),this.session.on("endOperation",this.$onEndOperation),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(x)),this._signal("changeSession",{session:x,oldSession:L}),this.curOp=null,L&&L._signal("changeEditor",{oldEditor:this}),L&&(L.$editor=null),x&&x._signal("changeEditor",{editor:this}),x&&(x.$editor=this),x&&!x.destroyed&&x.bgTokenizer.scheduleStart()}},C.prototype.getSession=function(){return this.session},C.prototype.setValue=function(x,L){return this.session.doc.setValue(x),L?L==1?this.navigateFileEnd():L==-1&&this.navigateFileStart():this.selectAll(),x},C.prototype.getValue=function(){return this.session.getValue()},C.prototype.getSelection=function(){return this.selection},C.prototype.resize=function(x){this.renderer.onResize(x)},C.prototype.setTheme=function(x,L){this.renderer.setTheme(x,L)},C.prototype.getTheme=function(){return this.renderer.getTheme()},C.prototype.setStyle=function(x,L){this.renderer.setStyle(x,L)},C.prototype.unsetStyle=function(x){this.renderer.unsetStyle(x)},C.prototype.getFontSize=function(){return this.getOption("fontSize")||c.computedStyle(this.container).fontSize},C.prototype.setFontSize=function(x){this.setOption("fontSize",x)},C.prototype.$highlightBrackets=function(){if(!this.$highlightPending){var x=this;this.$highlightPending=!0,setTimeout(function(){x.$highlightPending=!1;var L=x.session;if(!(!L||L.destroyed)){L.$bracketHighlight&&(L.$bracketHighlight.markerIds.forEach(function(j){L.removeMarker(j)}),L.$bracketHighlight=null);var q=x.getCursorPosition(),N=x.getKeyboardHandler(),F=N&&N.$getDirectionForHighlight&&N.$getDirectionForHighlight(x),I=L.getMatchingBracketRanges(q,F);if(!I){var R=new _(L,q.row,q.column),B=R.getCurrentToken();if(B&&/\b(?:tag-open|tag-name)/.test(B.type)){var D=L.getMatchingTags(q);D&&(I=[D.openTagName.isEmpty()?D.openTag:D.openTagName,D.closeTagName.isEmpty()?D.closeTag:D.closeTagName])}}if(!I&&L.$mode.getMatching&&(I=L.$mode.getMatching(x.session)),!I){x.getHighlightIndentGuides()&&x.renderer.$textLayer.$highlightIndentGuide();return}var P="ace_bracket";Array.isArray(I)?I.length==1&&(P="ace_error_bracket"):I=[I],I.length==2&&(h.comparePoints(I[0].end,I[1].start)==0?I=[h.fromPoints(I[0].start,I[1].end)]:h.comparePoints(I[0].start,I[1].end)==0&&(I=[h.fromPoints(I[1].start,I[0].end)])),L.$bracketHighlight={ranges:I,markerIds:I.map(function(j){return L.addMarker(j,P,"text")})},x.getHighlightIndentGuides()&&x.renderer.$textLayer.$highlightIndentGuide()}},50)}},C.prototype.focus=function(){this.textInput.focus()},C.prototype.isFocused=function(){return this.textInput.isFocused()},C.prototype.blur=function(){this.textInput.blur()},C.prototype.onFocus=function(x){this.$isFocused||(this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit("focus",x))},C.prototype.onBlur=function(x){!this.$isFocused||(this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit("blur",x))},C.prototype.$cursorChange=function(){this.renderer.updateCursor(),this.$highlightBrackets(),this.$updateHighlightActiveLine()},C.prototype.onDocumentChange=function(x){var L=this.session.$useWrapMode,q=x.start.row==x.end.row?x.end.row:1/0;this.renderer.updateLines(x.start.row,q,L),this._signal("change",x),this.$cursorChange()},C.prototype.onTokenizerUpdate=function(x){var L=x.data;this.renderer.updateLines(L.first,L.last)},C.prototype.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},C.prototype.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},C.prototype.onCursorChange=function(){this.$cursorChange(),this._signal("changeSelection")},C.prototype.$updateHighlightActiveLine=function(){var x=this.getSession(),L;if(this.$highlightActiveLine&&((this.$selectionStyle!="line"||!this.selection.isMultiLine())&&(L=this.getCursorPosition()),this.renderer.theme&&this.renderer.theme.$selectionColorConflict&&!this.selection.isEmpty()&&(L=!1),this.renderer.$maxLines&&this.session.getLength()===1&&!(this.renderer.$minLines>1)&&(L=!1)),x.$highlightLineMarker&&!L)x.removeMarker(x.$highlightLineMarker.id),x.$highlightLineMarker=null;else if(!x.$highlightLineMarker&&L){var q=new h(L.row,L.column,L.row,1/0);q.id=x.addMarker(q,"ace_active-line","screenLine"),x.$highlightLineMarker=q}else L&&(x.$highlightLineMarker.start.row=L.row,x.$highlightLineMarker.end.row=L.row,x.$highlightLineMarker.start.column=L.column,x._signal("changeBackMarker"))},C.prototype.onSelectionChange=function(x){var L=this.session;if(L.$selectionMarker&&L.removeMarker(L.$selectionMarker),L.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var q=this.selection.getRange(),N=this.getSelectionStyle();L.$selectionMarker=L.addMarker(q,"ace_selection",N)}var F=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(F),this._signal("changeSelection")},C.prototype.$getSelectionHighLightRegexp=function(){var x=this.session,L=this.getSelectionRange();if(!(L.isEmpty()||L.isMultiLine())){var q=L.start.column,N=L.end.column,F=x.getLine(L.start.row),I=F.substring(q,N);if(!(I.length>5e3||!/[\w\d]/.test(I))){var R=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:I}),B=F.substring(q-1,N+1);if(!!R.test(B))return R}}},C.prototype.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},C.prototype.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},C.prototype.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},C.prototype.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},C.prototype.onChangeMode=function(x){this.renderer.updateText(),this._emit("changeMode",x)},C.prototype.onChangeWrapLimit=function(){this.renderer.updateFull()},C.prototype.onChangeWrapMode=function(){this.renderer.onResize(!0)},C.prototype.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},C.prototype.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},C.prototype.getCopyText=function(){var x=this.getSelectedText(),L=this.session.doc.getNewLineCharacter(),q=!1;if(!x&&this.$copyWithEmptySelection){q=!0;for(var N=this.selection.getAllRanges(),F=0;Fj.search(/\S|$/)){var B=j.substr(F.column).search(/\S|$/);q.doc.removeInLine(F.row,F.column,F.column+B)}}this.clearSelection();var D=F.column,P=q.getState(F.row),j=q.getLine(F.row),V=N.checkOutdent(P,j,x);if(q.insert(F,x),I&&I.selection&&(I.selection.length==2?this.selection.setSelectionRange(new h(F.row,D+I.selection[0],F.row,D+I.selection[1])):this.selection.setSelectionRange(new h(F.row+I.selection[0],I.selection[1],F.row+I.selection[2],I.selection[3]))),this.$enableAutoIndent){if(q.getDocument().isNewLine(x)){var W=N.getNextLineIndent(P,j.slice(0,F.column),q.getTabString());q.insert({row:F.row+1,column:0},W)}V&&N.autoOutdent(P,q,F.row)}},C.prototype.autoIndent=function(){for(var x=this.session,L=x.getMode(),q=this.selection.isEmpty()?[new h(0,0,x.doc.getLength()-1,0)]:this.selection.getAllRanges(),N="",F="",I="",R=x.getTabString(),B=0;B0&&(N=x.getState(j-1),F=x.getLine(j-1),I=L.getNextLineIndent(N,F,R));var V=x.getLine(j),W=L.$getIndent(V);if(I!==W){if(W.length>0){var H=new h(j,0,j,W.length);x.remove(H)}I.length>0&&x.insert({row:j,column:0},I)}L.autoOutdent(N,x,j)}},C.prototype.onTextInput=function(x,L){if(!L)return this.keyBinding.onTextInput(x);this.startOperation({command:{name:"insertstring"}});var q=this.applyComposition.bind(this,x,L);this.selection.rangeCount?this.forEachSelection(q):q(),this.endOperation()},C.prototype.applyComposition=function(x,L){if(L.extendLeft||L.extendRight){var q=this.selection.getRange();q.start.column-=L.extendLeft,q.end.column+=L.extendRight,q.start.column<0&&(q.start.row--,q.start.column+=this.session.getLine(q.start.row).length+1),this.selection.setRange(q),!x&&!q.isEmpty()&&this.remove()}if((x||!this.selection.isEmpty())&&this.insert(x,!0),L.restoreStart||L.restoreEnd){var q=this.selection.getRange();q.start.column-=L.restoreStart,q.end.column-=L.restoreEnd,this.selection.setRange(q)}},C.prototype.onCommandKey=function(x,L,q){return this.keyBinding.onCommandKey(x,L,q)},C.prototype.setOverwrite=function(x){this.session.setOverwrite(x)},C.prototype.getOverwrite=function(){return this.session.getOverwrite()},C.prototype.toggleOverwrite=function(){this.session.toggleOverwrite()},C.prototype.setScrollSpeed=function(x){this.setOption("scrollSpeed",x)},C.prototype.getScrollSpeed=function(){return this.getOption("scrollSpeed")},C.prototype.setDragDelay=function(x){this.setOption("dragDelay",x)},C.prototype.getDragDelay=function(){return this.getOption("dragDelay")},C.prototype.setSelectionStyle=function(x){this.setOption("selectionStyle",x)},C.prototype.getSelectionStyle=function(){return this.getOption("selectionStyle")},C.prototype.setHighlightActiveLine=function(x){this.setOption("highlightActiveLine",x)},C.prototype.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},C.prototype.setHighlightGutterLine=function(x){this.setOption("highlightGutterLine",x)},C.prototype.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},C.prototype.setHighlightSelectedWord=function(x){this.setOption("highlightSelectedWord",x)},C.prototype.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},C.prototype.setAnimatedScroll=function(x){this.renderer.setAnimatedScroll(x)},C.prototype.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},C.prototype.setShowInvisibles=function(x){this.renderer.setShowInvisibles(x)},C.prototype.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},C.prototype.setDisplayIndentGuides=function(x){this.renderer.setDisplayIndentGuides(x)},C.prototype.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},C.prototype.setHighlightIndentGuides=function(x){this.renderer.setHighlightIndentGuides(x)},C.prototype.getHighlightIndentGuides=function(){return this.renderer.getHighlightIndentGuides()},C.prototype.setShowPrintMargin=function(x){this.renderer.setShowPrintMargin(x)},C.prototype.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},C.prototype.setPrintMarginColumn=function(x){this.renderer.setPrintMarginColumn(x)},C.prototype.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},C.prototype.setReadOnly=function(x){this.setOption("readOnly",x)},C.prototype.getReadOnly=function(){return this.getOption("readOnly")},C.prototype.setBehavioursEnabled=function(x){this.setOption("behavioursEnabled",x)},C.prototype.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},C.prototype.setWrapBehavioursEnabled=function(x){this.setOption("wrapBehavioursEnabled",x)},C.prototype.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},C.prototype.setShowFoldWidgets=function(x){this.setOption("showFoldWidgets",x)},C.prototype.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},C.prototype.setFadeFoldWidgets=function(x){this.setOption("fadeFoldWidgets",x)},C.prototype.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},C.prototype.remove=function(x){this.selection.isEmpty()&&(x=="left"?this.selection.selectLeft():this.selection.selectRight());var L=this.getSelectionRange();if(this.getBehavioursEnabled()){var q=this.session,N=q.getState(L.start.row),F=q.getMode().transformAction(N,"deletion",this,q,L);if(L.end.column===0){var I=q.getTextRange(L);if(I[I.length-1]==` +`){var R=q.getLine(L.end.row);/^\s+$/.test(R)&&(L.end.column=R.length)}}F&&(L=F)}this.session.remove(L),this.clearSelection()},C.prototype.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},C.prototype.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},C.prototype.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},C.prototype.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var x=this.getSelectionRange();x.start.column==x.end.column&&x.start.row==x.end.row&&(x.end.column=0,x.end.row++),this.session.remove(x),this.clearSelection()},C.prototype.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var x=this.getCursorPosition();this.insert(` +`),this.moveCursorToPosition(x)},C.prototype.setGhostText=function(x,L){this.renderer.setGhostText(x,L)},C.prototype.removeGhostText=function(){this.renderer.removeGhostText()},C.prototype.transposeLetters=function(){if(!!this.selection.isEmpty()){var x=this.getCursorPosition(),L=x.column;if(L!==0){var q=this.session.getLine(x.row),N,F;LB.toLowerCase()?1:0});for(var F=new h(0,0,0,0),N=x.first;N<=x.last;N++){var I=L.getLine(N);F.start.row=N,F.end.row=N,F.end.column=I.length,L.replace(F,q[N-x.first])}},C.prototype.toggleCommentLines=function(){var x=this.session.getState(this.getCursorPosition().row),L=this.$getSelectedRows();this.session.getMode().toggleCommentLines(x,this.session,L.first,L.last)},C.prototype.toggleBlockComment=function(){var x=this.getCursorPosition(),L=this.session.getState(x.row),q=this.getSelectionRange();this.session.getMode().toggleBlockComment(L,this.session,q,x)},C.prototype.getNumberAt=function(x,L){var q=/[\-]?[0-9]+(?:\.[0-9]+)?/g;q.lastIndex=0;for(var N=this.session.getLine(x);q.lastIndex=L){var I={value:F[0],start:F.index,end:F.index+F[0].length};return I}}return null},C.prototype.modifyNumber=function(x){var L=this.selection.getCursor().row,q=this.selection.getCursor().column,N=new h(L,q-1,L,q),F=this.session.getTextRange(N);if(!isNaN(parseFloat(F))&&isFinite(F)){var I=this.getNumberAt(L,q);if(I){var R=I.value.indexOf(".")>=0?I.start+I.value.indexOf(".")+1:I.end,B=I.start+I.value.length-R,D=parseFloat(I.value);D*=Math.pow(10,B),R!==I.end&&q=R&&I<=B&&(q=ne,D.selection.clearSelection(),D.moveCursorTo(x,R+N),D.selection.selectTo(x,B+N)),R=B});for(var P=this.$toggleWordPairs,j,V=0;V=B&&R<=D&&W.match(/((?:https?|ftp):\/\/[\S]+)/)){P=W.replace(/[\s:.,'";}\]]+$/,"");break}B=D}}catch(H){q={error:H}}finally{try{V&&!V.done&&(N=j.return)&&N.call(j)}finally{if(q)throw q.error}}return P},C.prototype.openLink=function(){var x=this.selection.getCursor(),L=this.findLinkAt(x.row,x.column);return L&&window.open(L,"_blank"),L!=null},C.prototype.removeLines=function(){var x=this.$getSelectedRows();this.session.removeFullLines(x.first,x.last),this.clearSelection()},C.prototype.duplicateSelection=function(){var x=this.selection,L=this.session,q=x.getRange(),N=x.isBackwards();if(q.isEmpty()){var F=q.start.row;L.duplicateLines(F,F)}else{var I=N?q.start:q.end,R=L.insert(I,L.getTextRange(q));q.start=I,q.end=R,x.setSelectionRange(q,N)}},C.prototype.moveLinesDown=function(){this.$moveLines(1,!1)},C.prototype.moveLinesUp=function(){this.$moveLines(-1,!1)},C.prototype.moveText=function(x,L,q){return this.session.moveText(x,L,q)},C.prototype.copyLinesUp=function(){this.$moveLines(-1,!0)},C.prototype.copyLinesDown=function(){this.$moveLines(1,!0)},C.prototype.$moveLines=function(x,L){var q,N,F=this.selection;if(!F.inMultiSelectMode||this.inVirtualSelectionMode){var I=F.toOrientedRange();q=this.$getSelectedRows(I),N=this.session.$moveLines(q.first,q.last,L?0:x),L&&x==-1&&(N=0),I.moveBy(N,0),F.fromOrientedRange(I)}else{var R=F.rangeList.ranges;F.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;for(var B=0,D=0,P=R.length,j=0;jH+1)break;H=z.last}for(j--,B=this.session.$moveLines(W,H,L?0:x),L&&x==-1&&(V=j+1);V<=j;)R[V].moveBy(B,0),V++;L||(B=0),D+=B}F.fromOrientedRange(F.ranges[0]),F.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},C.prototype.$getSelectedRows=function(x){return x=(x||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(x.start.row),last:this.session.getRowFoldEnd(x.end.row)}},C.prototype.onCompositionStart=function(x){this.renderer.showComposition(x)},C.prototype.onCompositionUpdate=function(x){this.renderer.setCompositionText(x)},C.prototype.onCompositionEnd=function(){this.renderer.hideComposition()},C.prototype.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},C.prototype.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},C.prototype.isRowVisible=function(x){return x>=this.getFirstVisibleRow()&&x<=this.getLastVisibleRow()},C.prototype.isRowFullyVisible=function(x){return x>=this.renderer.getFirstFullyVisibleRow()&&x<=this.renderer.getLastFullyVisibleRow()},C.prototype.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},C.prototype.$moveByPage=function(x,L){var q=this.renderer,N=this.renderer.layerConfig,F=x*Math.floor(N.height/N.lineHeight);L===!0?this.selection.$moveSelection(function(){this.moveCursorBy(F,0)}):L===!1&&(this.selection.moveCursorBy(F,0),this.selection.clearSelection());var I=q.scrollTop;q.scrollBy(0,F*N.lineHeight),L!=null&&q.scrollCursorIntoView(null,.5),q.animateScrolling(I)},C.prototype.selectPageDown=function(){this.$moveByPage(1,!0)},C.prototype.selectPageUp=function(){this.$moveByPage(-1,!0)},C.prototype.gotoPageDown=function(){this.$moveByPage(1,!1)},C.prototype.gotoPageUp=function(){this.$moveByPage(-1,!1)},C.prototype.scrollPageDown=function(){this.$moveByPage(1)},C.prototype.scrollPageUp=function(){this.$moveByPage(-1)},C.prototype.scrollToRow=function(x){this.renderer.scrollToRow(x)},C.prototype.scrollToLine=function(x,L,q,N){this.renderer.scrollToLine(x,L,q,N)},C.prototype.centerSelection=function(){var x=this.getSelectionRange(),L={row:Math.floor(x.start.row+(x.end.row-x.start.row)/2),column:Math.floor(x.start.column+(x.end.column-x.start.column)/2)};this.renderer.alignCursor(L,.5)},C.prototype.getCursorPosition=function(){return this.selection.getCursor()},C.prototype.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},C.prototype.getSelectionRange=function(){return this.selection.getRange()},C.prototype.selectAll=function(){this.selection.selectAll()},C.prototype.clearSelection=function(){this.selection.clearSelection()},C.prototype.moveCursorTo=function(x,L){this.selection.moveCursorTo(x,L)},C.prototype.moveCursorToPosition=function(x){this.selection.moveCursorToPosition(x)},C.prototype.jumpToMatching=function(x,L){var q=this.getCursorPosition(),N=new _(this.session,q.row,q.column),F=N.getCurrentToken(),I=0;F&&F.type.indexOf("tag-name")!==-1&&(F=N.stepBackward());var R=F||N.stepForward();if(!!R){var B,D=!1,P={},j=q.column-R.start,V,W={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(R.value.match(/[{}()\[\]]/g)){for(;j1?P[R.value]++:F.value==="=0;--I)this.$tryReplace(q[I],x)&&N++;return this.selection.setSelectionRange(F),N},C.prototype.$tryReplace=function(x,L){var q=this.session.getTextRange(x);return L=this.$search.replace(q,L),L!==null?(x.end=this.session.replace(x,L),x):null},C.prototype.getLastSearchOptions=function(){return this.$search.getOptions()},C.prototype.find=function(x,L,q){L||(L={}),typeof x=="string"||x instanceof RegExp?L.needle=x:typeof x=="object"&&s.mixin(L,x);var N=this.selection.getRange();L.needle==null&&(x=this.session.getTextRange(N)||this.$search.$options.needle,x||(N=this.session.getWordRange(N.start.row,N.start.column),x=this.session.getTextRange(N)),this.$search.set({needle:x})),this.$search.set(L),L.start||this.$search.set({start:N});var F=this.$search.find(this.session);if(L.preventScroll)return F;if(F)return this.revealRange(F,q),F;L.backwards?N.start=N.end:N.end=N.start,this.selection.setRange(N)},C.prototype.findNext=function(x,L){this.find({skipCurrent:!0,backwards:!1},x,L)},C.prototype.findPrevious=function(x,L){this.find(x,{skipCurrent:!0,backwards:!0},L)},C.prototype.revealRange=function(x,L){this.session.unfold(x),this.selection.setSelectionRange(x);var q=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(x.start,x.end,.5),L!==!1&&this.renderer.animateScrolling(q)},C.prototype.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},C.prototype.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},C.prototype.destroy=function(){this.$toDestroy&&(this.$toDestroy.forEach(function(x){x.destroy()}),this.$toDestroy=null),this.$mouseHandler&&this.$mouseHandler.destroy(),this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy(),this._$emitInputEvent&&this._$emitInputEvent.cancel(),this.removeAllListeners()},C.prototype.setAutoScrollEditorIntoView=function(x){if(!!x){var L,q=this,N=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var F=this.$scrollAnchor;F.style.cssText="position:absolute",this.container.insertBefore(F,this.container.firstChild);var I=this.on("changeSelection",function(){N=!0}),R=this.renderer.on("beforeRender",function(){N&&(L=q.renderer.container.getBoundingClientRect())}),B=this.renderer.on("afterRender",function(){if(N&&L&&(q.isFocused()||q.searchBox&&q.searchBox.isFocused())){var D=q.renderer,P=D.$cursorLayer.$pixelPos,j=D.layerConfig,V=P.top-j.offset;P.top>=0&&V+L.top<0?N=!0:P.topwindow.innerHeight?N=!1:N=null,N!=null&&(F.style.top=V+"px",F.style.left=P.left+"px",F.style.height=j.lineHeight+"px",F.scrollIntoView(N)),N=L=null}});this.setAutoScrollEditorIntoView=function(D){D||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",I),this.renderer.off("afterRender",B),this.renderer.off("beforeRender",R))}}},C.prototype.$resetCursorStyle=function(){var x=this.$cursorStyle||"ace",L=this.renderer.$cursorLayer;!L||(L.setSmoothBlinking(/smooth/.test(x)),L.isBlinking=!this.$readOnly&&x!="wide",c.setCssClass(L.element,"ace_slim-cursors",/slim/.test(x)))},C.prototype.prompt=function(x,L,q){var N=this;y.loadModule("ace/ext/prompt",function(F){F.prompt(N,x,L,q)})},C}();T.$uid=0,T.prototype.curOp=null,T.prototype.prevOp={},T.prototype.$mergeableCommands=["backspace","del","insertstring"],T.prototype.$toggleWordPairs=[["first","last"],["true","false"],["yes","no"],["width","height"],["top","bottom"],["right","left"],["on","off"],["x","y"],["get","set"],["max","min"],["horizontal","vertical"],["show","hide"],["add","remove"],["up","down"],["before","after"],["even","odd"],["in","out"],["inside","outside"],["next","previous"],["increase","decrease"],["attach","detach"],["&&","||"],["==","!="]],s.implement(T.prototype,$),y.defineOptions(T.prototype,"editor",{selectionStyle:{set:function(C){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:C})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(C){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(C){var x=this;this.textInput.setReadOnly(C),this.$resetCursorStyle(),this.$readOnlyCallback||(this.$readOnlyCallback=function(q){var N=!1;if(q&&q.type=="keydown"){if(N=q&&q.key&&q.key.length==1&&!q.ctrlKey&&!q.metaKey,!N)return}else q&&q.type!=="exec"&&(N=!0);if(N){x.hoverTooltip||(x.hoverTooltip=new A);var F=c.createElement("div");F.textContent=S("editor.tooltip.disable-editing","Editing is disabled"),x.hoverTooltip.isOpen||x.hoverTooltip.showForRange(x,x.getSelectionRange(),F)}else x.hoverTooltip&&x.hoverTooltip.isOpen&&x.hoverTooltip.hide()});var L=this.textInput.getElement();C?(k.addListener(L,"keydown",this.$readOnlyCallback,this),this.commands.on("exec",this.$readOnlyCallback),this.commands.on("commandUnavailable",this.$readOnlyCallback)):(k.removeListener(L,"keydown",this.$readOnlyCallback),this.commands.off("exec",this.$readOnlyCallback),this.commands.off("commandUnavailable",this.$readOnlyCallback),this.hoverTooltip&&(this.hoverTooltip.destroy(),this.hoverTooltip=null))},initialValue:!1},copyWithEmptySelection:{set:function(C){this.textInput.setCopyWithEmptySelection(C)},initialValue:!1},cursorStyle:{set:function(C){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},enableAutoIndent:{initialValue:!0},autoScrollEditorIntoView:{set:function(C){this.setAutoScrollEditorIntoView(C)}},keyboardHandler:{set:function(C){this.setKeyboardHandler(C)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(C){this.session.setValue(C)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(C){this.setSession(C)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(C){this.renderer.$gutterLayer.setShowLineNumbers(C),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),C&&this.$relativeLineNumbers?E.attach(this):E.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(C){this.$showLineNumbers&&C?E.attach(this):E.detach(this)}},placeholder:{set:function(C){this.$updatePlaceholder||(this.$updatePlaceholder=function(){var x=this.session&&(this.renderer.$composition||this.session.getLength()>1||this.session.getLine(0).length>0);if(x&&this.renderer.placeholderNode)this.renderer.off("afterRender",this.$updatePlaceholder),c.removeCssClass(this.container,"ace_hasPlaceholder"),this.renderer.placeholderNode.remove(),this.renderer.placeholderNode=null;else if(!x&&!this.renderer.placeholderNode){this.renderer.on("afterRender",this.$updatePlaceholder),c.addCssClass(this.container,"ace_hasPlaceholder");var L=c.createElement("div");L.className="ace_placeholder",L.textContent=this.$placeholder||"",this.renderer.placeholderNode=L,this.renderer.content.appendChild(this.renderer.placeholderNode)}else!x&&this.renderer.placeholderNode&&(this.renderer.placeholderNode.textContent=this.$placeholder||"")}.bind(this),this.on("input",this.$updatePlaceholder)),this.$updatePlaceholder()}},enableKeyboardAccessibility:{set:function(C){var x={name:"blurTextInput",description:"Set focus to the editor content div to allow tabbing through the page",bindKey:"Esc",exec:function(N){N.blur(),N.renderer.scroller.focus()},readOnly:!0},L=function(N){if(N.target==this.renderer.scroller&&N.keyCode===O.enter){N.preventDefault();var F=this.getCursorPosition().row;this.isRowVisible(F)||this.scrollToLine(F,!0,!0),this.focus()}},q;C?(this.renderer.enableKeyboardAccessibility=!0,this.renderer.keyboardFocusClassName="ace_keyboard-focus",this.textInput.getElement().setAttribute("tabindex",-1),this.textInput.setNumberOfExtraLines(f.isWin?3:0),this.renderer.scroller.setAttribute("tabindex",0),this.renderer.scroller.setAttribute("role","group"),this.renderer.scroller.setAttribute("aria-roledescription",S("editor.scroller.aria-roledescription","editor")),this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName),this.renderer.scroller.setAttribute("aria-label",S("editor.scroller.aria-label","Editor content, press Enter to start editing, press Escape to exit")),this.renderer.scroller.addEventListener("keyup",L.bind(this)),this.commands.addCommand(x),this.renderer.$gutter.setAttribute("tabindex",0),this.renderer.$gutter.setAttribute("aria-hidden",!1),this.renderer.$gutter.setAttribute("role","group"),this.renderer.$gutter.setAttribute("aria-roledescription",S("editor.gutter.aria-roledescription","editor gutter")),this.renderer.$gutter.setAttribute("aria-label",S("editor.gutter.aria-label","Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit")),this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName),this.renderer.content.setAttribute("aria-hidden",!0),q||(q=new b(this)),q.addListener(),this.textInput.setAriaOptions({setLabel:!0})):(this.renderer.enableKeyboardAccessibility=!1,this.textInput.getElement().setAttribute("tabindex",0),this.textInput.setNumberOfExtraLines(0),this.renderer.scroller.setAttribute("tabindex",-1),this.renderer.scroller.removeAttribute("role"),this.renderer.scroller.removeAttribute("aria-roledescription"),this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName),this.renderer.scroller.removeAttribute("aria-label"),this.renderer.scroller.removeEventListener("keyup",L.bind(this)),this.commands.removeCommand(x),this.renderer.content.removeAttribute("aria-hidden"),this.renderer.$gutter.setAttribute("tabindex",-1),this.renderer.$gutter.setAttribute("aria-hidden",!0),this.renderer.$gutter.removeAttribute("role"),this.renderer.$gutter.removeAttribute("aria-roledescription"),this.renderer.$gutter.removeAttribute("aria-label"),this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName),q&&q.removeListener())},initialValue:!1},textInputAriaLabel:{set:function(C){this.$textInputAriaLabel=C},initialValue:""},enableMobileMenu:{set:function(C){this.$enableMobileMenu=C},initialValue:!0},customScrollbar:"renderer",hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",displayIndentGuides:"renderer",highlightIndentGuides:"renderer",showGutter:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",hasCssTransforms:"renderer",maxPixelHeight:"renderer",useTextareaForIME:"renderer",useResizeObserver:"renderer",useSvgGutterIcons:"renderer",showFoldedAnnotations:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimeout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",navigateWithinSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"});var E={getText:function(C,x){return(Math.abs(C.selection.lead.row-x)||x+1+(x<9?"\xB7":""))+""},getWidth:function(C,x,L){return Math.max(x.toString().length,(L.lastRow+1).toString().length,2)*L.characterWidth},update:function(C,x){x.renderer.$loop.schedule(x.renderer.CHANGE_GUTTER)},attach:function(C){C.renderer.$gutterLayer.$renderer=this,C.on("changeSelection",this.update),this.update(null,C)},detach:function(C){C.renderer.$gutterLayer.$renderer==this&&(C.renderer.$gutterLayer.$renderer=null),C.off("changeSelection",this.update),this.update(null,C)}};p.Editor=T}),ace.define("ace/layer/lines",["require","exports","module","ace/lib/dom"],function(e,p,m){var g=e("../lib/dom"),s=function(){function c(i,f){this.element=i,this.canvasHeight=f||5e5,this.element.style.height=this.canvasHeight*2+"px",this.cells=[],this.cellCache=[],this.$offsetCoefficient=0}return c.prototype.moveContainer=function(i){g.translate(this.element,0,-(i.firstRowScreen*i.lineHeight%this.canvasHeight)-i.offset*this.$offsetCoefficient)},c.prototype.pageChanged=function(i,f){return Math.floor(i.firstRowScreen*i.lineHeight/this.canvasHeight)!==Math.floor(f.firstRowScreen*f.lineHeight/this.canvasHeight)},c.prototype.computeLineTop=function(i,f,n){var o=f.firstRowScreen*f.lineHeight,r=Math.floor(o/this.canvasHeight),l=n.documentToScreenRow(i,0)*f.lineHeight;return l-r*this.canvasHeight},c.prototype.computeLineHeight=function(i,f,n){return f.lineHeight*n.getRowLineCount(i)},c.prototype.getLength=function(){return this.cells.length},c.prototype.get=function(i){return this.cells[i]},c.prototype.shift=function(){this.$cacheCell(this.cells.shift())},c.prototype.pop=function(){this.$cacheCell(this.cells.pop())},c.prototype.push=function(i){if(Array.isArray(i)){this.cells.push.apply(this.cells,i);for(var f=g.createFragment(this.element),n=0;nw&&(b=v.end.row+1,v=u.getNextFoldLine(b,v),w=v?v.start.row:1/0),b>$){for(;this.$lines.getLength()>_+1;)this.$lines.pop();break}y=this.$lines.get(++_),y?y.row=b:(y=this.$lines.createCell(b,a,this.session,r),this.$lines.push(y)),this.$renderCell(y,a,v,b),b++}this._signal("afterRender"),this.$updateGutterWidth(a)},l.prototype.$updateGutterWidth=function(a){var u=this.session,h=u.gutterRenderer||this.$renderer,$=u.$firstLineNumber,v=this.$lines.last()?this.$lines.last().text:"";(this.$fixedWidth||u.$useWrapMode)&&(v=u.getLength()+$-1);var w=h?h.getWidth(u,v,a):v.toString().length*a.characterWidth,y=this.$padding||this.$computePadding();w+=y.left+y.right,w!==this.gutterWidth&&!isNaN(w)&&(this.gutterWidth=w,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._signal("changeGutterWidth",w))},l.prototype.$updateCursorRow=function(){if(!!this.$highlightGutterLine){var a=this.session.selection.getCursor();this.$cursorRow!==a.row&&(this.$cursorRow=a.row)}},l.prototype.updateLineHighlight=function(){if(!!this.$highlightGutterLine){var a=this.session.selection.cursor.row;if(this.$cursorRow=a,!(this.$cursorCell&&this.$cursorCell.row==a)){this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ",""));var u=this.$lines.cells;this.$cursorCell=null;for(var h=0;h=this.$cursorRow){if($.row>this.$cursorRow){var v=this.session.getFoldLine(this.$cursorRow);if(h>0&&v&&v.start.row==u[h-1].row)$=u[h-1];else break}$.element.className="ace_gutter-active-line "+$.element.className,this.$cursorCell=$;break}}}}},l.prototype.scrollLines=function(a){var u=this.config;if(this.config=a,this.$updateCursorRow(),this.$lines.pageChanged(u,a))return this.update(a);this.$lines.moveContainer(a);var h=Math.min(a.lastRow+a.gutterOffset,this.session.getLength()-1),$=this.oldLastRow;if(this.oldLastRow=h,!u||$0;v--)this.$lines.shift();if($>h)for(var v=this.session.getFoldedRowCount(h+1,$);v>0;v--)this.$lines.pop();a.firstRow$&&this.$lines.push(this.$renderLines(a,$+1,h)),this.updateLineHighlight(),this._signal("afterRender"),this.$updateGutterWidth(a)},l.prototype.$renderLines=function(a,u,h){for(var $=[],v=u,w=this.session.getNextFoldLine(v),y=w?w.start.row:1/0;v>y&&(v=w.end.row+1,w=this.session.getNextFoldLine(v,w),y=w?w.start.row:1/0),!(v>h);){var _=this.$lines.createCell(v,a,this.session,r);this.$renderCell(_,a,w,v),$.push(_),v++}return $},l.prototype.$renderCell=function(a,u,h,$){var v=a.element,w=this.session,y=v.childNodes[0],_=v.childNodes[1],b=v.childNodes[2],S=v.childNodes[3],M=b.firstChild,O=w.$firstLineNumber,k=w.$breakpoints,A=w.$decorations,T=w.gutterRenderer||this.$renderer,E=this.$showFoldWidgets&&w.foldWidgets,C=h?h.start.row:Number.MAX_VALUE,x=u.lineHeight+"px",L=this.$useSvgGutterIcons?"ace_gutter-cell_svg-icons ":"ace_gutter-cell ",q=this.$useSvgGutterIcons?"ace_icon_svg":"ace_icon",N=(T?T.getText(w,$):$+O).toString();if(this.$highlightGutterLine&&($==this.$cursorRow||h&&$=C&&this.$cursorRow<=h.end.row)&&(L+="ace_gutter-active-line ",this.$cursorCell!=a&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ","")),this.$cursorCell=a)),k[$]&&(L+=k[$]),A[$]&&(L+=A[$]),this.$annotations[$]&&$!==C&&(L+=this.$annotations[$].className),E){var F=E[$];F==null&&(F=E[$]=w.getFoldWidget($))}if(F){var I="ace_fold-widget ace_"+F,R=F=="start"&&$==C&&$h.right-u.right)return"foldWidgets"},l}();o.prototype.$fixedWidth=!1,o.prototype.$highlightGutterLine=!0,o.prototype.$renderer="",o.prototype.$showLineNumbers=!0,o.prototype.$showFoldWidgets=!0,s.implement(o.prototype,i);function r(l){var a=document.createTextNode("");l.appendChild(a);var u=g.createElement("span");l.appendChild(u);var h=g.createElement("span");l.appendChild(h);var $=g.createElement("span");return h.appendChild($),l}p.Gutter=o}),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,p,m){var g=e("../range").Range,s=e("../lib/dom"),c=function(){function f(n){this.element=s.createElement("div"),this.element.className="ace_layer ace_marker-layer",n.appendChild(this.element)}return f.prototype.setPadding=function(n){this.$padding=n},f.prototype.setSession=function(n){this.session=n},f.prototype.setMarkers=function(n){this.markers=n},f.prototype.elt=function(n,o){var r=this.i!=-1&&this.element.childNodes[this.i];r?this.i++:(r=document.createElement("div"),this.element.appendChild(r),this.i=-1),r.style.cssText=o,r.className=n},f.prototype.update=function(n){if(!!n){this.config=n,this.i=0;var o;for(var r in this.markers){var l=this.markers[r];if(!l.range){l.update(o,this,this.session,n);continue}var a=l.range.clipRows(n.firstRow,n.lastRow);if(!a.isEmpty())if(a=a.toScreenRange(this.session),l.renderer){var u=this.$getTop(a.start.row,n),h=this.$padding+a.start.column*n.characterWidth;l.renderer(o,a,h,u,n)}else l.type=="fullLine"?this.drawFullLineMarker(o,a,l.clazz,n):l.type=="screenLine"?this.drawScreenLineMarker(o,a,l.clazz,n):a.isMultiLine()?l.type=="text"?this.drawTextMarker(o,a,l.clazz,n):this.drawMultiLineMarker(o,a,l.clazz,n):this.drawSingleLineMarker(o,a,l.clazz+" ace_start ace_br15",n)}if(this.i!=-1)for(;this.i_,v==$),l,v==$?0:1,a)},f.prototype.drawMultiLineMarker=function(n,o,r,l,a){var u=this.$padding,h=l.lineHeight,$=this.$getTop(o.start.row,l),v=u+o.start.column*l.characterWidth;if(a=a||"",this.session.$bidiHandler.isBidiRow(o.start.row)){var w=o.clone();w.end.row=w.start.row,w.end.column=this.session.getLine(w.start.row).length,this.drawBidiSingleLineMarker(n,w,r+" ace_br1 ace_start",l,null,a)}else this.elt(r+" ace_br1 ace_start","height:"+h+"px;right:"+u+"px;top:"+$+"px;left:"+v+"px;"+(a||""));if(this.session.$bidiHandler.isBidiRow(o.end.row)){var w=o.clone();w.start.row=w.end.row,w.start.column=0,this.drawBidiSingleLineMarker(n,w,r+" ace_br12",l,null,a)}else{$=this.$getTop(o.end.row,l);var y=o.end.column*l.characterWidth;this.elt(r+" ace_br12","height:"+h+"px;width:"+y+"px;top:"+$+"px;left:"+u+"px;"+(a||""))}if(h=(o.end.row-o.start.row-1)*l.lineHeight,!(h<=0)){$=this.$getTop(o.start.row+1,l);var _=(o.start.column?1:0)|(o.end.column?0:8);this.elt(r+(_?" ace_br"+_:""),"height:"+h+"px;right:"+u+"px;top:"+$+"px;left:"+u+"px;"+(a||""))}},f.prototype.drawSingleLineMarker=function(n,o,r,l,a,u){if(this.session.$bidiHandler.isBidiRow(o.start.row))return this.drawBidiSingleLineMarker(n,o,r,l,a,u);var h=l.lineHeight,$=(o.end.column+(a||0)-o.start.column)*l.characterWidth,v=this.$getTop(o.start.row,l),w=this.$padding+o.start.column*l.characterWidth;this.elt(r,"height:"+h+"px;width:"+$+"px;top:"+v+"px;left:"+w+"px;"+(u||""))},f.prototype.drawBidiSingleLineMarker=function(n,o,r,l,a,u){var h=l.lineHeight,$=this.$getTop(o.start.row,l),v=this.$padding,w=this.session.$bidiHandler.getSelections(o.start.column,o.end.column);w.forEach(function(y){this.elt(r,"height:"+h+"px;width:"+(y.width+(a||0))+"px;top:"+$+"px;left:"+(v+y.left)+"px;"+(u||""))},this)},f.prototype.drawFullLineMarker=function(n,o,r,l,a){var u=this.$getTop(o.start.row,l),h=l.lineHeight;o.start.row!=o.end.row&&(h+=this.$getTop(o.end.row,l)-u),this.elt(r,"height:"+h+"px;top:"+u+"px;left:0;right:0;"+(a||""))},f.prototype.drawScreenLineMarker=function(n,o,r,l,a){var u=this.$getTop(o.start.row,l),h=l.lineHeight;this.elt(r,"height:"+h+"px;top:"+u+"px;left:0;right:0;"+(a||""))},f}();c.prototype.$padding=0;function i(f,n,o,r){return(f?1:0)|(n?2:0)|(o?4:0)|(r?8:0)}p.Marker=c}),ace.define("ace/layer/text_util",["require","exports","module"],function(e,p,m){var g=new Set(["text","rparen","lparen"]);p.isTextToken=function(s){return g.has(s)}}),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter","ace/config","ace/layer/text_util"],function(e,p,m){var g=e("../lib/oop"),s=e("../lib/dom"),c=e("../lib/lang"),i=e("./lines").Lines,f=e("../lib/event_emitter").EventEmitter,n=e("../config").nls,o=e("./text_util").isTextToken,r=function(){function l(a){this.dom=s,this.element=this.dom.createElement("div"),this.element.className="ace_layer ace_text-layer",a.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new i(this.element)}return l.prototype.$updateEolChar=function(){var a=this.session.doc,u=a.getNewLineCharacter()==` +`&&a.getNewLineMode()!="windows",h=u?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=h)return this.EOL_CHAR=h,!0},l.prototype.setPadding=function(a){this.$padding=a,this.element.style.margin="0 "+a+"px"},l.prototype.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},l.prototype.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},l.prototype.$setFontMetrics=function(a){this.$fontMetrics=a,this.$fontMetrics.on("changeCharacterSize",function(u){this._signal("changeCharacterSize",u)}.bind(this)),this.$pollSizeChanges()},l.prototype.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},l.prototype.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},l.prototype.setSession=function(a){this.session=a,a&&this.$computeTabString()},l.prototype.setShowInvisibles=function(a){return this.showInvisibles==a?!1:(this.showInvisibles=a,typeof a=="string"?(this.showSpaces=/tab/i.test(a),this.showTabs=/space/i.test(a),this.showEOL=/eol/i.test(a)):this.showSpaces=this.showTabs=this.showEOL=a,this.$computeTabString(),!0)},l.prototype.setDisplayIndentGuides=function(a){return this.displayIndentGuides==a?!1:(this.displayIndentGuides=a,this.$computeTabString(),!0)},l.prototype.setHighlightIndentGuides=function(a){return this.$highlightIndentGuides===a?!1:(this.$highlightIndentGuides=a,a)},l.prototype.$computeTabString=function(){var a=this.session.getTabSize();this.tabSize=a;for(var u=this.$tabStrings=[0],h=1;hM&&(b=S.end.row+1,S=this.session.getNextFoldLine(b,S),M=S?S.start.row:1/0),!(b>v);){var O=w[y++];if(O){this.dom.removeChildren(O),this.$renderLine(O,b,b==M?S:!1),_&&(O.style.top=this.$lines.computeLineTop(b,a,this.session)+"px");var k=a.lineHeight*this.session.getRowLength(b)+"px";O.style.height!=k&&(_=!0,O.style.height=k)}b++}if(_)for(;y0;v--)this.$lines.shift();if(u.lastRow>a.lastRow)for(var v=this.session.getFoldedRowCount(a.lastRow+1,u.lastRow);v>0;v--)this.$lines.pop();a.firstRowu.lastRow&&this.$lines.push(this.$renderLinesFragment(a,u.lastRow+1,a.lastRow)),this.$highlightIndentGuide()},l.prototype.$renderLinesFragment=function(a,u,h){for(var $=[],v=u,w=this.session.getNextFoldLine(v),y=w?w.start.row:1/0;v>y&&(v=w.end.row+1,w=this.session.getNextFoldLine(v,w),y=w?w.start.row:1/0),!(v>h);){var _=this.$lines.createCell(v,a,this.session),b=_.element;this.dom.removeChildren(b),s.setStyle(b.style,"height",this.$lines.computeLineHeight(v,a,this.session)+"px"),s.setStyle(b.style,"top",this.$lines.computeLineTop(v,a,this.session)+"px"),this.$renderLine(b,v,v==y?w:!1),this.$useLineGroups()?b.className="ace_line_group":b.className="ace_line",$.push(_),v++}return $},l.prototype.update=function(a){this.$lines.moveContainer(a),this.config=a;for(var u=a.firstRow,h=a.lastRow,$=this.$lines;$.getLength();)$.pop();$.push(this.$renderLinesFragment(a,u,h))},l.prototype.$renderToken=function(a,u,h,$){for(var v=this,w=/(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC\u2066\u2067\u2068\u202A\u202B\u202D\u202E\u202C\u2069\u2060\u2061\u2062\u2063\u2064\u206A\u206B\u206B\u206C\u206D\u206E\u206F]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g,y=this.dom.createFragment(this.element),_,b=0;_=w.exec($);){var S=_[1],M=_[2],O=_[3],k=_[4],A=_[5];if(!(!v.showSpaces&&M)){var T=b!=_.index?$.slice(b,_.index):"";if(b=_.index+_[0].length,T&&y.appendChild(this.dom.createTextNode(T,this.element)),S){var E=v.session.getScreenTabSize(u+_.index);y.appendChild(v.$tabStrings[E].cloneNode(!0)),u+=E-1}else if(M)if(v.showSpaces){var C=this.dom.createElement("span");C.className="ace_invisible ace_invisible_space",C.textContent=c.stringRepeat(v.SPACE_CHAR,M.length),y.appendChild(C)}else y.appendChild(this.dom.createTextNode(M,this.element));else if(O){var C=this.dom.createElement("span");C.className="ace_invisible ace_invisible_space ace_invalid",C.textContent=c.stringRepeat(v.SPACE_CHAR,O.length),y.appendChild(C)}else if(k){u+=1;var C=this.dom.createElement("span");C.style.width=v.config.characterWidth*2+"px",C.className=v.showSpaces?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",C.textContent=v.showSpaces?v.SPACE_CHAR:k,y.appendChild(C)}else if(A){u+=1;var C=this.dom.createElement("span");C.style.width=v.config.characterWidth*2+"px",C.className="ace_cjk",C.textContent=A,y.appendChild(C)}}}if(y.appendChild(this.dom.createTextNode(b?$.slice(b):$,this.element)),o(h.type))a.appendChild(y);else{var x="ace_"+h.type.replace(/\./g," ace_"),C=this.dom.createElement("span");h.type=="fold"&&(C.style.width=h.value.length*this.config.characterWidth+"px",C.setAttribute("title",n("inline-fold.closed.title","Unfold code"))),C.className=x,C.appendChild(y),a.appendChild(C)}return u+$.length},l.prototype.renderIndentGuide=function(a,u,h){var $=u.search(this.$indentGuideRe);if($<=0||$>=h)return u;if(u[0]==" "){$-=$%this.tabSize;for(var v=$/this.tabSize,w=0;ww[y].start.row?this.$highlightIndentGuideMarker.dir=-1:this.$highlightIndentGuideMarker.dir=1;break}}if(!this.$highlightIndentGuideMarker.end&&a[u.row]!==""&&u.column===a[u.row].length){this.$highlightIndentGuideMarker.dir=1;for(var y=u.row+1;y0)$=a.element.childNodes[0];else return;var v=$.childNodes;if(v){var w=v[u-1];w&&w.classList&&w.classList.contains("ace_indent-guide")&&w.classList.add("ace_indent-guide-active")}}},l.prototype.$renderHighlightIndentGuide=function(){if(!!this.$lines){var a=this.$lines.cells;this.$clearActiveIndentGuide();var u=this.$highlightIndentGuideMarker.indentLevel;if(u!==0)if(this.$highlightIndentGuideMarker.dir===1)for(var h=0;h=this.$highlightIndentGuideMarker.start+1){if($.row>=this.$highlightIndentGuideMarker.end)break;this.$setIndentGuideActive($,u)}}else for(var h=a.length-1;h>=0;h--){var $=a[h];if(this.$highlightIndentGuideMarker.end&&$.row=w;)y=this.$renderToken(_,y,S,M.substring(0,w-$)),M=M.substring(w-$),$=w,_=this.$createLineElement(),a.appendChild(_),_.appendChild(this.dom.createTextNode(c.stringRepeat("\xA0",h.indent),this.element)),v++,y=0,w=h[v]||Number.MAX_VALUE;M.length!=0&&($+=M.length,y=this.$renderToken(_,y,S,M))}}h[h.length-1]>this.MAX_LINE_LENGTH&&this.$renderOverflowMessage(_,y,null,"",!0)},l.prototype.$renderSimpleLine=function(a,u){for(var h=0,$=0;$this.MAX_LINE_LENGTH)return this.$renderOverflowMessage(a,h,v,w);h=this.$renderToken(a,h,v,w)}}},l.prototype.$renderOverflowMessage=function(a,u,h,$,v){h&&this.$renderToken(a,u,h,$.slice(0,this.MAX_LINE_LENGTH-u));var w=this.dom.createElement("span");w.className="ace_inline_button ace_keyword ace_toggle_wrap",w.textContent=v?"":"",a.appendChild(w)},l.prototype.$renderLine=function(a,u,h){if(!h&&h!=!1&&(h=this.session.getFoldLine(u)),h)var $=this.$getFoldLineTokens(u,h);else var $=this.session.getTokens(u);var v=a;if($.length){var w=this.session.getRowSplitData(u);if(w&&w.length){this.$renderWrappedLine(a,$,w);var v=a.lastChild}else{var v=a;this.$useLineGroups()&&(v=this.$createLineElement(),a.appendChild(v)),this.$renderSimpleLine(v,$)}}else this.$useLineGroups()&&(v=this.$createLineElement(),a.appendChild(v));if(this.showEOL&&v){h&&(u=h.end.row);var y=this.dom.createElement("span");y.className="ace_invisible ace_invisible_eol",y.textContent=u==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,v.appendChild(y)}},l.prototype.$getFoldLineTokens=function(a,u){var h=this.session,$=[];function v(y,_,b){for(var S=0,M=0;M+y[S].value.length<_;)if(M+=y[S].value.length,S++,S==y.length)return;if(M!=_){var O=y[S].value.substring(_-M);O.length>b-_&&(O=O.substring(0,b-_)),$.push({type:y[S].type,value:O}),M=_+O.length,S+=1}for(;Mb?$.push({type:y[S].type,value:O.substring(0,b-M)}):$.push(y[S]),M+=O.length,S+=1}}var w=h.getTokens(a);return u.walk(function(y,_,b,S,M){y!=null?$.push({type:"fold",value:y}):(M&&(w=h.getTokens(_)),w.length&&v(w,S,b))},u.end.row,this.session.getLine(u.end.row).length),$},l.prototype.$useLineGroups=function(){return this.session.getUseWrapMode()},l}();r.prototype.EOF_CHAR="\xB6",r.prototype.EOL_CHAR_LF="\xAC",r.prototype.EOL_CHAR_CRLF="\xA4",r.prototype.EOL_CHAR=r.prototype.EOL_CHAR_LF,r.prototype.TAB_CHAR="\u2014",r.prototype.SPACE_CHAR="\xB7",r.prototype.$padding=0,r.prototype.MAX_LINE_LENGTH=1e4,r.prototype.showInvisibles=!1,r.prototype.showSpaces=!1,r.prototype.showTabs=!1,r.prototype.showEOL=!1,r.prototype.displayIndentGuides=!0,r.prototype.$highlightIndentGuides=!0,r.prototype.$tabStrings=[],r.prototype.destroy={},r.prototype.onChangeTabSize=r.prototype.$computeTabString,g.implement(r.prototype,f),p.Text=r}),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,p,m){var g=e("../lib/dom"),s=function(){function c(i){this.element=g.createElement("div"),this.element.className="ace_layer ace_cursor-layer",i.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),g.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateOpacity.bind(this)}return c.prototype.$updateOpacity=function(i){for(var f=this.cursors,n=f.length;n--;)g.setStyle(f[n].style,"opacity",i?"":"0")},c.prototype.$startCssAnimation=function(){for(var i=this.cursors,f=i.length;f--;)i[f].style.animationDuration=this.blinkInterval+"ms";this.$isAnimating=!0,setTimeout(function(){this.$isAnimating&&g.addCssClass(this.element,"ace_animate-blinking")}.bind(this))},c.prototype.$stopCssAnimation=function(){this.$isAnimating=!1,g.removeCssClass(this.element,"ace_animate-blinking")},c.prototype.setPadding=function(i){this.$padding=i},c.prototype.setSession=function(i){this.session=i},c.prototype.setBlinking=function(i){i!=this.isBlinking&&(this.isBlinking=i,this.restartTimer())},c.prototype.setBlinkInterval=function(i){i!=this.blinkInterval&&(this.blinkInterval=i,this.restartTimer())},c.prototype.setSmoothBlinking=function(i){i!=this.smoothBlinking&&(this.smoothBlinking=i,g.setCssClass(this.element,"ace_smooth-blinking",i),this.$updateCursors(!0),this.restartTimer())},c.prototype.addCursor=function(){var i=g.createElement("div");return i.className="ace_cursor",this.element.appendChild(i),this.cursors.push(i),i},c.prototype.removeCursor=function(){if(this.cursors.length>1){var i=this.cursors.pop();return i.parentNode.removeChild(i),i}},c.prototype.hideCursor=function(){this.isVisible=!1,g.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},c.prototype.showCursor=function(){this.isVisible=!0,g.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},c.prototype.restartTimer=function(){var i=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&(this.$isSmoothBlinking=!1,g.removeCssClass(this.element,"ace_smooth-blinking")),i(!0),!this.isBlinking||!this.blinkInterval||!this.isVisible){this.$stopCssAnimation();return}if(this.smoothBlinking&&(this.$isSmoothBlinking=!0,setTimeout(function(){this.$isSmoothBlinking&&g.addCssClass(this.element,"ace_smooth-blinking")}.bind(this))),g.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var f=function(){this.timeoutId=setTimeout(function(){i(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){i(!0),f()},this.blinkInterval),f()}},c.prototype.getPixelPosition=function(i,f){if(!this.config||!this.session)return{left:0,top:0};i||(i=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(i),o=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,i.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),r=(n.row-(f?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:o,top:r}},c.prototype.isCursorInView=function(i,f){return i.top>=0&&i.topi.height+i.offset||l.top<0)&&n>1)){var a=this.cursors[o++]||this.addCursor(),u=a.style;this.drawCursor?this.drawCursor(a,l,i,f[n],this.session):this.isCursorInView(l,i)?(g.setStyle(u,"display","block"),g.translate(a,l.left,l.top),g.setStyle(u,"width",Math.round(i.characterWidth)+"px"),g.setStyle(u,"height",i.lineHeight+"px")):g.setStyle(u,"display","none")}}for(;this.cursors.length>o;)this.removeCursor();var h=this.session.getOverwrite();this.$setOverwrite(h),this.$pixelPos=l,this.restartTimer()},c.prototype.$setOverwrite=function(i){i!=this.overwrite&&(this.overwrite=i,i?g.addCssClass(this.element,"ace_overwrite-cursors"):g.removeCssClass(this.element,"ace_overwrite-cursors"))},c.prototype.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)},c}();s.prototype.$padding=0,s.prototype.drawCursor=null,p.Cursor=s}),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,p,m){var g=this&&this.__extends||function(){var a=function(u,h){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function($,v){$.__proto__=v}||function($,v){for(var w in v)Object.prototype.hasOwnProperty.call(v,w)&&($[w]=v[w])},a(u,h)};return function(u,h){if(typeof h!="function"&&h!==null)throw new TypeError("Class extends value "+String(h)+" is not a constructor or null");a(u,h);function $(){this.constructor=u}u.prototype=h===null?Object.create(h):($.prototype=h.prototype,new $)}}(),s=e("./lib/oop"),c=e("./lib/dom"),i=e("./lib/event"),f=e("./lib/event_emitter").EventEmitter,n=32768,o=function(){function a(u,h){this.element=c.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+h,this.inner=c.createElement("div"),this.inner.className="ace_scrollbar-inner",this.inner.textContent="\xA0",this.element.appendChild(this.inner),u.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,i.addListener(this.element,"scroll",this.onScroll.bind(this)),i.addListener(this.element,"mousedown",i.preventDefault)}return a.prototype.setVisible=function(u){this.element.style.display=u?"":"none",this.isVisible=u,this.coeff=1},a}();s.implement(o.prototype,f);var r=function(a){g(u,a);function u(h,$){var v=a.call(this,h,"-v")||this;return v.scrollTop=0,v.scrollHeight=0,$.$scrollbarWidth=v.width=c.scrollbarWidth(h.ownerDocument),v.inner.style.width=v.element.style.width=(v.width||15)+5+"px",v.$minWidth=0,v}return u.prototype.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,this.coeff!=1){var h=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-h)/(this.coeff-h)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},u.prototype.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},u.prototype.setHeight=function(h){this.element.style.height=h+"px"},u.prototype.setScrollHeight=function(h){this.scrollHeight=h,h>n?(this.coeff=n/h,h=n):this.coeff!=1&&(this.coeff=1),this.inner.style.height=h+"px"},u.prototype.setScrollTop=function(h){this.scrollTop!=h&&(this.skipEvent=!0,this.scrollTop=h,this.element.scrollTop=h*this.coeff)},u}(o);r.prototype.setInnerHeight=r.prototype.setScrollHeight;var l=function(a){g(u,a);function u(h,$){var v=a.call(this,h,"-h")||this;return v.scrollLeft=0,v.height=$.$scrollbarWidth,v.inner.style.height=v.element.style.height=(v.height||15)+5+"px",v}return u.prototype.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},u.prototype.getHeight=function(){return this.isVisible?this.height:0},u.prototype.setWidth=function(h){this.element.style.width=h+"px"},u.prototype.setInnerWidth=function(h){this.inner.style.width=h+"px"},u.prototype.setScrollWidth=function(h){this.inner.style.width=h+"px"},u.prototype.setScrollLeft=function(h){this.scrollLeft!=h&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=h)},u}(o);p.ScrollBar=r,p.ScrollBarV=r,p.ScrollBarH=l,p.VScrollBar=r,p.HScrollBar=l}),ace.define("ace/scrollbar_custom",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,p,m){var g=this&&this.__extends||function(){var l=function(a,u){return l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(h,$){h.__proto__=$}||function(h,$){for(var v in $)Object.prototype.hasOwnProperty.call($,v)&&(h[v]=$[v])},l(a,u)};return function(a,u){if(typeof u!="function"&&u!==null)throw new TypeError("Class extends value "+String(u)+" is not a constructor or null");l(a,u);function h(){this.constructor=a}a.prototype=u===null?Object.create(u):(h.prototype=u.prototype,new h)}}(),s=e("./lib/oop"),c=e("./lib/dom"),i=e("./lib/event"),f=e("./lib/event_emitter").EventEmitter;c.importCssString(`.ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{ + position: absolute; + background: rgba(128, 128, 128, 0.6); + -moz-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #bbb; + border-radius: 2px; + z-index: 8; +} +.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h { + position: absolute; + z-index: 6; + background: none; + overflow: hidden!important; +} +.ace_editor>.ace_sb-v { + z-index: 6; + right: 0; + top: 0; + width: 12px; +} +.ace_editor>.ace_sb-v div { + z-index: 8; + right: 0; + width: 100%; +} +.ace_editor>.ace_sb-h { + bottom: 0; + left: 0; + height: 12px; +} +.ace_editor>.ace_sb-h div { + bottom: 0; + height: 100%; +} +.ace_editor>.ace_sb_grabbed { + z-index: 8; + background: #000; +}`,"ace_scrollbar.css",!1);var n=function(){function l(a,u){this.element=c.createElement("div"),this.element.className="ace_sb"+u,this.inner=c.createElement("div"),this.inner.className="",this.element.appendChild(this.inner),this.VScrollWidth=12,this.HScrollHeight=12,a.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,i.addMultiMouseDownListener(this.element,[500,300,300],this,"onMouseDown")}return l.prototype.setVisible=function(a){this.element.style.display=a?"":"none",this.isVisible=a,this.coeff=1},l}();s.implement(n.prototype,f);var o=function(l){g(a,l);function a(u,h){var $=l.call(this,u,"-v")||this;return $.scrollTop=0,$.scrollHeight=0,$.parent=u,$.width=$.VScrollWidth,$.renderer=h,$.inner.style.width=$.element.style.width=($.width||15)+"px",$.$minWidth=0,$}return a.prototype.onMouseDown=function(u,h){if(u==="mousedown"&&!(i.getButton(h)!==0||h.detail===2)){if(h.target===this.inner){var $=this,v=h.clientY,w=function(k){v=k.clientY},y=function(){clearInterval(M)},_=h.clientY,b=this.thumbTop,S=function(){if(v!==void 0){var k=$.scrollTopFromThumbTop(b+v-_);k!==$.scrollTop&&$._emit("scroll",{data:k})}};i.capture(this.inner,w,y);var M=setInterval(S,20);return i.preventDefault(h)}var O=h.clientY-this.element.getBoundingClientRect().top-this.thumbHeight/2;return this._emit("scroll",{data:this.scrollTopFromThumbTop(O)}),i.preventDefault(h)}},a.prototype.getHeight=function(){return this.height},a.prototype.scrollTopFromThumbTop=function(u){var h=u*(this.pageHeight-this.viewHeight)/(this.slideHeight-this.thumbHeight);return h=h>>0,h<0?h=0:h>this.pageHeight-this.viewHeight&&(h=this.pageHeight-this.viewHeight),h},a.prototype.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},a.prototype.setHeight=function(u){this.height=Math.max(0,u),this.slideHeight=this.height,this.viewHeight=this.height,this.setScrollHeight(this.pageHeight,!0)},a.prototype.setScrollHeight=function(u,h){this.pageHeight===u&&!h||(this.pageHeight=u,this.thumbHeight=this.slideHeight*this.viewHeight/this.pageHeight,this.thumbHeight>this.slideHeight&&(this.thumbHeight=this.slideHeight),this.thumbHeight<15&&(this.thumbHeight=15),this.inner.style.height=this.thumbHeight+"px",this.scrollTop>this.pageHeight-this.viewHeight&&(this.scrollTop=this.pageHeight-this.viewHeight,this.scrollTop<0&&(this.scrollTop=0),this._emit("scroll",{data:this.scrollTop})))},a.prototype.setScrollTop=function(u){this.scrollTop=u,u<0&&(u=0),this.thumbTop=u*(this.slideHeight-this.thumbHeight)/(this.pageHeight-this.viewHeight),this.inner.style.top=this.thumbTop+"px"},a}(n);o.prototype.setInnerHeight=o.prototype.setScrollHeight;var r=function(l){g(a,l);function a(u,h){var $=l.call(this,u,"-h")||this;return $.scrollLeft=0,$.scrollWidth=0,$.height=$.HScrollHeight,$.inner.style.height=$.element.style.height=($.height||12)+"px",$.renderer=h,$}return a.prototype.onMouseDown=function(u,h){if(u==="mousedown"&&!(i.getButton(h)!==0||h.detail===2)){if(h.target===this.inner){var $=this,v=h.clientX,w=function(k){v=k.clientX},y=function(){clearInterval(M)},_=h.clientX,b=this.thumbLeft,S=function(){if(v!==void 0){var k=$.scrollLeftFromThumbLeft(b+v-_);k!==$.scrollLeft&&$._emit("scroll",{data:k})}};i.capture(this.inner,w,y);var M=setInterval(S,20);return i.preventDefault(h)}var O=h.clientX-this.element.getBoundingClientRect().left-this.thumbWidth/2;return this._emit("scroll",{data:this.scrollLeftFromThumbLeft(O)}),i.preventDefault(h)}},a.prototype.getHeight=function(){return this.isVisible?this.height:0},a.prototype.scrollLeftFromThumbLeft=function(u){var h=u*(this.pageWidth-this.viewWidth)/(this.slideWidth-this.thumbWidth);return h=h>>0,h<0?h=0:h>this.pageWidth-this.viewWidth&&(h=this.pageWidth-this.viewWidth),h},a.prototype.setWidth=function(u){this.width=Math.max(0,u),this.element.style.width=this.width+"px",this.slideWidth=this.width,this.viewWidth=this.width,this.setScrollWidth(this.pageWidth,!0)},a.prototype.setScrollWidth=function(u,h){this.pageWidth===u&&!h||(this.pageWidth=u,this.thumbWidth=this.slideWidth*this.viewWidth/this.pageWidth,this.thumbWidth>this.slideWidth&&(this.thumbWidth=this.slideWidth),this.thumbWidth<15&&(this.thumbWidth=15),this.inner.style.width=this.thumbWidth+"px",this.scrollLeft>this.pageWidth-this.viewWidth&&(this.scrollLeft=this.pageWidth-this.viewWidth,this.scrollLeft<0&&(this.scrollLeft=0),this._emit("scroll",{data:this.scrollLeft})))},a.prototype.setScrollLeft=function(u){this.scrollLeft=u,u<0&&(u=0),this.thumbLeft=u*(this.slideWidth-this.thumbWidth)/(this.pageWidth-this.viewWidth),this.inner.style.left=this.thumbLeft+"px"},a}(n);r.prototype.setInnerWidth=r.prototype.setScrollWidth,p.ScrollBar=o,p.ScrollBarV=o,p.ScrollBarH=r,p.VScrollBar=o,p.HScrollBar=r}),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,p,m){var g=e("./lib/event"),s=function(){function c(i,f){this.onRender=i,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=f||window;var n=this;this._flush=function(o){n.pending=!1;var r=n.changes;if(r&&(g.blockIdle(100),n.changes=0,n.onRender(r)),n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}}return c.prototype.schedule=function(i){this.changes=this.changes|i,this.changes&&!this.pending&&(g.nextFrame(this._flush),this.pending=!0)},c.prototype.clear=function(i){var f=this.changes;return this.changes=0,f},c}();p.RenderLoop=s}),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"],function(e,p,m){var g=e("../lib/oop"),s=e("../lib/dom"),c=e("../lib/lang"),i=e("../lib/event"),f=e("../lib/useragent"),n=e("../lib/event_emitter").EventEmitter,o=512,r=typeof ResizeObserver=="function",l=200,a=function(){function u(h){this.el=s.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=s.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=s.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),h.appendChild(this.el),this.$measureNode.textContent=c.stringRepeat("X",o),this.$characterSize={width:0,height:0},r?this.$addObserver():this.checkForSizeChanges()}return u.prototype.$setMeasureNodeStyles=function(h,$){h.width=h.height="auto",h.left=h.top="0px",h.visibility="hidden",h.position="absolute",h.whiteSpace="pre",f.isIE<8?h["font-family"]="inherit":h.font="inherit",h.overflow=$?"hidden":"visible"},u.prototype.checkForSizeChanges=function(h){if(h===void 0&&(h=this.$measureSizes()),h&&(this.$characterSize.width!==h.width||this.$characterSize.height!==h.height)){this.$measureNode.style.fontWeight="bold";var $=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=h,this.charSizes=Object.create(null),this.allowBoldFonts=$&&$.width===h.width&&$.height===h.height,this._emit("changeCharacterSize",{data:h})}},u.prototype.$addObserver=function(){var h=this;this.$observer=new window.ResizeObserver(function($){h.checkForSizeChanges()}),this.$observer.observe(this.$measureNode)},u.prototype.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var h=this;return this.$pollSizeChangesTimer=i.onIdle(function $(){h.checkForSizeChanges(),i.onIdle($,500)},500)},u.prototype.setPolling=function(h){h?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},u.prototype.$measureSizes=function(h){var $={height:(h||this.$measureNode).clientHeight,width:(h||this.$measureNode).clientWidth/o};return $.width===0||$.height===0?null:$},u.prototype.$measureCharWidth=function(h){this.$main.textContent=c.stringRepeat(h,o);var $=this.$main.getBoundingClientRect();return $.width/o},u.prototype.getCharacterWidth=function(h){var $=this.charSizes[h];return $===void 0&&($=this.charSizes[h]=this.$measureCharWidth(h)/this.$characterSize.width),$},u.prototype.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},u.prototype.$getZoom=function(h){return!h||!h.parentElement?1:(Number(window.getComputedStyle(h).zoom)||1)*this.$getZoom(h.parentElement)},u.prototype.$initTransformMeasureNodes=function(){var h=function($,v){return["div",{style:"position: absolute;top:"+$+"px;left:"+v+"px;"}]};this.els=s.buildDom([h(0,0),h(l,0),h(0,l),h(l,l)],this.el)},u.prototype.transformCoordinates=function(h,$){if(h){var v=this.$getZoom(this.el);h=b(1/v,h)}function w(I,R,B){var D=I[1]*R[0]-I[0]*R[1];return[(-R[1]*B[0]+R[0]*B[1])/D,(+I[1]*B[0]-I[0]*B[1])/D]}function y(I,R){return[I[0]-R[0],I[1]-R[1]]}function _(I,R){return[I[0]+R[0],I[1]+R[1]]}function b(I,R){return[I*R[0],I*R[1]]}this.els||this.$initTransformMeasureNodes();function S(I){var R=I.getBoundingClientRect();return[R.left,R.top]}var M=S(this.els[0]),O=S(this.els[1]),k=S(this.els[2]),A=S(this.els[3]),T=w(y(A,O),y(A,k),y(_(O,k),_(A,M))),E=b(1+T[0],y(O,M)),C=b(1+T[1],y(k,M));if($){var x=$,L=T[0]*x[0]/l+T[1]*x[1]/l+1,q=_(b(x[0],E),b(x[1],C));return _(b(1/L/l,q),M)}var N=y(h,M),F=w(y(E,b(T[0],N)),y(C,b(T[1],N)),N);return b(l,F)},u}();a.prototype.$characterSize={width:0,height:0},g.implement(a.prototype,n),p.FontMetrics=a}),ace.define("ace/css/editor-css",["require","exports","module"],function(e,p,m){m.exports=` +.ace_br1 {border-top-left-radius : 3px;} +.ace_br2 {border-top-right-radius : 3px;} +.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;} +.ace_br4 {border-bottom-right-radius: 3px;} +.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;} +.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;} +.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;} +.ace_br8 {border-bottom-left-radius : 3px;} +.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;} +.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;} +.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;} +.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;} +.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;} +.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;} +.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;} + + +.ace_editor { + position: relative; + overflow: hidden; + padding: 0; + font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace; + direction: ltr; + text-align: left; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + forced-color-adjust: none; +} + +.ace_scroller { + position: absolute; + overflow: hidden; + top: 0; + bottom: 0; + background-color: inherit; + -ms-user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; + cursor: text; +} + +.ace_content { + position: absolute; + box-sizing: border-box; + min-width: 100%; + contain: style size layout; + font-variant-ligatures: no-common-ligatures; +} +.ace_invisible { + font-variant-ligatures: none; +} + +.ace_keyboard-focus:focus { + box-shadow: inset 0 0 0 2px #5E9ED6; + outline: none; +} + +.ace_dragging .ace_scroller:before{ + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + content: ''; + background: rgba(250, 250, 250, 0.01); + z-index: 1000; +} +.ace_dragging.ace_dark .ace_scroller:before{ + background: rgba(0, 0, 0, 0.01); +} + +.ace_gutter { + position: absolute; + overflow : hidden; + width: auto; + top: 0; + bottom: 0; + left: 0; + cursor: default; + z-index: 4; + -ms-user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; + contain: style size layout; +} + +.ace_gutter-active-line { + position: absolute; + left: 0; + right: 0; +} + +.ace_scroller.ace_scroll-left:after { + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset; + pointer-events: none; +} + +.ace_gutter-cell, .ace_gutter-cell_svg-icons { + position: absolute; + top: 0; + left: 0; + right: 0; + padding-left: 19px; + padding-right: 6px; + background-repeat: no-repeat; +} + +.ace_gutter-cell_svg-icons .ace_gutter_annotation { + margin-left: -14px; + float: left; +} + +.ace_gutter-cell .ace_gutter_annotation { + margin-left: -19px; + float: left; +} + +.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold, .ace_gutter-cell.ace_security, .ace_icon.ace_security, .ace_icon.ace_security_fold { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: 2px center; +} + +.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: 2px center; +} + +.ace_gutter-cell.ace_info, .ace_icon.ace_info, .ace_gutter-cell.ace_hint, .ace_icon.ace_hint { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII="); + background-repeat: no-repeat; + background-position: 2px center; +} + +.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info, .ace_dark .ace_gutter-cell.ace_hint, .ace_dark .ace_icon.ace_hint { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC"); +} + +.ace_icon_svg.ace_error { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+"); + background-color: crimson; +} +.ace_icon_svg.ace_security { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iZGFya29yYW5nZSIgZmlsbD0ibm9uZSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdHJva2UtbGluZWpvaW4tcm91bmQiIGQ9Ik04IDE0LjgzMDdDOCAxNC44MzA3IDIgMTIuOTA0NyAyIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOEM3Ljk4OTk5IDEuMzQ5MTggMTAuNjkgMy4yNjU0OCAxNCAzLjI2NTQ4VjguMDg5OTJDMTQgMTIuOTA0NyA4IDE0LjgzMDcgOCAxNC44MzA3WiIvPgogICAgICAgIDxwYXRoIGQ9Ik0yIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOCIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMy45OSA4LjA4OTkyVjMuMjY1NDhDMTAuNjggMy4yNjU0OCA4IDEuMzQ5MTggOCAxLjM0OTE4Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggNFY5Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggMTBWMTIiLz4KICAgIDwvZz4KPC9zdmc+"); + background-color: crimson; +} +.ace_icon_svg.ace_warning { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg=="); + background-color: darkorange; +} +.ace_icon_svg.ace_info { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg=="); + background-color: royalblue; +} +.ace_icon_svg.ace_hint { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0ic2lsdmVyIiBmaWxsPSJub25lIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTYgMTRIMTAiLz4KICAgICAgICA8cGF0aCBkPSJNOCAxMUg5QzkgOS40NzAwMiAxMiA4LjU0MDAyIDEyIDUuNzYwMDJDMTIuMDIgNC40MDAwMiAxMS4zOSAzLjM2MDAyIDEwLjQzIDIuNjcwMDJDOSAxLjY0MDAyIDcuMDAwMDEgMS42NDAwMiA1LjU3MDAxIDIuNjcwMDJDNC42MTAwMSAzLjM2MDAyIDMuOTggNC40MDAwMiA0IDUuNzYwMDJDNCA4LjU0MDAyIDcuMDAwMDEgOS40NzAwMiA3LjAwMDAxIDExSDhaIi8+CiAgICA8L2c+Cjwvc3ZnPg=="); + background-color: silver; +} + +.ace_icon_svg.ace_error_fold { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4="); + background-color: crimson; +} +.ace_icon_svg.ace_security_fold { + -webkit-mask-image: url("data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTcgMTQiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTEwLjAwMDEgMTMuNjk5MkMxMC4wMDAxIDEzLjY5OTIgMTEuOTI0MSAxMy40NzYzIDEzIDEyLjY5OTJDMTQuNDEzOSAxMS42NzgxIDE2IDEwLjUgMTYuMTI1MSA2LjgxMTI2VjIuNTg5ODdDMTYuMTI1MSAyLjU0NzY4IDE2LjEyMjEgMi41MDYxOSAxNi4xMTY0IDIuNDY1NTlWMS43MTQ4NUgxNS4yNDE0TDE1LjIzMDcgMS43MTQ4NEwxNC42MjUxIDEuNjk5MjJWNi44MTEyM0MxNC42MjUxIDguNTEwNjEgMTQuNjI1MSA5LjQ2NDYxIDEyLjc4MjQgMTEuNzIxQzEyLjE1ODYgMTIuNDg0OCAxMC4wMDAxIDEzLjY5OTIgMTAuMDAwMSAxMy42OTkyWiIgZmlsbD0iY3JpbXNvbiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuMzM2MDkgMC4zNjc0NzVDNy4wMzIxNCAwLjE1MjY1MiA2LjYyNTQ4IDAuMTUzNjE0IDYuMzIyNTMgMC4zNjk5OTdMNi4zMDg2OSAwLjM3OTU1NEM2LjI5NTUzIDAuMzg4NTg4IDYuMjczODggMC40MDMyNjYgNi4yNDQxNyAwLjQyMjc4OUM2LjE4NDcxIDAuNDYxODYgNi4wOTMyMSAwLjUyMDE3MSA1Ljk3MzEzIDAuNTkxMzczQzUuNzMyNTEgMC43MzQwNTkgNS4zNzk5IDAuOTI2ODY0IDQuOTQyNzkgMS4xMjAwOUM0LjA2MTQ0IDEuNTA5NyAyLjg3NTQxIDEuODgzNzcgMS41ODk4NCAxLjg4Mzc3SDAuNzE0ODQ0VjIuNzU4NzdWNi45ODAxNUMwLjcxNDg0NCA5LjQ5Mzc0IDIuMjg4NjYgMTEuMTk3MyAzLjcwMjU0IDEyLjIxODVDNC40MTg0NSAxMi43MzU1IDUuMTI4NzQgMTMuMTA1MyA1LjY1NzMzIDEzLjM0NTdDNS45MjI4NCAxMy40NjY0IDYuMTQ1NjYgMTMuNTU1OSA2LjMwNDY1IDEzLjYxNjFDNi4zODQyMyAxMy42NDYyIDYuNDQ4MDUgMTMuNjY5IDYuNDkzNDkgMTMuNjg0OEM2LjUxNjIyIDEzLjY5MjcgNi41MzQzOCAxMy42OTg5IDYuNTQ3NjQgMTMuNzAzM0w2LjU2MzgyIDEzLjcwODdMNi41NjkwOCAxMy43MTA0TDYuNTcwOTkgMTMuNzExTDYuODM5ODQgMTMuNzUzM0w2LjU3MjQyIDEzLjcxMTVDNi43NDYzMyAxMy43NjczIDYuOTMzMzUgMTMuNzY3MyA3LjEwNzI3IDEzLjcxMTVMNy4xMDg3IDEzLjcxMUw3LjExMDYxIDEzLjcxMDRMNy4xMTU4NyAxMy43MDg3TDcuMTMyMDUgMTMuNzAzM0M3LjE0NTMxIDEzLjY5ODkgNy4xNjM0NiAxMy42OTI3IDcuMTg2MTkgMTMuNjg0OEM3LjIzMTY0IDEzLjY2OSA3LjI5NTQ2IDEzLjY0NjIgNy4zNzUwMyAxMy42MTYxQzcuNTM0MDMgMTMuNTU1OSA3Ljc1Njg1IDEzLjQ2NjQgOC4wMjIzNiAxMy4zNDU3QzguNTUwOTUgMTMuMTA1MyA5LjI2MTIzIDEyLjczNTUgOS45NzcxNSAxMi4yMTg1QzExLjM5MSAxMS4xOTczIDEyLjk2NDggOS40OTM3NyAxMi45NjQ4IDYuOTgwMThWMi43NTg4QzEyLjk2NDggMi43MTY2IDEyLjk2MTkgMi42NzUxMSAxMi45NTYxIDIuNjM0NTFWMS44ODM3N0gxMi4wODExQzEyLjA3NzUgMS44ODM3NyAxMi4wNzQgMS44ODM3NyAxMi4wNzA0IDEuODgzNzdDMTAuNzk3OSAxLjg4MDA0IDkuNjE5NjIgMS41MTEwMiA4LjczODk0IDEuMTI0ODZDOC43MzUzNCAxLjEyMzI3IDguNzMxNzQgMS4xMjE2OCA4LjcyODE0IDEuMTIwMDlDOC4yOTEwMyAwLjkyNjg2NCA3LjkzODQyIDAuNzM0MDU5IDcuNjk3NzkgMC41OTEzNzNDNy41Nzc3MiAwLjUyMDE3MSA3LjQ4NjIyIDAuNDYxODYgNy40MjY3NiAwLjQyMjc4OUM3LjM5NzA1IDAuNDAzMjY2IDcuMzc1MzkgMC4zODg1ODggNy4zNjIyNCAwLjM3OTU1NEw3LjM0ODk2IDAuMzcwMzVDNy4zNDg5NiAwLjM3MDM1IDcuMzQ4NDcgMC4zNzAwMiA3LjM0NTYzIDAuMzc0MDU0TDcuMzM3NzkgMC4zNjg2NTlMNy4zMzYwOSAwLjM2NzQ3NVpNOC4wMzQ3MSAyLjcyNjkxQzguODYwNCAzLjA5MDYzIDkuOTYwNjYgMy40NjMwOSAxMS4yMDYxIDMuNTg5MDdWNi45ODAxNUgxMS4yMTQ4QzExLjIxNDggOC42Nzk1MyAxMC4xNjM3IDkuOTI1MDcgOC45NTI1NCAxMC43OTk4QzguMzU1OTUgMTEuMjMwNiA3Ljc1Mzc0IDExLjU0NTQgNy4yOTc5NiAxMS43NTI3QzcuMTE2NzEgMTEuODM1MSA2Ljk2MDYyIDExLjg5OTYgNi44Mzk4NCAxMS45NDY5QzYuNzE5MDYgMTEuODk5NiA2LjU2Mjk3IDExLjgzNTEgNi4zODE3MyAxMS43NTI3QzUuOTI1OTUgMTEuNTQ1NCA1LjMyMzczIDExLjIzMDYgNC43MjcxNSAxMC43OTk4QzMuNTE2MDMgOS45MjUwNyAyLjQ2NDg0IDguNjc5NTUgMi40NjQ4NCA2Ljk4MDE4VjMuNTg5MDlDMy43MTczOCAzLjQ2MjM5IDQuODIzMDggMy4wODYzOSA1LjY1MDMzIDIuNzIwNzFDNi4xNDIyOCAyLjUwMzI0IDYuNTQ0ODUgMi4yODUzNyA2LjgzMjU0IDIuMTE2MjRDNy4xMjE4MSAyLjI4NTM1IDcuNTI3IDIuNTAzNTIgOC4wMjE5NiAyLjcyMTMxQzguMDI2MiAyLjcyMzE3IDguMDMwNDUgMi43MjUwNCA4LjAzNDcxIDIuNzI2OTFaTTUuOTY0ODQgMy40MDE0N1Y3Ljc3NjQ3SDcuNzE0ODRWMy40MDE0N0g1Ljk2NDg0Wk01Ljk2NDg0IDEwLjQwMTVWOC42NTE0N0g3LjcxNDg0VjEwLjQwMTVINS45NjQ4NFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4="); + background-color: crimson; +} +.ace_icon_svg.ace_warning_fold { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4="); + background-color: darkorange; +} + +.ace_scrollbar { + contain: strict; + position: absolute; + right: 0; + bottom: 0; + z-index: 6; +} + +.ace_scrollbar-inner { + position: absolute; + cursor: text; + left: 0; + top: 0; +} + +.ace_scrollbar-v{ + overflow-x: hidden; + overflow-y: scroll; + top: 0; +} + +.ace_scrollbar-h { + overflow-x: scroll; + overflow-y: hidden; + left: 0; +} + +.ace_print-margin { + position: absolute; + height: 100%; +} + +.ace_text-input { + position: absolute; + z-index: 0; + width: 0.5em; + height: 1em; + opacity: 0; + background: transparent; + -moz-appearance: none; + appearance: none; + border: none; + resize: none; + outline: none; + overflow: hidden; + font: inherit; + padding: 0 1px; + margin: 0 -1px; + contain: strict; + -ms-user-select: text; + -moz-user-select: text; + -webkit-user-select: text; + user-select: text; + /*with \`pre-line\` chrome inserts   instead of space*/ + white-space: pre!important; +} +.ace_text-input.ace_composition { + background: transparent; + color: inherit; + z-index: 1000; + opacity: 1; +} +.ace_composition_placeholder { color: transparent } +.ace_composition_marker { + border-bottom: 1px solid; + position: absolute; + border-radius: 0; + margin-top: 1px; +} + +[ace_nocontext=true] { + transform: none!important; + filter: none!important; + clip-path: none!important; + mask : none!important; + contain: none!important; + perspective: none!important; + mix-blend-mode: initial!important; + z-index: auto; +} + +.ace_layer { + z-index: 1; + position: absolute; + overflow: hidden; + /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/ + word-wrap: normal; + white-space: pre; + height: 100%; + width: 100%; + box-sizing: border-box; + /* setting pointer-events: auto; on node under the mouse, which changes + during scroll, will break mouse wheel scrolling in Safari */ + pointer-events: none; +} + +.ace_gutter-layer { + position: relative; + width: auto; + text-align: right; + pointer-events: auto; + height: 1000000px; + contain: style size layout; +} + +.ace_text-layer { + font: inherit !important; + position: absolute; + height: 1000000px; + width: 1000000px; + contain: style size layout; +} + +.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group { + contain: style size layout; + position: absolute; + top: 0; + left: 0; + right: 0; +} + +.ace_hidpi .ace_text-layer, +.ace_hidpi .ace_gutter-layer, +.ace_hidpi .ace_content, +.ace_hidpi .ace_gutter { + contain: strict; +} +.ace_hidpi .ace_text-layer > .ace_line, +.ace_hidpi .ace_text-layer > .ace_line_group { + contain: strict; +} + +.ace_cjk { + display: inline-block; + text-align: center; +} + +.ace_cursor-layer { + z-index: 4; +} + +.ace_cursor { + z-index: 4; + position: absolute; + box-sizing: border-box; + border-left: 2px solid; + /* workaround for smooth cursor repaintng whole screen in chrome */ + transform: translatez(0); +} + +.ace_multiselect .ace_cursor { + border-left-width: 1px; +} + +.ace_slim-cursors .ace_cursor { + border-left-width: 1px; +} + +.ace_overwrite-cursors .ace_cursor { + border-left-width: 0; + border-bottom: 1px solid; +} + +.ace_hidden-cursors .ace_cursor { + opacity: 0.2; +} + +.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor { + opacity: 0; +} + +.ace_smooth-blinking .ace_cursor { + transition: opacity 0.18s; +} + +.ace_animate-blinking .ace_cursor { + animation-duration: 1000ms; + animation-timing-function: step-end; + animation-name: blink-ace-animate; + animation-iteration-count: infinite; +} + +.ace_animate-blinking.ace_smooth-blinking .ace_cursor { + animation-duration: 1000ms; + animation-timing-function: ease-in-out; + animation-name: blink-ace-animate-smooth; +} + +@keyframes blink-ace-animate { + from, to { opacity: 1; } + 60% { opacity: 0; } +} + +@keyframes blink-ace-animate-smooth { + from, to { opacity: 1; } + 45% { opacity: 1; } + 60% { opacity: 0; } + 85% { opacity: 0; } +} + +.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack { + position: absolute; + z-index: 3; +} + +.ace_marker-layer .ace_selection { + position: absolute; + z-index: 5; +} + +.ace_marker-layer .ace_bracket { + position: absolute; + z-index: 6; +} + +.ace_marker-layer .ace_error_bracket { + position: absolute; + border-bottom: 1px solid #DE5555; + border-radius: 0; +} + +.ace_marker-layer .ace_active-line { + position: absolute; + z-index: 2; +} + +.ace_marker-layer .ace_selected-word { + position: absolute; + z-index: 4; + box-sizing: border-box; +} + +.ace_line .ace_fold { + box-sizing: border-box; + + display: inline-block; + height: 11px; + margin-top: -2px; + vertical-align: middle; + + background-image: + url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="), + url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII="); + background-repeat: no-repeat, repeat-x; + background-position: center center, top left; + color: transparent; + + border: 1px solid black; + border-radius: 2px; + + cursor: pointer; + pointer-events: auto; +} + +.ace_dark .ace_fold { +} + +.ace_fold:hover{ + background-image: + url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="), + url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC"); +} + +.ace_tooltip { + background-color: #f5f5f5; + border: 1px solid gray; + border-radius: 1px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + color: black; + padding: 3px 4px; + position: fixed; + z-index: 999999; + box-sizing: border-box; + cursor: default; + white-space: pre-wrap; + word-wrap: break-word; + line-height: normal; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + pointer-events: none; + overflow: auto; + max-width: min(33em, 66vw); + overscroll-behavior: contain; +} +.ace_tooltip pre { + white-space: pre-wrap; +} + +.ace_tooltip.ace_dark { + background-color: #636363; + color: #fff; +} + +.ace_tooltip:focus { + outline: 1px solid #5E9ED6; +} + +.ace_icon { + display: inline-block; + width: 18px; + vertical-align: top; +} + +.ace_icon_svg { + display: inline-block; + width: 12px; + vertical-align: top; + -webkit-mask-repeat: no-repeat; + -webkit-mask-size: 12px; + -webkit-mask-position: center; +} + +.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons { + padding-right: 13px; +} + +.ace_fold-widget, .ace_custom-widget { + box-sizing: border-box; + + margin: 0 -12px 0 1px; + display: none; + width: 11px; + vertical-align: top; + + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center; + + border-radius: 3px; + + border: 1px solid transparent; + cursor: pointer; +} + +.ace_custom-widget { + background: none; +} + +.ace_folding-enabled .ace_fold-widget { + display: inline-block; +} + +.ace_fold-widget.ace_end { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg=="); +} + +.ace_fold-widget.ace_closed { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA=="); +} + +.ace_fold-widget:hover { + border: 1px solid rgba(0, 0, 0, 0.3); + background-color: rgba(255, 255, 255, 0.2); + box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7); +} + +.ace_fold-widget:active { + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); +} +/** + * Dark version for fold widgets + */ +.ace_dark .ace_fold-widget { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC"); +} +.ace_dark .ace_fold-widget.ace_end { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg=="); +} +.ace_dark .ace_fold-widget.ace_closed { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg=="); +} +.ace_dark .ace_fold-widget:hover { + box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2); + background-color: rgba(255, 255, 255, 0.1); +} +.ace_dark .ace_fold-widget:active { + box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2); +} + +.ace_inline_button { + border: 1px solid lightgray; + display: inline-block; + margin: -1px 8px; + padding: 0 5px; + pointer-events: auto; + cursor: pointer; +} +.ace_inline_button:hover { + border-color: gray; + background: rgba(200,200,200,0.2); + display: inline-block; + pointer-events: auto; +} + +.ace_fold-widget.ace_invalid { + background-color: #FFB4B4; + border-color: #DE5555; +} + +.ace_fade-fold-widgets .ace_fold-widget { + transition: opacity 0.4s ease 0.05s; + opacity: 0; +} + +.ace_fade-fold-widgets:hover .ace_fold-widget { + transition: opacity 0.05s ease 0.05s; + opacity:1; +} + +.ace_underline { + text-decoration: underline; +} + +.ace_bold { + font-weight: bold; +} + +.ace_nobold .ace_bold { + font-weight: normal; +} + +.ace_italic { + font-style: italic; +} + + +.ace_error-marker { + background-color: rgba(255, 0, 0,0.2); + position: absolute; + z-index: 9; +} + +.ace_highlight-marker { + background-color: rgba(255, 255, 0,0.2); + position: absolute; + z-index: 8; +} + +.ace_mobile-menu { + position: absolute; + line-height: 1.5; + border-radius: 4px; + -ms-user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; + background: white; + box-shadow: 1px 3px 2px grey; + border: 1px solid #dcdcdc; + color: black; +} +.ace_dark > .ace_mobile-menu { + background: #333; + color: #ccc; + box-shadow: 1px 3px 2px grey; + border: 1px solid #444; + +} +.ace_mobile-button { + padding: 2px; + cursor: pointer; + overflow: hidden; +} +.ace_mobile-button:hover { + background-color: #eee; + opacity:1; +} +.ace_mobile-button:active { + background-color: #ddd; +} + +.ace_placeholder { + position: relative; + font-family: arial; + transform: scale(0.9); + transform-origin: left; + white-space: pre; + opacity: 0.7; + margin: 0 10px; + z-index: 1; +} + +.ace_ghost_text { + opacity: 0.5; + font-style: italic; +} + +.ace_ghost_text_container > div { + white-space: pre; +} + +.ghost_text_line_wrapped::after { + content: "\u21A9"; + position: absolute; +} + +.ace_lineWidgetContainer.ace_ghost_text { + margin: 0px 4px +} + +.ace_screenreader-only { + position:absolute; + left:-10000px; + top:auto; + width:1px; + height:1px; + overflow:hidden; +} + +.ace_hidden_token { + display: none; +}`}),ace.define("ace/layer/decorators",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter"],function(e,p,m){var g=e("../lib/dom"),s=e("../lib/oop"),c=e("../lib/event_emitter").EventEmitter,i=function(){function f(n,o){this.parentEl=n,this.canvas=g.createElement("canvas"),this.renderer=o,this.pixelRatio=1,this.maxHeight=o.layerConfig.maxHeight,this.lineHeight=o.layerConfig.lineHeight,this.minDecorationHeight=2*this.pixelRatio|0,this.halfMinDecorationHeight=this.minDecorationHeight/2|0,this.canvas.style.top=0+"px",this.canvas.style.right=0+"px",this.canvas.style.zIndex=7+"px",this.canvas.style.position="absolute",this.colors={},this.colors.dark={error:"rgba(255, 18, 18, 1)",warning:"rgba(18, 136, 18, 1)",info:"rgba(18, 18, 136, 1)"},this.colors.light={error:"rgb(255,51,51)",warning:"rgb(32,133,72)",info:"rgb(35,68,138)"},this.setDimensions(),n.element.appendChild(this.canvas)}return f.prototype.$updateDecorators=function(n){var o=this.renderer.theme.isDark===!0?this.colors.dark:this.colors.light;this.setDimensions(n);var r=this.canvas.getContext("2d");function l(O,k){return O.priorityk.priority?1:0}var a=this.renderer.session.$annotations;if(r.clearRect(0,0,this.canvas.width,this.canvas.height),a){var u={info:1,warning:2,error:3};a.forEach(function(O){O.priority=u[O.type]||null}),a=a.sort(l);for(var h=0;hthis.canvasHeight&&(S=this.canvasHeight-this.halfMinDecorationHeight),y=Math.round(S-this.halfMinDecorationHeight),_=Math.round(S+this.halfMinDecorationHeight)}r.fillStyle=o[a[h].type]||null,r.fillRect(0,w,this.canvasWidth,_-y)}}var M=this.renderer.session.selection.getCursor();if(M){var v=this.compensateFoldRows(M.row),w=Math.round((M.row-v)*this.lineHeight*this.heightRatio);r.fillStyle="rgba(0, 0, 0, 0.5)",r.fillRect(0,w,this.canvasWidth,2)}},f.prototype.compensateFoldRows=function(n){var o=this.renderer.session.$foldData,r=0;if(o&&o.length>0)for(var l=0;lo[l].start.row&&n=o[l].end.row&&(r+=o[l].end.row-o[l].start.row);return r},f.prototype.compensateLineWidgets=function(n){var o=this.renderer.session.widgetManager;if(o){var r=0;return o.lineWidgets.forEach(function(l,a){n>a&&(r+=l.rowCount||0)}),r-1}return 0},f.prototype.setDimensions=function(n){n?(this.maxHeight=n.maxHeight,this.lineHeight=n.lineHeight,this.canvasHeight=n.height,this.maxHeightk&&(this.$changedLines.firstRow=k),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},O.prototype.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},O.prototype.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},O.prototype.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},O.prototype.updateFull=function(k){k?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},O.prototype.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},O.prototype.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},O.prototype.onResize=function(k,A,T,E){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=k?1:0;var C=this.container;E||(E=C.clientHeight||C.scrollHeight),!E&&this.$maxLines&&this.lineHeight>1&&(!C.style.height||C.style.height=="0px")&&(C.style.height="1px",E=C.clientHeight||C.scrollHeight),T||(T=C.clientWidth||C.scrollWidth);var x=this.$updateCachedSize(k,A,T,E);if(this.$resizeTimer&&this.$resizeTimer.cancel(),!this.$size.scrollerHeight||!T&&!E)return this.resizing=0;k&&(this.$gutterLayer.$padding=null),k?this.$renderChanges(x|this.$changes,!0):this.$loop.schedule(x|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.$customScrollbar&&this.$updateCustomScrollbar(!0)}},O.prototype.$updateCachedSize=function(k,A,T,E){E-=this.$extraHeight||0;var C=0,x=this.$size,L={width:x.width,height:x.height,scrollerHeight:x.scrollerHeight,scrollerWidth:x.scrollerWidth};if(E&&(k||x.height!=E)&&(x.height=E,C|=this.CHANGE_SIZE,x.scrollerHeight=x.height,this.$horizScroll&&(x.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.setHeight(x.scrollerHeight),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",C=C|this.CHANGE_SCROLL),T&&(k||x.width!=T)){C|=this.CHANGE_SIZE,x.width=T,A==null&&(A=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=A,s.setStyle(this.scrollBarH.element.style,"left",A+"px"),s.setStyle(this.scroller.style,"left",A+this.margin.left+"px"),x.scrollerWidth=Math.max(0,T-A-this.scrollBarV.getWidth()-this.margin.h),s.setStyle(this.$gutter.style,"left",this.margin.left+"px");var q=this.scrollBarV.getWidth()+"px";s.setStyle(this.scrollBarH.element.style,"right",q),s.setStyle(this.scroller.style,"right",q),s.setStyle(this.scroller.style,"bottom",this.scrollBarH.getHeight()),this.scrollBarH.setWidth(x.scrollerWidth),(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||k)&&(C|=this.CHANGE_FULL)}return x.$dirty=!T||!E,C&&this._signal("resize",L),C},O.prototype.onGutterResize=function(k){var A=this.$showGutter?k:0;A!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,A,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},O.prototype.adjustWrapLimit=function(){var k=this.$size.scrollerWidth-this.$padding*2,A=Math.floor(k/this.characterWidth);return this.session.adjustWrapLimit(A,this.$showPrintMargin&&this.$printMarginColumn)},O.prototype.setAnimatedScroll=function(k){this.setOption("animatedScroll",k)},O.prototype.getAnimatedScroll=function(){return this.$animatedScroll},O.prototype.setShowInvisibles=function(k){this.setOption("showInvisibles",k),this.session.$bidiHandler.setShowInvisibles(k)},O.prototype.getShowInvisibles=function(){return this.getOption("showInvisibles")},O.prototype.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},O.prototype.setDisplayIndentGuides=function(k){this.setOption("displayIndentGuides",k)},O.prototype.getHighlightIndentGuides=function(){return this.getOption("highlightIndentGuides")},O.prototype.setHighlightIndentGuides=function(k){this.setOption("highlightIndentGuides",k)},O.prototype.setShowPrintMargin=function(k){this.setOption("showPrintMargin",k)},O.prototype.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},O.prototype.setPrintMarginColumn=function(k){this.setOption("printMarginColumn",k)},O.prototype.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},O.prototype.getShowGutter=function(){return this.getOption("showGutter")},O.prototype.setShowGutter=function(k){return this.setOption("showGutter",k)},O.prototype.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},O.prototype.setFadeFoldWidgets=function(k){this.setOption("fadeFoldWidgets",k)},O.prototype.setHighlightGutterLine=function(k){this.setOption("highlightGutterLine",k)},O.prototype.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},O.prototype.$updatePrintMargin=function(){if(!(!this.$showPrintMargin&&!this.$printMarginEl)){if(!this.$printMarginEl){var k=s.createElement("div");k.className="ace_layer ace_print-margin-layer",this.$printMarginEl=s.createElement("div"),this.$printMarginEl.className="ace_print-margin",k.appendChild(this.$printMarginEl),this.content.insertBefore(k,this.content.firstChild)}var A=this.$printMarginEl.style;A.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+"px",A.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()}},O.prototype.getContainerElement=function(){return this.container},O.prototype.getMouseEventTarget=function(){return this.scroller},O.prototype.getTextAreaContainer=function(){return this.container},O.prototype.$moveTextAreaToCursor=function(){if(!this.$isMousePressed){var k=this.textarea.style,A=this.$composition;if(!this.$keepTextAreaAtCursor&&!A){s.translate(this.textarea,-100,0);return}var T=this.$cursorLayer.$pixelPos;if(!!T){A&&A.markerRange&&(T=this.$cursorLayer.getPixelPosition(A.markerRange.start,!0));var E=this.layerConfig,C=T.top,x=T.left;C-=E.offset;var L=A&&A.useTextareaForIME||b.isMobile?this.lineHeight:1;if(C<0||C>E.height-L){s.translate(this.textarea,0,0);return}var q=1,N=this.$size.height-L;if(!A)C+=this.lineHeight;else if(A.useTextareaForIME){var F=this.textarea.value;q=this.characterWidth*this.session.$getStringScreenWidth(F)[0]}else C+=this.lineHeight+2;x-=this.scrollLeft,x>this.$size.scrollerWidth-q&&(x=this.$size.scrollerWidth-q),x+=this.gutterWidth+this.margin.left,s.setStyle(k,"height",L+"px"),s.setStyle(k,"width",q+"px"),s.translate(this.textarea,Math.min(x,this.$size.scrollerWidth-q),Math.min(C,N))}}},O.prototype.getFirstVisibleRow=function(){return this.layerConfig.firstRow},O.prototype.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},O.prototype.getLastFullyVisibleRow=function(){var k=this.layerConfig,A=k.lastRow,T=this.session.documentToScreenRow(A,0)*k.lineHeight;return T-this.session.getScrollTop()>k.height-k.lineHeight?A-1:A},O.prototype.getLastVisibleRow=function(){return this.layerConfig.lastRow},O.prototype.setPadding=function(k){this.$padding=k,this.$textLayer.setPadding(k),this.$cursorLayer.setPadding(k),this.$markerFront.setPadding(k),this.$markerBack.setPadding(k),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},O.prototype.setScrollMargin=function(k,A,T,E){var C=this.scrollMargin;C.top=k|0,C.bottom=A|0,C.right=E|0,C.left=T|0,C.v=C.top+C.bottom,C.h=C.left+C.right,C.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-C.top),this.updateFull()},O.prototype.setMargin=function(k,A,T,E){var C=this.margin;C.top=k|0,C.bottom=A|0,C.right=E|0,C.left=T|0,C.v=C.top+C.bottom,C.h=C.left+C.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},O.prototype.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},O.prototype.setHScrollBarAlwaysVisible=function(k){this.setOption("hScrollBarAlwaysVisible",k)},O.prototype.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},O.prototype.setVScrollBarAlwaysVisible=function(k){this.setOption("vScrollBarAlwaysVisible",k)},O.prototype.$updateScrollBarV=function(){var k=this.layerConfig.maxHeight,A=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(k-=(A-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>k-A&&(k=this.scrollTop+A,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(k+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},O.prototype.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},O.prototype.freeze=function(){this.$frozen=!0},O.prototype.unfreeze=function(){this.$frozen=!1},O.prototype.$renderChanges=function(k,A){if(this.$changes&&(k|=this.$changes,this.$changes=0),!this.session||!this.container.offsetWidth||this.$frozen||!k&&!A){this.$changes|=k;return}if(this.$size.$dirty)return this.$changes|=k,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender",k),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var T=this.layerConfig;if(k&this.CHANGE_FULL||k&this.CHANGE_SIZE||k&this.CHANGE_TEXT||k&this.CHANGE_LINES||k&this.CHANGE_SCROLL||k&this.CHANGE_H_SCROLL){if(k|=this.$computeLayerConfig()|this.$loop.clear(),T.firstRow!=this.layerConfig.firstRow&&T.firstRowScreen==this.layerConfig.firstRowScreen){var E=this.scrollTop+(T.firstRow-Math.max(this.layerConfig.firstRow,0))*this.lineHeight;E>0&&(this.scrollTop=E,k=k|this.CHANGE_SCROLL,k|=this.$computeLayerConfig()|this.$loop.clear())}T=this.layerConfig,this.$updateScrollBarV(),k&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),s.translate(this.content,-this.scrollLeft,-T.offset);var C=T.width+2*this.$padding+"px",x=T.minHeight+"px";s.setStyle(this.content.style,"width",C),s.setStyle(this.content.style,"height",x)}if(k&this.CHANGE_H_SCROLL&&(s.translate(this.content,-this.scrollLeft,-T.offset),this.scroller.className=this.scrollLeft<=0?"ace_scroller ":"ace_scroller ace_scroll-left ",this.enableKeyboardAccessibility&&(this.scroller.className+=this.keyboardFocusClassName)),k&this.CHANGE_FULL){this.$changedLines=null,this.$textLayer.update(T),this.$showGutter&&this.$gutterLayer.update(T),this.$customScrollbar&&this.$scrollDecorator.$updateDecorators(T),this.$markerBack.update(T),this.$markerFront.update(T),this.$cursorLayer.update(T),this.$moveTextAreaToCursor(),this._signal("afterRender",k);return}if(k&this.CHANGE_SCROLL){this.$changedLines=null,k&this.CHANGE_TEXT||k&this.CHANGE_LINES?this.$textLayer.update(T):this.$textLayer.scrollLines(T),this.$showGutter&&(k&this.CHANGE_GUTTER||k&this.CHANGE_LINES?this.$gutterLayer.update(T):this.$gutterLayer.scrollLines(T)),this.$customScrollbar&&this.$scrollDecorator.$updateDecorators(T),this.$markerBack.update(T),this.$markerFront.update(T),this.$cursorLayer.update(T),this.$moveTextAreaToCursor(),this._signal("afterRender",k);return}k&this.CHANGE_TEXT?(this.$changedLines=null,this.$textLayer.update(T),this.$showGutter&&this.$gutterLayer.update(T),this.$customScrollbar&&this.$scrollDecorator.$updateDecorators(T)):k&this.CHANGE_LINES?((this.$updateLines()||k&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(T),this.$customScrollbar&&this.$scrollDecorator.$updateDecorators(T)):k&this.CHANGE_TEXT||k&this.CHANGE_GUTTER?(this.$showGutter&&this.$gutterLayer.update(T),this.$customScrollbar&&this.$scrollDecorator.$updateDecorators(T)):k&this.CHANGE_CURSOR&&(this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(T),this.$customScrollbar&&this.$scrollDecorator.$updateDecorators(T)),k&this.CHANGE_CURSOR&&(this.$cursorLayer.update(T),this.$moveTextAreaToCursor()),k&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(T),k&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(T),this._signal("afterRender",k)},O.prototype.$autosize=function(){var k=this.session.getScreenLength()*this.lineHeight,A=this.$maxLines*this.lineHeight,T=Math.min(A,Math.max((this.$minLines||1)*this.lineHeight,k))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(T+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&T>this.$maxPixelHeight&&(T=this.$maxPixelHeight);var E=T<=2*this.lineHeight,C=!E&&k>A;if(T!=this.desiredHeight||this.$size.height!=this.desiredHeight||C!=this.$vScroll){C!=this.$vScroll&&(this.$vScroll=C,this.scrollBarV.setVisible(C));var x=this.container.clientWidth;this.container.style.height=T+"px",this.$updateCachedSize(!0,this.$gutterWidth,x,T),this.desiredHeight=T,this._signal("autosize")}},O.prototype.$computeLayerConfig=function(){var k=this.session,A=this.$size,T=A.height<=2*this.lineHeight,E=this.session.getScreenLength(),C=E*this.lineHeight,x=this.$getLongestLine(),L=!T&&(this.$hScrollBarAlwaysVisible||A.scrollerWidth-x-2*this.$padding<0),q=this.$horizScroll!==L;q&&(this.$horizScroll=L,this.scrollBarH.setVisible(L));var N=this.$vScroll;this.$maxLines&&this.lineHeight>1&&(this.$autosize(),T=A.height<=2*this.lineHeight);var F=A.scrollerHeight+this.lineHeight,I=!this.$maxLines&&this.$scrollPastEnd?(A.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;C+=I;var R=this.scrollMargin;this.session.setScrollTop(Math.max(-R.top,Math.min(this.scrollTop,C-A.scrollerHeight+R.bottom))),this.session.setScrollLeft(Math.max(-R.left,Math.min(this.scrollLeft,x+2*this.$padding-A.scrollerWidth+R.right)));var B=!T&&(this.$vScrollBarAlwaysVisible||A.scrollerHeight-C+I<0||this.scrollTop>R.top),D=N!==B;D&&(this.$vScroll=B,this.scrollBarV.setVisible(B));var P=this.scrollTop%this.lineHeight,j=Math.ceil(F/this.lineHeight)-1,V=Math.max(0,Math.round((this.scrollTop-P)/this.lineHeight)),W=V+j,H,z,U=this.lineHeight;V=k.screenToDocumentRow(V,0);var Z=k.getFoldLine(V);Z&&(V=Z.start.row),H=k.documentToScreenRow(V,0),z=k.getRowLength(V)*U,W=Math.min(k.screenToDocumentRow(W,0),k.getLength()-1),F=A.scrollerHeight+k.getRowLength(W)*U+z,P=this.scrollTop-H*U;var ne=0;return(this.layerConfig.width!=x||q)&&(ne=this.CHANGE_H_SCROLL),(q||D)&&(ne|=this.$updateCachedSize(!0,this.gutterWidth,A.width,A.height),this._signal("scrollbarVisibilityChanged"),D&&(x=this.$getLongestLine())),this.layerConfig={width:x,padding:this.$padding,firstRow:V,firstRowScreen:H,lastRow:W,lineHeight:U,characterWidth:this.characterWidth,minHeight:F,maxHeight:C,offset:P,gutterOffset:U?Math.max(0,Math.ceil((P+A.height-A.scrollerHeight)/U)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(x-this.$padding),ne},O.prototype.$updateLines=function(){if(!!this.$changedLines){var k=this.$changedLines.firstRow,A=this.$changedLines.lastRow;this.$changedLines=null;var T=this.layerConfig;if(!(k>T.lastRow+1)&&!(Athis.$textLayer.MAX_LINE_LENGTH&&(k=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(k*this.characterWidth))},O.prototype.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},O.prototype.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},O.prototype.addGutterDecoration=function(k,A){this.$gutterLayer.addGutterDecoration(k,A)},O.prototype.removeGutterDecoration=function(k,A){this.$gutterLayer.removeGutterDecoration(k,A)},O.prototype.updateBreakpoints=function(k){this._rows=k,this.$loop.schedule(this.CHANGE_GUTTER)},O.prototype.setAnnotations=function(k){this.$gutterLayer.setAnnotations(k),this.$loop.schedule(this.CHANGE_GUTTER)},O.prototype.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},O.prototype.hideCursor=function(){this.$cursorLayer.hideCursor()},O.prototype.showCursor=function(){this.$cursorLayer.showCursor()},O.prototype.scrollSelectionIntoView=function(k,A,T){this.scrollCursorIntoView(k,T),this.scrollCursorIntoView(A,T)},O.prototype.scrollCursorIntoView=function(k,A,T){if(this.$size.scrollerHeight!==0){var E=this.$cursorLayer.getPixelPosition(k),C=E.left,x=E.top,L=T&&T.top||0,q=T&&T.bottom||0;this.$scrollAnimation&&(this.$stopAnimation=!0);var N=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;N+L>x?(A&&N+L>x+this.lineHeight&&(x-=A*this.$size.scrollerHeight),x===0&&(x=-this.scrollMargin.top),this.session.setScrollTop(x)):N+this.$size.scrollerHeight-q=1-this.scrollMargin.top||A>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||k<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||k>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},O.prototype.pixelToScreenCoordinates=function(k,A){var T;if(this.$hasCssTransforms){T={top:0,left:0};var E=this.$fontMetrics.transformCoordinates([k,A]);k=E[1]-this.gutterWidth-this.margin.left,A=E[0]}else T=this.scroller.getBoundingClientRect();var C=k+this.scrollLeft-T.left-this.$padding,x=C/this.characterWidth,L=Math.floor((A+this.scrollTop-T.top)/this.lineHeight),q=this.$blockCursor?Math.floor(x):Math.round(x);return{row:L,column:q,side:x-q>0?1:-1,offsetX:C}},O.prototype.screenToTextCoordinates=function(k,A){var T;if(this.$hasCssTransforms){T={top:0,left:0};var E=this.$fontMetrics.transformCoordinates([k,A]);k=E[1]-this.gutterWidth-this.margin.left,A=E[0]}else T=this.scroller.getBoundingClientRect();var C=k+this.scrollLeft-T.left-this.$padding,x=C/this.characterWidth,L=this.$blockCursor?Math.floor(x):Math.round(x),q=Math.floor((A+this.scrollTop-T.top)/this.lineHeight);return this.session.screenToDocumentPosition(q,Math.max(L,0),C)},O.prototype.textToScreenCoordinates=function(k,A){var T=this.scroller.getBoundingClientRect(),E=this.session.documentToScreenPosition(k,A),C=this.$padding+(this.session.$bidiHandler.isBidiRow(E.row,k)?this.session.$bidiHandler.getPosLeft(E.column):Math.round(E.column*this.characterWidth)),x=E.row*this.lineHeight;return{pageX:T.left+C-this.scrollLeft,pageY:T.top+x-this.scrollTop}},O.prototype.visualizeFocus=function(){s.addCssClass(this.container,"ace_focus")},O.prototype.visualizeBlur=function(){s.removeCssClass(this.container,"ace_focus")},O.prototype.showComposition=function(k){this.$composition=k,k.cssText||(k.cssText=this.textarea.style.cssText),k.useTextareaForIME==null&&(k.useTextareaForIME=this.$useTextareaForIME),this.$useTextareaForIME?(s.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display="none"):k.markerId=this.session.addMarker(k.markerRange,"ace_composition_marker","text")},O.prototype.setCompositionText=function(k){var A=this.session.selection.cursor;this.addToken(k,"composition_placeholder",A.row,A.column),this.$moveTextAreaToCursor()},O.prototype.hideComposition=function(){if(!!this.$composition){this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),s.removeCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText=this.$composition.cssText;var k=this.session.selection.cursor;this.removeExtraToken(k.row,k.column),this.$composition=null,this.$cursorLayer.element.style.display=""}},O.prototype.setGhostText=function(k,A){var T=this.session.selection.cursor,E=A||{row:T.row,column:T.column};this.removeGhostText();var C=this.$calculateWrappedTextChunks(k,E);this.addToken(C[0].text,"ghost_text",E.row,E.column),this.$ghostText={text:k,position:{row:E.row,column:E.column}};var x=s.createElement("div");if(C.length>1){var L=this.hideTokensAfterPosition(E.row,E.column),q;C.slice(1).forEach(function(D){var P=s.createElement("div"),j=s.createElement("span");j.className="ace_ghost_text",D.wrapped&&(P.className="ghost_text_line_wrapped"),D.text.length===0&&(D.text=" "),j.appendChild(s.createTextNode(D.text)),P.appendChild(j),x.appendChild(P),q=P}),L.forEach(function(D){var P=s.createElement("span");S(D.type)||(P.className="ace_"+D.type.replace(/\./g," ace_")),P.appendChild(s.createTextNode(D.value)),q.appendChild(P)}),this.$ghostTextWidget={el:x,row:E.row,column:E.column,className:"ace_ghost_text_container"},this.session.widgetManager.addLineWidget(this.$ghostTextWidget);var N=this.$cursorLayer.getPixelPosition(E,!0),F=this.container,I=F.getBoundingClientRect().height,R=C.length*this.lineHeight,B=R0){var F=0;N.push(C[L].length);for(var I=0;I1||Math.abs(k.$size.height-E)>1?k.$resizeTimer.delay():k.$resizeTimer.cancel()}),this.$resizeObserver.observe(this.container)}},O}();M.prototype.CHANGE_CURSOR=1,M.prototype.CHANGE_MARKER=2,M.prototype.CHANGE_GUTTER=4,M.prototype.CHANGE_SCROLL=8,M.prototype.CHANGE_LINES=16,M.prototype.CHANGE_TEXT=32,M.prototype.CHANGE_SIZE=64,M.prototype.CHANGE_MARKER_BACK=128,M.prototype.CHANGE_MARKER_FRONT=256,M.prototype.CHANGE_FULL=512,M.prototype.CHANGE_H_SCROLL=1024,M.prototype.$changes=0,M.prototype.$padding=null,M.prototype.$frozen=!1,M.prototype.STEPS=8,g.implement(M.prototype,w),i.defineOptions(M.prototype,"renderer",{useResizeObserver:{set:function(O){!O&&this.$resizeObserver?(this.$resizeObserver.disconnect(),this.$resizeTimer.cancel(),this.$resizeTimer=this.$resizeObserver=null):O&&!this.$resizeObserver&&this.$addResizeObserver()}},animatedScroll:{initialValue:!1},showInvisibles:{set:function(O){this.$textLayer.setShowInvisibles(O)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(O){typeof O=="number"&&(this.$printMarginColumn=O),this.$showPrintMargin=!!O,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(O){this.$gutter.style.display=O?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},useSvgGutterIcons:{set:function(O){this.$gutterLayer.$useSvgGutterIcons=O},initialValue:!1},showFoldedAnnotations:{set:function(O){this.$gutterLayer.$showFoldedAnnotations=O},initialValue:!1},fadeFoldWidgets:{set:function(O){s.setCssClass(this.$gutter,"ace_fade-fold-widgets",O)},initialValue:!1},showFoldWidgets:{set:function(O){this.$gutterLayer.setShowFoldWidgets(O),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(O){this.$textLayer.setDisplayIndentGuides(O)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightIndentGuides:{set:function(O){this.$textLayer.setHighlightIndentGuides(O)==!0?this.$textLayer.$highlightIndentGuide():this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells)},initialValue:!0},highlightGutterLine:{set:function(O){this.$gutterLayer.setHighlightGutterLine(O),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},hScrollBarAlwaysVisible:{set:function(O){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(O){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(O){typeof O=="number"&&(O=O+"px"),this.container.style.fontSize=O,this.updateFontSize()},initialValue:12},fontFamily:{set:function(O){this.container.style.fontFamily=O,this.updateFontSize()}},maxLines:{set:function(O){this.updateFull()}},minLines:{set:function(O){this.$minLines<562949953421311||(this.$minLines=0),this.updateFull()}},maxPixelHeight:{set:function(O){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(O){O=+O||0,this.$scrollPastEnd!=O&&(this.$scrollPastEnd=O,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(O){this.$gutterLayer.$fixedWidth=!!O,this.$loop.schedule(this.CHANGE_GUTTER)}},customScrollbar:{set:function(O){this.$updateCustomScrollbar(O)},initialValue:!1},theme:{set:function(O){this.setTheme(O)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0},hasCssTransforms:{},useTextareaForIME:{initialValue:!b.isMobile&&!b.isIE}}),p.VirtualRenderer=M}),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],function(e,p,m){var g=e("../lib/oop"),s=e("../lib/net"),c=e("../lib/event_emitter").EventEmitter,i=e("../config");function f(l){var a="importScripts('"+s.qualifyURL(l)+"');";try{return new Blob([a],{type:"application/javascript"})}catch{var u=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,h=new u;return h.append(a),h.getBlob("application/javascript")}}function n(l){if(typeof Worker=="undefined")return{postMessage:function(){},terminate:function(){}};if(i.get("loadWorkerFromBlob")){var a=f(l),u=window.URL||window.webkitURL,h=u.createObjectURL(a);return new Worker(h)}return new Worker(l)}var o=function(l){l.postMessage||(l=this.$createWorkerFromOldConfig.apply(this,arguments)),this.$worker=l,this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){g.implement(this,c),this.$createWorkerFromOldConfig=function(l,a,u,h,$){if(e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),i.get("packaged")||!e.toUrl)h=h||i.moduleUrl(a,"worker");else{var v=this.$normalizePath;h=h||v(e.toUrl("ace/worker/worker.js",null,"_"));var w={};l.forEach(function(y){w[y]=v(e.toUrl(y,null,"_").replace(/(\.js)?(\?.*)?$/,""))})}return this.$worker=n(h),$&&this.send("importScripts",$),this.$worker.postMessage({init:!0,tlns:w,module:a,classname:u}),this.$worker},this.onMessage=function(l){var a=l.data;switch(a.type){case"event":this._signal(a.name,{data:a.data});break;case"call":var u=this.callbacks[a.id];u&&(u(a.data),delete this.callbacks[a.id]);break;case"error":this.reportError(a.data);break;case"log":window.console&&console.log&&console.log.apply(console,a.data);break}},this.reportError=function(l){window.console&&console.error&&console.error(l)},this.$normalizePath=function(l){return s.qualifyURL(l)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker.onerror=function(l){l.preventDefault()},this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(l,a){this.$worker.postMessage({command:l,args:a})},this.call=function(l,a,u){if(u){var h=this.callbackId++;this.callbacks[h]=u,a.push(h)}this.send(l,a)},this.emit=function(l,a){try{a.data&&a.data.err&&(a.data.err={message:a.data.err.message,stack:a.data.err.stack,code:a.data.err.code}),this.$worker&&this.$worker.postMessage({event:l,data:{data:a.data}})}catch(u){console.error(u.stack)}},this.attachToDocument=function(l){this.$doc&&this.terminate(),this.$doc=l,this.call("setValue",[l.getValue()]),l.on("change",this.changeListener,!0)},this.changeListener=function(l){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),l.action=="insert"?this.deltaQueue.push(l.start,l.lines):this.deltaQueue.push(l.start,l.end)},this.$sendDeltaQueue=function(){var l=this.deltaQueue;!l||(this.deltaQueue=null,l.length>50&&l.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:l}))}}).call(o.prototype);var r=function(l,a,u){var h=null,$=!1,v=Object.create(c),w=[],y=new o({messageBuffer:w,terminate:function(){},postMessage:function(b){w.push(b),!!h&&($?setTimeout(_):_())}});y.setEmitSync=function(b){$=b};var _=function(){var b=w.shift();b.command?h[b.command].apply(h,b.args):b.event&&v._signal(b.event,b.data)};return v.postMessage=function(b){y.onMessage({data:b})},v.callback=function(b,S){this.postMessage({type:"call",id:S,data:b})},v.emit=function(b,S){this.postMessage({type:"event",name:b,data:S})},i.loadModule(["worker",a],function(b){for(h=new b[u](v);w.length;)_()}),y};p.UIWorkerClient=r,p.WorkerClient=o,p.createWorker=n}),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,p,m){var g=e("./range").Range,s=e("./lib/event_emitter").EventEmitter,c=e("./lib/oop"),i=function(){function f(n,o,r,l,a,u){var h=this;this.length=o,this.session=n,this.doc=n.getDocument(),this.mainClass=a,this.othersClass=u,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate,!0),this.$others=l,this.$onCursorChange=function(){setTimeout(function(){h.onCursorChange()})},this.$pos=r;var $=n.getUndoManager().$undoStack||n.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=$.length,this.setup(),n.selection.on("changeCursor",this.$onCursorChange)}return f.prototype.setup=function(){var n=this,o=this.doc,r=this.session;this.selectionBefore=r.selection.toJSON(),r.selection.inMultiSelectMode&&r.selection.toSingleRange(),this.pos=o.createAnchor(this.$pos.row,this.$pos.column);var l=this.pos;l.$insertRight=!0,l.detach(),l.markerId=r.addMarker(new g(l.row,l.column,l.row,l.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(a){var u=o.createAnchor(a.row,a.column);u.$insertRight=!0,u.detach(),n.others.push(u)}),r.setUndoSelect(!1)},f.prototype.showOtherMarkers=function(){if(!this.othersActive){var n=this.session,o=this;this.othersActive=!0,this.others.forEach(function(r){r.markerId=n.addMarker(new g(r.row,r.column,r.row,r.column+o.length),o.othersClass,null,!1)})}},f.prototype.hideOtherMarkers=function(){if(!!this.othersActive){this.othersActive=!1;for(var n=0;n=this.pos.column&&o.start.column<=this.pos.column+this.length+1,a=o.start.column-this.pos.column;if(this.updateAnchors(n),l&&(this.length+=r),l&&!this.session.$fromUndo){if(n.action==="insert")for(var u=this.others.length-1;u>=0;u--){var h=this.others[u],$={row:h.row,column:h.column+a};this.doc.insertMergedLines($,n.lines)}else if(n.action==="remove")for(var u=this.others.length-1;u>=0;u--){var h=this.others[u],$={row:h.row,column:h.column+a};this.doc.remove(new g($.row,$.column,$.row,$.column-r))}}this.$updating=!1,this.updateMarkers()}},f.prototype.updateAnchors=function(n){this.pos.onChange(n);for(var o=this.others.length;o--;)this.others[o].onChange(n);this.updateMarkers()},f.prototype.updateMarkers=function(){if(!this.$updating){var n=this,o=this.session,r=function(a,u){o.removeMarker(a.markerId),a.markerId=o.addMarker(new g(a.row,a.column,a.row,a.column+n.length),u,null,!1)};r(this.pos,this.mainClass);for(var l=this.others.length;l--;)r(this.others[l],this.othersClass)}},f.prototype.onCursorChange=function(n){if(!(this.$updating||!this.session)){var o=this.session.selection.getCursor();o.row===this.pos.row&&o.column>=this.pos.column&&o.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",n)):(this.hideOtherMarkers(),this._emit("cursorLeave",n))}},f.prototype.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.off("change",this.$onUpdate),this.session.selection.off("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},f.prototype.cancel=function(){if(this.$undoStackDepth!==-1){for(var n=this.session.getUndoManager(),o=(n.$undoStack||n.$undostack).length-this.$undoStackDepth,r=0;r1?s.multiSelect.joinSelections():s.multiSelect.splitIntoLines()},bindKey:{win:"Ctrl-Alt-L",mac:"Ctrl-Alt-L"},readOnly:!0},{name:"splitSelectionIntoLines",description:"Split into lines",exec:function(s){s.multiSelect.splitIntoLines()},readOnly:!0},{name:"alignCursors",description:"Align cursors",exec:function(s){s.alignCursors()},bindKey:{win:"Ctrl-Alt-A",mac:"Ctrl-Alt-A"},scrollIntoView:"cursor"},{name:"findAll",description:"Find all",exec:function(s){s.findAll()},bindKey:{win:"Ctrl-Alt-K",mac:"Ctrl-Alt-G"},scrollIntoView:"cursor",readOnly:!0}],p.multiSelectCommands=[{name:"singleSelection",description:"Single selection",bindKey:"esc",exec:function(s){s.exitMultiSelectMode()},scrollIntoView:"cursor",readOnly:!0,isAvailable:function(s){return s&&s.inMultiSelectMode}}];var g=e("../keyboard/hash_handler").HashHandler;p.keyboardHandler=new g(p.multiSelectCommands)}),ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"],function(e,p,m){var g=e("./range_list").RangeList,s=e("./range").Range,c=e("./selection").Selection,i=e("./mouse/multi_select_handler").onMouseDown,f=e("./lib/event"),n=e("./lib/lang"),o=e("./commands/multi_select_commands");p.commands=o.defaultCommands.concat(o.multiSelectCommands);var r=e("./search").Search,l=new r;function a(y,_,b){return l.$options.wrap=!0,l.$options.needle=_,l.$options.backwards=b==-1,l.find(y)}var u=e("./edit_session").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(u.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(y,_){if(!!y){if(!this.inMultiSelectMode&&this.rangeCount===0){var b=this.toOrientedRange();if(this.rangeList.add(b),this.rangeList.add(y),this.rangeList.ranges.length!=2)return this.rangeList.removeAll(),_||this.fromOrientedRange(y);this.rangeList.removeAll(),this.rangeList.add(b),this.$onAddRange(b)}y.cursor||(y.cursor=y.end);var S=this.rangeList.add(y);return this.$onAddRange(y),S.length&&this.$onRemoveRange(S),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),_||this.fromOrientedRange(y)}},this.toSingleRange=function(y){y=y||this.ranges[0];var _=this.rangeList.removeAll();_.length&&this.$onRemoveRange(_),y&&this.fromOrientedRange(y)},this.substractPoint=function(y){var _=this.rangeList.substractPoint(y);if(_)return this.$onRemoveRange(_),_[0]},this.mergeOverlappingRanges=function(){var y=this.rangeList.merge();y.length&&this.$onRemoveRange(y)},this.$onAddRange=function(y){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(y),this._signal("addRange",{range:y})},this.$onRemoveRange=function(y){if(this.rangeCount=this.rangeList.ranges.length,this.rangeCount==1&&this.inMultiSelectMode){var _=this.rangeList.ranges.pop();y.push(_),this.rangeCount=0}for(var b=y.length;b--;){var S=this.ranges.indexOf(y[b]);this.ranges.splice(S,1)}this._signal("removeRange",{ranges:y}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),_=_||this.ranges[0],_&&!_.isEqual(this.getRange())&&this.fromOrientedRange(_)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new g,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){for(var y=this.ranges.length?this.ranges:[this.getRange()],_=[],b=0;b1){var y=this.rangeList.ranges,_=y[y.length-1],b=s.fromPoints(y[0].start,_.end);this.toSingleRange(),this.setSelectionRange(b,_.cursor==_.start)}else{var S=this.session.documentToScreenPosition(this.cursor),M=this.session.documentToScreenPosition(this.anchor),O=this.rectangularRangeBlock(S,M);O.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(y,_,b){var S=[],M=y.column<_.column;if(M)var O=y.column,k=_.column,A=y.offsetX,T=_.offsetX;else var O=_.column,k=y.column,A=_.offsetX,T=y.offsetX;var E=y.row<_.row;if(E)var C=y.row,x=_.row;else var C=_.row,x=y.row;O<0&&(O=0),C<0&&(C=0),C==x&&(b=!0);for(var L,q=C;q<=x;q++){var N=s.fromPoints(this.session.screenToDocumentPosition(q,O,A),this.session.screenToDocumentPosition(q,k,T));if(N.isEmpty()){if(L&&$(N.end,L))break;L=N.end}N.cursor=M?N.start:N.end,S.push(N)}if(E&&S.reverse(),!b){for(var F=S.length-1;S[F].isEmpty()&&F>0;)F--;if(F>0)for(var I=0;S[I].isEmpty();)I++;for(var R=F;R>=I;R--)S[R].isEmpty()&&S.splice(R,1)}return S}}.call(c.prototype);var h=e("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(y){y.cursor||(y.cursor=y.end);var _=this.getSelectionStyle();return y.marker=this.session.addMarker(y,"ace_selection",_),this.session.$selectionMarkers.push(y),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,y},this.removeSelectionMarker=function(y){if(!!y.marker){this.session.removeMarker(y.marker);var _=this.session.$selectionMarkers.indexOf(y);_!=-1&&this.session.$selectionMarkers.splice(_,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(y){for(var _=this.session.$selectionMarkers,b=y.length;b--;){var S=y[b];if(!!S.marker){this.session.removeMarker(S.marker);var M=_.indexOf(S);M!=-1&&_.splice(M,1)}}this.session.selectionMarkerCount=_.length},this.$onAddRange=function(y){this.addSelectionMarker(y.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(y){this.removeSelectionMarkers(y.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(y){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(o.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(y){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(o.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(y){var _=y.command,b=y.editor;if(!!b.multiSelect){if(_.multiSelectAction)_.multiSelectAction=="forEach"?S=b.forEachSelection(_,y.args):_.multiSelectAction=="forEachLine"?S=b.forEachSelection(_,y.args,!0):_.multiSelectAction=="single"?(b.exitMultiSelectMode(),S=_.exec(b,y.args||{})):S=_.multiSelectAction(b,y.args||{});else{var S=_.exec(b,y.args||{});b.multiSelect.addRange(b.multiSelect.toOrientedRange()),b.multiSelect.mergeOverlappingRanges()}return S}},this.forEachSelection=function(y,_,b){if(!this.inVirtualSelectionMode){var S=b&&b.keepOrder,M=b==!0||b&&b.$byLines,O=this.session,k=this.selection,A=k.rangeList,T=(S?k:A).ranges,E;if(!T.length)return y.exec?y.exec(this,_||{}):y(this,_||{});var C=k._eventRegistry;k._eventRegistry={};var x=new c(O);this.inVirtualSelectionMode=!0;for(var L=T.length;L--;){if(M)for(;L>0&&T[L].start.row==T[L-1].end.row;)L--;x.fromOrientedRange(T[L]),x.index=L,this.selection=O.selection=x;var q=y.exec?y.exec(this,_||{}):y(this,_||{});!E&&q!==void 0&&(E=q),x.toOrientedRange(T[L])}x.detach(),this.selection=O.selection=k,this.inVirtualSelectionMode=!1,k._eventRegistry=C,k.mergeOverlappingRanges(),k.ranges[0]&&k.fromOrientedRange(k.ranges[0]);var N=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),N&&N.from==N.to&&this.renderer.animateScrolling(N.from),E}},this.exitMultiSelectMode=function(){!this.inMultiSelectMode||this.inVirtualSelectionMode||this.multiSelect.toSingleRange()},this.getSelectedText=function(){var y="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var _=this.multiSelect.rangeList.ranges,b=[],S=0;S<_.length;S++)b.push(this.session.getTextRange(_[S]));var M=this.session.getDocument().getNewLineCharacter();y=b.join(M),y.length==(b.length-1)*M.length&&(y="")}else this.selection.isEmpty()||(y=this.session.getTextRange(this.getSelectionRange()));return y},this.$checkMultiselectChange=function(y,_){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var b=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&_==this.multiSelect.anchor)return;var S=_==this.multiSelect.anchor?b.cursor==b.start?b.end:b.start:b.cursor;S.row!=_.row||this.session.$clipPositionToDocument(S.row,S.column).column!=_.column?this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()):this.multiSelect.mergeOverlappingRanges()}},this.findAll=function(y,_,b){if(_=_||{},_.needle=y||_.needle,_.needle==null){var S=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();_.needle=this.session.getTextRange(S)}this.$search.set(_);var M=this.$search.findAll(this.session);if(!M.length)return 0;var O=this.multiSelect;b||O.toSingleRange(M[0]);for(var k=M.length;k--;)O.addRange(M[k],!0);return S&&O.rangeList.rangeAtPoint(S.start)&&O.addRange(S,!0),M.length},this.selectMoreLines=function(y,_){var b=this.selection.toOrientedRange(),S=b.cursor==b.end,M=this.session.documentToScreenPosition(b.cursor);this.selection.$desiredColumn&&(M.column=this.selection.$desiredColumn);var O=this.session.screenToDocumentPosition(M.row+y,M.column);if(b.isEmpty())var A=O;else var k=this.session.documentToScreenPosition(S?b.end:b.start),A=this.session.screenToDocumentPosition(k.row+y,k.column);if(S){var T=s.fromPoints(O,A);T.cursor=T.start}else{var T=s.fromPoints(A,O);T.cursor=T.end}if(T.desiredColumn=M.column,!this.selection.inMultiSelectMode)this.selection.addRange(b);else if(_)var E=b.cursor;this.selection.addRange(T),E&&this.selection.substractPoint(E)},this.transposeSelections=function(y){for(var _=this.session,b=_.multiSelect,S=b.ranges,M=S.length;M--;){var O=S[M];if(O.isEmpty()){var k=_.getWordRange(O.start.row,O.start.column);O.start.row=k.start.row,O.start.column=k.start.column,O.end.row=k.end.row,O.end.column=k.end.column}}b.mergeOverlappingRanges();for(var A=[],M=S.length;M--;){var O=S[M];A.unshift(_.getTextRange(O))}y<0?A.unshift(A.pop()):A.push(A.shift());for(var M=S.length;M--;){var O=S[M],T=O.clone();_.replace(O,A[M]),O.start.row=T.start.row,O.start.column=T.start.column}b.fromOrientedRange(b.ranges[0])},this.selectMore=function(y,_,b){var S=this.session,M=S.multiSelect,O=M.toOrientedRange();if(!(O.isEmpty()&&(O=S.getWordRange(O.start.row,O.start.column),O.cursor=y==-1?O.start:O.end,this.multiSelect.addRange(O),b))){var k=S.getTextRange(O),A=a(S,k,y);A&&(A.cursor=y==-1?A.start:A.end,this.session.unfold(A),this.multiSelect.addRange(A),this.renderer.scrollCursorIntoView(null,.5)),_&&this.multiSelect.substractPoint(O.cursor)}},this.alignCursors=function(){var y=this.session,_=y.multiSelect,b=_.ranges,S=-1,M=b.filter(function(F){if(F.cursor.row==S)return!0;S=F.cursor.row});if(!b.length||M.length==b.length-1){var O=this.selection.getRange(),k=O.start.row,A=O.end.row,T=k==A;if(T){var E=this.session.getLength(),C;do C=this.session.getLine(A);while(/[=:]/.test(C)&&++A0);k<0&&(k=0),A>=E&&(A=E-1)}var x=this.session.removeFullLines(k,A);x=this.$reAlignText(x,T),this.session.insert({row:k,column:0},x.join(` +`)+` +`),T||(O.start.column=0,O.end.column=x[x.length-1].length),this.selection.setRange(O)}else{M.forEach(function(F){_.substractPoint(F.cursor)});var L=0,q=1/0,N=b.map(function(F){var I=F.cursor,R=y.getLine(I.row),B=R.substr(I.column).search(/\S/g);return B==-1&&(B=0),I.column>L&&(L=I.column),BD?y.insert(R,n.stringRepeat(" ",B-D)):y.remove(new s(R.row,R.column,R.row,R.column-B+D)),F.start.column=F.end.column=L,F.start.row=F.end.row=R.row,F.cursor=F.end}),_.fromOrientedRange(b[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(y,_){var b=!0,S=!0,M,O,k;return y.map(function(x){var L=x.match(/(\s*)(.*?)(\s*)([=:].*)/);return L?M==null?(M=L[1].length,O=L[2].length,k=L[3].length,L):(M+O+k!=L[1].length+L[2].length+L[3].length&&(S=!1),M!=L[1].length&&(b=!1),M>L[1].length&&(M=L[1].length),OL[3].length&&(k=L[3].length),L):[x]}).map(_?T:b?S?E:T:C);function A(x){return n.stringRepeat(" ",x)}function T(x){return x[2]?A(M)+x[2]+A(O-x[2].length+k)+x[4].replace(/^([=:])\s+/,"$1 "):x[0]}function E(x){return x[2]?A(M+O-x[2].length)+x[2]+A(k)+x[4].replace(/^([=:])\s+/,"$1 "):x[0]}function C(x){return x[2]?A(M)+x[2]+A(k)+x[4].replace(/^([=:])\s+/,"$1 "):x[0]}}}).call(h.prototype);function $(y,_){return y.row==_.row&&y.column==_.column}p.onSessionChange=function(y){var _=y.session;_&&!_.multiSelect&&(_.$selectionMarkers=[],_.selection.$initRangeList(),_.multiSelect=_.selection),this.multiSelect=_&&_.multiSelect;var b=y.oldSession;b&&(b.multiSelect.off("addRange",this.$onAddRange),b.multiSelect.off("removeRange",this.$onRemoveRange),b.multiSelect.off("multiSelect",this.$onMultiSelect),b.multiSelect.off("singleSelect",this.$onSingleSelect),b.multiSelect.lead.off("change",this.$checkMultiselectChange),b.multiSelect.anchor.off("change",this.$checkMultiselectChange)),_&&(_.multiSelect.on("addRange",this.$onAddRange),_.multiSelect.on("removeRange",this.$onRemoveRange),_.multiSelect.on("multiSelect",this.$onMultiSelect),_.multiSelect.on("singleSelect",this.$onSingleSelect),_.multiSelect.lead.on("change",this.$checkMultiselectChange),_.multiSelect.anchor.on("change",this.$checkMultiselectChange)),_&&this.inMultiSelectMode!=_.selection.inMultiSelectMode&&(_.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())};function v(y){y.$multiselectOnSessionChange||(y.$onAddRange=y.$onAddRange.bind(y),y.$onRemoveRange=y.$onRemoveRange.bind(y),y.$onMultiSelect=y.$onMultiSelect.bind(y),y.$onSingleSelect=y.$onSingleSelect.bind(y),y.$multiselectOnSessionChange=p.onSessionChange.bind(y),y.$checkMultiselectChange=y.$checkMultiselectChange.bind(y),y.$multiselectOnSessionChange(y),y.on("changeSession",y.$multiselectOnSessionChange),y.on("mousedown",i),y.commands.addCommands(o.defaultCommands),w(y))}function w(y){if(!y.textInput)return;var _=y.textInput.getElement(),b=!1;f.addListener(_,"keydown",function(M){var O=M.keyCode==18&&!(M.ctrlKey||M.shiftKey||M.metaKey);y.$blockSelectEnabled&&O?b||(y.renderer.setMouseCursor("crosshair"),b=!0):b&&S()},y),f.addListener(_,"keyup",S,y),f.addListener(_,"blur",S,y);function S(M){b&&(y.renderer.setMouseCursor(""),b=!1)}}p.MultiSelect=v,e("./config").defineOptions(h.prototype,"editor",{enableMultiselect:{set:function(y){v(this),y?this.on("mousedown",i):this.off("mousedown",i)},value:!0},enableBlockSelect:{set:function(y){this.$blockSelectEnabled=y},value:!0}})}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,p,m){var g=e("../../range").Range,s=p.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(c,i,f){var n=c.getLine(f);return this.foldingStartMarker.test(n)?"start":i=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(n)?"end":""},this.getFoldWidgetRange=function(c,i,f){return null},this.indentationBlock=function(c,i,f){var n=/\S/,o=c.getLine(i),r=o.search(n);if(r!=-1){for(var l=f||o.length,a=c.getLength(),u=i,h=i;++iu){var w=c.getLine(h).length;return new g(u,l,h,w)}}},this.openingBracketBlock=function(c,i,f,n,o){var r={row:f,column:n+1},l=c.$findClosingBracket(i,r,o);if(!!l){var a=c.foldWidgets[l.row];return a==null&&(a=c.getFoldWidget(l.row)),a=="start"&&l.row>r.row&&(l.row--,l.column=c.getLine(l.row).length),g.fromPoints(r,l)}},this.closingBracketBlock=function(c,i,f,n,o){var r={row:f,column:n},l=c.$findOpeningBracket(i,r);if(!!l)return l.column++,r.column--,g.fromPoints(l,r)}}).call(s.prototype)}),ace.define("ace/ext/error_marker",["require","exports","module","ace/lib/dom","ace/range","ace/config"],function(e,p,m){var g=e("../lib/dom"),s=e("../range").Range,c=e("../config").nls;function i(n,o,r){for(var l=0,a=n.length-1;l<=a;){var u=l+a>>1,h=r(o,n[u]);if(h>0)l=u+1;else if(h<0)a=u-1;else return u}return-(l+1)}function f(n,o,r){var l=n.getAnnotations().sort(s.comparePoints);if(!!l.length){var a=i(l,{row:o,column:-1},s.comparePoints);a<0&&(a=-a-1),a>=l.length?a=r>0?0:l.length-1:a===0&&r<0&&(a=l.length-1);var u=l[a];if(!(!u||!r)){if(u.row===o){do u=l[a+=r];while(u&&u.row===o);if(!u)return l.slice()}var h=[];o=u.row;do h[r<0?"unshift":"push"](u),u=l[a+=r];while(u&&u.row==o);return h.length&&h}}}p.showErrorMarker=function(n,o){var r=n.session,l=n.getCursorPosition(),a=l.row,u=r.widgetManager.getWidgetsAtRow(a).filter(function(M){return M.type=="errorMarker"})[0];u?u.destroy():a-=o;var h=f(r,a,o),$;if(h){var v=h[0];l.column=(v.pos&&typeof v.column!="number"?v.pos.sc:v.column)||0,l.row=v.row,$=n.renderer.$gutterLayer.$annotations[l.row]}else{if(u)return;$={displayText:[c("error-marker.good-state","Looks good!")],className:"ace_ok"}}n.session.unfold(l.row),n.selection.moveToPosition(l);var w={row:l.row,fixedWidth:!0,coverGutter:!0,el:g.createElement("div"),type:"errorMarker"},y=w.el.appendChild(g.createElement("div")),_=w.el.appendChild(g.createElement("div"));_.className="error_widget_arrow "+$.className;var b=n.renderer.$cursorLayer.getPixelPosition(l).left;_.style.left=b+n.renderer.gutterWidth-5+"px",w.el.className="error_widget_wrapper",y.className="error_widget "+$.className,$.displayText.forEach(function(M,O){y.appendChild(g.createTextNode(M)),O<$.displayText.length-1&&y.appendChild(g.createElement("br"))}),y.appendChild(g.createElement("div"));var S=function(M,O,k){if(O===0&&(k==="esc"||k==="return"))return w.destroy(),{command:"null"}};w.destroy=function(){n.$mouseHandler.isMousePressed||(n.keyBinding.removeKeyboardHandler(S),r.widgetManager.removeLineWidget(w),n.off("changeSelection",w.destroy),n.off("changeSession",w.destroy),n.off("mouseup",w.destroy),n.off("change",w.destroy))},n.keyBinding.addKeyboardHandler(S),n.on("changeSelection",w.destroy),n.on("changeSession",w.destroy),n.on("mouseup",w.destroy),n.on("change",w.destroy),n.session.widgetManager.addLineWidget(w),w.el.onmousedown=n.focus.bind(n),n.renderer.scrollCursorIntoView(null,.5,{bottom:w.el.offsetHeight})},g.importCssString(` + .error_widget_wrapper { + background: inherit; + color: inherit; + border:none + } + .error_widget { + border-top: solid 2px; + border-bottom: solid 2px; + margin: 5px 0; + padding: 10px 40px; + white-space: pre-wrap; + } + .error_widget.ace_error, .error_widget_arrow.ace_error{ + border-color: #ff5a5a + } + .error_widget.ace_warning, .error_widget_arrow.ace_warning{ + border-color: #F1D817 + } + .error_widget.ace_info, .error_widget_arrow.ace_info{ + border-color: #5a5a5a + } + .error_widget.ace_ok, .error_widget_arrow.ace_ok{ + border-color: #5aaa5a + } + .error_widget_arrow { + position: absolute; + border: solid 5px; + border-top-color: transparent!important; + border-right-color: transparent!important; + border-left-color: transparent!important; + top: -5px; + } +`,"error_marker.css",!1)}),ace.define("ace/ace",["require","exports","module","ace/lib/dom","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config","ace/loader_build"],function(e,p,m){e("./loader_build")(p);var g=e("./lib/dom"),s=e("./range").Range,c=e("./editor").Editor,i=e("./edit_session").EditSession,f=e("./undomanager").UndoManager,n=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),p.config=e("./config"),p.edit=function(r,l){if(typeof r=="string"){var a=r;if(r=document.getElementById(a),!r)throw new Error("ace.edit can't find div #"+a)}if(r&&r.env&&r.env.editor instanceof c)return r.env.editor;var u="";if(r&&/input|textarea/i.test(r.tagName)){var h=r;u=h.value,r=g.createElement("pre"),h.parentNode.replaceChild(r,h)}else r&&(u=r.textContent,r.innerHTML="");var $=p.createEditSession(u),v=new c(new n(r),$,l),w={document:$,editor:v,onResize:v.resize.bind(v,null)};return h&&(w.textarea=h),v.on("destroy",function(){w.editor.container.env=null}),v.container.env=v.env=w,v},p.createEditSession=function(r,l){var a=new i(r,l);return a.setUndoManager(new f),a},p.Range=s,p.Editor=c,p.EditSession=i,p.UndoManager=f,p.VirtualRenderer=n;var o=p.config.version;p.version=o}),function(){ace.require(["ace/ace"],function(e){e&&(e.config.init(!0),e.define=ace.define);var p=function(){return this}();!p&&typeof window!="undefined"&&(p=window),!p&&typeof self!="undefined"&&(p=self),p.ace||(p.ace=e);for(var m in e)e.hasOwnProperty(m)&&(p.ace[m]=e[m]);p.ace.default=p.ace,t&&(t.exports=p.ace)})}()})(ace$2);var ace$1=ace$2.exports,themeSqlserver={exports:{}};(function(t,d){ace.define("ace/theme/sqlserver-css",["require","exports","module"],function(e,p,m){m.exports=`.ace-sqlserver .ace_gutter { + background: #ebebeb; + color: #333; + overflow: hidden; +} + +.ace-sqlserver .ace_print-margin { + width: 1px; + background: #e8e8e8; +} + +.ace-sqlserver { + background-color: #FFFFFF; + color: black; +} + +.ace-sqlserver .ace_identifier { + color: black; +} + +.ace-sqlserver .ace_keyword { + color: #0000FF; +} + +.ace-sqlserver .ace_numeric { + color: black; +} + +.ace-sqlserver .ace_storage { + color: #11B7BE; +} + +.ace-sqlserver .ace_keyword.ace_operator, +.ace-sqlserver .ace_lparen, +.ace-sqlserver .ace_rparen, +.ace-sqlserver .ace_punctuation { + color: #808080; +} + +.ace-sqlserver .ace_set.ace_statement { + color: #0000FF; + text-decoration: underline; +} + +.ace-sqlserver .ace_cursor { + color: black; +} + +.ace-sqlserver .ace_invisible { + color: rgb(191, 191, 191); +} + +.ace-sqlserver .ace_constant.ace_buildin { + color: rgb(88, 72, 246); +} + +.ace-sqlserver .ace_constant.ace_language { + color: #979797; +} + +.ace-sqlserver .ace_constant.ace_library { + color: rgb(6, 150, 14); +} + +.ace-sqlserver .ace_invalid { + background-color: rgb(153, 0, 0); + color: white; +} + +.ace-sqlserver .ace_support.ace_function { + color: #FF00FF; +} + +.ace-sqlserver .ace_support.ace_constant { + color: rgb(6, 150, 14); +} + +.ace-sqlserver .ace_class { + color: #008080; +} + +.ace-sqlserver .ace_support.ace_other { + color: #6D79DE; +} + +.ace-sqlserver .ace_variable.ace_parameter { + font-style: italic; + color: #FD971F; +} + +.ace-sqlserver .ace_comment { + color: #008000; +} + +.ace-sqlserver .ace_constant.ace_numeric { + color: black; +} + +.ace-sqlserver .ace_variable { + color: rgb(49, 132, 149); +} + +.ace-sqlserver .ace_xml-pe { + color: rgb(104, 104, 91); +} + +.ace-sqlserver .ace_support.ace_storedprocedure { + color: #800000; +} + +.ace-sqlserver .ace_heading { + color: rgb(12, 7, 255); +} + +.ace-sqlserver .ace_list { + color: rgb(185, 6, 144); +} + +.ace-sqlserver .ace_marker-layer .ace_selection { + background: rgb(181, 213, 255); +} + +.ace-sqlserver .ace_marker-layer .ace_step { + background: rgb(252, 255, 0); +} + +.ace-sqlserver .ace_marker-layer .ace_stack { + background: rgb(164, 229, 101); +} + +.ace-sqlserver .ace_marker-layer .ace_bracket { + margin: -1px 0 0 -1px; + border: 1px solid rgb(192, 192, 192); +} + +.ace-sqlserver .ace_marker-layer .ace_active-line { + background: rgba(0, 0, 0, 0.07); +} + +.ace-sqlserver .ace_gutter-active-line { + background-color: #dcdcdc; +} + +.ace-sqlserver .ace_marker-layer .ace_selected-word { + background: rgb(250, 250, 255); + border: 1px solid rgb(200, 200, 250); +} + +.ace-sqlserver .ace_meta.ace_tag { + color: #0000FF; +} + +.ace-sqlserver .ace_string.ace_regex { + color: #FF0000; +} + +.ace-sqlserver .ace_string { + color: #FF0000; +} + +.ace-sqlserver .ace_entity.ace_other.ace_attribute-name { + color: #994409; +} + +.ace-sqlserver .ace_indent-guide { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y; +} + +.ace-sqlserver .ace_indent-guide-active { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC") right repeat-y; +} +`}),ace.define("ace/theme/sqlserver",["require","exports","module","ace/theme/sqlserver-css","ace/lib/dom"],function(e,p,m){p.isDark=!1,p.cssClass="ace-sqlserver",p.cssText=e("./sqlserver-css");var g=e("../lib/dom");g.importCssString(p.cssText,p.cssClass,!1)}),function(){ace.require(["ace/theme/sqlserver"],function(e){t&&(t.exports=e)})}()})(themeSqlserver);var modeJavascript={exports:{}};(function(t,d){ace.define("ace/mode/jsdoc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,p,m){var g=e("../lib/oop"),s=e("./text_highlight_rules").TextHighlightRules,c=function(){this.$rules={start:[{token:["comment.doc.tag","comment.doc.text","lparen.doc"],regex:"(@(?:param|member|typedef|property|namespace|var|const|callback))(\\s*)({)",push:[{token:"lparen.doc",regex:"{",push:[{include:"doc-syntax"},{token:"rparen.doc",regex:"}|(?=$)",next:"pop"}]},{token:["rparen.doc","text.doc","variable.parameter.doc","lparen.doc","variable.parameter.doc","rparen.doc"],regex:/(})(\s*)(?:([\w=:\/\.]+)|(?:(\[)([\w=:\/\.\-\'\" ]+)(\])))/,next:"pop"},{token:"rparen.doc",regex:"}|(?=$)",next:"pop"},{include:"doc-syntax"},{defaultToken:"text.doc"}]},{token:["comment.doc.tag","text.doc","lparen.doc"],regex:"(@(?:returns?|yields|type|this|suppress|public|protected|private|package|modifies|implements|external|exception|throws|enum|define|extends))(\\s*)({)",push:[{token:"lparen.doc",regex:"{",push:[{include:"doc-syntax"},{token:"rparen.doc",regex:"}|(?=$)",next:"pop"}]},{token:"rparen.doc",regex:"}|(?=$)",next:"pop"},{include:"doc-syntax"},{defaultToken:"text.doc"}]},{token:["comment.doc.tag","text.doc","variable.parameter.doc"],regex:'(@(?:alias|memberof|instance|module|name|lends|namespace|external|this|template|requires|param|implements|function|extends|typedef|mixes|constructor|var|memberof\\!|event|listens|exports|class|constructs|interface|emits|fires|throws|const|callback|borrows|augments))(\\s+)(\\w[\\w#.:/~"\\-]*)?'},{token:["comment.doc.tag","text.doc","variable.parameter.doc"],regex:"(@method)(\\s+)(\\w[\\w.\\(\\)]*)"},{token:"comment.doc.tag",regex:"@access\\s+(?:private|public|protected)"},{token:"comment.doc.tag",regex:"@kind\\s+(?:class|constant|event|external|file|function|member|mixin|module|namespace|typedef)"},{token:"comment.doc.tag",regex:"@\\w+(?=\\s|$)"},c.getTagRule(),{defaultToken:"comment.doc.body",caseInsensitive:!0}],"doc-syntax":[{token:"operator.doc",regex:/[|:]/},{token:"paren.doc",regex:/[\[\]]/}]},this.normalizeRules()};g.inherits(c,s),c.getTagRule=function(i){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},c.getStartRule=function(i){return{token:"comment.doc",regex:/\/\*\*(?!\/)/,next:i}},c.getEndRule=function(i){return{token:"comment.doc",regex:"\\*\\/",next:i}},p.JsDocCommentHighlightRules=c}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/jsdoc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,p,m){function g(){var r=n.replace("\\d","\\d\\-"),l={onMatch:function(u,h,$){var v=u.charAt(1)=="/"?2:1;return v==1?(h!=this.nextState?$.unshift(this.next,this.nextState,0):$.unshift(this.next),$[2]++):v==2&&h==this.nextState&&($[1]--,(!$[1]||$[1]<0)&&($.shift(),$.shift())),[{type:"meta.tag.punctuation."+(v==1?"":"end-")+"tag-open.xml",value:u.slice(0,v)},{type:"meta.tag.tag-name.xml",value:u.substr(v)}]},regex:"))",next:"jsxAttributes",nextState:"jsx"};this.$rules.start.unshift(l);var a={regex:"{",token:"paren.quasi.start",push:"start"};this.$rules.jsx=[a,l,{include:"reference"},{defaultToken:"string.xml"}],this.$rules.jsxAttributes=[{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",onMatch:function(u,h,$){return h==$[0]&&$.shift(),u.length==2&&($[0]==this.nextState&&$[1]--,(!$[1]||$[1]<0)&&$.splice(0,2)),this.next=$[0]||"start",[{type:this.token,value:u}]},nextState:"jsx"},a,s("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:r},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},l],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function s(r){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:r||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:r||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var c=e("../lib/oop"),i=e("./jsdoc_comment_highlight_rules").JsDocCommentHighlightRules,f=e("./text_highlight_rules").TextHighlightRules,n="[a-zA-Z\\$_\xA1-\uFFFF][a-zA-Z\\d\\$_\xA1-\uFFFF]*",o=function(r){var l={"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Symbol|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static|constructor","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},a=this.createKeywordMapper(l,"identifier"),u="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",h="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)",$="(function)(\\s*)(\\*?)",v={token:["identifier","text","paren.lparen"],regex:"(\\b(?!"+Object.values(l).join("|")+"\\b)"+n+")(\\s*)(\\()"};this.$rules={no_regex:[i.getStartRule("doc-start"),s("no_regex"),v,{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(=)(\\s*)"+$+"(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","storage.type","text","text","entity.name.function","text","paren.lparen"],regex:"(function)(?:(?:(\\s*)(\\*)(\\s*))|(\\s+))("+n+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","storage.type","text","paren.lparen"],regex:"("+n+")(\\s*)(:)(\\s*)"+$+"(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)"+$+"(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:`from(?=\\s*('|"))`},{token:"keyword",regex:"(?:"+u+")\\b",next:"start"},{token:"support.constant",regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|debug|time|trace|timeEnd|assert)\b/},{token:a,regex:n},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:"keyword.operator",regex:/=/},{token:["storage.type","text","storage.type","text","paren.lparen"],regex:$+"(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","storage.type","text","text","entity.name.function","text","paren.lparen"],regex:"(function)(?:(?:(\\s*)(\\*)(\\s*))|(\\s+))(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:"prototype"},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|lter|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward|rEach)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:n},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),s("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],default_parameter:[{token:"string",regex:"'(?=.)",push:[{token:"string",regex:"'|$",next:"pop"},{include:"qstring"}]},{token:"string",regex:'"(?=.)',push:[{token:"string",regex:'"|$',next:"pop"},{include:"qqstring"}]},{token:"constant.language",regex:"null|Infinity|NaN|undefined"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:"punctuation.operator",regex:",",next:"function_arguments"},{token:"text",regex:"\\s+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],function_arguments:[s("function_arguments"),{token:"variable.parameter",regex:n},{token:"punctuation.operator",regex:","},{token:"text",regex:"\\s+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:h},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:h},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!r||!r.noES6)&&(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(w,y,_){if(this.next=w=="{"?this.nextState:"",w=="{"&&_.length)_.unshift("start",y);else if(w=="}"&&_.length&&(_.shift(),this.next=_.shift(),this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1))return"paren.quasi.end";return w=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:h},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]},{token:["variable.parameter","text"],regex:"("+n+")(\\s*)(?=\\=>)"},{token:"paren.lparen",regex:"(\\()(?=[^\\(]+\\s*=>)",next:"function_arguments"},{token:"variable.language",regex:"(?:(?:(?:Weak)?(?:Set|Map))|Promise)\\b"}),this.$rules.function_arguments.unshift({token:"keyword.operator",regex:"=",next:"default_parameter"},{token:"keyword.operator",regex:"\\.{3}"}),this.$rules.property.unshift({token:"support.function",regex:"(findIndex|repeat|startsWith|endsWith|includes|isSafeInteger|trunc|cbrt|log2|log10|sign|then|catch|finally|resolve|reject|race|any|all|allSettled|keys|entries|isInteger)\\b(?=\\()"},{token:"constant.language",regex:"(?:MAX_SAFE_INTEGER|MIN_SAFE_INTEGER|EPSILON)\\b"}),(!r||r.jsx!=0)&&g.call(this)),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};c.inherits(o,f),p.JavaScriptHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,p,m){var g=e("../range").Range,s=function(){};(function(){this.checkOutdent=function(c,i){return/^\s+$/.test(c)?/^\s*\}/.test(i):!1},this.autoOutdent=function(c,i){var f=c.getLine(i),n=f.match(/^(\s*\})/);if(!n)return 0;var o=n[1].length,r=c.findMatchingBracket({row:i,column:o});if(!r||r.row==i)return 0;var l=this.$getIndent(c.getLine(r.row));c.replace(new g(i,0,i,o-1),l)},this.$getIndent=function(c){return c.match(/^\s*/)[0]}}).call(s.prototype),p.MatchingBraceOutdent=s}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator"],function(e,p,m){function g(n,o){return n&&n.type.lastIndexOf(o+".xml")>-1}var s=e("../../lib/oop"),c=e("../behaviour").Behaviour,i=e("../../token_iterator").TokenIterator,f=function(){this.add("string_dquotes","insertion",function(n,o,r,l,a){if(a=='"'||a=="'"){var u=a,h=l.doc.getTextRange(r.getSelectionRange());if(h!==""&&h!=="'"&&h!='"'&&r.getWrapBehavioursEnabled())return{text:u+h+u,selection:!1};var $=r.getCursorPosition(),v=l.doc.getLine($.row),w=v.substring($.column,$.column+1),y=new i(l,$.row,$.column),_=y.getCurrentToken();if(w==u&&(g(_,"attribute-value")||g(_,"string")))return{text:"",selection:[1,1]};if(_||(_=y.stepBackward()),!_)return;for(;g(_,"tag-whitespace")||g(_,"whitespace");)_=y.stepBackward();var b=!w||w.match(/\s/);if(g(_,"attribute-equals")&&(b||w==">")||g(_,"decl-attribute-equals")&&(b||w=="?"))return{text:u+u,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(n,o,r,l,a){var u=l.doc.getTextRange(a);if(!a.isMultiLine()&&(u=='"'||u=="'")){var h=l.doc.getLine(a.start.row),$=h.substring(a.start.column+1,a.start.column+2);if($==u)return a.end.column++,a}}),this.add("autoclosing","insertion",function(n,o,r,l,a){if(a==">"){var u=r.getSelectionRange().start,h=new i(l,u.row,u.column),$=h.getCurrentToken()||h.stepBackward();if(!$||!(g($,"tag-name")||g($,"tag-whitespace")||g($,"attribute-name")||g($,"attribute-equals")||g($,"attribute-value"))||g($,"reference.attribute-value"))return;if(g($,"attribute-value")){var v=h.getCurrentTokenColumn()+$.value.length;if(u.column/.test(l.getLine(u.row).slice(u.column)))return;for(;!g($,"tag-name");)if($=h.stepBackward(),$.value=="<"){$=h.stepForward();break}var y=h.getCurrentTokenRow(),_=h.getCurrentTokenColumn();if(g(h.stepBackward(),"end-tag-open"))return;var b=$.value;return y==u.row&&(b=b.substring(0,u.column-_)),this.voidElements&&this.voidElements.hasOwnProperty(b.toLowerCase())?void 0:{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(n,o,r,l,a){if(a==` +`){var u=r.getCursorPosition(),h=l.getLine(u.row),$=new i(l,u.row,u.column),v=$.getCurrentToken();if(g(v,"")&&v.type.indexOf("tag-close")!==-1){if(v.value=="/>")return;for(;v&&v.type.indexOf("tag-name")===-1;)v=$.stepBackward();if(!v)return;var w=v.value,y=$.getCurrentTokenRow();if(v=$.stepBackward(),!v||v.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[w]||!this.voidElements){var _=l.getTokenAt(u.row,u.column+1),h=l.getLine(y),b=this.$getIndent(h),S=b+l.getTabString();return _&&_.value===""){var h=l.getSelectionRange().start,$=new s(a,h.row,h.column),v=$.getCurrentToken()||$.stepBackward();if(!v)return;if(v.value=="<")return{text:">",selection:[1,1]}}})};g.inherits(f,c),p.JavaScriptBehaviour=f}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,p,m){function g(o,r){return o&&o.type&&o.type.lastIndexOf(r+".xml")>-1}var s=e("../../lib/oop"),c=e("../../range").Range,i=e("./fold_mode").FoldMode,f=p.FoldMode=function(o,r){i.call(this),this.voidElements=o||{},this.optionalEndTags=s.mixin({},this.voidElements),r&&s.mixin(this.optionalEndTags,r)};s.inherits(f,i);var n=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(o,r,l){var a=this._getFirstTagInLine(o,l);return a?a.closing||!a.tagName&&a.selfClosing?r==="markbeginend"?"end":"":!a.tagName||a.selfClosing||this.voidElements.hasOwnProperty(a.tagName.toLowerCase())||this._findEndTagInLine(o,l,a.tagName,a.end.column)?"":"start":this.getCommentFoldWidget(o,l)},this.getCommentFoldWidget=function(o,r){return/comment/.test(o.getState(r))&&/";break}return a}if(g(h,"tag-close"))return a.selfClosing=h.value=="/>",a;a.start.column+=h.value.length}return null},this._findEndTagInLine=function(o,r,l,a){for(var u=o.getTokens(r),h=0,$=0;$$)break;var v=this.getFoldWidgetRange(f,"all",n);if(v){if(v.start.row<=l)break;if(v.isMultiLine())n=v.end.row;else if(r==$)break}u=n}}return new s(l,a,u,f.getLine(u).length)},this.getCommentRegionBlock=function(f,n,o){for(var r=n.search(/\s*$/),l=f.getLength(),a=o,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,h=1;++oa)return new s(a,r,v,n.length)}}.call(i.prototype)}),ace.define("ace/mode/folding/javascript",["require","exports","module","ace/lib/oop","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,p,m){var g=e("../../lib/oop"),s=e("./xml").FoldMode,c=e("./cstyle").FoldMode,i=p.FoldMode=function(f){f&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+f.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+f.end))),this.xmlFoldMode=new s};g.inherits(i,c),function(){this.getFoldWidgetRangeBase=this.getFoldWidgetRange,this.getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(f,n,o){var r=this.getFoldWidgetBase(f,n,o);return r||this.xmlFoldMode.getFoldWidget(f,n,o)},this.getFoldWidgetRange=function(f,n,o,r){var l=this.getFoldWidgetRangeBase(f,n,o,r);return l||this.xmlFoldMode.getFoldWidgetRange(f,n,o)}}.call(i.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/javascript","ace/mode/folding/javascript"],function(e,p,m){var g=e("../lib/oop"),s=e("./text").Mode,c=e("./javascript_highlight_rules").JavaScriptHighlightRules,i=e("./matching_brace_outdent").MatchingBraceOutdent,f=e("../worker/worker_client").WorkerClient,n=e("./behaviour/javascript").JavaScriptBehaviour,o=e("./folding/javascript").FoldMode,r=function(){this.HighlightRules=c,this.$outdent=new i,this.$behaviour=new n,this.foldingRules=new o};g.inherits(r,s),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.$pairQuotesAfter={"`":/\w/},this.getNextLineIndent=function(l,a,u){var h=this.$getIndent(a),$=this.getTokenizer().getLineTokens(a,l),v=$.tokens,w=$.state;if(v.length&&v[v.length-1].type=="comment")return h;if(l=="start"||l=="no_regex"){var y=a.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);y&&(h+=u)}else if(l=="doc-start"&&(w=="start"||w=="no_regex"))return"";return h},this.checkOutdent=function(l,a,u){return this.$outdent.checkOutdent(a,u)},this.autoOutdent=function(l,a,u){this.$outdent.autoOutdent(a,u)},this.createWorker=function(l){var a=new f(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return a.attachToDocument(l.getDocument()),a.on("annotate",function(u){l.setAnnotations(u.data)}),a.on("terminate",function(){l.clearAnnotations()}),a},this.$id="ace/mode/javascript",this.snippetFileId="ace/snippets/javascript"}.call(r.prototype),p.Mode=r}),function(){ace.require(["ace/mode/javascript"],function(e){t&&(t.exports=e)})}()})(modeJavascript);var modeJson={exports:{}};(function(t,d){ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,p,m){var g=e("../lib/oop"),s=e("./text_highlight_rules").TextHighlightRules,c=function(){this.$rules={start:[{token:"variable",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'},{token:"string",regex:'"',next:"string"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"text",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"comment",regex:"\\/\\/.*$"},{token:"comment.start",regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"punctuation.operator",regex:/[,]/},{token:"text",regex:"\\s+"}],string:[{token:"constant.language.escape",regex:/\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],comment:[{token:"comment.end",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]}};g.inherits(c,s),p.JsonHighlightRules=c}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,p,m){var g=e("../range").Range,s=function(){};(function(){this.checkOutdent=function(c,i){return/^\s+$/.test(c)?/^\s*\}/.test(i):!1},this.autoOutdent=function(c,i){var f=c.getLine(i),n=f.match(/^(\s*\})/);if(!n)return 0;var o=n[1].length,r=c.findMatchingBracket({row:i,column:o});if(!r||r.row==i)return 0;var l=this.$getIndent(c.getLine(r.row));c.replace(new g(i,0,i,o-1),l)},this.$getIndent=function(c){return c.match(/^\s*/)[0]}}).call(s.prototype),p.MatchingBraceOutdent=s}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,p,m){var g=e("../../lib/oop"),s=e("../../range").Range,c=e("./fold_mode").FoldMode,i=p.FoldMode=function(f){f&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+f.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+f.end)))};g.inherits(i,c),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(f,n,o){var r=f.getLine(o);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var l=this._getFoldWidgetBase(f,n,o);return!l&&this.startRegionRe.test(r)?"start":l},this.getFoldWidgetRange=function(f,n,o,r){var l=f.getLine(o);if(this.startRegionRe.test(l))return this.getCommentRegionBlock(f,l,o);var a=l.match(this.foldingStartMarker);if(a){var u=a.index;if(a[1])return this.openingBracketBlock(f,a[1],o,u);var h=f.getCommentFoldRange(o,u+a[0].length,1);return h&&!h.isMultiLine()&&(r?h=this.getSectionRange(f,o):n!="all"&&(h=null)),h}if(n!=="markbegin"){var a=l.match(this.foldingStopMarker);if(a){var u=a.index+a[0].length;return a[1]?this.closingBracketBlock(f,a[1],o,u):f.getCommentFoldRange(o,u,-1)}}},this.getSectionRange=function(f,n){var o=f.getLine(n),r=o.search(/\S/),l=n,a=o.length;n+=1;for(var u=n,h=f.getLength();++n$)break;var v=this.getFoldWidgetRange(f,"all",n);if(v){if(v.start.row<=l)break;if(v.isMultiLine())n=v.end.row;else if(r==$)break}u=n}}return new s(l,a,u,f.getLine(u).length)},this.getCommentRegionBlock=function(f,n,o){for(var r=n.search(/\s*$/),l=f.getLength(),a=o,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,h=1;++oa)return new s(a,r,v,n.length)}}.call(i.prototype)}),ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle","ace/worker/worker_client"],function(e,p,m){var g=e("../lib/oop"),s=e("./text").Mode,c=e("./json_highlight_rules").JsonHighlightRules,i=e("./matching_brace_outdent").MatchingBraceOutdent,f=e("./folding/cstyle").FoldMode,n=e("../worker/worker_client").WorkerClient,o=function(){this.HighlightRules=c,this.$outdent=new i,this.$behaviour=this.$defaultBehaviour,this.foldingRules=new f};g.inherits(o,s),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(r,l,a){var u=this.$getIndent(l);if(r=="start"){var h=l.match(/^.*[\{\(\[]\s*$/);h&&(u+=a)}return u},this.checkOutdent=function(r,l,a){return this.$outdent.checkOutdent(l,a)},this.autoOutdent=function(r,l,a){this.$outdent.autoOutdent(l,a)},this.createWorker=function(r){var l=new n(["ace"],"ace/mode/json_worker","JsonWorker");return l.attachToDocument(r.getDocument()),l.on("annotate",function(a){r.setAnnotations(a.data)}),l.on("terminate",function(){r.clearAnnotations()}),l},this.$id="ace/mode/json"}.call(o.prototype),p.Mode=o}),function(){ace.require(["ace/mode/json"],function(e){t&&(t.exports=e)})}()})(modeJson);var modeCss={exports:{}};(function(t,d){ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,p,m){var g=e("../lib/oop");e("../lib/lang");var s=e("./text_highlight_rules").TextHighlightRules,c=p.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",i=p.supportFunction="rgb|rgba|url|attr|counter|counters",f=p.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom",n=p.supportConstantColor="aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen",o=p.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",r=p.numRe="\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))",l=p.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",a=p.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",u=function(){var h=this.createKeywordMapper({"support.function":i,"support.constant":f,"support.type":c,"support.constant.color":n,"support.constant.fonts":o},"text",!0);this.$rules={start:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"paren.rparen",regex:"\\}"},{token:"string",regex:"@(?!viewport)",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"keyword",regex:"%"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant.numeric",regex:r},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{include:["strings","url","comments"]},{token:"paren.lparen",regex:"\\{",next:"start"},{token:"paren.rparen",regex:"\\}",next:"start"},{token:"string",regex:";",next:"start"},{token:"keyword",regex:"(?:media|supports|document|charset|import|namespace|media|supports|document|page|font|keyframes|viewport|counter-style|font-feature-values|swash|ornaments|annotation|stylistic|styleset|character-variant)"}],comments:[{token:"comment",regex:"\\/\\*",push:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}]}],ruleset:[{regex:"-(webkit|ms|moz|o)-",token:"text"},{token:"punctuation.operator",regex:"[:;]"},{token:"paren.rparen",regex:"\\}",next:"start"},{include:["strings","url","comments"]},{token:["constant.numeric","keyword"],regex:"("+r+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"},{token:"constant.numeric",regex:r},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:l},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:a},{include:"url"},{token:h,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{token:"paren.lparen",regex:"\\{"},{caseInsensitive:!0}],url:[{token:"support.function",regex:"(?:url(:?-prefix)?|domain|regexp)\\(",push:[{token:"support.function",regex:"\\)",next:"pop"},{defaultToken:"string"}]}],strings:[{token:"string.start",regex:"'",push:[{token:"string.end",regex:"'|$",next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]},{token:"string.start",regex:'"',push:[{token:"string.end",regex:'"|$',next:"pop"},{include:"escapes"},{token:"constant.language.escape",regex:/\\$/,consumeLineEnd:!0},{defaultToken:"string"}]}],escapes:[{token:"constant.language.escape",regex:/\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/}]},this.normalizeRules()};g.inherits(u,s),p.CssHighlightRules=u}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,p,m){var g=e("../range").Range,s=function(){};(function(){this.checkOutdent=function(c,i){return/^\s+$/.test(c)?/^\s*\}/.test(i):!1},this.autoOutdent=function(c,i){var f=c.getLine(i),n=f.match(/^(\s*\})/);if(!n)return 0;var o=n[1].length,r=c.findMatchingBracket({row:i,column:o});if(!r||r.row==i)return 0;var l=this.$getIndent(c.getLine(r.row));c.replace(new g(i,0,i,o-1),l)},this.$getIndent=function(c){return c.match(/^\s*/)[0]}}).call(s.prototype),p.MatchingBraceOutdent=s}),ace.define("ace/mode/css_completions",["require","exports","module"],function(e,p,m){var g={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},float:{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},s=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var c=document.createElement("c").style;for(var i in c)if(typeof c[i]=="string"){var f=i.replace(/[A-Z]/g,function(n){return"-"+n.toLowerCase()});g.hasOwnProperty(f)||(g[f]=1)}}this.completionsDefined=!0},this.getCompletions=function(c,i,f,n){if(this.completionsDefined||this.defineCompletions(),c==="ruleset"||i.$mode.$id=="ace/mode/scss"){var o=i.getLine(f.row).substr(0,f.column),r=/\([^)]*$/.test(o);return r&&(o=o.substr(o.lastIndexOf("(")+1)),/:[^;]+$/.test(o)?(/([\w\-]+):[^:]*$/.test(o),this.getPropertyValueCompletions(c,i,f,n)):this.getPropertyCompletions(c,i,f,n,r)}return[]},this.getPropertyCompletions=function(c,i,f,n,o){o=o||!1;var r=Object.keys(g);return r.map(function(l){return{caption:l,snippet:l+": $0"+(o?"":";"),meta:"property",score:1e6}})},this.getPropertyValueCompletions=function(c,i,f,n){var o=i.getLine(f.row).substr(0,f.column),r=(/([\w\-]+):[^:]*$/.exec(o)||{})[1];if(!r)return[];var l=[];return r in g&&typeof g[r]=="object"&&(l=Object.keys(g[r])),l.map(function(a){return{caption:a,snippet:a,meta:"property value",score:1e6}})}}).call(s.prototype),p.CssCompletions=s}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,p,m){var g=e("../../lib/oop");e("../behaviour").Behaviour;var s=e("./cstyle").CstyleBehaviour,c=e("../../token_iterator").TokenIterator,i=function(){this.inherit(s),this.add("colon","insertion",function(f,n,o,r,l){if(l===":"&&o.selection.isEmpty()){var a=o.getCursorPosition(),u=new c(r,a.row,a.column),h=u.getCurrentToken();if(h&&h.value.match(/\s+/)&&(h=u.stepBackward()),h&&h.type==="support.type"){var $=r.doc.getLine(a.row),v=$.substring(a.column,a.column+1);if(v===":")return{text:"",selection:[1,1]};if(/^(\s+[^;]|\s*$)/.test($.substring(a.column)))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(f,n,o,r,l){var a=r.doc.getTextRange(l);if(!l.isMultiLine()&&a===":"){var u=o.getCursorPosition(),h=new c(r,u.row,u.column),$=h.getCurrentToken();if($&&$.value.match(/\s+/)&&($=h.stepBackward()),$&&$.type==="support.type"){var v=r.doc.getLine(l.start.row),w=v.substring(l.end.column,l.end.column+1);if(w===";")return l.end.column++,l}}}),this.add("semicolon","insertion",function(f,n,o,r,l){if(l===";"&&o.selection.isEmpty()){var a=o.getCursorPosition(),u=r.doc.getLine(a.row),h=u.substring(a.column,a.column+1);if(h===";")return{text:"",selection:[1,1]}}}),this.add("!important","insertion",function(f,n,o,r,l){if(l==="!"&&o.selection.isEmpty()){var a=o.getCursorPosition(),u=r.doc.getLine(a.row);if(/^\s*(;|}|$)/.test(u.substring(a.column)))return{text:"!important",selection:[10,10]}}})};g.inherits(i,s),p.CssBehaviour=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,p,m){var g=e("../../lib/oop"),s=e("../../range").Range,c=e("./fold_mode").FoldMode,i=p.FoldMode=function(f){f&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+f.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+f.end)))};g.inherits(i,c),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(f,n,o){var r=f.getLine(o);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var l=this._getFoldWidgetBase(f,n,o);return!l&&this.startRegionRe.test(r)?"start":l},this.getFoldWidgetRange=function(f,n,o,r){var l=f.getLine(o);if(this.startRegionRe.test(l))return this.getCommentRegionBlock(f,l,o);var a=l.match(this.foldingStartMarker);if(a){var u=a.index;if(a[1])return this.openingBracketBlock(f,a[1],o,u);var h=f.getCommentFoldRange(o,u+a[0].length,1);return h&&!h.isMultiLine()&&(r?h=this.getSectionRange(f,o):n!="all"&&(h=null)),h}if(n!=="markbegin"){var a=l.match(this.foldingStopMarker);if(a){var u=a.index+a[0].length;return a[1]?this.closingBracketBlock(f,a[1],o,u):f.getCommentFoldRange(o,u,-1)}}},this.getSectionRange=function(f,n){var o=f.getLine(n),r=o.search(/\S/),l=n,a=o.length;n+=1;for(var u=n,h=f.getLength();++n$)break;var v=this.getFoldWidgetRange(f,"all",n);if(v){if(v.start.row<=l)break;if(v.isMultiLine())n=v.end.row;else if(r==$)break}u=n}}return new s(l,a,u,f.getLine(u).length)},this.getCommentRegionBlock=function(f,n,o){for(var r=n.search(/\s*$/),l=f.getLength(),a=o,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,h=1;++oa)return new s(a,r,v,n.length)}}.call(i.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,p,m){var g=e("../lib/oop"),s=e("./text").Mode,c=e("./css_highlight_rules").CssHighlightRules,i=e("./matching_brace_outdent").MatchingBraceOutdent,f=e("../worker/worker_client").WorkerClient,n=e("./css_completions").CssCompletions,o=e("./behaviour/css").CssBehaviour,r=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=c,this.$outdent=new i,this.$behaviour=new o,this.$completer=new n,this.foldingRules=new r};g.inherits(l,s),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(a,u,h){var $=this.$getIndent(u),v=this.getTokenizer().getLineTokens(u,a).tokens;if(v.length&&v[v.length-1].type=="comment")return $;var w=u.match(/^.*\{\s*$/);return w&&($+=h),$},this.checkOutdent=function(a,u,h){return this.$outdent.checkOutdent(u,h)},this.autoOutdent=function(a,u,h){this.$outdent.autoOutdent(u,h)},this.getCompletions=function(a,u,h,$){return this.$completer.getCompletions(a,u,h,$)},this.createWorker=function(a){var u=new f(["ace"],"ace/mode/css_worker","Worker");return u.attachToDocument(a.getDocument()),u.on("annotate",function(h){a.setAnnotations(h.data)}),u.on("terminate",function(){a.clearAnnotations()}),u},this.$id="ace/mode/css",this.snippetFileId="ace/snippets/css"}.call(l.prototype),p.Mode=l}),function(){ace.require(["ace/mode/css"],function(e){t&&(t.exports=e)})}()})(modeCss);var extLanguage_tools={exports:{}};(function(t,d){ace.define("ace/snippets",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/range_list","ace/keyboard/hash_handler","ace/tokenizer","ace/clipboard","ace/editor"],function(e,p,m){function g(b){var S=new Date().toLocaleString("en-us",b);return S.length==1?"0"+S:S}var s=e("./lib/dom"),c=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,f=e("./lib/lang"),n=e("./range").Range,o=e("./range_list").RangeList,r=e("./keyboard/hash_handler").HashHandler,l=e("./tokenizer").Tokenizer,a=e("./clipboard"),u={CURRENT_WORD:function(b){return b.session.getTextRange(b.session.getWordRange())},SELECTION:function(b,S,M){var O=b.session.getTextRange();return M?O.replace(/\n\r?([ \t]*\S)/g,` +`+M+"$1"):O},CURRENT_LINE:function(b){return b.session.getLine(b.getCursorPosition().row)},PREV_LINE:function(b){return b.session.getLine(b.getCursorPosition().row-1)},LINE_INDEX:function(b){return b.getCursorPosition().row},LINE_NUMBER:function(b){return b.getCursorPosition().row+1},SOFT_TABS:function(b){return b.session.getUseSoftTabs()?"YES":"NO"},TAB_SIZE:function(b){return b.session.getTabSize()},CLIPBOARD:function(b){return a.getText&&a.getText()},FILENAME:function(b){return/[^/\\]*$/.exec(this.FILEPATH(b))[0]},FILENAME_BASE:function(b){return/[^/\\]*$/.exec(this.FILEPATH(b))[0].replace(/\.[^.]*$/,"")},DIRECTORY:function(b){return this.FILEPATH(b).replace(/[^/\\]*$/,"")},FILEPATH:function(b){return"/not implemented.txt"},WORKSPACE_NAME:function(){return"Unknown"},FULLNAME:function(){return"Unknown"},BLOCK_COMMENT_START:function(b){var S=b.session.$mode||{};return S.blockComment&&S.blockComment.start||""},BLOCK_COMMENT_END:function(b){var S=b.session.$mode||{};return S.blockComment&&S.blockComment.end||""},LINE_COMMENT:function(b){var S=b.session.$mode||{};return S.lineCommentStart||""},CURRENT_YEAR:g.bind(null,{year:"numeric"}),CURRENT_YEAR_SHORT:g.bind(null,{year:"2-digit"}),CURRENT_MONTH:g.bind(null,{month:"numeric"}),CURRENT_MONTH_NAME:g.bind(null,{month:"long"}),CURRENT_MONTH_NAME_SHORT:g.bind(null,{month:"short"}),CURRENT_DATE:g.bind(null,{day:"2-digit"}),CURRENT_DAY_NAME:g.bind(null,{weekday:"long"}),CURRENT_DAY_NAME_SHORT:g.bind(null,{weekday:"short"}),CURRENT_HOUR:g.bind(null,{hour:"2-digit",hour12:!1}),CURRENT_MINUTE:g.bind(null,{minute:"2-digit"}),CURRENT_SECOND:g.bind(null,{second:"2-digit"})};u.SELECTED_TEXT=u.SELECTION;var h=function(){function b(){this.snippetMap={},this.snippetNameMap={},this.variables=u}return b.prototype.getTokenizer=function(){return b.$tokenizer||this.createTokenizer()},b.prototype.createTokenizer=function(){function S(k){return k=k.substr(1),/^\d+$/.test(k)?[{tabstopId:parseInt(k,10)}]:[{text:k}]}function M(k){return"(?:[^\\\\"+k+"]|\\\\.)"}var O={regex:"/("+M("/")+"+)/",onMatch:function(k,A,T){var E=T[0];return E.fmtString=!0,E.guard=k.slice(1,-1),E.flag="",""},next:"formatString"};return b.$tokenizer=new l({start:[{regex:/\\./,onMatch:function(k,A,T){var E=k[1];return(E=="}"&&T.length||"`$\\".indexOf(E)!=-1)&&(k=E),[k]}},{regex:/}/,onMatch:function(k,A,T){return[T.length?T.shift():k]}},{regex:/\$(?:\d+|\w+)/,onMatch:S},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(k,A,T){var E=S(k.substr(1));return T.unshift(E[0]),E},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+M("\\|")+"*\\|",onMatch:function(k,A,T){var E=k.slice(1,-1).replace(/\\[,|\\]|,/g,function(C){return C.length==2?C[1]:"\0"}).split("\0").map(function(C){return{value:C}});return T[0].choices=E,[E[0]]},next:"start"},O,{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:/:/,onMatch:function(k,A,T){return T.length&&T[0].expectElse?(T[0].expectElse=!1,T[0].ifEnd={elseEnd:T[0]},[T[0].ifEnd]):":"}},{regex:/\\./,onMatch:function(k,A,T){var E=k[1];return E=="}"&&T.length||"`$\\".indexOf(E)!=-1?k=E:E=="n"?k=` +`:E=="t"?k=" ":"ulULE".indexOf(E)!=-1&&(k={changeCase:E,local:E>"a"}),[k]}},{regex:"/\\w*}",onMatch:function(k,A,T){var E=T.shift();return E&&(E.flag=k.slice(1,-1)),this.next=E&&E.tabstopId?"start":"",[E||k]},next:"start"},{regex:/\$(?:\d+|\w+)/,onMatch:function(k,A,T){return[{text:k.slice(1)}]}},{regex:/\${\w+/,onMatch:function(k,A,T){var E={text:k.slice(2)};return T.unshift(E),[E]},next:"formatStringVar"},{regex:/\n/,token:"newline",merge:!1},{regex:/}/,onMatch:function(k,A,T){var E=T.shift();return this.next=E&&E.tabstopId?"start":"",[E||k]},next:"start"}],formatStringVar:[{regex:/:\/\w+}/,onMatch:function(k,A,T){var E=T[0];return E.formatFunction=k.slice(2,-1),[T.shift()]},next:"formatString"},O,{regex:/:[\?\-+]?/,onMatch:function(k,A,T){k[1]=="+"&&(T[0].ifEnd=T[0]),k[1]=="?"&&(T[0].expectElse=!0)},next:"formatString"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"formatString"}]}),b.$tokenizer},b.prototype.tokenizeTmSnippet=function(S,M){return this.getTokenizer().getLineTokens(S,M).tokens.map(function(O){return O.value||O})},b.prototype.getVariableValue=function(S,M,O){if(/^\d+$/.test(M))return(this.variables.__||{})[M]||"";if(/^[A-Z]\d+$/.test(M))return(this.variables[M[0]+"__"]||{})[M.substr(1)]||"";if(M=M.replace(/^TM_/,""),!this.variables.hasOwnProperty(M))return"";var k=this.variables[M];return typeof k=="function"&&(k=this.variables[M](S,M,O)),k==null?"":k},b.prototype.tmStrFormat=function(S,M,O){if(!M.fmt)return S;var k=M.flag||"",A=M.guard;A=new RegExp(A,k.replace(/[^gim]/g,""));var T=typeof M.fmt=="string"?this.tokenizeTmSnippet(M.fmt,"formatString"):M.fmt,E=this,C=S.replace(A,function(){var x=E.variables.__;E.variables.__=[].slice.call(arguments);for(var L=E.resolveVariables(T,O),q="E",N=0;N=0&&C.splice(x,1)}}var k=this.snippetMap,A=this.snippetNameMap;S.content?O(S):Array.isArray(S)&&S.forEach(O)},b.prototype.parseSnippetFile=function(S){S=S.replace(/\r/g,"");for(var M=[],O={},k=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm,A;A=k.exec(S);){if(A[1])try{O=JSON.parse(A[1]),M.push(O)}catch{}if(A[4])O.content=A[4].replace(/^\t/gm,""),M.push(O),O={};else{var T=A[2],E=A[3];if(T=="regex"){var C=/\/((?:[^\/\\]|\\.)*)|$/g;O.guard=C.exec(E)[1],O.trigger=C.exec(E)[1],O.endTrigger=C.exec(E)[1],O.endGuard=C.exec(E)[1]}else T=="snippet"?(O.tabTrigger=E.match(/^\S*/)[0],O.name||(O.name=E)):T&&(O[T]=E)}}return M},b.prototype.getSnippetByName=function(S,M){var O=this.snippetNameMap,k;return this.getActiveScopes(M).some(function(A){var T=O[A];return T&&(k=T[S]),!!k},this),k},b}();c.implement(h.prototype,i);var $=function(b,S,M){function O(V){for(var W=[],H=0;H1?(P=W[W.length-1].length,D+=W.length-1):P+=V.length,j+=V}else V&&(V.start?V.end={row:D,column:P}:V.start={row:D,column:P})}),{text:j,tabstops:x,tokens:C}},v=function(){function b(S){if(this.index=0,this.ranges=[],this.tabstops=[],S.tabstopManager)return S.tabstopManager;S.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=f.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(S)}return b.prototype.attach=function(S){this.$openTabstops=null,this.selectedTabstop=null,this.editor=S,this.session=S.session,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},b.prototype.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges.length=0,this.tabstops.length=0,this.selectedTabstop=null,this.editor.off("change",this.$onChange),this.editor.off("changeSelection",this.$onChangeSelection),this.editor.off("changeSession",this.$onChangeSession),this.editor.commands.off("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.session=null,this.editor=null},b.prototype.onChange=function(S){for(var M=S.action[0]=="r",O=this.selectedTabstop||{},k=O.parents||{},A=this.tabstops.slice(),T=0;T2&&(this.tabstops.length&&E.push(E.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,E))},b.prototype.addTabstopMarkers=function(S){var M=this.session;S.forEach(function(O){O.markerId||(O.markerId=M.addMarker(O,"ace_snippet-marker","text"))})},b.prototype.removeTabstopMarkers=function(S){var M=this.session;S.forEach(function(O){M.removeMarker(O.markerId),O.markerId=null})},b.prototype.updateTabstopMarkers=function(){if(!!this.selectedTabstop){var S=this.selectedTabstop.snippetId;this.selectedTabstop.index===0&&S--,this.tabstops.forEach(function(M){M.snippetId===S?this.addTabstopMarkers(M):this.removeTabstopMarkers(M)},this)}},b.prototype.removeRange=function(S){var M=S.tabstop.indexOf(S);M!=-1&&S.tabstop.splice(M,1),M=this.ranges.indexOf(S),M!=-1&&this.ranges.splice(M,1),M=S.tabstop.rangeList.ranges.indexOf(S),M!=-1&&S.tabstop.splice(M,1),this.session.removeMarker(S.markerId),S.tabstop.length||(M=this.tabstops.indexOf(S.tabstop),M!=-1&&this.tabstops.splice(M,1),this.tabstops.length||this.detach())},b}();v.prototype.keyboardHandler=new r,v.prototype.keyboardHandler.bindKeys({Tab:function(b){p.snippetManager&&p.snippetManager.expandWithTab(b)||(b.tabstopManager.tabNext(1),b.renderer.scrollCursorIntoView())},"Shift-Tab":function(b){b.tabstopManager.tabNext(-1),b.renderer.scrollCursorIntoView()},Esc:function(b){b.tabstopManager.detach()}});var w=function(b,S){b.row==0&&(b.column+=S.column),b.row+=S.row},y=function(b,S){b.row==S.row&&(b.column-=S.column),b.row-=S.row};s.importCssString(` +.ace_snippet-marker { + -moz-box-sizing: border-box; + box-sizing: border-box; + background: rgba(194, 193, 208, 0.09); + border: 1px dotted rgba(211, 208, 235, 0.62); + position: absolute; +}`,"snippets.css",!1),p.snippetManager=new h;var _=e("./editor").Editor;(function(){this.insertSnippet=function(b,S){return p.snippetManager.insertSnippet(this,b,S)},this.expandSnippet=function(b){return p.snippetManager.expandWithTab(this,b)}}).call(_.prototype)}),ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/config","ace/lib/useragent"],function(e,p,m){var g=e("../virtual_renderer").VirtualRenderer,s=e("../editor").Editor,c=e("../range").Range,i=e("../lib/event"),f=e("../lib/lang"),n=e("../lib/dom"),o=e("../config").nls,r=e("./../lib/useragent"),l=function(w){return"suggest-aria-id:".concat(w)},a=r.isSafari?"menu":"listbox",u=r.isSafari?"menuitem":"option",h=r.isSafari?"aria-current":"aria-selected",$=function(w){var y=new g(w);y.$maxLines=4;var _=new s(y);return _.setHighlightActiveLine(!1),_.setShowPrintMargin(!1),_.renderer.setShowGutter(!1),_.renderer.setHighlightGutterLine(!1),_.$mouseHandler.$focusTimeout=0,_.$highlightTagPending=!0,_},v=function(){function w(y){var _=n.createElement("div"),b=$(_);y&&y.appendChild(_),_.style.display="none",b.renderer.content.style.cursor="default",b.renderer.setStyle("ace_autocomplete"),b.renderer.$textLayer.element.setAttribute("role",a),b.renderer.$textLayer.element.setAttribute("aria-roledescription",o("autocomplete.popup.aria-roledescription","Autocomplete suggestions")),b.renderer.$textLayer.element.setAttribute("aria-label",o("autocomplete.popup.aria-label","Autocomplete suggestions")),b.renderer.textarea.setAttribute("aria-hidden","true"),b.setOption("displayIndentGuides",!1),b.setOption("dragDelay",150);var S=function(){};b.focus=S,b.$isFocused=!0,b.renderer.$cursorLayer.restartTimer=S,b.renderer.$cursorLayer.element.style.opacity="0",b.renderer.$maxLines=8,b.renderer.$keepTextAreaAtCursor=!1,b.setHighlightActiveLine(!1),b.session.highlight(""),b.session.$searchHighlight.clazz="ace_highlight-marker",b.on("mousedown",function(C){var x=C.getDocumentPosition();b.selection.moveToPosition(x),k.start.row=k.end.row=x.row,C.stop()});var M,O=new c(-1,0,-1,1/0),k=new c(-1,0,-1,1/0);k.id=b.session.addMarker(k,"ace_active-line","fullLine"),b.setSelectOnHover=function(C){C?O.id&&(b.session.removeMarker(O.id),O.id=null):O.id=b.session.addMarker(O,"ace_line-hover","fullLine")},b.setSelectOnHover(!1),b.on("mousemove",function(C){if(!M){M=C;return}if(!(M.x==C.x&&M.y==C.y)){M=C,M.scrollTop=b.renderer.scrollTop,b.isMouseOver=!0;var x=M.getDocumentPosition().row;O.start.row!=x&&(O.id||b.setRow(x),T(x))}}),b.renderer.on("beforeRender",function(){if(M&&O.start.row!=-1){M.$pos=null;var C=M.getDocumentPosition().row;O.id||b.setRow(C),T(C,!0)}}),b.renderer.on("afterRender",function(){for(var C=b.renderer.$textLayer,x=C.config.firstRow,L=C.config.lastRow;x<=L;x++){var q=C.element.childNodes[x-C.config.firstRow];q.setAttribute("role",u),q.setAttribute("aria-roledescription",o("autocomplete.popup.item.aria-roledescription","item")),q.setAttribute("aria-setsize",b.data.length),q.setAttribute("aria-describedby","doc-tooltip"),q.setAttribute("aria-posinset",x+1);var N=b.getData(x);if(N){var F="".concat(N.caption||N.value).concat(N.meta?", ".concat(N.meta):"");q.setAttribute("aria-label",F)}var I=q.querySelectorAll(".ace_completion-highlight");I.forEach(function(R){R.setAttribute("role","mark")})}}),b.renderer.on("afterRender",function(){var C=b.getRow(),x=b.renderer.$textLayer,L=x.element.childNodes[C-x.config.firstRow],q=document.activeElement;if(L!==b.selectedNode&&b.selectedNode&&(n.removeCssClass(b.selectedNode,"ace_selected"),b.selectedNode.removeAttribute(h),b.selectedNode.removeAttribute("id")),q.removeAttribute("aria-activedescendant"),b.selectedNode=L,L){var N=l(C);n.addCssClass(L,"ace_selected"),L.id=N,x.element.setAttribute("aria-activedescendant",N),q.setAttribute("aria-activedescendant",N),L.setAttribute(h,"true")}});var A=function(){T(-1)},T=function(C,x){C!==O.start.row&&(O.start.row=O.end.row=C,x||b.session._emit("changeBackMarker"),b._emit("changeHoverMarker"))};b.getHoveredRow=function(){return O.start.row},i.addListener(b.container,"mouseout",function(){b.isMouseOver=!1,A()}),b.on("hide",A),b.on("changeSelection",A),b.session.doc.getLength=function(){return b.data.length},b.session.doc.getLine=function(C){var x=b.data[C];return typeof x=="string"?x:x&&x.value||""};var E=b.session.bgTokenizer;return E.$tokenizeRow=function(C){function x(V,W){V&&q.push({type:(L.className||"")+(W||""),value:V})}var L=b.data[C],q=[];if(!L)return q;typeof L=="string"&&(L={value:L});for(var N=L.caption||L.value||L.name,F=N.toLowerCase(),I=(b.filterText||"").toLowerCase(),R=0,B=0,D=0;D<=I.length;D++)if(D!=B&&(L.matchMask&1<=D?L="bottom":L="top"),L==="top"?(P.bottom=C.top-this.$borderSize,P.top=P.bottom-D):L==="bottom"&&(P.top=C.top+x+this.$borderSize,P.bottom=P.top+D);var W=P.top>=0&&P.bottom<=I;if(!q&&!W)return!1;W?B.$maxPixelHeight=null:L==="top"?B.$maxPixelHeight=V:B.$maxPixelHeight=j,L==="top"?(N.style.top="",N.style.bottom=I+F-P.bottom+"px",b.isTopdown=!1):(N.style.top=P.top+"px",N.style.bottom="",b.isTopdown=!0),N.style.display="";var H=C.left;return H+N.offsetWidth>R&&(H=R-N.offsetWidth),N.style.left=H+"px",N.style.right="",b.isOpen||(b.isOpen=!0,this._signal("show"),M=null),b.anchorPos=C,b.anchor=L,!0},b.show=function(C,x,L){this.tryShow(C,x,L?"bottom":void 0,!0)},b.goTo=function(C){var x=this.getRow(),L=this.session.getLength()-1;switch(C){case"up":x=x<=0?L:x-1;break;case"down":x=x>=L?-1:x+1;break;case"start":x=0;break;case"end":x=L}this.setRow(x)},b.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},b.$imageSize=0,b.$borderSize=1,b}return w}();n.importCssString(` +.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { + background-color: #CAD6FA; + z-index: 1; +} +.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { + background-color: #3a674e; +} +.ace_editor.ace_autocomplete .ace_line-hover { + border: 1px solid #abbffe; + margin-top: -1px; + background: rgba(233,233,253,0.4); + position: absolute; + z-index: 2; +} +.ace_dark.ace_editor.ace_autocomplete .ace_line-hover { + border: 1px solid rgba(109, 150, 13, 0.8); + background: rgba(58, 103, 78, 0.62); +} +.ace_completion-meta { + opacity: 0.5; + margin-left: 0.9em; +} +.ace_completion-message { + margin-left: 0.9em; + color: blue; +} +.ace_editor.ace_autocomplete .ace_completion-highlight{ + color: #2d69c7; +} +.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{ + color: #93ca12; +} +.ace_editor.ace_autocomplete { + width: 300px; + z-index: 200000; + border: 1px lightgray solid; + position: fixed; + box-shadow: 2px 3px 5px rgba(0,0,0,.2); + line-height: 1.4; + background: #fefefe; + color: #111; +} +.ace_dark.ace_editor.ace_autocomplete { + border: 1px #484747 solid; + box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); + line-height: 1.4; + background: #25282c; + color: #c1c1c1; +} +.ace_autocomplete .ace_text-layer { + width: calc(100% - 8px); +} +.ace_autocomplete .ace_line { + display: flex; + align-items: center; +} +.ace_autocomplete .ace_line > * { + min-width: 0; + flex: 0 0 auto; +} +.ace_autocomplete .ace_line .ace_ { + flex: 0 1 auto; + overflow: hidden; + text-overflow: ellipsis; +} +.ace_autocomplete .ace_completion-spacer { + flex: 1; +} +.ace_autocomplete.ace_loading:after { + content: ""; + position: absolute; + top: 0px; + height: 2px; + width: 8%; + background: blue; + z-index: 100; + animation: ace_progress 3s infinite linear; + animation-delay: 300ms; + transform: translateX(-100%) scaleX(1); +} +@keyframes ace_progress { + 0% { transform: translateX(-100%) scaleX(1) } + 50% { transform: translateX(625%) scaleX(2) } + 100% { transform: translateX(1500%) scaleX(3) } +} +@media (prefers-reduced-motion) { + .ace_autocomplete.ace_loading:after { + transform: translateX(625%) scaleX(2); + animation: none; + } +} +`,"autocompletion.css",!1),p.AcePopup=v,p.$singleLineEditor=$,p.getAriaId=l}),ace.define("ace/autocomplete/inline_screenreader",["require","exports","module"],function(e,p,m){var g=function(){function s(c){this.editor=c,this.screenReaderDiv=document.createElement("div"),this.screenReaderDiv.classList.add("ace_screenreader-only"),this.editor.container.appendChild(this.screenReaderDiv)}return s.prototype.setScreenReaderContent=function(c){for(!this.popup&&this.editor.completer&&this.editor.completer.popup&&(this.popup=this.editor.completer.popup,this.popup.renderer.on("afterRender",function(){var f=this.popup.getRow(),n=this.popup.renderer.$textLayer,o=n.element.childNodes[f-n.config.firstRow];if(o){for(var r="doc-tooltip ",l=0;l=0&&i.test(s[n]);n--)f.push(s[n]);return f.reverse().join("")},p.retrieveFollowingIdentifier=function(s,c,i){i=i||g;for(var f=[],n=c;n0)for(var b=this.popup.getFirstVisibleRow();b<=this.popup.getLastVisibleRow();b++){var S=this.popup.getData(b);S&&(!_||S.hideInlinePreview)&&this.$seen(S)}},y.prototype.$onPopupShow=function(_){this.$onPopupChange(_),this.stickySelection=!1,this.stickySelectionDelay>=0&&this.stickySelectionTimer.schedule(this.stickySelectionDelay)},y.prototype.observeLayoutChanges=function(){if(!(this.$elements||!this.editor)){window.addEventListener("resize",this.onLayoutChange,{passive:!0}),window.addEventListener("wheel",this.mousewheelListener);for(var _=this.editor.container.parentNode,b=[];_;)b.push(_),_.addEventListener("scroll",this.onLayoutChange,{passive:!0}),_=_.parentNode;this.$elements=b}},y.prototype.unObserveLayoutChanges=function(){var _=this;window.removeEventListener("resize",this.onLayoutChange,{passive:!0}),window.removeEventListener("wheel",this.mousewheelListener),this.$elements&&this.$elements.forEach(function(b){b.removeEventListener("scroll",_.onLayoutChange,{passive:!0})}),this.$elements=null},y.prototype.onLayoutChange=function(){if(!this.popup.isOpen)return this.unObserveLayoutChanges();this.$updatePopupPosition(),this.updateDocTooltip()},y.prototype.$updatePopupPosition=function(){var _=this.editor,b=_.renderer,S=b.layerConfig.lineHeight,M=b.$cursorLayer.getPixelPosition(this.base,!0);M.left-=this.popup.getTextLeftOffset();var O=_.container.getBoundingClientRect();M.top+=O.top-b.layerConfig.offset,M.left+=O.left-_.renderer.scrollLeft,M.left+=b.gutterWidth;var k={top:M.top,left:M.left};b.$ghostText&&b.$ghostTextWidget&&this.base.row===b.$ghostText.position.row&&(k.top+=b.$ghostTextWidget.el.offsetHeight);var A=_.container.getBoundingClientRect().bottom-S,T=Athis.filterText&&_.lastIndexOf(this.filterText,0)===0)var b=this.filtered;else var b=this.all;this.filterText=_,b=this.filterCompletions(b,this.filterText),b=b.sort(function(M,O){return O.exactMatch-M.exactMatch||O.$score-M.$score||(M.caption||M.value).localeCompare(O.caption||O.value)});var S=null;b=b.filter(function(M){var O=M.snippet||M.caption||M.value;return O===S?!1:(S=O,!0)}),this.filtered=b},y.prototype.filterCompletions=function(_,b){var S=[],M=b.toUpperCase(),O=b.toLowerCase();e:for(var k=0,A;A=_[k];k++){if(A.skipFilter){A.$score=A.score,S.push(A);continue}var T=!this.ignoreCaption&&A.caption||A.value||A.snippet;if(!!T){var E=-1,C=0,x=0,L,q;if(this.exactMatch){if(b!==T.substr(0,b.length))continue e}else{var N=T.toLowerCase().indexOf(O);if(N>-1)x=N;else for(var F=0;F=0&&(R<0||I0&&(E===-1&&(x+=10),x+=q,C|=1<",i.escapeHTML(M.caption),"","
",i.escapeHTML(r(M.snippet))].join(""))},id:"snippetCompleter"},a=[l,n,o];p.setCompleters=function(M){a.length=0,M&&a.push.apply(a,M)},p.addCompleter=function(M){a.push(M)},p.textCompleter=n,p.keyWordCompleter=o,p.snippetCompleter=l;var u={name:"expandSnippet",exec:function(M){return g.expandWithTab(M)},bindKey:"Tab"},h=function(M,O){$(O.session.$mode)},$=function(M){typeof M=="string"&&(M=c.$modes[M]),!!M&&(g.files||(g.files={}),v(M.$id,M.snippetFileId),M.modes&&M.modes.forEach($))},v=function(M,O){!O||!M||g.files[M]||(g.files[M]={},c.loadModule(O,function(k){!k||(g.files[M]=k,!k.snippets&&k.snippetText&&(k.snippets=g.parseSnippetFile(k.snippetText)),g.register(k.snippets||[],k.scope),k.includeScopes&&(g.snippetMap[k.scope].includeScopes=k.includeScopes,k.includeScopes.forEach(function(A){$("ace/mode/"+A)})))}))},w=function(M){var O=M.editor,k=O.completer&&O.completer.activated;if(M.command.name==="backspace")k&&!f.getCompletionPrefix(O)&&O.completer.detach();else if(M.command.name==="insertstring"&&!k){y=M;var A=M.editor.$liveAutocompletionDelay;A?_.delay(A):b(M)}},y,_=i.delayedCall(function(){b(y)},0),b=function(M){var O=M.editor,k=f.getCompletionPrefix(O),A=M.args,T=f.triggerAutocomplete(O,A);if(k&&k.length>=O.$liveAutocompletionThreshold||T){var E=s.for(O);E.autoShown=!0,E.showPopup(O)}},S=e("../editor").Editor;e("../config").defineOptions(S.prototype,"editor",{enableBasicAutocompletion:{set:function(M){M?(this.completers||(this.completers=Array.isArray(M)?M:a),this.commands.addCommand(s.startCommand)):this.commands.removeCommand(s.startCommand)},value:!1},enableLiveAutocompletion:{set:function(M){M?(this.completers||(this.completers=Array.isArray(M)?M:a),this.commands.on("afterExec",w)):this.commands.off("afterExec",w)},value:!1},liveAutocompletionDelay:{initialValue:0},liveAutocompletionThreshold:{initialValue:0},enableSnippets:{set:function(M){M?(this.commands.addCommand(u),this.on("changeMode",h),h(null,this)):(this.commands.removeCommand(u),this.off("changeMode",h))},value:!1}})}),function(){ace.require(["ace/ext/language_tools"],function(e){t&&(t.exports=e)})}()})(extLanguage_tools);const VARIANT_FORM_VERSION="3.0.10",MOCK_CASE_URL="https://ks3-cn-beijing.ksyuncs.com/vform-static/vcase/",ACE_BASE_PATH="https://ks3-cn-beijing.ksyun.com/vform2021/ace-mini",BEAUTIFIER_PATH="https://ks3-cn-beijing.ksyun.com/vform2021/js-beautify/1.14.0/beautifier.min.js";var index_vue_vue_type_style_index_0_scoped_true_lang$4="";const _sfc_main$2t={name:"CodeEditor",props:{modelValue:{type:String},readonly:{type:Boolean,default:!1},mode:{type:String,default:"javascript"},userWorker:{type:Boolean,default:!0}},emits:["update:modelValue"],mounted(){ace$1.config.set("basePath",ACE_BASE_PATH),this.addAutoCompletion(ace$1),this.aceEditor=ace$1.edit(this.$refs.ace,{maxLines:20,minLines:5,fontSize:12,theme:this.themePath,mode:this.modePath,tabSize:2,readOnly:this.readonly,highlightActiveLine:!0,value:this.codeValue}),this.aceEditor.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0}),this.mode==="json"?this.setJsonMode():this.mode==="css"&&this.setCssMode(),this.userWorker||this.aceEditor.getSession().setUseWorker(!1),this.aceEditor.getSession().on("change",t=>{this.$emit("update:modelValue",this.aceEditor.getValue())})},data(){return{aceEditor:null,themePath:"ace/theme/sqlserver",modePath:"ace/mode/javascript",codeValue:this.modelValue}},watch:{},methods:{addAutoCompletion(t){let d=[{meta:"\u83B7\u53D6VFormRender\u7EC4\u4EF6",caption:"getFormRef",value:"this.getFormRef()",score:1},{meta:"\u83B7\u53D6\u5BB9\u5668\u6216\u5B57\u6BB5\u7EC4\u4EF6",caption:"getWidgetRef",value:"this.getWidgetRef(widgetName, showError)",score:1},{meta:"\u8BBE\u7F6E\u662F\u5426\u9690\u85CF\u5BB9\u5668",caption:"setHidden",value:"this.setHidden(true)",score:1},{meta:"\u8BBE\u7F6E\u662F\u5426\u7981\u7528\u5BB9\u5668\uFF08\u5305\u542B\u5BB9\u5668\u5185\u90E8\u7EC4\u4EF6\uFF09",caption:"setDisabled",value:"this.setDisabled(true)",score:1},{meta:"\u83B7\u53D6\u5F53\u524D\u6FC0\u6D3BTab\u9875\u7B7E\u7D22\u5F15",caption:"getActiveTabIndex",value:"this.getActiveTabIndex()",score:1},{meta:"\u6FC0\u6D3BTab\u9875\u7B7E\u6307\u5B9A\u9875",caption:"activeTab",value:"this.activeTab(tabIndex)",score:1},{meta:"\u7981\u7528Tab\u9875\u7B7E\u6307\u5B9A\u9875",caption:"disableTab",value:"this.disableTab(tabIndex)",score:1},{meta:"\u6062\u590DTab\u9875\u7B7E\u6307\u5B9A\u9875",caption:"enableTab",value:"this.enableTab(tabIndex)",score:1},{meta:"\u9690\u85CFTab\u9875\u7B7E\u6307\u5B9A\u9875",caption:"hideTab",value:"this.hideTab(tabIndex)",score:1},{meta:"\u663E\u793ATab\u9875\u7B7E\u6307\u5B9A\u9875",caption:"showTab",value:"this.showTab(tabIndex)",score:1},{meta:"\u7981\u7528\u5B50\u8868\u5355\u6307\u5B9A\u884C",caption:"disableSubFormRow",value:"this.disableSubFormRow(rowIndex)",score:1},{meta:"\u6062\u590D\u5B50\u8868\u5355\u6307\u5B9A\u884C",caption:"enableSubFormRow",value:"this.enableSubFormRow(rowIndex)",score:1},{meta:"\u7981\u7528\u5B50\u8868\u5355",caption:"disableSubForm",value:"this.disableSubForm()",score:1},{meta:"\u6062\u590D\u5B50\u8868\u5355",caption:"enableSubForm",value:"this.enableSubForm()",score:1},{meta:"\u91CD\u7F6E\u5B50\u8868\u5355\u6570\u636E\u4E3A\u7A7A",caption:"resetSubForm",value:"this.resetSubForm()",score:1},{meta:"\u83B7\u53D6\u5B50\u8868\u5355\u6570\u636E",caption:"getSubFormValues",value:"this.getSubFormValues()",score:1},{meta:"\u8BBE\u7F6E\u5B50\u8868\u5355\u6570\u636E",caption:"setSubFormValues",value:"this.setSubFormValues()",score:1}];t.require("ace/ext/language_tools").addCompleter({identifierRegexps:[/[a-zA-Z_0-9\$\.\u00A2-\uFFFF]/],getCompletions:function(p,m,g,s,c){return console.log(s),s.length===0?c(null,[]):s==="this."?c(null,d.map(i=>({caption:s+i.caption,value:i.value,meta:i.meta,score:i.score}))):c(null,d)}})},setJsonMode(){this.aceEditor.getSession().setMode("ace/mode/json")},setCssMode(){this.aceEditor.getSession().setMode("ace/mode/css")},getEditorAnnotations(){return this.aceEditor.getSession().getAnnotations()},setValue(t){this.aceEditor.getSession().setValue(t)}}},_hoisted_1$k={class:"ace-container"},_hoisted_2$b={class:"ace-editor",ref:"ace"};function _sfc_render$2t(t,d,e,p,m,g){return require$$0$1.openBlock(),require$$0$1.createElementBlock("div",_hoisted_1$k,[require$$0$1.createElementVNode("div",_hoisted_2$b,null,512)])}var CodeEditor=_export_sfc(_sfc_main$2t,[["render",_sfc_render$2t],["__scopeId","data-v-71442268"]]);const generateCode=function(t,d="vue"){let e=JSON.stringify(t);return d==="html"?` + + + + + VForm Demo + + + + + + +
+ + + Submit +
+ + diff --git a/src/annotation/Api.ts b/src/annotation/Api.ts new file mode 100644 index 0000000..3079e65 --- /dev/null +++ b/src/annotation/Api.ts @@ -0,0 +1,60 @@ + +import request, { download } from '@/utils/request' +type Nullish = { + [P in keyof T]: T[P] | null; +}; +export type RequestPageType = Nullish & { + pageNum: number, + pageSize: number, + params: { [key: string]: string } +} +export type ResponseResultType = { + code: number + data: T + msg: string +} +export type ResponseTableType = { + code: number + msg: string + rows: Array + total: number +} +export type ApiServiceType = { + list: (query: RequestPageType) => Promise> + get: (id: number | string) => Promise> + add: (data: T) => Promise> + update: (data: T) => Promise> + del: (id: number | string | Array) => Promise> + export: (query: RequestPageType) => Promise +} +export function Page(target: new (...args: any[]) => T): RequestPageType { + const o: Nullish = new target(); + for (const key in o) { + o[key] = null + } + return { + pageNum: 1, + pageSize: 10, + params: {}, + ...o + }; +} + +export function ApiService(target: new (...args: any[]) => T): ApiServiceType { + return target.prototype.api +} + +export default function Api(url: string) { + const serviceName = url.split('/').pop(); + return function (target: any) { + const api: ApiServiceType = { + list: (query: RequestPageType) => request({ url: url + '/list', method: 'get', params: query }), + get: (id: number | string) => request({ url: url + '/' + id, method: 'get' }), + add: (data: T) => request({ url, method: 'post', data }), + update: (data: T) => request({ url, method: 'put', data }), + del: (id: number | string | Array) => request({ url: url + '/' + id, method: 'delete' }), + export: (query: RequestPageType) => download(url + '/export', query, `${serviceName}_${new Date().getTime()}.xlsx`) + }; + target.prototype.api = api; + } +} diff --git a/src/annotation/Schema.ts b/src/annotation/Schema.ts new file mode 100644 index 0000000..ed09171 --- /dev/null +++ b/src/annotation/Schema.ts @@ -0,0 +1,48 @@ +import { Component } from "vue"; + +export default function Schema(name: string): (target: any, attr: any) => void; +export default function Schema(options: SchemaType): (target: any, attr: any) => void; +export default function Schema(value: SchemaType | string) { + return function (target: any, attr: any) { + if (target.schema == undefined) target.schema = {} + if (typeof value === 'string') target.schema[attr] = { name: value, components: {}, attr }; + else { + target.schema[attr] = value; + } + } +} +export interface SchemaType { + name: string, + attr: keyof T & string, + components: { [key: string]: (...args: any[]) => Component } +} +export function getSchema(target: T | (new (...args: any[]) => T), prop: P): SchemaType { + const constructor = typeof target === 'function' ? target : target.constructor + const schemaObj = constructor.prototype.schema + if (!!schemaObj) { + const schema: SchemaType = schemaObj[prop] + if (!!schema) return schema + else throw new Error(`${constructor.name}'s ${prop} have not @schema`) + } else { + throw new Error(`${constructor.name} have not @schema`) + } +} + +export function getSchemas(target: T | (new (...args: any[]) => T), ...props: P[]): SchemaType[] { + const constructor = typeof target === 'function' ? target : target.constructor + const schemaObj: { [key: string]: SchemaType } = constructor.prototype.schema + if (!!schemaObj) { + if (props.length > 0) { + return props.map((prop) => schemaObj[prop]).filter(schema => !!schema) + } else { + return Object.values(schemaObj) + } + } else { + throw new Error(`${constructor.name} have not @schema`) + } +} + +export function getSchemaName(target: any, prop: string): string { + const schema = getSchema(target, prop) + return schema.name +} diff --git a/src/annotation/SchemaComponent.ts b/src/annotation/SchemaComponent.ts new file mode 100644 index 0000000..04225dd --- /dev/null +++ b/src/annotation/SchemaComponent.ts @@ -0,0 +1,27 @@ +import { Component } from "vue"; +import { getSchema, getSchemas } from "./Schema"; + +export default function SchemaComponent(value: string, component: Component) { + return function (target: any, attr: any) { + target.schema[attr].components[value] = component + } +} + + +export function getSchemaComponent(target: any, prop: string, elName: string, ...args: any[]): Component { + const schema = getSchema(target, prop) + const component = schema.components[elName] + return component(args) +} + +/** + * 获取某个类的所有标签名为elName的组件 + * @param target 类 + * @param elName 标签名 + * @returns 组件列表 + */ +export function getSchemaComponents(target: any, elName: string): { name: string, attr: string, component: (...args: any[]) => Component }[] { + const schema = getSchemas(target) + return schema.map(s => ({ name: s.name, component: s.components[elName], attr: s.attr })).filter(s => s.component) +} + diff --git a/src/api/file/info.js b/src/api/file/info.js new file mode 100644 index 0000000..51458b1 --- /dev/null +++ b/src/api/file/info.js @@ -0,0 +1,130 @@ +import request from '@/utils/request' +import { getToken } from '@/utils/auth'; + +// 查询文件信息列表 +export function listInfo(query) { + return request({ + url: '/file/info/list', + method: 'get', + params: query + }) +} + +// 查询文件信息详细 +export function getInfo(fileId) { + return request({ + url: '/file/info/' + fileId, + method: 'get' + }) +} + +// 新增文件信息 +export function addInfo(data) { + return request({ + url: '/file/info', + method: 'post', + data: data + }) +} + +// 修改文件信息 +export function updateInfo(data) { + return request({ + url: '/file/info', + method: 'put', + data: data + }) +} + +// 删除文件信息 +export function delInfo(fileId) { + return request({ + url: '/file/info/' + fileId, + method: 'delete' + }) +} + +// 统一上传接口 +export function uploadFileUnified({ storageType, clientName, file }) { + const formData = new FormData(); + formData.append('file', file); + return request({ + url: `/file/${storageType}/${clientName}/upload`, + method: 'post', + headers: { 'Content-Type': 'multipart/form-data', Authorization: 'Bearer ' + getToken() }, + data: formData + }); +} + +// 统一下载接口(返回文件流) +export function downloadFileUnified({ storageType, clientName, filePath }) { + return request({ + url: `/file/${storageType}/${clientName}/download`, + method: 'get', + params: { filePath }, + responseType: 'blob', + headers: { Authorization: 'Bearer ' + getToken() } + }); +} + +// 获取所有可用存储渠道及其client列表 +export function getClientList() { + return request({ + url: '/file/client-list', + method: 'get' + }); +} + +/** + * 初始化分片上传 + */ +export function initMultipartUpload(params) { + return request({ + url: '/file/initUpload', + method: 'post', + params: { + fileName: params.fileName, + fileSize: params.fileSize, + } + }); +} + +/** + * 上传文件分片 + */ +export function uploadFileChunk(uploadId, filePath, partNumber, chunk) { + const formData = new FormData(); + formData.append('chunk', chunk); + return request({ + url: '/file/uploadChunk', + method: 'post', + params: { + uploadId, + filePath, + partNumber + }, + data: formData, + headers: { + 'Content-Type': 'multipart/form-data', + repeatSubmit: false + } + }); +} + +/** + * 完成分片上传 + */ +export function completeMultipartUpload(params) { + const { uploadId, filePath, fileSize, fileName, partETags } = params; + return request({ + url: '/file/completeUpload', + method: 'post', + params: { + uploadId, + filePath, + fileSize, + fileName + }, + data: partETags + }); +} diff --git a/src/api/flowable/definition.js b/src/api/flowable/definition.js new file mode 100644 index 0000000..5fd93ff --- /dev/null +++ b/src/api/flowable/definition.js @@ -0,0 +1,113 @@ +import request from '@/utils/request' + +// 查询流程定义列表 +export function listDefinition(query) { + return request({ + url: '/flowable/definition/list', + method: 'get', + params: query + }) +} + +// 部署流程实例 +export function definitionStart(procDefId, data) { + return request({ + url: '/flowable/definition/start/' + procDefId, + method: 'post', + data: data + }) +} + +// 获取流程变量 +export function getProcessVariables(taskId) { + return request({ + url: '/flowable/task/processVariables/' + taskId, + method: 'get' + }) +} + +// 激活/挂起流程 +export function updateState(params) { + return request({ + url: '/flowable/definition/updateState', + method: 'put', + params: params + }) +} + +// 指定流程办理人员列表 +export function userList(query) { + return request({ + url: '/flowable/definition/userList', + method: 'get', + params: query + }) +} + +// 指定流程办理组列表 +export function roleList(query) { + return request({ + url: '/flowable/definition/roleList', + method: 'get', + params: query + }) +} + +// 指定流程表达式 +export function expList(query) { + return request({ + url: '/flowable/definition/expList', + method: 'get', + params: query + }) +} + +// 读取xml文件 +export function readXml(deployId) { + return request({ + url: '/flowable/definition/readXml/' + deployId, + method: 'get' + }) +} + +// 读取image文件 +export function readImage(deployId) { + return request({ + url: '/flowable/definition/readImage/' + deployId, + method: 'get' + }) +} + +// 获取流程执行节点 +export function getFlowViewer(procInsId, executionId) { + return request({ + url: '/flowable/task/flowViewer/' + procInsId + '/' + executionId, + method: 'get' + }) +} + +// 流程节点数据 +export function flowXmlAndNode(query) { + return request({ + url: '/flowable/task/flowXmlAndNode', + method: 'get', + params: query + }) +} + +// 读取xml文件 +export function saveXml(data) { + return request({ + url: '/flowable/definition/save', + method: 'post', + data: data + }) +} + +// 删除流程定义 +export function delDeployment(deployId) { + return request({ + url: '/flowable/definition/' + deployId, + method: 'delete', + }) +} diff --git a/src/api/flowable/expression.js b/src/api/flowable/expression.js new file mode 100644 index 0000000..4a6ed96 --- /dev/null +++ b/src/api/flowable/expression.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询流程达式列表 +export function listExpression(query) { + return request({ + url: '/system/expression/list', + method: 'get', + params: query + }) +} + +// 查询流程达式详细 +export function getExpression(id) { + return request({ + url: '/system/expression/' + id, + method: 'get' + }) +} + +// 新增流程达式 +export function addExpression(data) { + return request({ + url: '/system/expression', + method: 'post', + data: data + }) +} + +// 修改流程达式 +export function updateExpression(data) { + return request({ + url: '/system/expression', + method: 'put', + data: data + }) +} + +// 删除流程达式 +export function delExpression(id) { + return request({ + url: '/system/expression/' + id, + method: 'delete' + }) +} diff --git a/src/api/flowable/finished.js b/src/api/flowable/finished.js new file mode 100644 index 0000000..f24cc1b --- /dev/null +++ b/src/api/flowable/finished.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +// 查询已办任务列表 +export function finishedList(query) { + return request({ + url: '/flowable/task/finishedList', + method: 'get', + params: query + }) +} + +// 任务流转记录 +export function flowRecord(query) { + return request({ + url: '/flowable/task/flowRecord', + method: 'get', + params: query + }) +} + +// 部署流程实例 +export function deployStart(deployId) { + return request({ + url: '/flowable/process/startFlow/' + deployId, + method: 'get', + }) +} + +// 删除流程定义 +export function delDeployment(id) { + return request({ + url: '/flowable/instance/delete/' + id, + method: 'delete' + }) +} + +// 撤回流程 +export function revokeProcess(data) { + return request({ + url: '/flowable/task/revokeProcess', + method: 'post', + data: data + }) +} + +// 导入流程文件 +export function importDeployment(name, category, file) { + const formData = new FormData(); + if (name) formData.append('name', name); + if (category) formData.append('category', category); + formData.append('file', file); + + return request({ + url: '/flowable/definition/import', + method: 'post', + data: formData + }); +} diff --git a/src/api/flowable/form.js b/src/api/flowable/form.js new file mode 100644 index 0000000..46b74fd --- /dev/null +++ b/src/api/flowable/form.js @@ -0,0 +1,68 @@ +import request from '@/utils/request' + +// 查询流程表单列表 +export function listForm(query) { + return request({ + url: '/form/template/list', + method: 'get', + params: query + }) +} +export function listAllForm(query) { + return request({ + url: '/form/template/list', + method: 'get', + params: query + }) +} + +// 查询流程表单详细 +export function getForm(formId) { + return request({ + url: '/form/template/' + formId, + method: 'get' + }) +} + +// 新增流程表单 +export function addForm(data) { + return request({ + url: '/flowable/form', + method: 'post', + data: data + }) +} + +// 修改流程表单 +export function updateForm(data) { + return request({ + url: '/flowable/form', + method: 'put', + data: data + }) +} +// 挂载表单 +export function addDeployForm(data) { + return request({ + url: '/flowable/definition/addDeployForm', + method: 'post', + data: data + }) +} + +// 删除流程表单 +export function delForm(formId) { + return request({ + url: '/form/template/' + formId, + method: 'delete' + }) +} + +// 导出流程表单 +export function exportForm(query) { + return request({ + url: '/form/template/export', + method: 'get', + params: query + }) +} diff --git a/src/api/flowable/listener.js b/src/api/flowable/listener.js new file mode 100644 index 0000000..cec029c --- /dev/null +++ b/src/api/flowable/listener.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询流程监听列表 +export function listListener(query) { + return request({ + url: '/system/listener/list', + method: 'get', + params: query + }) +} + +// 查询流程监听详细 +export function getListener(id) { + return request({ + url: '/system/listener/' + id, + method: 'get' + }) +} + +// 新增流程监听 +export function addListener(data) { + return request({ + url: '/system/listener', + method: 'post', + data: data + }) +} + +// 修改流程监听 +export function updateListener(data) { + return request({ + url: '/system/listener', + method: 'put', + data: data + }) +} + +// 删除流程监听 +export function delListener(id) { + return request({ + url: '/system/listener/' + id, + method: 'delete' + }) +} diff --git a/src/api/flowable/process.js b/src/api/flowable/process.js new file mode 100644 index 0000000..950d2a7 --- /dev/null +++ b/src/api/flowable/process.js @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +// 我的发起的流程 +export function myProcessList(query) { + return request({ + url: '/flowable/task/myProcess', + method: 'get', + params: query + }) +} + +export function flowFormData(query) { + return request({ + url: '/flowable/task/flowFormData', + method: 'get', + params: query + }) +} + +export function flowTaskInfo(query) { + return request({ + url: '/flowable/task/flowTaskInfo', + method: 'get', + params: query + }) +} + +// 完成任务 +export function complete(data) { + return request({ + url: '/flowable/task/complete', + method: 'post', + data: data + }) +} + +// 取消申请 +export function stopProcess(data) { + return request({ + url: '/flowable/task/stopProcess', + method: 'post', + data: data + }) +} + +// 驳回任务 +export function rejectTask(data) { + return request({ + url: '/flowable/task/reject', + method: 'post', + data: data + }) +} + +// 可退回任务列表 +export function returnList(data) { + return request({ + url: '/flowable/task/returnList', + method: 'post', + data: data + }) +} + +// 部署流程实例 +export function deployStart(deployId) { + return request({ + url: '/flowable/process/startFlow/' + deployId, + method: 'get', + }) +} diff --git a/src/api/flowable/todo.js b/src/api/flowable/todo.js new file mode 100644 index 0000000..8369dbe --- /dev/null +++ b/src/api/flowable/todo.js @@ -0,0 +1,101 @@ +import request from '@/utils/request'; + +// 查询待办任务列表 +export function todoList(query) { + return request({ + url: '/flowable/task/todoList', + method: 'get', + params: query + }) +} + +// 完成任务 +export function complete(data) { + return request({ + url: '/flowable/task/complete', + method: 'post', + data: data + }) +} + +// 委派任务 +export function delegate(data) { + return request({ + url: '/flowable/task/delegate', + method: 'post', + data: data + }) +} + +// 退回任务 +export function returnTask(data) { + return request({ + url: '/flowable/task/return', + method: 'post', + data: data + }) +} + +// 驳回任务 +export function rejectTask(data) { + return request({ + url: '/flowable/task/reject', + method: 'post', + data: data + }) +} + +// 可退回任务列表 +export function returnList(data) { + return request({ + url: '/flowable/task/returnList', + method: 'post', + data: data + }) +} + +// 下一节点 +export function getNextFlowNode(data) { + return request({ + url: '/flowable/task/nextFlowNode', + method: 'post', + data: data + }) +} + +// 下一节点 +export function getNextFlowNodeByStart(data) { + return request({ + url: '/flowable/task/nextFlowNodeByStart', + method: 'post', + data: data + }) +} + +// 部署流程实例 +export function deployStart(deployId) { + return request({ + url: '/flowable/process/startFlow/' + deployId, + method: 'get', + }) +} + +// 删除流程定义 +export function delDeployment(id) { + return request({ + url: '/flowable/task/delete', + data: { + taskId: id + }, + method: 'delete' + }) +} + +// 流程节点表单 +export function flowTaskForm(query) { + return request({ + url: '/flowable/task/flowTaskForm', + method: 'get', + params: query + }) +} diff --git a/src/api/form/data.js b/src/api/form/data.js new file mode 100644 index 0000000..b012682 --- /dev/null +++ b/src/api/form/data.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询单数据列表 +export function listData(query) { + return request({ + url: '/form/data/list', + method: 'get', + params: query + }) +} + +// 查询单数据详细 +export function getData(dataId) { + return request({ + url: '/form/data/' + dataId, + method: 'get' + }) +} + +// 新增单数据 +export function addData(data) { + return request({ + url: '/form/data', + method: 'post', + data: data + }) +} + +// 修改单数据 +export function updateData(data) { + return request({ + url: '/form/data', + method: 'put', + data: data + }) +} + +// 删除单数据 +export function delData(dataId) { + return request({ + url: '/form/data/' + dataId, + method: 'delete' + }) +} diff --git a/src/api/form/template.js b/src/api/form/template.js new file mode 100644 index 0000000..29ac881 --- /dev/null +++ b/src/api/form/template.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询单模板列表 +export function listTemplate(query) { + return request({ + url: '/form/template/list', + method: 'get', + params: query + }) +} + +// 查询单模板详细 +export function getTemplate(formId) { + return request({ + url: '/form/template/' + formId, + method: 'get' + }) +} + +// 新增单模板 +export function addTemplate(data) { + return request({ + url: '/form/template', + method: 'post', + data: data + }) +} + +// 修改单模板 +export function updateTemplate(data) { + return request({ + url: '/form/template', + method: 'put', + data: data + }) +} + +// 删除单模板 +export function delTemplate(formId) { + return request({ + url: '/form/template/' + formId, + method: 'delete' + }) +} diff --git a/src/api/login.js b/src/api/login.js new file mode 100644 index 0000000..64030ab --- /dev/null +++ b/src/api/login.js @@ -0,0 +1,113 @@ +import request from '@/utils/request' + +// 登录方法 +export function login(data) { + return request({ + url: '/login', + headers: { + isToken: false + }, + method: 'post', + data: data + }) +} + +// 注册方法 +export function register(data) { + return request({ + url: '/register', + headers: { + isToken: false + }, + method: 'post', + data: data + }) +} + +// 获取用户详细信息 +export function getInfo() { + return request({ + url: '/getInfo', + method: 'get' + }) +} + +// 退出方法 +export function logout() { + return request({ + url: '/logout', + method: 'post' + }) +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: '/captchaImage', + headers: { + isToken: false + }, + method: 'get', + timeout: 20000 + }) +} + +export function sendEmailCode(data, type = 'register') { + return request({ + url: `/auth/mail/send/${type}`, + headers: { + isToken: false + }, + method: 'post', + timeout: 20000, + data, + params: { + autoRegister: data.autoRegister + }, + }) +} + +export function verifyEmailCode(data, type = 'register') { + return request({ + url: `/auth/mail/verify/${type}`, + headers: { + isToken: false + }, + method: 'post', + timeout: 20000, + data, + params: { + autoRegister: data.autoRegister + }, + }) +} + +export function sendPhoneCode(data, type = 'register') { + return request({ + url: `/auth/dySms/send/${type}`, + headers: { + isToken: false + }, + method: 'post', + timeout: 20000, + data, + params: { + autoRegister: data.autoRegister + }, + }) +} + +export function verifyPhoneCode(data, type = 'register') { + return request({ + url: `/auth/dySms/verify/${type}`, + headers: { + isToken: false + }, + method: 'post', + timeout: 20000, + data, + params: { + autoRegister: data.autoRegister + }, + }) +} \ No newline at end of file diff --git a/src/api/menu.js b/src/api/menu.js new file mode 100644 index 0000000..faef101 --- /dev/null +++ b/src/api/menu.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取路由 +export const getRouters = () => { + return request({ + url: '/getRouters', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/modelMessage/messageSystem.js b/src/api/modelMessage/messageSystem.js new file mode 100644 index 0000000..e0b3677 --- /dev/null +++ b/src/api/modelMessage/messageSystem.js @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +// 查询消息管理列表 +export function listMessageSystem(query) { + return request({ + url: '/modelMessage/messageSystem/list', + method: 'get', + params: query + }) +} + +// 查询消息管理详细 +export function getMessageSystem(messageId) { + return request({ + url: '/modelMessage/messageSystem/' + messageId, + method: 'get' + }) +} + +// 修改消息管理 +export function updateMessageSystem(data) { + return request({ + url: '/modelMessage/messageSystem', + method: 'put', + data: data + }) +} + +// 删除消息管理 +export function delMessageSystem(messageId) { + return request({ + url: '/modelMessage/messageSystem/' + messageId, + method: 'delete' + }) +} + +// 统一查询系统资源信息(角色、部门、用户) +export function getSystemResource(type, id, sendMode) { + const params = { type }; + if (id !== null && id !== undefined) { + params.id = id; + } + if (sendMode !== null && sendMode !== undefined) { + params.sendMode = sendMode; + } + + return request({ + url: '/modelMessage/messageSystem/systemResource', + method: 'get', + params: params + }); +} + +//点击信息详情状态调整为已读 +export function getUpdate(messageId) { + return request({ + url: '/modelMessage/messageSystem/' + messageId, + method: 'post' + }) +} + +// 批量发送消息 +export function batchAddMessage(data) { + return request({ + url: '/modelMessage/messageSystem', + method: 'post', + data: data, + headers: { 'isRepeatSubmit': false } + }) +} diff --git a/src/api/modelMessage/template.js b/src/api/modelMessage/template.js new file mode 100644 index 0000000..00af09f --- /dev/null +++ b/src/api/modelMessage/template.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询模版管理列表 +export function listTemplate(query) { + return request({ + url: '/modelMessage/template/list', + method: 'get', + params: query + }) +} + +// 查询模版管理详细 +export function getTemplate(templateId) { + return request({ + url: '/modelMessage/template/' + templateId, + method: 'get' + }) +} + +// 新增模版管理 +export function addTemplate(data) { + return request({ + url: '/modelMessage/template', + method: 'post', + data: data + }) +} + +// 修改模版管理 +export function updateTemplate(data) { + return request({ + url: '/modelMessage/template', + method: 'put', + data: data + }) +} + +// 删除模版管理 +export function delTemplate(templateId) { + return request({ + url: '/modelMessage/template/' + templateId, + method: 'delete' + }) +} + +// 查询模版签名 +export function selecTemplates() { + return request({ + url: '/modelMessage/template/selecTemplates', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/modelMessage/variable.js b/src/api/modelMessage/variable.js new file mode 100644 index 0000000..76ceb37 --- /dev/null +++ b/src/api/modelMessage/variable.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询变量管理列表 +export function listVariable(query) { + return request({ + url: '/modelMessage/variable/list', + method: 'get', + params: query + }) +} + +// 查询变量管理详细 +export function getVariable(variableId) { + return request({ + url: '/modelMessage/variable/' + variableId, + method: 'get' + }) +} + +// 新增变量管理 +export function addVariable(data) { + return request({ + url: '/modelMessage/variable', + method: 'post', + data: data + }) +} + +// 修改变量管理 +export function updateVariable(data) { + return request({ + url: '/modelMessage/variable', + method: 'put', + data: data + }) +} + +// 删除变量管理 +export function delVariable(variableId) { + return request({ + url: '/modelMessage/variable/' + variableId, + method: 'delete' + }) +} + +// 查询变量 +export function selectVariable() { + return request({ + url: '/modelMessage/variable/selectMessageVariable', + method: 'get' + }) +} diff --git a/src/api/monitor/cache.js b/src/api/monitor/cache.js new file mode 100644 index 0000000..72c5f6a --- /dev/null +++ b/src/api/monitor/cache.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 查询缓存详细 +export function getCache() { + return request({ + url: '/monitor/cache', + method: 'get' + }) +} + +// 查询缓存名称列表 +export function listCacheName() { + return request({ + url: '/monitor/cache/getNames', + method: 'get' + }) +} + +// 查询缓存键名列表 +export function listCacheKey(cacheName) { + return request({ + url: '/monitor/cache/getKeys/' + cacheName, + method: 'get' + }) +} + +// 查询缓存内容 +export function getCacheValue(cacheName, cacheKey) { + return request({ + url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, + method: 'get' + }) +} + +// 清理指定名称缓存 +export function clearCacheName(cacheName) { + return request({ + url: '/monitor/cache/clearCacheName/' + cacheName, + method: 'delete' + }) +} + +// 清理指定键名缓存 +export function clearCacheKey(cacheKey) { + return request({ + url: '/monitor/cache/clearCacheKey/' + cacheKey, + method: 'delete' + }) +} + +// 清理全部缓存 +export function clearCacheAll() { + return request({ + url: '/monitor/cache/clearCacheAll', + method: 'delete' + }) +} diff --git a/src/api/monitor/job.js b/src/api/monitor/job.js new file mode 100644 index 0000000..3815569 --- /dev/null +++ b/src/api/monitor/job.js @@ -0,0 +1,71 @@ +import request from '@/utils/request' + +// 查询定时任务调度列表 +export function listJob(query) { + return request({ + url: '/monitor/job/list', + method: 'get', + params: query + }) +} + +// 查询定时任务调度详细 +export function getJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'get' + }) +} + +// 新增定时任务调度 +export function addJob(data) { + return request({ + url: '/monitor/job', + method: 'post', + data: data + }) +} + +// 修改定时任务调度 +export function updateJob(data) { + return request({ + url: '/monitor/job', + method: 'put', + data: data + }) +} + +// 删除定时任务调度 +export function delJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'delete' + }) +} + +// 任务状态修改 +export function changeJobStatus(jobId, status) { + const data = { + jobId, + status + } + return request({ + url: '/monitor/job/changeStatus', + method: 'put', + data: data + }) +} + + +// 定时任务立即执行一次 +export function runJob(jobId, jobGroup) { + const data = { + jobId, + jobGroup + } + return request({ + url: '/monitor/job/run', + method: 'put', + data: data + }) +} \ No newline at end of file diff --git a/src/api/monitor/jobLog.js b/src/api/monitor/jobLog.js new file mode 100644 index 0000000..6e0be61 --- /dev/null +++ b/src/api/monitor/jobLog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询调度日志列表 +export function listJobLog(query) { + return request({ + url: '/monitor/jobLog/list', + method: 'get', + params: query + }) +} + +// 删除调度日志 +export function delJobLog(jobLogId) { + return request({ + url: '/monitor/jobLog/' + jobLogId, + method: 'delete' + }) +} + +// 清空调度日志 +export function cleanJobLog() { + return request({ + url: '/monitor/jobLog/clean', + method: 'delete' + }) +} diff --git a/src/api/monitor/logininfor.js b/src/api/monitor/logininfor.js new file mode 100644 index 0000000..4d112b7 --- /dev/null +++ b/src/api/monitor/logininfor.js @@ -0,0 +1,34 @@ +import request from '@/utils/request' + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/monitor/logininfor/list', + method: 'get', + params: query + }) +} + +// 删除登录日志 +export function delLogininfor(infoId) { + return request({ + url: '/monitor/logininfor/' + infoId, + method: 'delete' + }) +} + +// 解锁用户登录状态 +export function unlockLogininfor(userName) { + return request({ + url: '/monitor/logininfor/unlock/' + userName, + method: 'get' + }) +} + +// 清空登录日志 +export function cleanLogininfor() { + return request({ + url: '/monitor/logininfor/clean', + method: 'delete' + }) +} diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js new file mode 100644 index 0000000..bd22137 --- /dev/null +++ b/src/api/monitor/online.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询在线用户列表 +export function list(query) { + return request({ + url: '/monitor/online/list', + method: 'get', + params: query + }) +} + +// 强退用户 +export function forceLogout(tokenId) { + return request({ + url: '/monitor/online/' + tokenId, + method: 'delete' + }) +} diff --git a/src/api/monitor/operlog.js b/src/api/monitor/operlog.js new file mode 100644 index 0000000..a04bca8 --- /dev/null +++ b/src/api/monitor/operlog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/monitor/operlog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(operId) { + return request({ + url: '/monitor/operlog/' + operId, + method: 'delete' + }) +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/monitor/operlog/clean', + method: 'delete' + }) +} diff --git a/src/api/monitor/server.js b/src/api/monitor/server.js new file mode 100644 index 0000000..e1f9ca2 --- /dev/null +++ b/src/api/monitor/server.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取服务信息 +export function getServer() { + return request({ + url: '/monitor/server', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/ngtools/NGCalcTools.js b/src/api/ngtools/NGCalcTools.js new file mode 100644 index 0000000..78ca658 --- /dev/null +++ b/src/api/ngtools/NGCalcTools.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 天然气物性参数计算 +export function calcNGPar(data) { + return request({ + url: '/NGCalcTools/ngCalc', + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/json' + } + }) +} +// 天然气流量计算 +export function calcFlow(data) { + return request({ + url: '/flowCalTools/flowCalc', + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/json' + } + }) +} + + \ No newline at end of file diff --git a/src/api/ngtools/components.js b/src/api/ngtools/components.js new file mode 100644 index 0000000..1346dd2 --- /dev/null +++ b/src/api/ngtools/components.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询天然气组分列表 +export function listComponents(query) { + return request({ + url: '/ngtools/components/list', + method: 'get', + params: query + }) +} + +// 查询天然气组分详细 +export function getComponents(id) { + return request({ + url: '/ngtools/components/' + id, + method: 'get' + }) +} + +// 新增天然气组分 +export function addComponents(data) { + return request({ + url: '/ngtools/components', + method: 'post', + data: data + }) +} + +// 修改天然气组分 +export function updateComponents(data) { + return request({ + url: '/ngtools/components', + method: 'put', + data: data + }) +} + +// 删除天然气组分 +export function delComponents(id) { + return request({ + url: '/ngtools/components/' + id, + method: 'delete' + }) +} diff --git a/src/api/ngtools/meterpar.js b/src/api/ngtools/meterpar.js new file mode 100644 index 0000000..72f2b0c --- /dev/null +++ b/src/api/ngtools/meterpar.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询流量计参数列表 +export function listMeterpar(query) { + return request({ + url: '/ngtools/meterpar/list', + method: 'get', + params: query + }) +} + +// 查询流量计参数详细 +export function getMeterpar(id) { + return request({ + url: '/ngtools/meterpar/' + id, + method: 'get' + }) +} + +// 新增流量计参数 +export function addMeterpar(data) { + return request({ + url: '/ngtools/meterpar', + method: 'post', + data: data + }) +} + +// 修改流量计参数 +export function updateMeterpar(data) { + return request({ + url: '/ngtools/meterpar', + method: 'put', + data: data + }) +} + +// 删除流量计参数 +export function delMeterpar(id) { + return request({ + url: '/ngtools/meterpar/' + id, + method: 'delete' + }) +} diff --git a/src/api/ngtools/meterresult.js b/src/api/ngtools/meterresult.js new file mode 100644 index 0000000..cf583ba --- /dev/null +++ b/src/api/ngtools/meterresult.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询流量计算结果列表 +export function listMeterresult(query) { + return request({ + url: '/ngtools/meterresult/list', + method: 'get', + params: query + }) +} + +// 查询流量计算结果详细 +export function getMeterresult(id) { + return request({ + url: '/ngtools/meterresult/' + id, + method: 'get' + }) +} + +// 新增流量计算结果 +export function addMeterresult(data) { + return request({ + url: '/ngtools/meterresult', + method: 'post', + data: data + }) +} + +// 修改流量计算结果 +export function updateMeterresult(data) { + return request({ + url: '/ngtools/meterresult', + method: 'put', + data: data + }) +} + +// 删除流量计算结果 +export function delMeterresult(id) { + return request({ + url: '/ngtools/meterresult/' + id, + method: 'delete' + }) +} diff --git a/src/api/ngtools/ngpar.js b/src/api/ngtools/ngpar.js new file mode 100644 index 0000000..b02d006 --- /dev/null +++ b/src/api/ngtools/ngpar.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询天然气物性参数列表 +export function listNgpar(query) { + return request({ + url: '/ngtools/ngpar/list', + method: 'get', + params: query + }) +} + +// 查询天然气物性参数详细 +export function getNgpar(id) { + return request({ + url: '/ngtools/ngpar/' + id, + method: 'get' + }) +} + +// 新增天然气物性参数 +export function addNgpar(data) { + return request({ + url: '/ngtools/ngpar', + method: 'post', + data: data + }) +} + +// 修改天然气物性参数 +export function updateNgpar(data) { + return request({ + url: '/ngtools/ngpar', + method: 'put', + data: data + }) +} + +// 删除天然气物性参数 +export function delNgpar(id) { + return request({ + url: '/ngtools/ngpar/' + id, + method: 'delete' + }) +} diff --git a/src/api/online/db.js b/src/api/online/db.js new file mode 100644 index 0000000..5968f03 --- /dev/null +++ b/src/api/online/db.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + + +export function listDbTable(params) { + return request({ + url: '/online/db/table/list', + method: 'get', + params: params + }) +} + +export function listDbColumn(tableName) { + return request({ + url: '/online/db/column/list', + method: 'get', + params: { tableName } + }) +} \ No newline at end of file diff --git a/src/api/online/mb.js b/src/api/online/mb.js new file mode 100644 index 0000000..15c91e7 --- /dev/null +++ b/src/api/online/mb.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询mybatis在线接口列表 +export function listMb(query) { + return request({ + url: '/online/mb/list', + method: 'get', + params: query + }) +} + +// 查询mybatis在线接口详细 +export function getMb(mbId) { + return request({ + url: '/online/mb/' + mbId, + method: 'get' + }) +} + +// 新增mybatis在线接口 +export function addMb(data) { + return request({ + url: '/online/mb', + method: 'post', + data: data + }) +} + +// 修改mybatis在线接口 +export function updateMb(data) { + return request({ + url: '/online/mb', + method: 'put', + data: data + }) +} + +// 删除mybatis在线接口 +export function delMb(mbId) { + return request({ + url: '/online/mb/' + mbId, + method: 'delete' + }) +} diff --git a/src/api/pay/invoice.js b/src/api/pay/invoice.js new file mode 100644 index 0000000..b8a6de4 --- /dev/null +++ b/src/api/pay/invoice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询发票列表 +export function listInvoice(query) { + return request({ + url: '/pay/invoice/list', + method: 'get', + params: query + }) +} + +// 查询发票详细 +export function getInvoice(invoiceId) { + return request({ + url: '/pay/invoice/' + invoiceId, + method: 'get' + }) +} + +// 新增发票 +export function addInvoice(data) { + return request({ + url: '/pay/invoice', + method: 'post', + data: data + }) +} + +// 修改发票 +export function updateInvoice(data) { + return request({ + url: '/pay/invoice', + method: 'put', + data: data + }) +} + +// 删除发票 +export function delInvoice(invoiceId) { + return request({ + url: '/pay/invoice/' + invoiceId, + method: 'delete' + }) +} diff --git a/src/api/pay/order.js b/src/api/pay/order.js new file mode 100644 index 0000000..b6eae43 --- /dev/null +++ b/src/api/pay/order.js @@ -0,0 +1,62 @@ +import request from '@/utils/request' + +// 查询订单列表 +export function listOrder(query) { + return request({ + url: '/pay/order/list', + method: 'get', + params: query + }) +} + +// 查询订单详细 +export function getOrder(orderId) { + return request({ + url: '/pay/order/' + orderId, + method: 'get' + }) +} + +// 新增订单 +export function addOrder(data) { + return request({ + url: '/pay/order', + method: 'post', + data: data + }) +} + +// 修改订单 +export function updateOrder(data) { + return request({ + url: '/pay/order', + method: 'put', + data: data + }) +} + +// 删除订单 +export function delOrder(orderId) { + return request({ + url: '/pay/order/' + orderId, + method: 'delete' + }) +} + +// 退款订单 +export function refundOrder(orderNumber, data) { + return request({ + url: `/pay/refund/${orderNumber}`, + method: 'post', + data: data + }) +} + +// 更新订单状态 +export function updateOrderStatus(orderNumber, data) { + return request({ + url: `/pay/query/${orderNumber}`, + method: 'post', + data: data + }) +} diff --git a/src/api/system/config.js b/src/api/system/config.js new file mode 100644 index 0000000..a404d82 --- /dev/null +++ b/src/api/system/config.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询参数列表 +export function listConfig(query) { + return request({ + url: '/system/config/list', + method: 'get', + params: query + }) +} + +// 查询参数详细 +export function getConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'get' + }) +} + +// 根据参数键名查询参数值 +export function getConfigKey(configKey) { + return request({ + url: '/system/config/configKey/' + configKey, + method: 'get' + }) +} + +// 新增参数配置 +export function addConfig(data) { + return request({ + url: '/system/config', + method: 'post', + data: data + }) +} + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data: data + }) +} + +// 删除参数配置 +export function delConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'delete' + }) +} + +// 刷新参数缓存 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete' + }) +} diff --git a/src/api/system/convert.js b/src/api/system/convert.js new file mode 100644 index 0000000..b5187f2 --- /dev/null +++ b/src/api/system/convert.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询单位换算列表 +export function listConvert(query) { + return request({ + url: '/system/convert/list', + method: 'get', + params: query + }) +} + +// 查询单位换算详细 +export function getConvert(id) { + return request({ + url: '/system/convert/' + id, + method: 'get' + }) +} + +// 新增单位换算 +export function addConvert(data) { + return request({ + url: '/system/convert', + method: 'post', + data: data + }) +} + +// 修改单位换算 +export function updateConvert(data) { + return request({ + url: '/system/convert', + method: 'put', + data: data + }) +} + +// 删除单位换算 +export function delConvert(id) { + return request({ + url: '/system/convert/' + id, + method: 'delete' + }) +} diff --git a/src/api/system/dept.js b/src/api/system/dept.js new file mode 100644 index 0000000..fc943cd --- /dev/null +++ b/src/api/system/dept.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询部门列表 +export function listDept(query) { + return request({ + url: '/system/dept/list', + method: 'get', + params: query + }) +} + +// 查询部门列表(排除节点) +export function listDeptExcludeChild(deptId) { + return request({ + url: '/system/dept/list/exclude/' + deptId, + method: 'get' + }) +} + +// 查询部门详细 +export function getDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'get' + }) +} + +// 新增部门 +export function addDept(data) { + return request({ + url: '/system/dept', + method: 'post', + data: data + }) +} + +// 修改部门 +export function updateDept(data) { + return request({ + url: '/system/dept', + method: 'put', + data: data + }) +} + +// 删除部门 +export function delDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/system/dict/data.js b/src/api/system/dict/data.js new file mode 100644 index 0000000..6c9eb79 --- /dev/null +++ b/src/api/system/dict/data.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询字典数据列表 +export function listData(query) { + return request({ + url: '/system/dict/data/list', + method: 'get', + params: query + }) +} + +// 查询字典数据详细 +export function getData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'get' + }) +} + +// 根据字典类型查询字典数据信息 +export function getDicts(dictType) { + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get' + }) +} + +// 新增字典数据 +export function addData(data) { + return request({ + url: '/system/dict/data', + method: 'post', + data: data + }) +} + +// 修改字典数据 +export function updateData(data) { + return request({ + url: '/system/dict/data', + method: 'put', + data: data + }) +} + +// 删除字典数据 +export function delData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete' + }) +} diff --git a/src/api/system/dict/type.js b/src/api/system/dict/type.js new file mode 100644 index 0000000..a0254ba --- /dev/null +++ b/src/api/system/dict/type.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询字典类型列表 +export function listType(query) { + return request({ + url: '/system/dict/type/list', + method: 'get', + params: query + }) +} + +// 查询字典类型详细 +export function getType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'get' + }) +} + +// 新增字典类型 +export function addType(data) { + return request({ + url: '/system/dict/type', + method: 'post', + data: data + }) +} + +// 修改字典类型 +export function updateType(data) { + return request({ + url: '/system/dict/type', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function delType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete' + }) +} + +// 刷新字典缓存 +export function refreshCache() { + return request({ + url: '/system/dict/type/refreshCache', + method: 'delete' + }) +} + +// 获取字典选择框列表 +export function optionselect() { + return request({ + url: '/system/dict/type/optionselect', + method: 'get' + }) +} diff --git a/src/api/system/expression.js b/src/api/system/expression.js new file mode 100644 index 0000000..4a6ed96 --- /dev/null +++ b/src/api/system/expression.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询流程达式列表 +export function listExpression(query) { + return request({ + url: '/system/expression/list', + method: 'get', + params: query + }) +} + +// 查询流程达式详细 +export function getExpression(id) { + return request({ + url: '/system/expression/' + id, + method: 'get' + }) +} + +// 新增流程达式 +export function addExpression(data) { + return request({ + url: '/system/expression', + method: 'post', + data: data + }) +} + +// 修改流程达式 +export function updateExpression(data) { + return request({ + url: '/system/expression', + method: 'put', + data: data + }) +} + +// 删除流程达式 +export function delExpression(id) { + return request({ + url: '/system/expression/' + id, + method: 'delete' + }) +} diff --git a/src/api/system/listener.js b/src/api/system/listener.js new file mode 100644 index 0000000..cec029c --- /dev/null +++ b/src/api/system/listener.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询流程监听列表 +export function listListener(query) { + return request({ + url: '/system/listener/list', + method: 'get', + params: query + }) +} + +// 查询流程监听详细 +export function getListener(id) { + return request({ + url: '/system/listener/' + id, + method: 'get' + }) +} + +// 新增流程监听 +export function addListener(data) { + return request({ + url: '/system/listener', + method: 'post', + data: data + }) +} + +// 修改流程监听 +export function updateListener(data) { + return request({ + url: '/system/listener', + method: 'put', + data: data + }) +} + +// 删除流程监听 +export function delListener(id) { + return request({ + url: '/system/listener/' + id, + method: 'delete' + }) +} diff --git a/src/api/system/menu.js b/src/api/system/menu.js new file mode 100644 index 0000000..f6415c6 --- /dev/null +++ b/src/api/system/menu.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query + }) +} + +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'get' + }) +} + +// 查询菜单下拉树结构 +export function treeselect() { + return request({ + url: '/system/menu/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询菜单下拉树结构 +export function roleMenuTreeselect(roleId) { + return request({ + url: '/system/menu/roleMenuTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增菜单 +export function addMenu(data) { + return request({ + url: '/system/menu', + method: 'post', + data: data + }) +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: '/system/menu', + method: 'put', + data: data + }) +} + +// 删除菜单 +export function delMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/system/notice.js b/src/api/system/notice.js new file mode 100644 index 0000000..c274ea5 --- /dev/null +++ b/src/api/system/notice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询公告列表 +export function listNotice(query) { + return request({ + url: '/system/notice/list', + method: 'get', + params: query + }) +} + +// 查询公告详细 +export function getNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'get' + }) +} + +// 新增公告 +export function addNotice(data) { + return request({ + url: '/system/notice', + method: 'post', + data: data + }) +} + +// 修改公告 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data: data + }) +} + +// 删除公告 +export function delNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/system/oauth.js b/src/api/system/oauth.js new file mode 100644 index 0000000..f11184f --- /dev/null +++ b/src/api/system/oauth.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询第三方认证列表 +export function listOauth(query) { + return request({ + url: '/system/oauth/list', + method: 'get', + params: query + }) +} + +// 查询第三方认证详细 +export function getOauth(id) { + return request({ + url: '/system/oauth/' + id, + method: 'get' + }) +} + +// 新增第三方认证 +export function addOauth(data) { + return request({ + url: '/system/oauth', + method: 'post', + data: data + }) +} + +// 修改第三方认证 +export function updateOauth(data) { + return request({ + url: '/system/oauth', + method: 'put', + data: data + }) +} + +// 删除第三方认证 +export function delOauth(id) { + return request({ + url: '/system/oauth/' + id, + method: 'delete' + }) +} diff --git a/src/api/system/post.js b/src/api/system/post.js new file mode 100644 index 0000000..1a8e9ca --- /dev/null +++ b/src/api/system/post.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询岗位列表 +export function listPost(query) { + return request({ + url: '/system/post/list', + method: 'get', + params: query + }) +} + +// 查询岗位详细 +export function getPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'get' + }) +} + +// 新增岗位 +export function addPost(data) { + return request({ + url: '/system/post', + method: 'post', + data: data + }) +} + +// 修改岗位 +export function updatePost(data) { + return request({ + url: '/system/post', + method: 'put', + data: data + }) +} + +// 删除岗位 +export function delPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'delete' + }) +} diff --git a/src/api/system/role.js b/src/api/system/role.js new file mode 100644 index 0000000..f13e6f4 --- /dev/null +++ b/src/api/system/role.js @@ -0,0 +1,119 @@ +import request from '@/utils/request' + +// 查询角色列表 +export function listRole(query) { + return request({ + url: '/system/role/list', + method: 'get', + params: query + }) +} + +// 查询角色详细 +export function getRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'get' + }) +} + +// 新增角色 +export function addRole(data) { + return request({ + url: '/system/role', + method: 'post', + data: data + }) +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: '/system/role', + method: 'put', + data: data + }) +} + +// 角色数据权限 +export function dataScope(data) { + return request({ + url: '/system/role/dataScope', + method: 'put', + data: data + }) +} + +// 角色状态修改 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status + } + return request({ + url: '/system/role/changeStatus', + method: 'put', + data: data + }) +} + +// 删除角色 +export function delRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'delete' + }) +} + +// 查询角色已授权用户列表 +export function allocatedUserList(query) { + return request({ + url: '/system/role/authUser/allocatedList', + method: 'get', + params: query + }) +} + +// 查询角色未授权用户列表 +export function unallocatedUserList(query) { + return request({ + url: '/system/role/authUser/unallocatedList', + method: 'get', + params: query + }) +} + +// 取消用户授权角色 +export function authUserCancel(data) { + return request({ + url: '/system/role/authUser/cancel', + method: 'put', + data: data + }) +} + +// 批量取消用户授权角色 +export function authUserCancelAll(data) { + return request({ + url: '/system/role/authUser/cancelAll', + method: 'put', + params: data + }) +} + +// 授权用户选择 +export function authUserSelectAll(data) { + return request({ + url: '/system/role/authUser/selectAll', + method: 'put', + params: data + }) +} + +// 根据角色ID查询部门树结构 +export function deptTreeSelect(roleId) { + return request({ + url: '/system/role/deptTree/' + roleId, + method: 'get' + }) +} diff --git a/src/api/system/treeDict.js b/src/api/system/treeDict.js new file mode 100644 index 0000000..8317e69 --- /dev/null +++ b/src/api/system/treeDict.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询树形字典列表 +export function listTreeDict(query) { + return request({ + url: '/system/treeDict/list', + method: 'get', + params: query + }) +} + +// 查询树形字典详细 +export function getTreeDict(id) { + return request({ + url: '/system/treeDict/' + id, + method: 'get' + }) +} + +// 新增树形字典 +export function addTreeDict(data) { + return request({ + url: '/system/treeDict', + method: 'post', + data: data + }) +} + +// 修改树形字典 +export function updateTreeDict(data) { + return request({ + url: '/system/treeDict', + method: 'put', + data: data + }) +} + +// 删除树形字典 +export function delTreeDict(id) { + return request({ + url: '/system/treeDict/' + id, + method: 'delete' + }) +} diff --git a/src/api/system/user.js b/src/api/system/user.js new file mode 100644 index 0000000..7f79f9c --- /dev/null +++ b/src/api/system/user.js @@ -0,0 +1,138 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/ruoyi"; + +// 查询用户列表 +export function listUser(query) { + return request({ + url: '/system/user/list', + method: 'get', + params: query + }) +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: '/system/user/' + parseStrEmpty(userId), + method: 'get' + }) +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/system/user', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/system/user', + method: 'put', + data: data + }) +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: '/system/user/' + userId, + method: 'delete' + }) +} + +// 用户密码重置 +export function resetUserPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: '/system/user/resetPwd', + method: 'put', + data: data + }) +} + +// 用户状态修改 +export function changeUserStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: '/system/user/changeStatus', + method: 'put', + data: data + }) +} + +// 查询用户个人信息 +export function getUserProfile() { + return request({ + url: '/system/user/profile', + method: 'get' + }) +} + +// 修改用户个人信息 +export function updateUserProfile(data) { + return request({ + url: '/system/user/profile', + method: 'put', + data: data + }) +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/system/user/profile/updatePwd', + method: 'put', + params: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/avatar', + method: 'post', + data: data, + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + +// 查询授权角色 +export function getAuthRole(userId) { + return request({ + url: '/system/user/authRole/' + userId, + method: 'get' + }) +} + +// 保存授权角色 +export function updateAuthRole(data) { + return request({ + url: '/system/user/authRole', + method: 'put', + params: data + }) +} + +// 查询部门下拉树结构 +export function deptTreeSelect() { + return request({ + url: '/system/user/deptTree', + method: 'get' + }) +} diff --git a/src/api/tool/gen.js b/src/api/tool/gen.js new file mode 100644 index 0000000..a3b6927 --- /dev/null +++ b/src/api/tool/gen.js @@ -0,0 +1,88 @@ +import request from '@/utils/request' + +// 查询生成表数据 +export function listTable(query) { + return request({ + url: '/tool/gen/list', + method: 'get', + params: query + }) +} +// 查询db数据库列表 +export function listDbTable(query) { + return request({ + url: '/tool/gen/db/list', + method: 'get', + params: query + }) +} + +// 查询表详细信息 +/** + * @returns { Promise> } + */ +export function getGenTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'get' + }) +} + +// 修改代码生成信息 +export function updateGenTable(data) { + return request({ + url: '/tool/gen', + method: 'put', + data: data + }) +} + +// 导入表 +export function importTable(data) { + return request({ + url: '/tool/gen/importTable', + method: 'post', + params: data + }) +} + +// 创建表 +export function createTable(data) { + return request({ + url: '/tool/gen/createTable', + method: 'post', + params: data + }) +} + +// 预览生成代码 +export function previewTable(tableId) { + return request({ + url: '/tool/gen/preview/' + tableId, + method: 'get' + }) +} + +// 删除表数据 +export function delTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'delete' + }) +} + +// 生成代码(自定义路径) +export function genCode(tableName) { + return request({ + url: '/tool/gen/genCode/' + tableName, + method: 'get' + }) +} + +// 同步数据库 +export function synchDb(tableName) { + return request({ + url: '/tool/gen/synchDb/' + tableName, + method: 'get' + }) +} diff --git a/src/assets/401_images/401.gif b/src/assets/401_images/401.gif new file mode 100644 index 0000000..cd6e0d9 Binary files /dev/null and b/src/assets/401_images/401.gif differ diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png new file mode 100644 index 0000000..3d8e230 Binary files /dev/null and b/src/assets/404_images/404.png differ diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000..c6281d0 Binary files /dev/null and b/src/assets/404_images/404_cloud.png differ diff --git a/src/assets/icons/svg/404.svg b/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/bug.svg b/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000..05a150d --- /dev/null +++ b/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/build.svg b/src/assets/icons/svg/build.svg new file mode 100644 index 0000000..97c4688 --- /dev/null +++ b/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/button.svg b/src/assets/icons/svg/button.svg new file mode 100644 index 0000000..904fddc --- /dev/null +++ b/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/cascader.svg b/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000..e256024 --- /dev/null +++ b/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/chart.svg b/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/checkbox.svg b/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000..013fd3a --- /dev/null +++ b/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/clipboard.svg b/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000..90923ff --- /dev/null +++ b/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/code.svg b/src/assets/icons/svg/code.svg new file mode 100644 index 0000000..5f9c5ab --- /dev/null +++ b/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/color.svg b/src/assets/icons/svg/color.svg new file mode 100644 index 0000000..44a81aa --- /dev/null +++ b/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/component.svg b/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..29c3458 --- /dev/null +++ b/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dashboard.svg b/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/date-range.svg b/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000..fda571e --- /dev/null +++ b/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/date.svg b/src/assets/icons/svg/date.svg new file mode 100644 index 0000000..52dc73e --- /dev/null +++ b/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dict.svg b/src/assets/icons/svg/dict.svg new file mode 100644 index 0000000..4849377 --- /dev/null +++ b/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/documentation.svg b/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000..7043122 --- /dev/null +++ b/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/download.svg b/src/assets/icons/svg/download.svg new file mode 100644 index 0000000..c896951 --- /dev/null +++ b/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/drag.svg b/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000..4185d3c --- /dev/null +++ b/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/druid.svg b/src/assets/icons/svg/druid.svg new file mode 100644 index 0000000..a2b4b4e --- /dev/null +++ b/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/edit.svg b/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/education.svg b/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/email.svg b/src/assets/icons/svg/email.svg new file mode 100644 index 0000000..74d25e2 --- /dev/null +++ b/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/enter.svg b/src/assets/icons/svg/enter.svg new file mode 100644 index 0000000..f7cabf2 --- /dev/null +++ b/src/assets/icons/svg/enter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/example.svg b/src/assets/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/excel.svg b/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000..74d97b8 --- /dev/null +++ b/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/exit-fullscreen.svg b/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/eye-open.svg b/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/eye.svg b/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/form.svg b/src/assets/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/fullscreen.svg b/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/gitee.svg b/src/assets/icons/svg/gitee.svg new file mode 100644 index 0000000..04ec158 --- /dev/null +++ b/src/assets/icons/svg/gitee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/github.svg b/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..db0a0d4 --- /dev/null +++ b/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/guide.svg b/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000..b271001 --- /dev/null +++ b/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/icon.svg b/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000..82be8ee --- /dev/null +++ b/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/input.svg b/src/assets/icons/svg/input.svg new file mode 100644 index 0000000..ab91381 --- /dev/null +++ b/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/international.svg b/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/job.svg b/src/assets/icons/svg/job.svg new file mode 100644 index 0000000..2a93a25 --- /dev/null +++ b/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/language.svg b/src/assets/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/link.svg b/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/list.svg b/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/lock.svg b/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000..74fee54 --- /dev/null +++ b/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/log.svg b/src/assets/icons/svg/log.svg new file mode 100644 index 0000000..d879d33 --- /dev/null +++ b/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/logininfor.svg b/src/assets/icons/svg/logininfor.svg new file mode 100644 index 0000000..267f844 --- /dev/null +++ b/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/message.svg b/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/money.svg b/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/monitor.svg b/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..bc308cb --- /dev/null +++ b/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/more-up.svg b/src/assets/icons/svg/more-up.svg new file mode 100644 index 0000000..d30ac11 --- /dev/null +++ b/src/assets/icons/svg/more-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/nested.svg b/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/number.svg b/src/assets/icons/svg/number.svg new file mode 100644 index 0000000..ad5ce9a --- /dev/null +++ b/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/online.svg b/src/assets/icons/svg/online.svg new file mode 100644 index 0000000..330a202 --- /dev/null +++ b/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/password.svg b/src/assets/icons/svg/password.svg new file mode 100644 index 0000000..6c64def --- /dev/null +++ b/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/pdf.svg b/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000..957aa0c --- /dev/null +++ b/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/people.svg b/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/peoples.svg b/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000..aab852e --- /dev/null +++ b/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/phone.svg b/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000..ab8e8c4 --- /dev/null +++ b/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/post.svg b/src/assets/icons/svg/post.svg new file mode 100644 index 0000000..2922c61 --- /dev/null +++ b/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/qq.svg b/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000..ee13d4e --- /dev/null +++ b/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/question.svg b/src/assets/icons/svg/question.svg new file mode 100644 index 0000000..cf75bd4 --- /dev/null +++ b/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/radio.svg b/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000..0cde345 --- /dev/null +++ b/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/rate.svg b/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000..aa3b14d --- /dev/null +++ b/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/redis-list.svg b/src/assets/icons/svg/redis-list.svg new file mode 100644 index 0000000..98a15b2 --- /dev/null +++ b/src/assets/icons/svg/redis-list.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/redis.svg b/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000..2f1d62d --- /dev/null +++ b/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/row.svg b/src/assets/icons/svg/row.svg new file mode 100644 index 0000000..0780992 --- /dev/null +++ b/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/search.svg b/src/assets/icons/svg/search.svg new file mode 100644 index 0000000..84233dd --- /dev/null +++ b/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/select.svg b/src/assets/icons/svg/select.svg new file mode 100644 index 0000000..d628382 --- /dev/null +++ b/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/server.svg b/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..eb287e3 --- /dev/null +++ b/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/shopping.svg b/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/size.svg b/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/skill.svg b/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/slider.svg b/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000..fbe4f39 --- /dev/null +++ b/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/star.svg b/src/assets/icons/svg/star.svg new file mode 100644 index 0000000..6cf86e6 --- /dev/null +++ b/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/swagger.svg b/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000..05d4e7b --- /dev/null +++ b/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/switch.svg b/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000..0ba61e3 --- /dev/null +++ b/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/system.svg b/src/assets/icons/svg/system.svg new file mode 100644 index 0000000..5992593 --- /dev/null +++ b/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tab.svg b/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/table.svg b/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/textarea.svg b/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000..2709f29 --- /dev/null +++ b/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/theme.svg b/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/time-range.svg b/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000..13c1202 --- /dev/null +++ b/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/time.svg b/src/assets/icons/svg/time.svg new file mode 100644 index 0000000..b376e32 --- /dev/null +++ b/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tool.svg b/src/assets/icons/svg/tool.svg new file mode 100644 index 0000000..48e0e35 --- /dev/null +++ b/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tree-table.svg b/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tree.svg b/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/upload.svg b/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000..bae49c0 --- /dev/null +++ b/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/user.svg b/src/assets/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/validCode.svg b/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..cfb1021 --- /dev/null +++ b/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/wechat.svg b/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/zip.svg b/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000..f806fc4 --- /dev/null +++ b/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/dark.svg b/src/assets/images/dark.svg new file mode 100644 index 0000000..f646bd7 --- /dev/null +++ b/src/assets/images/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/light.svg b/src/assets/images/light.svg new file mode 100644 index 0000000..ab7cc08 --- /dev/null +++ b/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/profile.jpg b/src/assets/images/profile.jpg new file mode 100644 index 0000000..b3a940b Binary files /dev/null and b/src/assets/images/profile.jpg differ diff --git a/src/assets/logo/logo.png b/src/assets/logo/logo.png new file mode 100644 index 0000000..2be05aa Binary files /dev/null and b/src/assets/logo/logo.png differ diff --git a/src/assets/styles/btn.scss b/src/assets/styles/btn.scss new file mode 100644 index 0000000..d7e95d5 --- /dev/null +++ b/src/assets/styles/btn.scss @@ -0,0 +1,100 @@ +@use 'variables.module.scss'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn(variables.$blue) +} + +.light-blue-btn { + @include colorBtn(variables.$light-blue) +} + +.red-btn { + @include colorBtn(variables.$red) +} + +.pink-btn { + @include colorBtn(variables.$pink) +} + +.green-btn { + @include colorBtn(variables.$green) +} + +.tiffany-btn { + @include colorBtn(variables.$tiffany) +} + +.yellow-btn { + @include colorBtn(variables.$yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/src/assets/styles/element-ui.scss b/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..acf61a4 --- /dev/null +++ b/src/assets/styles/element-ui.scss @@ -0,0 +1,141 @@ +// cover some element-ui styles +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +// 优化上传组件 +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// 修改 el-dropdown 样式 +.el-dropdown-menu { + padding: 6px; + border-radius: 10px; + border: none; + + .el-dropdown-menu__item { + padding: 6px 16px; + border-radius: 6px; + } +} + +.el-menu--collapse > div > .el-submenu > .el-submenu__title .el-submenu__icon-arrow { + display: none; +} + +.el-dropdown .el-dropdown-link { + color: var(--el-color-primary) !important; +} + +// 优化菜单折叠展开动画(提升动画流畅度) +.el-menu.el-menu--inline { + transition: max-height 0.26s cubic-bezier(0.4, 0, 0.2, 1) !important; +} + +// 优化菜单 item hover 动画(提升鼠标跟手感) +.el-sub-menu__title, +.el-menu-item { + transition: background-color 0s !important; +} + +// el-message 样式调整 +.el-message { + background-color: var(--art-main-bg-color) !important; + border: 0 !important; + box-shadow: + 0 6px 16px 0 rgba(0, 0, 0, 0.08), + 0 3px 6px -4px rgba(0, 0, 0, 0.12), + 0 9px 28px 8px rgba(0, 0, 0, 0.05) !important; + + p { + color: #515a6e !important; + font-size: 13px; + } +} + +// el-checkbox 样式调整 +.el-checkbox-group { + &.el-table-filter__checkbox-group label.el-checkbox { + height: 17px !important; + + .el-checkbox__label { + font-weight: 400 !important; + } + } +} + +.el-checkbox { + .el-checkbox__inner { + width: 18px; + height: 18px; + border-radius: 4px; + + &::before { + content: ""; + height: 3px !important; + top: 6px !important; + background-color: #fff !important; + transform: scale(0.6) !important; + } + + &::after { + width: 4px; + height: 8px; + left: 0; + right: 0; + top: 0; + bottom: 4px; + margin: auto; + border: 2px solid var(--el-checkbox-checked-icon-color); + border-left: 0; + border-top: 0; + } + } +} + +// 修改 el-message-box 样式 +.el-message-box { + padding: 25px 20px; +} + +.el-form--inline { + .el-form-item { + .el-select { + min-width: 120px; + } + } +} diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..fa208c0 --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,212 @@ +@use "variables.module.scss"; +@use "mixin.scss"; +@use "transition.scss"; +@use "element-ui.scss"; +@use "sidebar.scss"; +@use "btn.scss"; +@use "ruoyi.scss"; + +body { + height: 100%; + margin: 0; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: + Helvetica Neue, + Helvetica, + PingFang SC, + Hiragino Sans GB, + Microsoft YaHei, + Arial, + sans-serif; + background-color: variables.$page-background-color; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", + "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; + + .el-card { + --el-card-border-radius: 0.75rem; + } +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center; +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient( + 90deg, + rgba(32, 182, 249, 1) 0%, + rgba(32, 182, 249, 1) 0%, + rgba(33, 120, 241, 1) 100%, + rgba(33, 120, 241, 1) 100% + ); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} diff --git a/src/assets/styles/mixin.scss b/src/assets/styles/mixin.scss new file mode 100644 index 0000000..faf8053 --- /dev/null +++ b/src/assets/styles/mixin.scss @@ -0,0 +1,98 @@ +/** + * 清除浮动的Mixin + * + * 用途:用于清除元素内部子元素浮动导致的布局问题 + * 使用方法:在需要清除浮动的元素上使用 @include clearfix; + */ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +/** + * 定义一个混入以自定义滚动条样式 + * 此混入旨在改善用户界面的视觉效果,通过修改滚动条的颜色和形状以更好地适应设计风格 + */ +@mixin scrollBar { + // 自定义滚动条轨道的颜色 + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + // 设置滚动条的宽度 + &::-webkit-scrollbar { + width: 6px; + } + + // 自定义滚动条手柄的样式,包括颜色和圆角 + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +/** + * 定义一个mixin名为relative,用于设置元素的定位方式及其尺寸 + * 此mixin主要用于简化元素的定位和尺寸设置,使其在父容器中占据全部空间 + */ +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +/** + * 创建一个宽度为指定百分比的居中样式 + * + * @param {number} $pct - 元素的宽度 + * + * 此 mixin 用于生成具有指定宽度并居中的元素样式 + * 它通过设置 width、position 和 margin 属性来实现居中效果 + */ +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +/** + * 生成一个三角形的mixin + * + * @param $width 三角形的宽度 + * @param $height 三角形的高度 + * @param $color 三角形的颜色 + * @param $direction 三角形的方向,可以是up, right, down, left + */ +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + // 根据传入的方向参数,设置不同的边框样式 + @if $direction==up { + // 向上的三角形,底部边框为有色,左右边框为透明 + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } @else if $direction==right { + // 向右的三角形,左边框为有色,上下边框为透明 + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } @else if $direction==down { + // 向下的三角形,顶部边框为有色,左右边框为透明 + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } @else if $direction==left { + // 向左的三角形,右边框为有色,上下边框为透明 + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss new file mode 100644 index 0000000..6e65a73 --- /dev/null +++ b/src/assets/styles/ruoyi.scss @@ -0,0 +1,293 @@ +/** + * 通用css样式布局处理 + * Copyright (c) 2019 ruoyi + */ + +/** 基础通用 **/ +.pt5 { + padding-top: 5px; +} +.pr5 { + padding-right: 5px; +} +.pb5 { + padding-bottom: 5px; +} +.mt5 { + margin-top: 5px; +} +.mr5 { + margin-right: 5px; +} +.mb5 { + margin-bottom: 5px; +} +.mb8 { + margin-bottom: 8px; +} +.ml5 { + margin-left: 5px; +} +.mt10 { + margin-top: 10px; +} +.mr10 { + margin-right: 10px; +} +.mb10 { + margin-bottom: 10px; +} +.ml10 { + margin-left: 10px; +} +.mt20 { + margin-top: 20px; +} +.mr20 { + margin-right: 20px; +} +.mb20 { + margin-bottom: 20px; +} +.ml20 { + margin-left: 20px; +} + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.el-form .el-form-item__label { + font-weight: 700; +} +.el-dialog:not(.is-fullscreen) { + margin-top: 6vh !important; +} + +.el-dialog.scrollbar .el-dialog__body { + overflow: auto; + overflow-x: hidden; + max-height: 70vh; + padding: 10px 20px 0; +} + +.el-table { + .el-table__header-wrapper, + .el-table__fixed-header-wrapper { + th { + word-break: break-word; + color: #515a6e; + height: 40px !important; + font-size: 13px; + } + } + .el-table__body-wrapper { + .el-button [class*="el-icon-"] + span { + margin-left: 1px; + } + } +} + +/** 表单布局 **/ +.form-header { + font-size: 15px; + color: #6379bb; + border-bottom: 1px solid #ddd; + margin: 8px 10px 25px 10px; + padding-bottom: 5px; +} + +/** 表格布局 **/ +.pagination-container { + // position: relative; + height: 25px; + margin-bottom: 10px; + margin-top: 15px; + padding: 10px 20px !important; +} + +/* tree border */ +.tree-border { + margin-top: 5px; + border: 1px solid #e5e6e7; + background: #ffffff none; + border-radius: 4px; + width: 100%; +} + +.pagination-container .el-pagination { + right: 0; + position: absolute; +} + +@media (max-width: 768px) { + .pagination-container .el-pagination > .el-pagination__jump { + display: none !important; + } + .pagination-container .el-pagination > .el-pagination__sizes { + display: none !important; + } +} + +.el-table .fixed-width .el-button--small { + padding-left: 0; + padding-right: 0; + width: inherit; +} + +/** 表格更多操作下拉样式 */ +.el-table .el-dropdown-link { + cursor: pointer; + color: #409eff; + margin-left: 10px; +} + +.el-table .el-dropdown, +.el-icon-arrow-down { + font-size: 12px; +} + +.el-tree-node__content > .el-checkbox { + margin-right: 8px; +} + +.list-group-striped > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} + +.list-group { + padding-left: 0px; + list-style: none; +} + +.list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; +} + +.pull-right { + float: right !important; +} + +.el-card__header { + padding: 14px 15px 7px !important; + min-height: 40px; +} + +.el-card__body { + padding: 15px 20px 20px 20px !important; +} + +.card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; +} + +/* button color */ +.el-button--cyan.is-active, +.el-button--cyan:active { + background: #20b2aa; + border-color: #20b2aa; + color: #ffffff; +} + +.el-button--cyan:focus, +.el-button--cyan:hover { + background: #48d1cc; + border-color: #48d1cc; + color: #ffffff; +} + +.el-button--cyan { + background-color: #20b2aa; + border-color: #20b2aa; + color: #ffffff; +} + +/* text color */ +.text-navy { + color: #1ab394; +} + +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ed5565; +} + +.text-muted { + color: #888888; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.img-lg { + width: 120px; + height: 120px; +} + +.avatar-upload-preview { + position: absolute; + top: 50%; + transform: translate(50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; +} + +/* 拖拽列样式 */ +.sortable-ghost { + opacity: 0.8; + color: #fff !important; + background: #42b983 !important; +} + +/* 表格右侧工具栏样式 */ +.top-right-btn { + margin-left: auto; +} + +.search-card { + padding: 18px 15px 0 15px !important; +} diff --git a/src/assets/styles/sidebar.scss b/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..1b62a43 --- /dev/null +++ b/src/assets/styles/sidebar.scss @@ -0,0 +1,263 @@ +@use "variables.module"; + +.el-popper { + .nest-menu { + --el-menu-item-height: 40px; + --el-menu-sub-item-height: var(--el-menu-item-height); + width: calc(variables.$base-sidebar-width - 20px) !important; + + & .el-sub-menu .el-menu-item, + & .el-sub-menu .el-sub-menu__title, + .el-menu-item { + border-radius: 5px; + margin: 2px auto; + width: calc(variables.$base-sidebar-width - 40px) !important; + + .svg-icon { + margin-right: 16px; + } + } + } +} + +#app { + .main-container { + min-height: 100%; + transition: margin-left 0.28s; + margin-left: variables.$base-sidebar-width; + position: relative; + } + + .sidebarHide { + margin-left: 0 !important; + } + + .el-menu--collapse .el-menu .el-sub-menu { + min-width: variables.$base-sidebar-width !important; + } + + /** 侧边栏容器 */ + .sidebar-container { + height: 100%; + width: variables.$base-sidebar-width; + background-color: variables.$base-menu-background; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + border-right: 1px solid #e6e6e6; + box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1); + transition: width 0.26s cubic-bezier(0.4, 0, 0.2, 1); + + // reset element-ui css + .horizontal-collapse-transition { + transition: + 0s width ease-in-out, + 0s padding-left ease-in-out, + 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .el-menu { + --el-menu-item-height: 46px; + --el-menu-sub-item-height: var(--el-menu-item-height); + border: none; + height: 100%; + width: 100%; + .el-sub-menu, + .el-menu-item { + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + .svg-icon { + margin-right: 16px; + } + + .menu-title { + max-width: calc(100% - 40px); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + } + + & .submenu-title-noDropdown.el-menu-item, + & .el-sub-menu .el-menu-item, + & .el-sub-menu .el-sub-menu__title { + border-radius: 5px; + margin: 2px auto; + max-width: calc(variables.$base-sidebar-width - 20px) !important; + + &:hover { + background-color: rgba(0, 0, 0, 0.06); + } + + &.is-active { + &:hover { + background-color: var(--el-color-primary-light-9) !important; + } + } + } + + & .el-menu-item.is-active { + background-color: var(--el-color-primary-light-9); + } + } + + & .theme-dark { + & .submenu-title-noDropdown.el-menu-item, + & .el-sub-menu .el-menu-item, + & .el-sub-menu .el-sub-menu__title { + &.is-active { + &:hover { + background-color: var(--el-color-primary-light-9) !important; + } + } + } + & .is-active > .el-sub-menu__title { + color: variables.$base-menu-color-active !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: variables.$hide-sidebar-width !important; + .el-menu { + .el-sub-menu, + .el-menu-item { + .svg-icon { + margin-right: 0px; + } + } + + & .submenu-title-noDropdown.el-menu-item, + & .el-sub-menu .el-menu-item, + & .el-sub-menu .el-sub-menu__title { + max-width: calc(variables.$hide-sidebar-width - 10px) !important; + } + } + } + + .main-container { + margin-left: variables.$hide-sidebar-width; + } + + .el-menu--collapse { + .el-sub-menu { + & > .el-sub-menu__title { + & > span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + & > i { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + // 针对移动端的响应式布局 + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform 0.28s; + width: variables.$base-sidebar-width !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-(variables.$base-sidebar-width), 0, 0); + } + } + } + + .withoutAnimation { + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// 当菜单隐藏时 +.el-menu--vertical { + & > .el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-sub-menu > .el-sub-menu__title, + .el-menu-item { + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + // 子菜单太长时会出现滚动条 + > .el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/src/assets/styles/transition.scss b/src/assets/styles/transition.scss new file mode 100644 index 0000000..8546099 --- /dev/null +++ b/src/assets/styles/transition.scss @@ -0,0 +1,108 @@ +@use "sass:map"; + +/* + Vue 3 过渡类名规则: + - .v-enter-from: 进入动画的开始状态。 + - .v-enter-active: 进入动画的激活状态。 + - .v-enter-to: 进入动画的结束状态。 (Vue 2 的 .v-enter-to) + - .v-leave-from: 离开动画的开始状态。 + - .v-leave-active: 离开动画的激活状态。 + - .v-leave-to: 离开动画的结束状态。 (Vue 2 的 .v-leave-to) + + 注意: 'v' 是 组件 name 属性的默认值。 + 如果 , 那么类名将是 .fade-enter-from 等。 + 在 Vue 2 中,进入的起始类是 .v-enter,在 Vue 3 中是 .v-enter-from。 +*/ +// global transition css + +/* 淡入淡出(fade) */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter-from, +.fade-leave-active { + opacity: 0; +} + +// 淡入淡出带位移(支持四方向,Sass 简写) +$fade-transform-map: ( + "": ( + x: -30px, + y: 0, + out-x: 30px, + out-y: 0 + ), + "-left": ( + x: -30px, + y: 0, + out-x: 30px, + out-y: 0 + ), + // 默认左进右出 + "-right": + ( + x: 30px, + y: 0, + out-x: -30px, + out-y: 0 + ), + // 右进左出 + "-down": + ( + x: 0, + y: -30px, + out-x: 0, + out-y: 30px + ), + // 上进下出 + "-up": + ( + x: 0, + y: 30px, + out-x: 0, + out-y: -30px + ) + // 下进上出 +); + +@each $suffix, $val in $fade-transform-map { + .fade-transform#{$suffix}-enter-active, + .fade-transform#{$suffix}-leave-active { + transition: all 0.5s; + } + .fade-transform#{$suffix}-enter-from { + opacity: 0; + transform: translateX(map.get($val, x)) translateY(map.get($val, y)); + } + .fade-transform#{$suffix}-enter-to, + .fade-transform#{$suffix}-leave-from { + opacity: 1; + transform: translateX(0) translateY(0); + } + .fade-transform#{$suffix}-leave-to { + opacity: 0; + transform: translateX(map.get($val, out-x)) translateY(map.get($val, out-y)); + } +} + +/* 面包屑过度(breadcrumb transition) */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all 0.5s; +} + +.breadcrumb-enter-from, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all 0.5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/src/assets/styles/variables.module.scss b/src/assets/styles/variables.module.scss new file mode 100644 index 0000000..aee2e97 --- /dev/null +++ b/src/assets/styles/variables.module.scss @@ -0,0 +1,77 @@ +// base color +$blue: #324157; +$light-blue: #3a71a8; +$red: #c03639; +$pink: #e65d6e; +$green: #30b08f; +$tiffany: #4ab7bd; +$yellow: #fec171; +$panGreen: #30b08f; + +// 默认菜单主题风格 +$base-menu-color: #bfcbd9; +$base-menu-color-active: #f4f4f5; +$base-menu-background: #304156; +$base-logo-title-color: #ffffff; + +$base-menu-light-color: rgba(0, 0, 0, 0.7); +$base-menu-light-background: #ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background: #1f2d3d; +$base-sub-menu-hover: #001528; + +// 自定义暗色菜单风格 +/** +$base-menu-color:hsla(0,0%,100%,.65); +$base-menu-color-active:#fff; +$base-menu-background:#001529; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#000c17; +$base-sub-menu-hover:#001528; +*/ + +$color-primary: #409eff; +$color-success: #67c23a; +$color-warning: #e6a23c; +$color-danger: #f56c6c; +$color-info: #909399; + +$page-background-color: #fafbfc; + +// 侧边栏相关配置 +$base-sidebar-width: 240px; +$hide-sidebar-width: 64px; + +// 顶部导航栏相关配置 +$navbar-height: 50px; +$navbar-color: $page-background-color; // (颜色与page不相同时会自动显示阴影) + +// 标签视图相关配置 +$tags-view-height: 44px; +$tags-view-color: $page-background-color; // (颜色与page不相同时会自动显示阴影) + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuColor: $base-menu-color; + menuLightColor: $base-menu-light-color; + menuColorActive: $base-menu-color-active; + menuBackground: $base-menu-background; + menuLightBackground: $base-menu-light-background; + subMenuBackground: $base-sub-menu-background; + subMenuHover: $base-sub-menu-hover; + sideBarWidth: $base-sidebar-width; + logoTitleColor: $base-logo-title-color; + logoLightTitleColor: $base-logo-light-title-color; + primaryColor: $color-primary; + successColor: $color-success; + dangerColor: $color-danger; + infoColor: $color-info; + warningColor: $color-warning; +} diff --git a/src/components/Crontab/day.vue b/src/components/Crontab/day.vue new file mode 100644 index 0000000..7f8117a --- /dev/null +++ b/src/components/Crontab/day.vue @@ -0,0 +1,174 @@ + + + + \ No newline at end of file diff --git a/src/components/Crontab/hour.vue b/src/components/Crontab/hour.vue new file mode 100644 index 0000000..53154fa --- /dev/null +++ b/src/components/Crontab/hour.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/src/components/Crontab/index.vue b/src/components/Crontab/index.vue new file mode 100644 index 0000000..9ff4505 --- /dev/null +++ b/src/components/Crontab/index.vue @@ -0,0 +1,317 @@ + + + + + \ No newline at end of file diff --git a/src/components/Crontab/min.vue b/src/components/Crontab/min.vue new file mode 100644 index 0000000..0deb94c --- /dev/null +++ b/src/components/Crontab/min.vue @@ -0,0 +1,126 @@ + + + + \ No newline at end of file diff --git a/src/components/Crontab/month.vue b/src/components/Crontab/month.vue new file mode 100644 index 0000000..d1a1512 --- /dev/null +++ b/src/components/Crontab/month.vue @@ -0,0 +1,141 @@ + + + + + \ No newline at end of file diff --git a/src/components/Crontab/result.vue b/src/components/Crontab/result.vue new file mode 100644 index 0000000..5a812ee --- /dev/null +++ b/src/components/Crontab/result.vue @@ -0,0 +1,540 @@ + + + \ No newline at end of file diff --git a/src/components/Crontab/second.vue b/src/components/Crontab/second.vue new file mode 100644 index 0000000..c6088d2 --- /dev/null +++ b/src/components/Crontab/second.vue @@ -0,0 +1,128 @@ + + + + + \ No newline at end of file diff --git a/src/components/Crontab/week.vue b/src/components/Crontab/week.vue new file mode 100644 index 0000000..46e944c --- /dev/null +++ b/src/components/Crontab/week.vue @@ -0,0 +1,197 @@ + + + + + \ No newline at end of file diff --git a/src/components/Crontab/year.vue b/src/components/Crontab/year.vue new file mode 100644 index 0000000..2128d55 --- /dev/null +++ b/src/components/Crontab/year.vue @@ -0,0 +1,149 @@ + + + + + \ No newline at end of file diff --git a/src/components/DictTag/index.vue b/src/components/DictTag/index.vue new file mode 100644 index 0000000..f4778fd --- /dev/null +++ b/src/components/DictTag/index.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue new file mode 100644 index 0000000..2235476 --- /dev/null +++ b/src/components/Editor/index.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue new file mode 100644 index 0000000..dfd8732 --- /dev/null +++ b/src/components/Hamburger/index.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/HeaderSearch/index.vue b/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..a1931c0 --- /dev/null +++ b/src/components/HeaderSearch/index.vue @@ -0,0 +1,244 @@ + + + + + \ No newline at end of file diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue new file mode 100644 index 0000000..d69c26a --- /dev/null +++ b/src/components/IconSelect/index.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/src/components/IconSelect/requireIcons.ts b/src/components/IconSelect/requireIcons.ts new file mode 100644 index 0000000..82fb85d --- /dev/null +++ b/src/components/IconSelect/requireIcons.ts @@ -0,0 +1,8 @@ +let icons: string[] = [] +const modules = import.meta.glob('./../../assets/icons/svg/*.svg'); +for (const path in modules) { + const p = path.split('assets/icons/svg/')[1].split('.svg')[0]; + icons.push(p); +} + +export default icons \ No newline at end of file diff --git a/src/components/ImagePreview/index.vue b/src/components/ImagePreview/index.vue new file mode 100644 index 0000000..4587be9 --- /dev/null +++ b/src/components/ImagePreview/index.vue @@ -0,0 +1,91 @@ + + + diff --git a/src/components/JsBarcodeView/index.vue b/src/components/JsBarcodeView/index.vue new file mode 100644 index 0000000..bce5bc9 --- /dev/null +++ b/src/components/JsBarcodeView/index.vue @@ -0,0 +1,25 @@ + + \ No newline at end of file diff --git a/src/components/NGTools/NGCom.vue b/src/components/NGTools/NGCom.vue new file mode 100644 index 0000000..fe6f725 --- /dev/null +++ b/src/components/NGTools/NGCom.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/src/components/NGTools/NGResult.vue b/src/components/NGTools/NGResult.vue new file mode 100644 index 0000000..683543c --- /dev/null +++ b/src/components/NGTools/NGResult.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/components/NGTools/meterPar.vue b/src/components/NGTools/meterPar.vue new file mode 100644 index 0000000..12eed84 --- /dev/null +++ b/src/components/NGTools/meterPar.vue @@ -0,0 +1,478 @@ + + + + diff --git a/src/components/NGTools/meterResult.vue b/src/components/NGTools/meterResult.vue new file mode 100644 index 0000000..09e3b14 --- /dev/null +++ b/src/components/NGTools/meterResult.vue @@ -0,0 +1,231 @@ + + + + diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue new file mode 100644 index 0000000..3333e6a --- /dev/null +++ b/src/components/Pagination/index.vue @@ -0,0 +1,59 @@ + + + \ No newline at end of file diff --git a/src/components/ParentView/index.vue b/src/components/ParentView/index.vue new file mode 100644 index 0000000..98240ae --- /dev/null +++ b/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/Process/README.md b/src/components/Process/README.md new file mode 100644 index 0000000..0439e31 --- /dev/null +++ b/src/components/Process/README.md @@ -0,0 +1,181 @@ + +## 界面布局结构 +- palette(工具栏) :提供拖拽工具、框选工具、连线工具、基本图元等 +- contextPad(上下文面板):可以理解为快捷面板 +- propertiesPanel(属性面板):定义流程图中图形元素属性 +- shape(图形) 是所有图形的基类(比如Connection,Root) + +## 导入与导出 +```` +## 导入 +// 异步方式(推荐) +let result = await bpmnModeler.importXML(xml) + +// 回调方式 +bpmnModeler.importXML(xml, (result) => {} ) + +### 导出xml +// 异步方式 +let { xml } = await bpmnModeler.saveXML() + +// 回调方式 +bpmnModeler.saveXML({ format: false },({ xml }) => {}) + +// 格式化导出的xml +let { xml } = await bpmnModeler.saveXML({ format: true }) + +### 导出svg +// 异步方式 +let { svg } = await bpmnModeler.saveSVG() + +// 回调方式 +bpmnModeler.saveXML(( { svg } )=>{ }) + +## 导入的生命周期事件如下: +import.parse.start (即将从xml读取模型) +import.parse.complete (模型读取完成) +import.render.start (图形导入开始) +import.render.complete (图形导入完成) +import.done (一切都完成) + +```` + +## 内部模块/供应商/服务 + +- eventBus - 事件总线,管理bpmn实例中所有事件 +- canvas - 画布,管理svg元素、连线/图形的添加/删除、缩放等 +- commandStack - 命令堆栈,管理bpmn内部所有命令操作,提供撤销、重做功能等 +- elementRegistry - 元素注册表,管理bpmn内部所有元素 +- moddle - 模型管理,用于管理bpmn的xml结构 +- modeling - 建模器,绘图时用到,提供用于更新画布上元素的 API(移动、删除) + +```` +## 获取一个模块 + +// 第一个参数为模块名称,第二参数表示是否严格模式 +bpmnModeler.get("模块名称",false) + +```` + +## 事件总线 - eventBus +```` +## 获取事件总线模块 +let eventBus = bpmnModeler.get("eventBus") + +## 监听事件 +// 监听事件 +eventBus.on('element.changed', (ev) => {}) + +// 监听多个事件 +eventBus.on( + ['shape.added', 'connection.added', 'shape.removed', 'connection.removed'], + (ev) => { + } +) + +// 设置优先级 +eventBus.on('element.changed', 100, (ev) => {}) + +// 传入上下文 +eventBus.on('element.changed', (ev) => {}, that) + +// 使用所有参数 +eventBus.on('事件名称', 优先级(可选), 回调函数, 上下文(可选)) + +## 只监听一次事件 + +// 用法同on +eventBus.once('事件名称', 优先级(可选), 回调函数, 上下文(可选)) + +## 取消监听事件 +// 取消监听 +eventBus.off('element.changed', callback) + +// 取消监听多个事件 +eventBus.off(['shape.added', 'connection.added', 'shape.removed', 'connection.removed'], callback) + +## 触发事件 +eventBus.fire('element.changed', data) + +```` + +## 画布 - canvas + +```` +## 获取画布模块 +let canvas = bpmnModeler.get("canvas") + +## 缩放 + +/** + * + * @param {'fit-viewport' | 'fit-content' | number} lvl + * @param {'auto'|{ x: number, y: number }} center + */ +function zoom(lvl, center) { + let canvas = bpmnModeler.get('canvas') + canvas.zoom(lvl, center) +} + +// 适应容器缩放 +zoom('fit-canvas','auto') + +// 完全显示内容 +zoom('fit-content','auto') + +## 对齐(选择多个元素使用shift+鼠标左键) +/** + * 获取当前选集并对齐 + * @param {'left'|'right'|'top'|'bottom'|'middle'|'center'} mode + */ +function align(mode) { + const align = bpmnModeler.get('alignElements') + const selection = bpmnModeler.get('selection') + const elements = selection.get() + if (!elements || elements.length === 0) { + return + } + + align.trigger(elements, mode) +} + +```` + +## 元素注册表 - elementRegistry +```` +## 获取元素注册表模块 +let elementRegistry = bpmnModeler.get('elementRegistry') + +## 遍历所有元素 +elementRegistry.forEach((shape, svgElement) => { }) + +## 获取指定元素 +let shape = elementRegistry.get(元素id或者SVGElement) + +## 获取过滤后的元素 +let shapes = elementRegistry.filter((shape) => shape.type === 'bpmn:Task') + +## 更新元素ID +elementRegistry.updateId(shape, "123xxxxsssd") + +## 删除一个元素 +elementRegistry .remove(传入SVGElement) + +## 模型 - moddle +基本上没有用到,具体类型定义见此 + +## 建模器 - modeling +获取建模器模块 +let modeling= bpmnModeler.get('modeling') + +## 修改元素显示文本(常用) +modeling.updateLabel(shape, '审核') + +## 修改元素属性(常用) +modeling.updateProperties(shape, { 属性名称: 属性值 }) + +## 对齐元素集合 +const selection = bpmnModeler.get('selection') +const elements = selection.get() +modeling.updateProperties(selection, 'left') +```` \ No newline at end of file diff --git a/src/components/Process/common/bpmnUtils.js b/src/components/Process/common/bpmnUtils.js new file mode 100644 index 0000000..ae6d267 --- /dev/null +++ b/src/components/Process/common/bpmnUtils.js @@ -0,0 +1,124 @@ +import { NodeName } from '../lang/zh' + +// 创建监听器实例 +export function createListenerObject(moddle, options, isTask, prefix) { + const listenerObj = Object.create(null); + listenerObj.event = options.event; + isTask && (listenerObj.id = options.id); // 任务监听器特有的 id 字段 + switch (options.listenerType) { + case "scriptListener": + listenerObj.type = "script" + listenerObj.script = createScriptObject(moddle, options, prefix); + break; + case "expressionListener": + listenerObj.expression = options.expression; + break; + case "delegateExpressionListener": + listenerObj.delegateExpression = options.delegateExpression; + break; + default: + listenerObj.class = options.class; + } + // 注入字段 + if (options.fields) { + listenerObj.fields = options.fields.map(field => { + return createFieldObject(moddle, field, prefix); + }); + } + // 任务监听器的 定时器 设置 + if (isTask && options.event === "timeout" && !!options.eventDefinitionType) { + const timeDefinition = moddle.create("bpmn:FormalExpression", { + body: options.eventTimeDefinitions + }); + const TimerEventDefinition = moddle.create("bpmn:TimerEventDefinition", { + id: `TimerEventDefinition_${uuid(8)}`, + [`time${options.eventDefinitionType.replace(/^\S/, s => s.toUpperCase())}`]: timeDefinition + }); + listenerObj.eventDefinitions = [TimerEventDefinition]; + } + return moddle.create(`${prefix}:${isTask ? "TaskListener" : "ExecutionListener"}`, listenerObj); +} + +// 处理内置流程监听器 +export function createSystemListenerObject(moddle, options, isTask, prefix) { + const listenerObj = Object.create(null); + listenerObj.event = options.eventType; + listenerObj.listenerType = options.valueType; + switch (options.valueType) { + case "scriptListener": + listenerObj.type = "script" + listenerObj.script = createScriptObject(moddle, options, prefix); + break; + case "expressionListener": + listenerObj.expression = options.expression; + break; + case "delegateExpressionListener": + listenerObj.delegateExpression = options.delegateExpression ?? options.value; + break; + default: + listenerObj.class = options.value; + } + return moddle.create(`${prefix}:${isTask ? "TaskListener" : "ExecutionListener"}`, listenerObj); +} + +// 转换成字段 +export function changeListenerObject(options) { + const listenerObj = Object.create(null); + listenerObj.event = options.eventType; + listenerObj.listenerType = options.valueType; + switch (options.valueType) { + case "scriptListener": + listenerObj.type = "script" + listenerObj.script = createScriptObject(moddle, options, prefix); + break; + case "expressionListener": + listenerObj.expression = options.expression; + break; + case "delegateExpressionListener": + listenerObj.delegateExpression = options.delegateExpression ?? options.value; + break; + default: + listenerObj.class = options.value; + } + return listenerObj; +} + +// 创建 监听器的注入字段 实例 +export function createFieldObject(moddle, option, prefix) { + const { name, fieldType, string, expression } = option; + const fieldConfig = fieldType === "string" ? { name, string } : { name, expression }; + return moddle.create(`${prefix}:Field`, fieldConfig); +} + +// 创建脚本实例 +export function createScriptObject(moddle, options, prefix) { + const { scriptType, scriptFormat, value, resource } = options; + const scriptConfig = scriptType === "inlineScript" ? { scriptFormat, value } : { scriptFormat, resource }; + // scriptConfig.language = scriptFormat; + return moddle.create(`${prefix}:Script`, scriptConfig); +} + +// 更新元素扩展属性 +export function updateElementExtensions(moddle, modeling, element, extensionList) { + const extensions = moddle.create("bpmn:ExtensionElements", { + values: extensionList + }); + modeling.updateProperties(element, { + extensionElements: extensions + }); +} + +// 创建一个id +export function uuid(length = 8, chars) { + let result = ""; + let charsString = chars || "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + for (let i = length; i > 0; --i) { + result += charsString[Math.floor(Math.random() * charsString.length)]; + } + return result; +} + +// 转换流程节点名称 +export function translateNodeName(node) { + return NodeName[node]; +} diff --git a/src/components/Process/common/global.js b/src/components/Process/common/global.js new file mode 100644 index 0000000..f791992 --- /dev/null +++ b/src/components/Process/common/global.js @@ -0,0 +1,17 @@ +// 全局流程相关变量 +const modelerStore = { + 'userList': [], + 'roleList': [], + 'expList': [], + 'modeler': null, + 'modeling': null, + 'moddle': null, + 'canvas': null, + 'bpmnFactory': null, + 'elRegistry': null, + 'element': null, + +} +export default { + modelerStore, +} diff --git a/src/components/Process/common/index.js b/src/components/Process/common/index.js new file mode 100644 index 0000000..8db46bd --- /dev/null +++ b/src/components/Process/common/index.js @@ -0,0 +1,17 @@ +import Viewer from "bpmn-js/lib/Viewer"; +import ZoomScrollModule from "diagram-js/lib/navigation/zoomscroll"; +import MoveCanvasModule from "diagram-js/lib/navigation/movecanvas"; + +export class CustomViewer extends Viewer { + constructor(options) { + super(options); + } + + static get _modules() { + return [ + ...Viewer.prototype._modules, + ZoomScrollModule, + MoveCanvasModule + ]; + } +} \ No newline at end of file diff --git a/src/components/Process/common/packed-config.js b/src/components/Process/common/packed-config.js new file mode 100644 index 0000000..0812fda --- /dev/null +++ b/src/components/Process/common/packed-config.js @@ -0,0 +1,1769 @@ +function getAugmentedNamespace(n) { + var f = n.default; + if (typeof f == "function") { + var a = function () { + return f.apply(this, arguments); + }; + a.prototype = f.prototype; + } else a = {}; + Object.defineProperty(a, '__esModule', { value: true }); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; +} + +/** + * A rule that checks that sequence flows outgoing from a + * conditional forking gateway or activity are + * either default flows _or_ have a condition attached + */ + +var conditionalFlows = function () { + + function check(node, reporter) { + + if (!isConditionalForking(node)) { + return; + } + + const outgoing = node.outgoing || []; + + outgoing.forEach((flow) => { + const missingCondition = ( + !hasCondition$2(flow) && + !isDefaultFlow$1(node, flow) + ); + + if (missingCondition) { + reporter.report(flow.id, 'Sequence flow is missing condition', ['conditionExpression']); + } + }); + } + + return { + check + }; + +}; + + +// helpers ///////////////////////////// + +function isConditionalForking(node) { + + const defaultFlow = node['default']; + const outgoing = node.outgoing || []; + + return defaultFlow || outgoing.find(hasCondition$2); +} + +function hasCondition$2(flow) { + return !!flow.conditionExpression; +} + +function isDefaultFlow$1(node, flow) { + return node['default'] === flow; +} + +/** + * Checks whether node is of specific bpmn type. + * + * @param {ModdleElement} node + * @param {String} type + * + * @return {Boolean} + */ +function is$g(node, type) { + + if (type.indexOf(':') === -1) { + type = 'bpmn:' + type; + } + + return ( + (typeof node.$instanceOf === 'function') + ? node.$instanceOf(type) + : node.$type === type + ); +} + +/** + * Checks whether node has any of the specified types. + * + * @param {ModdleElement} node + * @param {Array} types + * + * @return {Boolean} + */ +function isAny$6(node, types) { + return types.some(function (type) { + return is$g(node, type); + }); +} + +var index_esm$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + is: is$g, + isAny: isAny$6 +}); + +var require$$0 = /*@__PURE__*/getAugmentedNamespace(index_esm$1); + +const { + is: is$f, + isAny: isAny$5 +} = require$$0; + + +/** + * A rule that checks the presence of an end event per scope. + */ +var endEventRequired = function () { + + function hasEndEvent(node) { + const flowElements = node.flowElements || []; + + return ( + flowElements.some(node => is$f(node, 'bpmn:EndEvent')) + ); + } + + function check(node, reporter) { + + if (!isAny$5(node, [ + 'bpmn:Process', + 'bpmn:SubProcess' + ])) { + return; + } + + if (!hasEndEvent(node)) { + const type = is$f(node, 'bpmn:SubProcess') ? 'Sub process' : 'Process'; + + reporter.report(node.id, type + ' is missing end event'); + } + } + + return { check }; +}; + +const { + is: is$e +} = require$$0; + +/** + * A rule that checks that start events inside an event sub-process + * are typed. + */ +var eventSubProcessTypedStartEvent = function () { + + function check(node, reporter) { + + if (!is$e(node, 'bpmn:SubProcess') || !node.triggeredByEvent) { + return; + } + + const flowElements = node.flowElements || []; + + flowElements.forEach(function (flowElement) { + + if (!is$e(flowElement, 'bpmn:StartEvent')) { + return false; + } + + const eventDefinitions = flowElement.eventDefinitions || []; + + if (eventDefinitions.length === 0) { + reporter.report(flowElement.id, 'Start event is missing event definition', ['eventDefinitions']); + } + }); + } + + return { + check + }; + +}; + +const { + isAny: isAny$4 +} = require$$0; + +/** + * A rule that checks that no fake join is modeled by attempting + * to give a task or event join semantics. + * + * Users should model a parallel joining gateway + * to achieve the desired behavior. + */ +var fakeJoin = function () { + + function check(node, reporter) { + + if (!isAny$4(node, [ + 'bpmn:Task', + 'bpmn:Event' + ])) { + return; + } + + const incoming = node.incoming || []; + + if (incoming.length > 1) { + reporter.report(node.id, 'Incoming flows do not join'); + } + } + + return { + check + }; + +}; + +const { + is: is$d, + isAny: isAny$3 +} = require$$0; + + +/** + * A rule that checks the presence of a label. + */ +var labelRequired = function () { + + function check(node, reporter) { + + if (isAny$3(node, [ + 'bpmn:ParallelGateway', + 'bpmn:EventBasedGateway' + ])) { + return; + } + + // ignore joining gateways + if (is$d(node, 'bpmn:Gateway') && !isForking(node)) { + return; + } + + if (is$d(node, 'bpmn:BoundaryEvent')) { + return; + } + + // ignore sub-processes + if (is$d(node, 'bpmn:SubProcess')) { + + // TODO(nikku): better ignore expanded sub-processes only + return; + } + + // ignore sequence flow without condition + if (is$d(node, 'bpmn:SequenceFlow') && !hasCondition$1(node)) { + return; + } + + // ignore data objects and artifacts for now + if (isAny$3(node, [ + 'bpmn:FlowNode', + 'bpmn:SequenceFlow', + 'bpmn:Participant', + 'bpmn:Lane' + ])) { + + const name = (node.name || '').trim(); + + if (name.length === 0) { + reporter.report(node.id, 'Element is missing label/name', ['name']); + } + } + } + + return { check }; +}; + + +// helpers //////////////////////// + +function isForking(node) { + const outgoing = node.outgoing || []; + + return outgoing.length > 1; +} + +function hasCondition$1(node) { + return node.conditionExpression; +} + +/** + * Flatten array, one level deep. + * + * @param {Array} arr + * + * @return {Array} + */ +function flatten$1(arr) { + return Array.prototype.concat.apply([], arr); +} + +var nativeToString = Object.prototype.toString; +var nativeHasOwnProperty = Object.prototype.hasOwnProperty; +function isUndefined(obj) { + return obj === undefined; +} +function isDefined(obj) { + return obj !== undefined; +} +function isNil(obj) { + return obj == null; +} +function isArray(obj) { + return nativeToString.call(obj) === '[object Array]'; +} +function isObject(obj) { + return nativeToString.call(obj) === '[object Object]'; +} +function isNumber(obj) { + return nativeToString.call(obj) === '[object Number]'; +} +function isFunction(obj) { + var tag = nativeToString.call(obj); + return tag === '[object Function]' || tag === '[object AsyncFunction]' || tag === '[object GeneratorFunction]' || tag === '[object AsyncGeneratorFunction]' || tag === '[object Proxy]'; +} +function isString(obj) { + return nativeToString.call(obj) === '[object String]'; +} +/** + * Ensure collection is an array. + * + * @param {Object} obj + */ + +function ensureArray(obj) { + if (isArray(obj)) { + return; + } + + throw new Error('must supply array'); +} +/** + * Return true, if target owns a property with the given key. + * + * @param {Object} target + * @param {String} key + * + * @return {Boolean} + */ + +function has(target, key) { + return nativeHasOwnProperty.call(target, key); +} + +/** + * Find element in collection. + * + * @param {Array|Object} collection + * @param {Function|Object} matcher + * + * @return {Object} + */ + +function find(collection, matcher) { + matcher = toMatcher(matcher); + var match; + forEach(collection, function (val, key) { + if (matcher(val, key)) { + match = val; + return false; + } + }); + return match; +} +/** + * Find element index in collection. + * + * @param {Array|Object} collection + * @param {Function} matcher + * + * @return {Object} + */ + +function findIndex(collection, matcher) { + matcher = toMatcher(matcher); + var idx = isArray(collection) ? -1 : undefined; + forEach(collection, function (val, key) { + if (matcher(val, key)) { + idx = key; + return false; + } + }); + return idx; +} +/** + * Find element in collection. + * + * @param {Array|Object} collection + * @param {Function} matcher + * + * @return {Array} result + */ + +function filter(collection, matcher) { + var result = []; + forEach(collection, function (val, key) { + if (matcher(val, key)) { + result.push(val); + } + }); + return result; +} +/** + * Iterate over collection; returning something + * (non-undefined) will stop iteration. + * + * @param {Array|Object} collection + * @param {Function} iterator + * + * @return {Object} return result that stopped the iteration + */ + +function forEach(collection, iterator) { + var val, result; + + if (isUndefined(collection)) { + return; + } + + var convertKey = isArray(collection) ? toNum : identity; + + for (var key in collection) { + if (has(collection, key)) { + val = collection[key]; + result = iterator(val, convertKey(key)); + + if (result === false) { + return val; + } + } + } +} +/** + * Return collection without element. + * + * @param {Array} arr + * @param {Function} matcher + * + * @return {Array} + */ + +function without(arr, matcher) { + if (isUndefined(arr)) { + return []; + } + + ensureArray(arr); + matcher = toMatcher(matcher); + return arr.filter(function (el, idx) { + return !matcher(el, idx); + }); +} +/** + * Reduce collection, returning a single result. + * + * @param {Object|Array} collection + * @param {Function} iterator + * @param {Any} result + * + * @return {Any} result returned from last iterator + */ + +function reduce(collection, iterator, result) { + forEach(collection, function (value, idx) { + result = iterator(result, value, idx); + }); + return result; +} +/** + * Return true if every element in the collection + * matches the criteria. + * + * @param {Object|Array} collection + * @param {Function} matcher + * + * @return {Boolean} + */ + +function every(collection, matcher) { + return !!reduce(collection, function (matches, val, key) { + return matches && matcher(val, key); + }, true); +} +/** + * Return true if some elements in the collection + * match the criteria. + * + * @param {Object|Array} collection + * @param {Function} matcher + * + * @return {Boolean} + */ + +function some(collection, matcher) { + return !!find(collection, matcher); +} +/** + * Transform a collection into another collection + * by piping each member through the given fn. + * + * @param {Object|Array} collection + * @param {Function} fn + * + * @return {Array} transformed collection + */ + +function map(collection, fn) { + var result = []; + forEach(collection, function (val, key) { + result.push(fn(val, key)); + }); + return result; +} +/** + * Get the collections keys. + * + * @param {Object|Array} collection + * + * @return {Array} + */ + +function keys(collection) { + return collection && Object.keys(collection) || []; +} +/** + * Shorthand for `keys(o).length`. + * + * @param {Object|Array} collection + * + * @return {Number} + */ + +function size(collection) { + return keys(collection).length; +} +/** + * Get the values in the collection. + * + * @param {Object|Array} collection + * + * @return {Array} + */ + +function values(collection) { + return map(collection, function (val) { + return val; + }); +} +/** + * Group collection members by attribute. + * + * @param {Object|Array} collection + * @param {Function} extractor + * + * @return {Object} map with { attrValue => [ a, b, c ] } + */ + +function groupBy(collection, extractor) { + var grouped = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + extractor = toExtractor(extractor); + forEach(collection, function (val) { + var discriminator = extractor(val) || '_'; + var group = grouped[discriminator]; + + if (!group) { + group = grouped[discriminator] = []; + } + + group.push(val); + }); + return grouped; +} +function uniqueBy(extractor) { + extractor = toExtractor(extractor); + var grouped = {}; + + for (var _len = arguments.length, collections = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + collections[_key - 1] = arguments[_key]; + } + + forEach(collections, function (c) { + return groupBy(c, extractor, grouped); + }); + var result = map(grouped, function (val, key) { + return val[0]; + }); + return result; +} +var unionBy = uniqueBy; +/** + * Sort collection by criteria. + * + * @param {Object|Array} collection + * @param {String|Function} extractor + * + * @return {Array} + */ + +function sortBy(collection, extractor) { + extractor = toExtractor(extractor); + var sorted = []; + forEach(collection, function (value, key) { + var disc = extractor(value, key); + var entry = { + d: disc, + v: value + }; + + for (var idx = 0; idx < sorted.length; idx++) { + var d = sorted[idx].d; + + if (disc < d) { + sorted.splice(idx, 0, entry); + return; + } + } // not inserted, append (!) + + + sorted.push(entry); + }); + return map(sorted, function (e) { + return e.v; + }); +} +/** + * Create an object pattern matcher. + * + * @example + * + * const matcher = matchPattern({ id: 1 }); + * + * let element = find(elements, matcher); + * + * @param {Object} pattern + * + * @return {Function} matcherFn + */ + +function matchPattern(pattern) { + return function (el) { + return every(pattern, function (val, key) { + return el[key] === val; + }); + }; +} + +function toExtractor(extractor) { + return isFunction(extractor) ? extractor : function (e) { + return e[extractor]; + }; +} + +function toMatcher(matcher) { + return isFunction(matcher) ? matcher : function (e) { + return e === matcher; + }; +} + +function identity(arg) { + return arg; +} + +function toNum(arg) { + return Number(arg); +} + +/** + * Debounce fn, calling it only once if the given time + * elapsed between calls. + * + * Lodash-style the function exposes methods to `#clear` + * and `#flush` to control internal behavior. + * + * @param {Function} fn + * @param {Number} timeout + * + * @return {Function} debounced function + */ +function debounce(fn, timeout) { + var timer; + var lastArgs; + var lastThis; + var lastNow; + + function fire(force) { + var now = Date.now(); + var scheduledDiff = force ? 0 : lastNow + timeout - now; + + if (scheduledDiff > 0) { + return schedule(scheduledDiff); + } + + fn.apply(lastThis, lastArgs); + clear(); + } + + function schedule(timeout) { + timer = setTimeout(fire, timeout); + } + + function clear() { + if (timer) { + clearTimeout(timer); + } + + timer = lastNow = lastArgs = lastThis = undefined; + } + + function flush() { + if (timer) { + fire(true); + } + + clear(); + } + + function callback() { + lastNow = Date.now(); + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + lastArgs = args; + lastThis = this; // ensure an execution is scheduled + + if (!timer) { + schedule(timeout); + } + } + + callback.flush = flush; + callback.cancel = clear; + return callback; +} +/** + * Throttle fn, calling at most once + * in the given interval. + * + * @param {Function} fn + * @param {Number} interval + * + * @return {Function} throttled function + */ + +function throttle(fn, interval) { + var throttling = false; + return function () { + if (throttling) { + return; + } + + fn.apply(void 0, arguments); + throttling = true; + setTimeout(function () { + throttling = false; + }, interval); + }; +} +/** + * Bind function against target . + * + * @param {Function} fn + * @param {Object} target + * + * @return {Function} bound function + */ + +function bind(fn, target) { + return fn.bind(target); +} + +function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); +} + +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +/** + * Convenience wrapper for `Object.assign`. + * + * @param {Object} target + * @param {...Object} others + * + * @return {Object} the target + */ + +function assign(target) { + for (var _len = arguments.length, others = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + others[_key - 1] = arguments[_key]; + } + + return _extends.apply(void 0, [target].concat(others)); +} +/** + * Sets a nested property of a given object to the specified value. + * + * This mutates the object and returns it. + * + * @param {Object} target The target of the set operation. + * @param {(string|number)[]} path The path to the nested value. + * @param {any} value The value to set. + */ + +function set(target, path, value) { + var currentTarget = target; + forEach(path, function (key, idx) { + if (typeof key !== 'number' && typeof key !== 'string') { + throw new Error('illegal key type: ' + _typeof(key) + '. Key should be of type number or string.'); + } + + if (key === 'constructor') { + throw new Error('illegal key: constructor'); + } + + if (key === '__proto__') { + throw new Error('illegal key: __proto__'); + } + + var nextKey = path[idx + 1]; + var nextTarget = currentTarget[key]; + + if (isDefined(nextKey) && isNil(nextTarget)) { + nextTarget = currentTarget[key] = isNaN(+nextKey) ? {} : []; + } + + if (isUndefined(nextKey)) { + if (isUndefined(value)) { + delete currentTarget[key]; + } else { + currentTarget[key] = value; + } + } else { + currentTarget = nextTarget; + } + }); + return target; +} +/** + * Gets a nested property of a given object. + * + * @param {Object} target The target of the get operation. + * @param {(string|number)[]} path The path to the nested value. + * @param {any} [defaultValue] The value to return if no value exists. + */ + +function get(target, path, defaultValue) { + var currentTarget = target; + forEach(path, function (key) { + // accessing nil property yields + if (isNil(currentTarget)) { + currentTarget = undefined; + return false; + } + + currentTarget = currentTarget[key]; + }); + return isUndefined(currentTarget) ? defaultValue : currentTarget; +} +/** + * Pick given properties from the target object. + * + * @param {Object} target + * @param {Array} properties + * + * @return {Object} target + */ + +function pick(target, properties) { + var result = {}; + var obj = Object(target); + forEach(properties, function (prop) { + if (prop in obj) { + result[prop] = target[prop]; + } + }); + return result; +} +/** + * Pick all target properties, excluding the given ones. + * + * @param {Object} target + * @param {Array} properties + * + * @return {Object} target + */ + +function omit(target, properties) { + var result = {}; + var obj = Object(target); + forEach(obj, function (prop, key) { + if (properties.indexOf(key) === -1) { + result[key] = prop; + } + }); + return result; +} +/** + * Recursively merge `...sources` into given target. + * + * Does support merging objects; does not support merging arrays. + * + * @param {Object} target + * @param {...Object} sources + * + * @return {Object} the target + */ + +function merge(target) { + for (var _len2 = arguments.length, sources = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + sources[_key2 - 1] = arguments[_key2]; + } + + if (!sources.length) { + return target; + } + + forEach(sources, function (source) { + // skip non-obj sources, i.e. null + if (!source || !isObject(source)) { + return; + } + + forEach(source, function (sourceVal, key) { + if (key === '__proto__') { + return; + } + + var targetVal = target[key]; + + if (isObject(sourceVal)) { + if (!isObject(targetVal)) { + // override target[key] with object + targetVal = {}; + } + + target[key] = merge(targetVal, sourceVal); + } else { + target[key] = sourceVal; + } + }); + }); + return target; +} + +var index_esm = /*#__PURE__*/Object.freeze({ + __proto__: null, + assign: assign, + bind: bind, + debounce: debounce, + ensureArray: ensureArray, + every: every, + filter: filter, + find: find, + findIndex: findIndex, + flatten: flatten$1, + forEach: forEach, + get: get, + groupBy: groupBy, + has: has, + isArray: isArray, + isDefined: isDefined, + isFunction: isFunction, + isNil: isNil, + isNumber: isNumber, + isObject: isObject, + isString: isString, + isUndefined: isUndefined, + keys: keys, + map: map, + matchPattern: matchPattern, + merge: merge, + omit: omit, + pick: pick, + reduce: reduce, + set: set, + size: size, + some: some, + sortBy: sortBy, + throttle: throttle, + unionBy: unionBy, + uniqueBy: uniqueBy, + values: values, + without: without +}); + +var require$$1 = /*@__PURE__*/getAugmentedNamespace(index_esm); + +const { + is: is$c +} = require$$0; + +const { + flatten +} = require$$1; + +/** + * A rule that checks that there is no BPMNDI information missing for elements, + * which require BPMNDI. + */ +var noBpmndi = function () { + + function check(node, reporter) { + + if (!is$c(node, 'bpmn:Definitions')) { + return false; + } + + // (1) Construct array of all BPMN elements + const bpmnElements = getAllBpmnElements(node.rootElements); + + // (2) Filter BPMN elements without visual representation + const visualBpmnElements = bpmnElements.filter(hasVisualRepresentation); + + // (3) Construct array of BPMNDI references + const diBpmnReferences = getAllDiBpmnReferences(node); + + // (4) Report elements without BPMNDI + visualBpmnElements.forEach((element) => { + if (diBpmnReferences.indexOf(element.id) === -1) { + reporter.report(element.id, 'Element is missing bpmndi'); + } + }); + } + + return { + check + }; + +}; + + +// helpers ///////////////////////////// + +/** + * Get all BPMN elements within a bpmn:Definitions node + * + * @param {array} rootElements - An array of Moddle rootElements + * @return {array} A flat array with all BPMN elements, each represented with { id: elementId, $type: elementType } + * + */ +function getAllBpmnElements(rootElements) { + return flatten(rootElements.map((rootElement) => { + const laneSet = + rootElement.laneSets && rootElement.laneSets[0] || rootElement.childLaneSet; + + // Include + // * flowElements (e.g., tasks, sequenceFlows), + // * nested flowElements, + // * participants, + // * artifacts (groups), + // * laneSets + // * nested laneSets + // * childLaneSets + // * nested childLaneSets + // * messageFlows + const elements = flatten([].concat( + rootElement.flowElements || [], + (rootElement.flowElements && getAllBpmnElements(rootElement.flowElements.filter(hasFlowElements))) || [], + rootElement.participants || [], + rootElement.artifacts || [], + laneSet && laneSet.lanes || [], + laneSet && laneSet.lanes && getAllBpmnElements(laneSet.lanes.filter(hasChildLaneSet)) || [], + rootElement.messageFlows || [] + )); + + if (elements.length > 0) { + return elements.map((element) => { + + return { + id: element.id, + $type: element.$type + }; + }); + } else { + + // We are not interested in the rest here (DI) + return []; + } + })); +} + +/** + * Get all BPMN elements within a bpmn:Definitions node + * + * @param {ModdleElement} definitionsNode - A moddleElement representing the + * bpmn:Definitions element + * @return {array} A flat array with all BPMNDI element ids part of + * this bpmn:Definitions node + * + */ +function getAllDiBpmnReferences(definitionsNode) { + return flatten( + definitionsNode.diagrams.map((diagram) => { + + const diElements = diagram.plane.planeElement || []; + + return diElements.map((element) => { + + return element.bpmnElement.id; + }); + }) + ); +} + +function hasVisualRepresentation(element) { + const noVisRepresentation = ['bpmn:DataObject']; + + return noVisRepresentation.includes(element.$type) ? false : true; +} + +function hasFlowElements(element) { + return element.flowElements ? true : false; +} + +function hasChildLaneSet(element) { + return element.childLaneSet ? true : false; +} + +var helper = {}; + +const { + is: is$b +} = require$$0; + +/** + * Create a checker that disallows the given element type. + * + * @param {String} type + * + * @return {Function} ruleImpl + */ +function disallowNodeType$2(type) { + + return function () { + + function check(node, reporter) { + + if (is$b(node, type)) { + reporter.report(node.id, 'Element has disallowed type <' + type + '>'); + } + } + + return { + check + }; + + }; + +} + +helper.disallowNodeType = disallowNodeType$2; + +const disallowNodeType$1 = helper.disallowNodeType; + +var noComplexGateway = disallowNodeType$1('bpmn:ComplexGateway'); + +const { + isAny: isAny$2, + is: is$a +} = require$$0; + + +/** + * A rule that verifies that there exists no disconnected + * flow elements, i.e. elements without incoming + * _or_ outgoing sequence flows + */ +var noDisconnected = function () { + + function check(node, reporter) { + + if (!isAny$2(node, [ + 'bpmn:Task', + 'bpmn:Gateway', + 'bpmn:SubProcess', + 'bpmn:Event' + ]) || node.triggeredByEvent) { + return; + } + + // compensation activity and boundary events are + // linked visually via associations. If these associations + // exist we are fine, too + if (isCompensationLinked(node)) { + return; + } + + const incoming = node.incoming || []; + const outgoing = node.outgoing || []; + + if (!incoming.length && !outgoing.length) { + reporter.report(node.id, 'Element is not connected'); + } + } + + return { + check + }; +}; + + +// helpers ///////////////// + +function isCompensationBoundary(node) { + + var eventDefinitions = node.eventDefinitions; + + if (!is$a(node, 'bpmn:BoundaryEvent')) { + return false; + } + + if (!eventDefinitions || eventDefinitions.length !== 1) { + return false; + } + + return is$a(eventDefinitions[0], 'bpmn:CompensateEventDefinition'); +} + +function isCompensationActivity(node) { + return node.isForCompensation; +} + +function isCompensationLinked(node) { + var source = isCompensationBoundary(node); + var target = isCompensationActivity(node); + + // TODO(nikku): check, whether compensation association exists + return source || target; +} + +const { + is: is$9 +} = require$$0; + +/** + * A rule that verifies that there are no disconnected + * flow elements, i.e. elements without incoming + * _or_ outgoing sequence flows + */ +var noDuplicateSequenceFlows = function () { + + const keyed = {}; + + const outgoingReported = {}; + const incomingReported = {}; + + function check(node, reporter) { + + if (!is$9(node, 'bpmn:SequenceFlow')) { + return; + } + + const key = flowKey(node); + + if (key in keyed) { + reporter.report(node.id, 'SequenceFlow is a duplicate'); + + const sourceId = node.sourceRef.id; + const targetId = node.targetRef.id; + + if (!outgoingReported[sourceId]) { + reporter.report(sourceId, 'Duplicate outgoing sequence flows'); + + outgoingReported[sourceId] = true; + } + + if (!incomingReported[targetId]) { + reporter.report(targetId, 'Duplicate incoming sequence flows'); + + incomingReported[targetId] = true; + } + } else { + keyed[key] = node; + } + } + + return { + check + }; + +}; + + +// helpers ///////////////// + +function flowKey(flow) { + const conditionExpression = flow.conditionExpression; + + const condition = conditionExpression ? conditionExpression.body : ''; + const source = flow.sourceRef ? flow.sourceRef.id : flow.id; + const target = flow.targetRef ? flow.targetRef.id : flow.id; + + return source + '#' + target + '#' + condition; +} + +const { + is: is$8 +} = require$$0; + + +/** + * A rule that checks, whether a gateway forks and joins + * at the same time. + */ +var noGatewayJoinFork = function () { + + function check(node, reporter) { + + if (!is$8(node, 'bpmn:Gateway')) { + return; + } + + const incoming = node.incoming || []; + const outgoing = node.outgoing || []; + + if (incoming.length > 1 && outgoing.length > 1) { + reporter.report(node.id, 'Gateway forks and joins'); + } + } + + return { + check + }; + +}; + +const { + isAny: isAny$1 +} = require$$0; + + +/** + * A rule that checks that no implicit split is modeled + * starting from a task. + * + * users should model the parallel splitting gateway + * explicitly instead. + */ +var noImplicitSplit = function () { + + function check(node, reporter) { + + if (!isAny$1(node, [ + 'bpmn:Task', + 'bpmn:Event' + ])) { + return; + } + + const outgoing = node.outgoing || []; + + const outgoingWithoutCondition = outgoing.filter((flow) => { + return !hasCondition(flow) && !isDefaultFlow(node, flow); + }); + + if (outgoingWithoutCondition.length > 1) { + reporter.report(node.id, 'Flow splits implicitly'); + } + } + + return { + check + }; + +}; + + +// helpers ///////////////////////////// + +function hasCondition(flow) { + return !!flow.conditionExpression; +} + +function isDefaultFlow(node, flow) { + return node['default'] === flow; +} + +const disallowNodeType = helper.disallowNodeType; + +var noInclusiveGateway = disallowNodeType('bpmn:InclusiveGateway'); + +const { + is: is$7 +} = require$$0; + +/** + * A rule that checks whether not more than one blank start event + * exists per scope. + */ +var singleBlankStartEvent = function () { + + function check(node, reporter) { + + if (!is$7(node, 'bpmn:FlowElementsContainer')) { + return; + } + + const flowElements = node.flowElements || []; + + const blankStartEvents = flowElements.filter(function (flowElement) { + + if (!is$7(flowElement, 'bpmn:StartEvent')) { + return false; + } + + const eventDefinitions = flowElement.eventDefinitions || []; + + return eventDefinitions.length === 0; + }); + + if (blankStartEvents.length > 1) { + const type = is$7(node, 'bpmn:SubProcess') ? 'Sub process' : 'Process'; + + reporter.report(node.id, type + ' has multiple blank start events'); + } + } + + return { + check + }; + +}; + +const { + is: is$6 +} = require$$0; + + +/** + * A rule that verifies that an event contains maximum one event definition. + */ +var singleEventDefinition = function () { + + function check(node, reporter) { + + if (!is$6(node, 'bpmn:Event')) { + return; + } + + const eventDefinitions = node.eventDefinitions || []; + + if (eventDefinitions.length > 1) { + reporter.report(node.id, 'Event has multiple event definitions', ['eventDefinitions']); + } + } + + return { + check + }; + +}; + +const { + is: is$5, + isAny +} = require$$0; + + +/** + * A rule that checks for the presence of a start event per scope. + */ +var startEventRequired = function () { + + function hasStartEvent(node) { + const flowElements = node.flowElements || []; + + return ( + flowElements.some(node => is$5(node, 'bpmn:StartEvent')) + ); + } + + function check(node, reporter) { + + if (!isAny(node, [ + 'bpmn:Process', + 'bpmn:SubProcess' + ])) { + return; + } + + if (!hasStartEvent(node)) { + const type = is$5(node, 'bpmn:SubProcess') ? 'Sub process' : 'Process'; + + reporter.report(node.id, type + ' is missing start event'); + } + } + + return { check }; +}; + +const { + is: is$4 +} = require$$0; + + +/** + * A rule that checks that start events inside a normal sub-processes + * are blank (do not have an event definition). + */ +var subProcessBlankStartEvent = function () { + + function check(node, reporter) { + + if (!is$4(node, 'bpmn:SubProcess') || node.triggeredByEvent) { + return; + } + + const flowElements = node.flowElements || []; + + flowElements.forEach(function (flowElement) { + + if (!is$4(flowElement, 'bpmn:StartEvent')) { + return false; + } + + const eventDefinitions = flowElement.eventDefinitions || []; + + if (eventDefinitions.length > 0) { + reporter.report(flowElement.id, 'Start event must be blank', ['eventDefinitions']); + } + }); + } + + return { + check + }; + +}; + +const { + is: is$3 +} = require$$0; + +/** + * A rule that checks, whether a gateway has only one source and target. + * + * Those gateways are superfluous since they don't do anything. + */ +var superfluousGateway = function () { + + function check(node, reporter) { + + if (!is$3(node, 'bpmn:Gateway')) { + return; + } + + const incoming = node.incoming || []; + const outgoing = node.outgoing || []; + + if (incoming.length === 1 && outgoing.length === 1) { + reporter.report(node.id, 'Gateway is superfluous. It only has one source and target.'); + } + } + + return { + check + }; + +}; + +const { + is: is$2 +} = require$$0; + + +/** + * Rule that reports missing targetNamespace on bpmn:Definitions. + */ +var targetNamespace = function () { + + function check(node, reporter) { + if (is$2(node, 'bpmn:Definitions') && !node.targetNamespace) { + reporter.report(node.id, 'Element is missing targetNamespace'); + } + } + + return { + check: check + }; +}; + +const { + is: is$1 +} = require$$0; + + +/** + * Rule that reports manual tasks being used. + */ +var noManualTask = function () { + + function check(node, reporter) { + if (is$1(node, 'bpmn:ManualTask')) { + reporter.report(node.id, 'Element has disallowed type bpmn:ManualTask'); + } + } + + return { + check: check + }; +}; + +const { + is +} = require$$0; + + +/** + * 校验任务节点是否设置任务处理人 + */ +var checkNodeUser = function () { + + function check(node, reporter) { + if (is(node, 'bpmn:Task')) { + const assignee = (node.assignee || '').trim(); + const candidateUsers = (node.candidateUsers || '').trim(); + const candidateGroups = (node.candidateGroups || '').trim(); + + if (assignee.length === 0 && candidateUsers.length === 0 && candidateGroups.length === 0) { + reporter.report(node.id, '任务节点未设置人员信息'); + } + + const buttons = node.extensionElements?.values?.filter(ex => { + return ex.$type === `flowable:Buttons`; + }) ?? []; + const selectButtons = buttons.reduce((pre, current) => pre.concat(current.values), []); + if (buttons.length === 0 || selectButtons.length === 0) { + reporter.report(node.id, '任务节点未配置按钮信息'); + } + } + } + + return { + check: check + }; +}; + +const cache = {}; + +/** + * A resolver that caches rules and configuration as part of the bundle, + * making them accessible in the browser. + * + * @param {Object} cache + */ +function Resolver() { } + +Resolver.prototype.resolveRule = function (pkg, ruleName) { + + const rule = cache[pkg + '/' + ruleName]; + + if (!rule) { + throw new Error('cannot resolve rule <' + pkg + '/' + ruleName + '>'); + } + + return rule; +}; + +Resolver.prototype.resolveConfig = function (pkg, configName) { + throw new Error( + 'cannot resolve config <' + configName + '> in <' + pkg + '>' + ); +}; + +const resolver = new Resolver(); + +const rules = { + "conditional-flows": "error", + "end-event-required": "error", + "event-sub-process-typed-start-event": "error", + "fake-join": "warn", + "label-required": "warn", + "no-bpmndi": "error", + "no-complex-gateway": "error", + "no-disconnected": "error", + "no-duplicate-sequence-flows": "error", + "no-gateway-join-fork": "error", + "no-implicit-split": "error", + "no-inclusive-gateway": "error", + "single-blank-start-event": "error", + "single-event-definition": "error", + "start-event-required": "error", + "sub-process-blank-start-event": "error", + "superfluous-gateway": "warn", + "custom/target-namespace": "error", + "custom/no-manual-task": "warn", + "custom/check-node-user": "error" +}; + +const config = { + rules: rules +}; + +const bundle = { + resolver: resolver, + config: config +}; +cache['bpmnlint/conditional-flows'] = conditionalFlows; +cache['bpmnlint/end-event-required'] = endEventRequired; +cache['bpmnlint/event-sub-process-typed-start-event'] = eventSubProcessTypedStartEvent; +cache['bpmnlint/fake-join'] = fakeJoin; +cache['bpmnlint/label-required'] = labelRequired; +cache['bpmnlint/no-bpmndi'] = noBpmndi; +cache['bpmnlint/no-complex-gateway'] = noComplexGateway; +cache['bpmnlint/no-disconnected'] = noDisconnected; +cache['bpmnlint/no-duplicate-sequence-flows'] = noDuplicateSequenceFlows; +cache['bpmnlint/no-gateway-join-fork'] = noGatewayJoinFork; +cache['bpmnlint/no-implicit-split'] = noImplicitSplit; +cache['bpmnlint/no-inclusive-gateway'] = noInclusiveGateway; +cache['bpmnlint/single-blank-start-event'] = singleBlankStartEvent; +cache['bpmnlint/single-event-definition'] = singleEventDefinition; +cache['bpmnlint/start-event-required'] = startEventRequired; +cache['bpmnlint/sub-process-blank-start-event'] = subProcessBlankStartEvent; +cache['bpmnlint/superfluous-gateway'] = superfluousGateway; +cache['bpmnlint-plugin-custom/target-namespace'] = targetNamespace; +cache['bpmnlint-plugin-custom/no-manual-task'] = noManualTask; +cache['bpmnlint-plugin-custom/check-node-user'] = checkNodeUser; + +export { config, bundle as default, resolver }; diff --git a/src/components/Process/customPanel/CustomContextPad.js b/src/components/Process/customPanel/CustomContextPad.js new file mode 100644 index 0000000..6209cb5 --- /dev/null +++ b/src/components/Process/customPanel/CustomContextPad.js @@ -0,0 +1,527 @@ +/** + * 自定义任务弹窗节点 + */ +import { + assign, + forEach, + isArray, + every +} from 'min-dash'; + +import { + is +} from 'bpmn-js/lib/util/ModelUtil'; + +import { + isExpanded, + isEventSubProcess +} from 'bpmn-js/lib/util/DiUtil'; + +import { + isAny +} from 'bpmn-js/lib/features/modeling/util/ModelingUtil'; + +import { + getChildLanes +} from 'bpmn-js/lib/features/modeling/util/LaneUtil'; + +import { + hasPrimaryModifier +} from 'diagram-js/lib/util/Mouse'; + + +/** + * A provider for BPMN 2.0 elements context pad + */ +export default function ContextPadProvider( + config, injector, eventBus, + contextPad, modeling, elementFactory, + connect, create, popupMenu, + canvas, rules, translate) { + + config = config || {}; + + contextPad.registerProvider(this); + + this._contextPad = contextPad; + + this._modeling = modeling; + + this._elementFactory = elementFactory; + this._connect = connect; + this._create = create; + this._popupMenu = popupMenu; + this._canvas = canvas; + this._rules = rules; + this._translate = translate; + + if (config.autoPlace !== false) { + this._autoPlace = injector.get('autoPlace', false); + } + + eventBus.on('create.end', 250, function(event) { + var context = event.context, + shape = context.shape; + + if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) { + return; + } + + var entries = contextPad.getEntries(shape); + + if (entries.replace) { + entries.replace.action.click(event, shape); + } + }); +} + +ContextPadProvider.$inject = [ + 'config.contextPad', + 'injector', + 'eventBus', + 'contextPad', + 'modeling', + 'elementFactory', + 'connect', + 'create', + 'popupMenu', + 'canvas', + 'rules', + 'translate' +]; + +ContextPadProvider.prototype.getMultiElementContextPadEntries = function(elements) { + var modeling = this._modeling; + + var actions = {}; + + if (this._isDeleteAllowed(elements)) { + assign(actions, { + 'delete': { + group: 'edit', + className: 'bpmn-icon-trash', + title: this._translate('Remove'), + action: { + click: function(event, elements) { + modeling.removeElements(elements.slice()); + } + } + } + }); + } + + return actions; +}; + +/** + * @param {djs.model.Base[]} elements + * @return {boolean} + */ +ContextPadProvider.prototype._isDeleteAllowed = function(elements) { + + var baseAllowed = this._rules.allowed('elements.delete', { + elements: elements + }); + + if (isArray(baseAllowed)) { + return every(baseAllowed, function(element) { + return includes(baseAllowed, element); + }); + } + + return baseAllowed; +}; + +ContextPadProvider.prototype.getContextPadEntries = function(element) { + var contextPad = this._contextPad, + modeling = this._modeling, + + elementFactory = this._elementFactory, + connect = this._connect, + create = this._create, + popupMenu = this._popupMenu, + rules = this._rules, + autoPlace = this._autoPlace, + translate = this._translate; + + var actions = {}; + + if (element.type === 'label') { + return actions; + } + + var businessObject = element.businessObject; + + function startConnect(event, element) { + connect.start(event, element); + } + + function removeElement(e, element) { + modeling.removeElements([ element ]); + } + + function getReplaceMenuPosition(element) { + + var Y_OFFSET = 5; + + var pad = contextPad.getPad(element).html; + + var padRect = pad.getBoundingClientRect(); + + var pos = { + x: padRect.left, + y: padRect.bottom + Y_OFFSET + }; + + return pos; + } + + + /** + * Create an append action + * + * @param {string} type + * @param {string} className + * @param {string} [title] + * @param {Object} [options] + * + * @return {Object} descriptor + */ + function appendAction(type, className, title, options) { + + if (typeof title !== 'string') { + options = title; + title = translate('Append {type}', { type: type.replace(/^bpmn:/, '') }); + } + + function appendStart(event, element) { + + var shape = elementFactory.createShape(assign({ type: type }, options)); + create.start(event, shape, { + source: element + }); + } + + + var append = autoPlace ? function(event, element) { + var shape = elementFactory.createShape(assign({ type: type }, options)); + + autoPlace.append(element, shape); + } : appendStart; + + + return { + group: 'model', + className: className, + title: title, + action: { + dragstart: appendStart, + click: append + } + }; + } + + function splitLaneHandler(count) { + + return function(event, element) { + + // actual split + modeling.splitLane(element, count); + + // refresh context pad after split to + // get rid of split icons + contextPad.open(element, true); + }; + } + + + if (isAny(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && isExpanded(element)) { + + var childLanes = getChildLanes(element); + + assign(actions, { + 'lane-insert-above': { + group: 'lane-insert-above', + className: 'bpmn-icon-lane-insert-above', + title: translate('Add Lane above'), + action: { + click: function(event, element) { + modeling.addLane(element, 'top'); + } + } + } + }); + + if (childLanes.length < 2) { + + if (element.height >= 120) { + assign(actions, { + 'lane-divide-two': { + group: 'lane-divide', + className: 'bpmn-icon-lane-divide-two', + title: translate('Divide into two Lanes'), + action: { + click: splitLaneHandler(2) + } + } + }); + } + + if (element.height >= 180) { + assign(actions, { + 'lane-divide-three': { + group: 'lane-divide', + className: 'bpmn-icon-lane-divide-three', + title: translate('Divide into three Lanes'), + action: { + click: splitLaneHandler(3) + } + } + }); + } + } + + assign(actions, { + 'lane-insert-below': { + group: 'lane-insert-below', + className: 'bpmn-icon-lane-insert-below', + title: translate('Add Lane below'), + action: { + click: function(event, element) { + modeling.addLane(element, 'bottom'); + } + } + } + }); + + } + + if (is(businessObject, 'bpmn:FlowNode')) { + + if (is(businessObject, 'bpmn:EventBasedGateway')) { + + assign(actions, { + 'append.receive-task': appendAction( + 'bpmn:ReceiveTask', + 'bpmn-icon-receive-task', + translate('Append ReceiveTask') + ), + 'append.message-intermediate-event': appendAction( + 'bpmn:IntermediateCatchEvent', + 'bpmn-icon-intermediate-event-catch-message', + translate('Append MessageIntermediateCatchEvent'), + { eventDefinitionType: 'bpmn:MessageEventDefinition' } + ), + 'append.timer-intermediate-event': appendAction( + 'bpmn:IntermediateCatchEvent', + 'bpmn-icon-intermediate-event-catch-timer', + translate('Append TimerIntermediateCatchEvent'), + { eventDefinitionType: 'bpmn:TimerEventDefinition' } + ), + 'append.condition-intermediate-event': appendAction( + 'bpmn:IntermediateCatchEvent', + 'bpmn-icon-intermediate-event-catch-condition', + translate('Append ConditionIntermediateCatchEvent'), + { eventDefinitionType: 'bpmn:ConditionalEventDefinition' } + ), + 'append.signal-intermediate-event': appendAction( + 'bpmn:IntermediateCatchEvent', + 'bpmn-icon-intermediate-event-catch-signal', + translate('Append SignalIntermediateCatchEvent'), + { eventDefinitionType: 'bpmn:SignalEventDefinition' } + ) + }); + } else + + if (isEventType(businessObject, 'bpmn:BoundaryEvent', 'bpmn:CompensateEventDefinition')) { + + assign(actions, { + 'append.compensation-activity': + appendAction( + 'bpmn:Task', + 'bpmn-icon-task', + translate('Append compensation activity'), + { + isForCompensation: true + } + ) + }); + } else + + if (!is(businessObject, 'bpmn:EndEvent') && + !businessObject.isForCompensation && + !isEventType(businessObject, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition') && + !isEventSubProcess(businessObject)) { + + assign(actions, { + 'append.end-event': appendAction( + 'bpmn:EndEvent', + 'bpmn-icon-end-event-none', + translate('Append EndEvent') + ), + 'append.gateway': appendAction( + 'bpmn:ExclusiveGateway', + 'bpmn-icon-gateway-none', + translate('Append Gateway') + ), + 'append.append-user-task': appendAction( + 'bpmn:UserTask', + 'bpmn-icon-user-task', + '添加用户任务' + ), + 'append.intermediate-event': appendAction( + 'bpmn:IntermediateThrowEvent', + 'bpmn-icon-intermediate-event-none', + translate('Append Intermediate/Boundary Event') + ) + }); + } + } + + if (!popupMenu.isEmpty(element, 'bpmn-replace')) { + + // Replace menu entry + assign(actions, { + 'replace': { + group: 'edit', + className: 'bpmn-icon-screw-wrench', + title: translate('Change type'), + action: { + click: function(event, element) { + + var position = assign(getReplaceMenuPosition(element), { + cursor: { x: event.x, y: event.y } + }); + + popupMenu.open(element, 'bpmn-replace', position, { + title: translate('Change element'), + width: 300, + search: true + }); + } + } + } + }); + } + + if (is(businessObject, 'bpmn:SequenceFlow')) { + assign(actions, { + 'append.text-annotation': appendAction( + 'bpmn:TextAnnotation', + 'bpmn-icon-text-annotation' + ) + }); + } + + if ( + isAny(businessObject, [ + 'bpmn:FlowNode', + 'bpmn:InteractionNode', + 'bpmn:DataObjectReference', + 'bpmn:DataStoreReference', + ]) + ) { + assign(actions, { + 'append.text-annotation': appendAction( + 'bpmn:TextAnnotation', + 'bpmn-icon-text-annotation' + ), + + 'connect': { + group: 'connect', + className: 'bpmn-icon-connection-multi', + title: translate( + 'Connect using ' + + (businessObject.isForCompensation + ? '' + : 'Sequence/MessageFlow or ') + + 'Association' + ), + action: { + click: startConnect, + dragstart: startConnect, + }, + }, + }); + } + + if (is(businessObject, 'bpmn:TextAnnotation')) { + assign(actions, { + 'connect': { + group: 'connect', + className: 'bpmn-icon-connection-multi', + title: translate('Connect using Association'), + action: { + click: startConnect, + dragstart: startConnect, + }, + }, + }); + } + + if (isAny(businessObject, [ 'bpmn:DataObjectReference', 'bpmn:DataStoreReference' ])) { + assign(actions, { + 'connect': { + group: 'connect', + className: 'bpmn-icon-connection-multi', + title: translate('Connect using DataInputAssociation'), + action: { + click: startConnect, + dragstart: startConnect + } + } + }); + } + + if (is(businessObject, 'bpmn:Group')) { + assign(actions, { + 'append.text-annotation': appendAction('bpmn:TextAnnotation', 'bpmn-icon-text-annotation') + }); + } + + // delete element entry, only show if allowed by rules + var deleteAllowed = rules.allowed('elements.delete', { elements: [ element ] }); + + if (isArray(deleteAllowed)) { + + // was the element returned as a deletion candidate? + deleteAllowed = deleteAllowed[0] === element; + } + + if (deleteAllowed) { + assign(actions, { + 'delete': { + group: 'edit', + className: 'bpmn-icon-trash', + title: translate('Remove'), + action: { + click: removeElement + } + } + }); + } + + return actions; +}; + + +// helpers ///////// + +function isEventType(eventBo, type, definition) { + + var isType = eventBo.$instanceOf(type); + var isDefinition = false; + + var definitions = eventBo.eventDefinitions || []; + forEach(definitions, function(def) { + if (def.$type === definition) { + isDefinition = true; + } + }); + + return isType && isDefinition; +} + +function includes(array, item) { + return array.indexOf(item) !== -1; +} diff --git a/src/components/Process/customPanel/CustomPalette.js b/src/components/Process/customPanel/CustomPalette.js new file mode 100644 index 0000000..ee7f328 --- /dev/null +++ b/src/components/Process/customPanel/CustomPalette.js @@ -0,0 +1,145 @@ +/** + * 自定义左侧工具栏 + */ +import { assign } from "min-dash"; + +export default function CustomPalette( + palette, + create, + elementFactory, + handTool, + lassoTool, + spaceTool, + globalConnect, + translate +) { + this.create = create; + this.elementFactory = elementFactory; + this.handTool = handTool; + this.lassoTool = lassoTool; + this.spaceTool = spaceTool; + this.globalConnect = globalConnect; + this.translate = translate; + + palette.registerProvider(this); +} + +CustomPalette.$inject = [ + "palette", + "create", + "elementFactory", + "handTool", + "lassoTool", + "spaceTool", + "globalConnect", + "translate" +]; + +CustomPalette.prototype.getPaletteEntries = function (element) { + const { + create, + elementFactory, + handTool, + lassoTool, + spaceTool, + globalConnect, + translate + } = this; + + function createAction(type, group, className, title, options) { + function createListener(event) { + var shape = elementFactory.createShape(assign({ type: type }, options)); + + if (options) { + shape.businessObject.di.isExpanded = options.isExpanded; + } + + create.start(event, shape); + } + + var shortType = type.replace(/^bpmn:/, ""); + + return { + group: group, + className: className, + title: title || translate("Create {type}", { type: shortType }), + action: { + dragstart: createListener, + click: createListener + } + }; + } + + return { + 'hand-tool': { + group: 'tools', + className: 'bpmn-icon-hand-tool', + title: '激活抓手工具', + action: { + click: function(event) { + handTool.activateHand(event); + } + } + }, + "lasso-tool": { + group: "tools", + className: "bpmn-icon-lasso-tool", + title: "激活套索工具", + action: { + click: function (event) { + lassoTool.activateSelection(event); + } + } + }, + 'space-tool': { + group: 'tools', + className: 'bpmn-icon-space-tool', + title: translate('Activate the create/remove space tool'), + action: { + click: function(event) { + spaceTool.activateSelection(event); + } + } + }, + 'global-connect-tool': { + group: 'tools', + className: 'bpmn-icon-connection-multi', + title: translate('Activate the global connect tool'), + action: { + click: function(event) { + globalConnect.start(event); + } + } + }, + + "tool-separator": { + group: "tools", + separator: true + }, + + "create.start-event": createAction( + "bpmn:StartEvent", + "event", + "bpmn-icon-start-event-none", + "创建开始节点" + ), + "create.end-event": createAction( + "bpmn:EndEvent", + "event", + "bpmn-icon-end-event-none", + "创建结束节点" + ), + "create.user-task": createAction( + "bpmn:UserTask", + "activity", + "bpmn-icon-user-task", + "创建用户任务" + ), + "create.exclusive-gateway": createAction( + "bpmn:ExclusiveGateway", + "gateway", + "bpmn-icon-gateway-xor", + "创建排他网关" + ) + }; +}; diff --git a/src/components/Process/customPanel/customTranslate.js b/src/components/Process/customPanel/customTranslate.js new file mode 100644 index 0000000..1d58ae2 --- /dev/null +++ b/src/components/Process/customPanel/customTranslate.js @@ -0,0 +1,32 @@ +import translations from '../lang/zh' + +// export default function customTranslate(template, replacements) { +// replacements = replacements || {} +// +// // Translate +// template = translations[template] || template +// +// // Replace +// return template.replace(/{([^}]+)}/g, function(_, key) { +// var str = replacements[key] +// if ( +// translations[replacements[key]] !== null && +// translations[replacements[key]] !== 'undefined' +// ) { +// str = translations[replacements[key]] +// } +// return str || '{' + key + '}' +// }) +// } + +export default function customTranslate(template, replacements) { + replacements = replacements || {}; + + // Translate + template = translations[template] || template; + + // Replace + return template.replace(/{([^}]+)}/g, function(_, key) { + return replacements[key] || '{' + key + '}'; + }); +} diff --git a/src/components/Process/customPanel/index.js b/src/components/Process/customPanel/index.js new file mode 100644 index 0000000..c49c3e5 --- /dev/null +++ b/src/components/Process/customPanel/index.js @@ -0,0 +1,8 @@ +import CustomContextPad from './CustomContextPad'; +import CustomPalette from "./CustomPalette"; + +export default { + __init__: [ 'paletteProvider','contextPadProvider'], + paletteProvider: [ 'type', CustomPalette ], + contextPadProvider: [ 'type', CustomContextPad ], +}; diff --git a/src/components/Process/designer.vue b/src/components/Process/designer.vue new file mode 100644 index 0000000..d7f3d9a --- /dev/null +++ b/src/components/Process/designer.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/src/components/Process/flowable/flowable.json b/src/components/Process/flowable/flowable.json new file mode 100644 index 0000000..35e33e9 --- /dev/null +++ b/src/components/Process/flowable/flowable.json @@ -0,0 +1,1256 @@ +{ + "name": "Flowable", + "uri": "http://flowable.org/bpmn", + "prefix": "flowable", + "xml": { + "tagAlias": "lowerCase" + }, + "associations": [], + "types": [ + { + "name": "InOutBinding", + "superClass": ["Element"], + "isAbstract": true, + "properties": [ + { + "name": "source", + "isAttr": true, + "type": "String" + }, + { + "name": "sourceExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "target", + "isAttr": true, + "type": "String" + }, + { + "name": "businessKey", + "isAttr": true, + "type": "String" + }, + { + "name": "local", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "variables", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "In", + "superClass": ["InOutBinding"], + "meta": { + "allowedIn": ["bpmn:CallActivity"] + } + }, + { + "name": "Out", + "superClass": ["InOutBinding"], + "meta": { + "allowedIn": ["bpmn:CallActivity"] + } + }, + { + "name": "AsyncCapable", + "isAbstract": true, + "extends": ["bpmn:Activity", "bpmn:Gateway", "bpmn:Event"], + "properties": [ + { + "name": "async", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "asyncBefore", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "asyncAfter", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "exclusive", + "isAttr": true, + "type": "Boolean", + "default": true + } + ] + }, + { + "name": "JobPriorized", + "isAbstract": true, + "extends": ["bpmn:Process", "flowable:AsyncCapable"], + "properties": [ + { + "name": "jobPriority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "SignalEventDefinition", + "isAbstract": true, + "extends": ["bpmn:SignalEventDefinition"], + "properties": [ + { + "name": "async", + "isAttr": true, + "type": "Boolean", + "default": false + } + ] + }, + { + "name": "ErrorEventDefinition", + "isAbstract": true, + "extends": ["bpmn:ErrorEventDefinition"], + "properties": [ + { + "name": "errorCodeVariable", + "isAttr": true, + "type": "String" + }, + { + "name": "errorMessageVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Error", + "isAbstract": true, + "extends": ["bpmn:Error"], + "properties": [ + { + "name": "flowable:errorMessage", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "PotentialStarter", + "superClass": ["Element"], + "properties": [ + { + "name": "resourceAssignmentExpression", + "type": "bpmn:ResourceAssignmentExpression" + } + ] + }, + { + "name": "FormSupported", + "isAbstract": true, + "extends": ["bpmn:StartEvent", "bpmn:UserTask"], + "properties": [ + { + "name": "formHandlerClass", + "isAttr": true, + "type": "String" + }, + { + "name": "formKey", + "isAttr": true, + "type": "String" + }, + { + "name": "formType", + "isAttr": true, + "type": "String" + }, + { + "name": "formReadOnly", + "isAttr": true, + "type": "Boolean", + "default": false + }, + { + "name": "formInit", + "isAttr": true, + "type": "Boolean", + "default": true + } + ] + }, + { + "name": "TemplateSupported", + "isAbstract": true, + "extends": ["bpmn:Process", "bpmn:FlowElement"], + "properties": [ + { + "name": "modelerTemplate", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Initiator", + "isAbstract": true, + "extends": ["bpmn:StartEvent"], + "properties": [ + { + "name": "initiator", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ScriptTask", + "isAbstract": true, + "extends": ["bpmn:ScriptTask"], + "properties": [ + { + "name": "resultVariable", + "isAttr": true, + "type": "String" + }, + { + "name": "resource", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Process", + "isAbstract": true, + "extends": ["bpmn:Process"], + "properties": [ + { + "name": "candidateStarterGroups", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateStarterUsers", + "isAttr": true, + "type": "String" + }, + { + "name": "versionTag", + "isAttr": true, + "type": "String" + }, + { + "name": "historyTimeToLive", + "isAttr": true, + "type": "String" + }, + { + "name": "isStartableInTasklist", + "isAttr": true, + "type": "Boolean", + "default": true + }, + { + "name": "processCategory", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "EscalationEventDefinition", + "isAbstract": true, + "extends": ["bpmn:EscalationEventDefinition"], + "properties": [ + { + "name": "escalationCodeVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "FormalExpression", + "isAbstract": true, + "extends": ["bpmn:FormalExpression"], + "properties": [ + { + "name": "resource", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Assignable", + "extends": ["bpmn:UserTask"], + "properties": [ + { + "name": "assignee", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateUsers", + "isAttr": true, + "type": "String" + }, + { + "name": "candidateGroups", + "isAttr": true, + "type": "String" + }, + { + "name": "dueDate", + "isAttr": true, + "type": "String" + }, + { + "name": "followUpDate", + "isAttr": true, + "type": "String" + }, + { + "name": "priority", + "isAttr": true, + "type": "String" + }, + { + "name": "userType", + "isAttr": true, + "type": "String" + }, + { + "name": "dataType", + "isAttr": true, + "type": "String" + }, + { + "name": "expId", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Assignee", + "supperClass": "Element", + "meta": { + "allowedIn": ["*"] + }, + "properties": [ + { + "name": "label", + "type": "String", + "isAttr": true + }, + { + "name": "viewId", + "type": "Number", + "isAttr": true + } + ] + }, + { + "name": "CallActivity", + "extends": ["bpmn:CallActivity"], + "properties": [ + { + "name": "calledElementBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "calledElementVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "calledElementVersionTag", + "isAttr": true, + "type": "String" + }, + { + "name": "calledElementTenantId", + "isAttr": true, + "type": "String" + }, + { + "name": "caseRef", + "isAttr": true, + "type": "String" + }, + { + "name": "caseBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "caseVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "caseTenantId", + "isAttr": true, + "type": "String" + }, + { + "name": "variableMappingClass", + "isAttr": true, + "type": "String" + }, + { + "name": "variableMappingDelegateExpression", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ServiceTaskLike", + "extends": [ + "bpmn:ServiceTask", + "bpmn:BusinessRuleTask", + "bpmn:SendTask", + "bpmn:MessageEventDefinition" + ], + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "resultVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "DmnCapable", + "extends": ["bpmn:BusinessRuleTask"], + "properties": [ + { + "name": "decisionRef", + "isAttr": true, + "type": "String" + }, + { + "name": "decisionRefBinding", + "isAttr": true, + "type": "String", + "default": "latest" + }, + { + "name": "decisionRefVersion", + "isAttr": true, + "type": "String" + }, + { + "name": "mapDecisionResult", + "isAttr": true, + "type": "String", + "default": "resultList" + }, + { + "name": "decisionRefTenantId", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "ExternalCapable", + "extends": ["flowable:ServiceTaskLike"], + "properties": [ + { + "name": "type", + "isAttr": true, + "type": "String" + }, + { + "name": "topic", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "TaskPriorized", + "extends": ["bpmn:Process", "flowable:ExternalCapable"], + "properties": [ + { + "name": "taskPriority", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Properties", + "superClass": ["Element"], + "meta": { + "allowedIn": ["*"] + }, + "properties": [ + { + "name": "values", + "type": "Property", + "isMany": true + } + ] + }, + { + "name": "Property", + "superClass": ["Element"], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "value", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "Buttons", + "superClass": ["Element"], + "meta": { + "allowedIn": ["*"] + }, + "properties": [ + { + "name": "values", + "type": "Button", + "isMany": true + } + ] + }, + { + "name": "Button", + "superClass": ["Element"], + "properties": [ + { + "name": "id", + "type": "Integer", + "isAttr": true + }, + { + "name": "label", + "type": "String", + "isAttr": true + }, + { + "name": "code", + "type": "String", + "isAttr": true + }, + { + "name": "icon", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "size", + "type": "String", + "isAttr": true + }, + { + "name": "click", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "Assignee", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:UserTask"] + }, + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "value", + "type": "String", + "isAttr": true + }, + { + "name": "condition", + "type": "String", + "isAttr": true + }, + { + "name": "operationType", + "type": "String", + "isAttr": true + }, + { + "name": "sort", + "type": "Integer", + "isAttr": true + } + ] + }, + { + "name": "Connector", + "superClass": ["Element"], + "meta": { + "allowedIn": ["flowable:ServiceTaskLike"] + }, + "properties": [ + { + "name": "inputOutput", + "type": "InputOutput" + }, + { + "name": "connectorId", + "type": "String" + } + ] + }, + { + "name": "InputOutput", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:FlowNode", "flowable:Connector"] + }, + "properties": [ + { + "name": "inputOutput", + "type": "InputOutput" + }, + { + "name": "connectorId", + "type": "String" + }, + { + "name": "inputParameters", + "isMany": true, + "type": "InputParameter" + }, + { + "name": "outputParameters", + "isMany": true, + "type": "OutputParameter" + } + ] + }, + { + "name": "InputOutputParameter", + "properties": [ + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + }, + { + "name": "definition", + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "InputOutputParameterDefinition", + "isAbstract": true + }, + { + "name": "List", + "superClass": ["InputOutputParameterDefinition"], + "properties": [ + { + "name": "items", + "isMany": true, + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "Map", + "superClass": ["InputOutputParameterDefinition"], + "properties": [ + { + "name": "entries", + "isMany": true, + "type": "Entry" + } + ] + }, + { + "name": "Entry", + "properties": [ + { + "name": "key", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + }, + { + "name": "definition", + "type": "InputOutputParameterDefinition" + } + ] + }, + { + "name": "Value", + "superClass": ["InputOutputParameterDefinition"], + "properties": [ + { + "name": "id", + "isAttr": true, + "type": "String" + }, + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "Script", + "superClass": ["InputOutputParameterDefinition"], + "properties": [ + { + "name": "scriptFormat", + "isAttr": true, + "type": "String" + }, + { + "name": "resource", + "isAttr": true, + "type": "String" + }, + { + "name": "value", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "Field", + "superClass": ["Element"], + "meta": { + "allowedIn": [ + "flowable:ServiceTaskLike", + "flowable:ExecutionListener", + "flowable:TaskListener", + "bpmn:ServiceTask" + ] + }, + "properties": [ + { + "name": "name", + "isAttr": true, + "type": "String" + }, + { + "name": "expression", + "type": "String" + }, + { + "name": "stringValue", + "isAttr": true, + "type": "String" + }, + { + "name": "string", + "type": "String" + }, + { + "name": "htmlVar", + "type": "Expression" + } + ] + }, + { + "name": "ChildField", + "superClass": ["Element"], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "required", + "type": "String", + "isAttr": true + }, + { + "name": "readable", + "type": "String", + "isAttr": true + }, + { + "name": "writable", + "type": "String", + "isAttr": true + }, + { + "name": "variable", + "type": "String", + "isAttr": true + }, + { + "name": "expression", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "default", + "type": "String", + "isAttr": true + }, + { + "name": "values", + "type": "Value", + "isMany": true + } + ] + }, + { + "name": "InputParameter", + "superClass": ["InputOutputParameter"] + }, + { + "name": "OutputParameter", + "superClass": ["InputOutputParameter"] + }, + { + "name": "Collectable", + "isAbstract": true, + "extends": ["bpmn:MultiInstanceLoopCharacteristics"], + "superClass": ["flowable:AsyncCapable"], + "properties": [ + { + "name": "collection", + "isAttr": true, + "type": "String" + }, + { + "name": "elementVariable", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "FailedJobRetryTimeCycle", + "superClass": ["Element"], + "meta": { + "allowedIn": [ + "flowable:AsyncCapable", + "bpmn:MultiInstanceLoopCharacteristics" + ] + }, + "properties": [ + { + "name": "body", + "isBody": true, + "type": "String" + } + ] + }, + { + "name": "ExecutionListener", + "superClass": ["Element"], + "meta": { + "allowedIn": [ + "bpmn:Task", + "bpmn:ServiceTask", + "bpmn:UserTask", + "bpmn:BusinessRuleTask", + "bpmn:ScriptTask", + "bpmn:ReceiveTask", + "bpmn:ManualTask", + "bpmn:ExclusiveGateway", + "bpmn:SequenceFlow", + "bpmn:ParallelGateway", + "bpmn:InclusiveGateway", + "bpmn:EventBasedGateway", + "bpmn:StartEvent", + "bpmn:IntermediateCatchEvent", + "bpmn:IntermediateThrowEvent", + "bpmn:EndEvent", + "bpmn:BoundaryEvent", + "bpmn:CallActivity", + "bpmn:SubProcess", + "bpmn:Process" + ] + }, + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "listenerType", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "event", + "isAttr": true, + "type": "String" + }, + { + "name": "script", + "type": "Script" + }, + { + "name": "fields", + "type": "Field", + "isMany": true + } + ] + }, + { + "name": "TaskListener", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:UserTask"] + }, + "properties": [ + { + "name": "expression", + "isAttr": true, + "type": "String" + }, + { + "name": "class", + "isAttr": true, + "type": "String" + }, + { + "name": "delegateExpression", + "isAttr": true, + "type": "String" + }, + { + "name": "event", + "isAttr": true, + "type": "String" + }, + { + "name": "script", + "type": "Script" + }, + { + "name": "fields", + "type": "Field", + "isMany": true + } + ] + }, + { + "name": "FormProperty", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:StartEvent", "bpmn:UserTask"] + }, + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "required", + "type": "String", + "isAttr": true + }, + { + "name": "readable", + "type": "String", + "isAttr": true + }, + { + "name": "writable", + "type": "String", + "isAttr": true + }, + { + "name": "variable", + "type": "String", + "isAttr": true + }, + { + "name": "expression", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "default", + "type": "String", + "isAttr": true + }, + { + "name": "values", + "type": "Value", + "isMany": true + }, + { + "name": "children", + "type": "ChildField", + "isMany": true + }, + { + "name": "extensionElements", + "type": "bpmn:ExtensionElements", + "isMany": true + } + ] + }, + { + "name": "FormData", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:StartEvent", "bpmn:UserTask"] + }, + "properties": [ + { + "name": "fields", + "type": "FormField", + "isMany": true + }, + { + "name": "businessKey", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "FormField", + "superClass": ["Element"], + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "label", + "type": "String", + "isAttr": true + }, + { + "name": "type", + "type": "String", + "isAttr": true + }, + { + "name": "datePattern", + "type": "String", + "isAttr": true + }, + { + "name": "defaultValue", + "type": "String", + "isAttr": true + }, + { + "name": "properties", + "type": "Properties" + }, + { + "name": "validation", + "type": "Validation" + }, + { + "name": "values", + "type": "Value", + "isMany": true + } + ] + }, + { + "name": "Validation", + "superClass": ["Element"], + "properties": [ + { + "name": "constraints", + "type": "Constraint", + "isMany": true + } + ] + }, + { + "name": "Constraint", + "superClass": ["Element"], + "properties": [ + { + "name": "name", + "type": "String", + "isAttr": true + }, + { + "name": "config", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "ConditionalEventDefinition", + "isAbstract": true, + "extends": ["bpmn:ConditionalEventDefinition"], + "properties": [ + { + "name": "variableName", + "isAttr": true, + "type": "String" + }, + { + "name": "variableEvent", + "isAttr": true, + "type": "String" + } + ] + }, + { + "name": "Condition", + "superClass": ["Element"], + "meta": { + "allowedIn": ["bpmn:SequenceFlow"] + }, + "properties": [ + { + "name": "id", + "type": "String", + "isAttr": true + }, + { + "name": "field", + "type": "String", + "isAttr": true + }, + { + "name": "compare", + "type": "String", + "isAttr": true + }, + { + "name": "value", + "type": "String", + "isAttr": true + }, + { + "name": "logic", + "type": "String", + "isAttr": true + }, + { + "name": "sort", + "type": "Integer", + "isAttr": true + } + ] + } + ], + "emumerations": [] +} diff --git a/src/components/Process/flowable/init.js b/src/components/Process/flowable/init.js new file mode 100644 index 0000000..2f118d2 --- /dev/null +++ b/src/components/Process/flowable/init.js @@ -0,0 +1,33 @@ + +function randomStr() { + return Math.random().toString(36).slice(-8) +} + +export default function() { + return ` + + + + + + + + + + + + + + + + ` +} diff --git a/src/components/Process/index.vue b/src/components/Process/index.vue new file mode 100644 index 0000000..636ae34 --- /dev/null +++ b/src/components/Process/index.vue @@ -0,0 +1,351 @@ + + + + + diff --git a/src/components/Process/lang/zh.js b/src/components/Process/lang/zh.js new file mode 100644 index 0000000..b3333a1 --- /dev/null +++ b/src/components/Process/lang/zh.js @@ -0,0 +1,277 @@ +// https://github.com/bpmn-io/bpmn-js-i18n/blob/master/translations/zn.js +export default { + // Labels + 'Activate the global connect tool': '激活全局连接工具', + 'Append {type}': '添加 {type}', + 'Append Task': '添加任务', + 'Append Gateway': '添加网关', + 'Append EndEvent': '添加结束事件', + 'Append StartEvent': '添加开始事件', + "Append Intermediate/Boundary Event": '添加边界事件', + 'Add Lane above': '在上面添加道', + 'Divide into two Lanes': '分割成两个道', + 'Divide into three Lanes': '分割成三个道', + 'Add Lane below': '在下面添加道', + 'Append compensation activity': '追加补偿活动', + 'Change type': '修改类型', + 'Connect using Association': '使用关联连接', + 'Connect using Sequence/MessageFlow or Association': '使用顺序/消息流或者关联连接', + 'Connect using DataInputAssociation': '使用数据输入关联连接', + 'Remove': '移除', + 'Activate the hand tool': '激活抓手工具', + 'Activate the lasso tool': '激活套索工具', + 'Activate the create/remove space tool': '激活创建/删除空间工具', + 'Create expanded SubProcess': '创建扩展子过程', + 'Create IntermediateThrowEvent/BoundaryEvent': '创建中间抛出事件/边界事件', + 'Create Pool/Participant': '创建池/参与者', + 'Parallel Multi Instance': '并行多重事件', + 'Sequential Multi Instance': '时序多重事件', + 'DataObjectReference': '数据对象参考', + 'DataStoreReference': '数据存储参考', + 'Loop': '循环', + 'Ad-hoc': '即席', + 'Create {type}': '创建 {type}', + 'Task': '任务', + 'Send Task': '发送任务', + 'Receive Task': '接收任务', + 'User Task': '用户任务', + 'Manual Task': '手工任务', + 'Business Rule Task': '业务规则任务', + 'Service Task': '服务任务', + 'Script Task': '脚本任务', + 'Call Activity': '调用活动', + 'Sub Process (collapsed)': '子流程(折叠的)', + 'Sub Process (expanded)': '子流程(展开的)', + 'Start Event': '开始事件', + 'StartEvent': '开始事件', + 'Intermediate Throw Event': '中间事件', + 'End Event': '结束事件', + 'EndEvent': '结束事件', + 'Create Gateway': '创建网关', + 'Create Intermediate/Boundary Event': '创建中间/边界事件', + 'Message Start Event': '消息开始事件', + 'Timer Start Event': '定时开始事件', + 'Conditional Start Event': '条件开始事件', + 'Signal Start Event': '信号开始事件', + 'Error Start Event': '错误开始事件', + 'Escalation Start Event': '升级开始事件', + 'Compensation Start Event': '补偿开始事件', + 'Message Start Event (non-interrupting)': '消息开始事件(非中断)', + 'Timer Start Event (non-interrupting)': '定时开始事件(非中断)', + 'Conditional Start Event (non-interrupting)': '条件开始事件(非中断)', + 'Signal Start Event (non-interrupting)': '信号开始事件(非中断)', + 'Escalation Start Event (non-interrupting)': '升级开始事件(非中断)', + 'Message Intermediate Catch Event': '消息中间捕获事件', + 'Message Intermediate Throw Event': '消息中间抛出事件', + 'Timer Intermediate Catch Event': '定时中间捕获事件', + 'Escalation Intermediate Throw Event': '升级中间抛出事件', + 'Conditional Intermediate Catch Event': '条件中间捕获事件', + 'Link Intermediate Catch Event': '链接中间捕获事件', + 'Link Intermediate Throw Event': '链接中间抛出事件', + 'Compensation Intermediate Throw Event': '补偿中间抛出事件', + 'Signal Intermediate Catch Event': '信号中间捕获事件', + 'Signal Intermediate Throw Event': '信号中间抛出事件', + 'Message End Event': '消息结束事件', + 'Escalation End Event': '定时结束事件', + 'Error End Event': '错误结束事件', + 'Cancel End Event': '取消结束事件', + 'Compensation End Event': '补偿结束事件', + 'Signal End Event': '信号结束事件', + 'Terminate End Event': '终止结束事件', + 'Message Boundary Event': '消息边界事件', + 'Message Boundary Event (non-interrupting)': '消息边界事件(非中断)', + 'Timer Boundary Event': '定时边界事件', + 'Timer Boundary Event (non-interrupting)': '定时边界事件(非中断)', + 'Escalation Boundary Event': '升级边界事件', + 'Escalation Boundary Event (non-interrupting)': '升级边界事件(非中断)', + 'Conditional Boundary Event': '条件边界事件', + 'Conditional Boundary Event (non-interrupting)': '条件边界事件(非中断)', + 'Error Boundary Event': '错误边界事件', + 'Cancel Boundary Event': '取消边界事件', + 'Signal Boundary Event': '信号边界事件', + 'Signal Boundary Event (non-interrupting)': '信号边界事件(非中断)', + 'Compensation Boundary Event': '补偿边界事件', + 'Exclusive Gateway': '互斥网关', + 'Parallel Gateway': '并行网关', + 'Inclusive Gateway': '相容网关', + 'Complex Gateway': '复杂网关', + 'Event based Gateway': '事件网关', + 'Transaction': '转运', + 'Sub Process': '子流程', + 'Event Sub Process': '事件子流程', + 'Collapsed Pool': '折叠池', + 'Expanded Pool': '展开池', + // Errors + 'no parent for {element} in {parent}': '在{parent}里,{element}没有父类', + 'no shape type specified': '没有指定的形状类型', + 'flow elements must be children of pools/participants': '流元素必须是池/参与者的子类', + 'out of bounds release': 'out of bounds release', + 'more than {count} child lanes': '子道大于{count} ', + 'element required': '元素不能为空', + 'diagram not part of Definitions': '流程图不符合bpmn规范', + 'no diagram to display': '没有可展示的流程图', + 'no process or collaboration to display': '没有可展示的流程/协作', + 'element {element} referenced by {referenced}#{property} not yet drawn': '由{referenced}#{property}引用的{element}元素仍未绘制', + 'already rendered {element}': '{element} 已被渲染', + 'failed to import {element}': '导入{element}失败', + // 属性面板的参数 + 'Id': '标识', + 'Name': '名称', + 'General': '常规', + 'Details': '详情', + 'Message Name': '消息名称', + 'Message': '消息', + 'Initiator': '创建者', + 'Asynchronous Continuations': '持续异步', + 'Asynchronous Before': '异步前', + 'Asynchronous After': '异步后', + 'Job Configuration': '工作配置', + 'Exclusive': '排除', + 'Job Priority': '工作优先级', + 'Retry Time Cycle': '重试时间周期', + 'Documentation': '文档', + 'Element Documentation': '元素文档', + 'History Configuration': '历史配置', + 'History Time To Live': '历史的生存时间', + 'Forms': '表单', + 'Form Key': '表单key', + 'Form Fields': '表单字段', + 'Business Key': '业务key', + 'Form Field': '表单字段', + 'ID': '编号', + 'Type': '类型', + 'Label': '名称', + 'Default Value': '默认值', + 'Validation': '校验', + 'Add Constraint': '添加约束', + 'Config': '配置', + 'Properties': '属性', + 'Add Property': '添加属性', + 'Value': '值', + 'Listeners': '监听器', + 'Execution Listener': '执行监听', + 'Event Type': '事件类型', + 'Listener Type': '监听器类型', + 'Java Class': 'Java类', + 'Expression': '表达式', + 'Must provide a value': '必须提供一个值', + 'Delegate Expression': '代理表达式', + 'Script': '脚本', + 'Script Format': '脚本格式', + 'Script Type': '脚本类型', + 'Inline Script': '内联脚本', + 'External Script': '外部脚本', + 'Resource': '资源', + 'Field Injection': '字段注入', + 'Extensions': '扩展', + 'Input/Output': '输入/输出', + 'Input Parameters': '输入参数', + 'Output Parameters': '输出参数', + 'Parameters': '参数', + 'Output Parameter': '输出参数', + 'Timer Definition Type': '定时器定义类型', + 'Timer Definition': '定时器定义', + 'Date': '日期', + 'Duration': '持续', + 'Cycle': '循环', + 'Signal': '信号', + 'Signal Name': '信号名称', + 'Escalation': '升级', + 'Error': '错误', + 'Link Name': '链接名称', + 'Condition': '条件名称', + 'Variable Name': '变量名称', + 'Variable Event': '变量事件', + 'Specify more than one variable change event as a comma separated list.': '多个变量事件以逗号隔开', + 'Wait for Completion': '等待完成', + 'Activity Ref': '活动参考', + 'Version Tag': '版本标签', + 'Executable': '可执行文件', + 'External Task Configuration': '扩展任务配置', + 'Task Priority': '任务优先级', + 'External': '外部', + 'Connector': '连接器', + 'Must configure Connector': '必须配置连接器', + 'Connector Id': '连接器编号', + 'Implementation': '实现方式', + 'Field Injections': '字段注入', + 'Fields': '字段', + 'Result Variable': '结果变量', + 'Topic': '主题', + 'Configure Connector': '配置连接器', + 'Input Parameter': '输入参数', + 'Assignee': '代理人', + 'Candidate Users': '候选用户', + 'Candidate Groups': '候选组', + 'Due Date': '到期时间', + 'Follow Up Date': '跟踪日期', + 'Priority': '优先级', + 'The follow up date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)': '跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00', + 'The due date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)': '跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00', + 'Variables': '变量', + // 流程校验器翻译字段 + '{errors} Errors, {warnings} Warnings': '{errors} 错误, {warnings} 警告', + 'Element is missing label/name': '元素未设置 label 标签', + 'Sequence flow is missing condition': '检查从条件分叉网关或任务节点传出的序列流是否为默认流或具有附加条件', + 'is missing end event': '检查每个流程范围内是否存在结束事件', + 'Start event is missing event definition': '检查流程中是否具有开始事件', + 'Incoming flows do not join': '检查事件或者任务节点是否具有隐式的流转规则,默认事件和任务只能有一个流入条件', + 'Element has disallowed type': '元素具有不允许的类型', + 'Element is missing bpmndi': '检查可见的元素是否都具有对应的 DI 标签', + 'Element is not connected': '检查节点是否正常连接', + 'SequenceFlow is a duplicate': 'SequenceFlow重复', + 'Duplicate outgoing sequence flows': '重复的传出序列流', + 'Duplicate incoming sequence flows': '重复的传入序列流', + 'Gateway forks and joins': '检查网关是否同时有多个流入和流出规则', + 'Flow splits implicitly': '检查网关或者任务节点是否有多个流出路径且没有配置条件', + 'has multiple blank start events': '检查流程内是否有多个开始事件', + 'Event has multiple event definitions': '验证事件是否包含有超过一个事件定义的规则', + 'is missing start event': '检查流程内是否存在开始事件', + 'Process is missing end event': '检查流程内是否存在结束事件', + 'Start event must be blank': '检查子流程的开始事件是否具有启动条件', + 'Gateway is superfluous. It only has one source and target.': '检查网关是否同时只有一个流入和流出路径,否则需要移除', +} + +// +// export const NodeName = { +// 'bpmn:Process': '流程', +// 'bpmn:StartEvent': '开始事件', +// 'bpmn:IntermediateThrowEvent': '中间事件', +// 'bpmn:Task': '任务', +// 'bpmn:SendTask': '发送任务', +// 'bpmn:ReceiveTask': '接收任务', +// 'bpmn:UserTask': '用户任务', +// 'bpmn:ManualTask': '手工任务', +// 'bpmn:BusinessRuleTask': '业务规则任务', +// 'bpmn:ServiceTask': '服务任务', +// 'bpmn:ScriptTask': '脚本任务', +// 'bpmn:EndEvent': '结束事件', +// 'bpmn:SequenceFlow': '流程线', +// 'bpmn:ExclusiveGateway': '互斥网关', +// 'bpmn:ParallelGateway': '并行网关', +// 'bpmn:InclusiveGateway': '相容网关', +// 'bpmn:ComplexGateway': '复杂网关', +// 'bpmn:EventBasedGateway': '事件网关' +// } + + +export const NodeName = { + 'Process': '流程', + 'StartEvent': '开始事件', + 'IntermediateThrowEvent': '中间事件', + 'Task': '任务', + 'SendTask': '发送任务', + 'ReceiveTask': '接收任务', + 'UserTask': '用户任务', + 'ManualTask': '手工任务', + 'BusinessRuleTask': '业务规则任务', + 'ServiceTask': '服务任务', + 'ScriptTask': '脚本任务', + 'EndEvent': '结束事件', + 'SequenceFlow': '流程线', + 'ExclusiveGateway': '互斥网关', + 'ParallelGateway': '并行网关', + 'InclusiveGateway': '相容网关', + 'ComplexGateway': '复杂网关', + 'EventBasedGateway': '事件网关' +} diff --git a/src/components/Process/panel/ButtonsPanel.vue b/src/components/Process/panel/ButtonsPanel.vue new file mode 100644 index 0000000..eea4d46 --- /dev/null +++ b/src/components/Process/panel/ButtonsPanel.vue @@ -0,0 +1,139 @@ + + + diff --git a/src/components/Process/panel/PropertiesPanel.vue b/src/components/Process/panel/PropertiesPanel.vue new file mode 100644 index 0000000..dd02fee --- /dev/null +++ b/src/components/Process/panel/PropertiesPanel.vue @@ -0,0 +1,139 @@ + + + diff --git a/src/components/Process/panel/commonPanel.vue b/src/components/Process/panel/commonPanel.vue new file mode 100644 index 0000000..8574eb6 --- /dev/null +++ b/src/components/Process/panel/commonPanel.vue @@ -0,0 +1,139 @@ + + + diff --git a/src/components/Process/panel/conditionPanel.vue b/src/components/Process/panel/conditionPanel.vue new file mode 100644 index 0000000..1ef1878 --- /dev/null +++ b/src/components/Process/panel/conditionPanel.vue @@ -0,0 +1,175 @@ + + + diff --git a/src/components/Process/panel/executionListener.vue b/src/components/Process/panel/executionListener.vue new file mode 100644 index 0000000..6cdb994 --- /dev/null +++ b/src/components/Process/panel/executionListener.vue @@ -0,0 +1,464 @@ + + + + + diff --git a/src/components/Process/panel/formPanel.vue b/src/components/Process/panel/formPanel.vue new file mode 100644 index 0000000..92c9604 --- /dev/null +++ b/src/components/Process/panel/formPanel.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/components/Process/panel/multiInstance.vue b/src/components/Process/panel/multiInstance.vue new file mode 100644 index 0000000..56e7f66 --- /dev/null +++ b/src/components/Process/panel/multiInstance.vue @@ -0,0 +1,236 @@ + + + + diff --git a/src/components/Process/panel/otherPanel.vue b/src/components/Process/panel/otherPanel.vue new file mode 100644 index 0000000..09e234a --- /dev/null +++ b/src/components/Process/panel/otherPanel.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/components/Process/panel/taskListener.vue b/src/components/Process/panel/taskListener.vue new file mode 100644 index 0000000..8c55477 --- /dev/null +++ b/src/components/Process/panel/taskListener.vue @@ -0,0 +1,501 @@ + + + + diff --git a/src/components/Process/panel/taskPanel.vue b/src/components/Process/panel/taskPanel.vue new file mode 100644 index 0000000..84bfd23 --- /dev/null +++ b/src/components/Process/panel/taskPanel.vue @@ -0,0 +1,407 @@ + + + \ No newline at end of file diff --git a/src/components/Process/style/flow-viewer.scss b/src/components/Process/style/flow-viewer.scss new file mode 100644 index 0000000..2c90d25 --- /dev/null +++ b/src/components/Process/style/flow-viewer.scss @@ -0,0 +1,183 @@ +.my-header { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.flowMsgPopover { + display: none; +} + +.tipBox { + width: 180px; + background: #fff; + border-radius: 4px; + border: 1px solid #ebeef5; + padding: 12px; + + p{ + line-height: 28px; + margin:0; + padding:0; + } +} + +.cell-item { + display: flex; + align-items: center; +} + +// bpmn 画布 logo +//.bjs-powered-by { +// display: none; +//} +.view-mode { + .el-header, .el-aside, .djs-palette, .bjs-powered-by { + display: none; + } + + .el-loading-mask { + background-color: initial; + } + + .el-loading-spinner { + display: none; + } +} + +.containers { + width: 100%; + height: 100%; + + .canvas { + width: 100%; + height: 100%; + background: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+") + } + + .panel { + position: absolute; + right: 0; + top: 50px; + width: 300px; + } + + .load { + margin-right: 10px; + } + + .djs-palette { + left: 0px !important; + top: 0px; + border-top: none; + } + + .djs-container svg { + min-height: 650px; + } + + .overlays-div { + font-size: 10px; + color: red; + width: 100px; + top: -20px !important; + } + + .flow-viewer { + position: relative; + padding: 0; + } + + .flow-viewer .button-group { + display: flex; + position: absolute; + width: auto; + height: auto; + top: 10px; + right: 10px; + } + + // 流程线 + .highlight.djs-shape .djs-visual > :nth-child(1) { + fill: #56bb56 !important; + stroke: #56bb56 !important; + fill-opacity: 0.2 !important; + } + + .highlight.djs-shape .djs-visual > :nth-child(2) { + fill: #56bb56 !important; + } + + .highlight.djs-shape .djs-visual > path { + fill: #56bb56 !important; + fill-opacity: 0.2 !important; + stroke: #56bb56 !important; + } + + .highlight.djs-connection > .djs-visual > path { + stroke: #56bb56 !important; + } + + .highlight-todo.djs-connection > .djs-visual > path { + stroke: #eab24a !important; + stroke-dasharray: 4px !important; + fill-opacity: 0.2 !important; + } + + .highlight-todo.djs-shape .djs-visual > :nth-child(1) { + stroke-dasharray: 5, 5; + stroke-dashoffset: 500; + stroke: #eab24a !important; + fill: rgba(252, 211, 127, 0.2) !important; + } + + @keyframes draw { + 100% { + stroke-dashoffset: 0; + } + } + + .process-status { + position: absolute; + width: auto; + height: auto; + + display: flex; + float: right; + top: 10px; + left: 10px; + font-size: 12px; + + .intro { + color: #303133; + margin-top: 5px; + } + + .finish { + background-color: #E8FFEA; + padding: 4px; + border: 1px solid rgba(0, 180, 42, 0.1); + border-radius: 3px; + color: #56bb56; + margin-right: 8px; + } + + .processing { + background-color: #fcf5ea; + padding: 4px; + border: 1px solid #fce9c7; + border-radius: 3px; + color: #eab24a; + margin-right: 8px; + } + + .todo { + padding: 4px; + background: #ECEDEE; + border: 1px solid rgba(204, 204, 204, 0.1); + border-radius: 3px; + color: #666666; + margin-right: 5px; + } + } +} diff --git a/src/components/Process/style/process-panel.scss b/src/components/Process/style/process-panel.scss new file mode 100644 index 0000000..c41fccc --- /dev/null +++ b/src/components/Process/style/process-panel.scss @@ -0,0 +1,123 @@ +//.process-panel__container { +// box-sizing: border-box; +// padding: 0 8px; +// border-left: 1px solid #eeeeee; +// box-shadow: 0 0 8px #cccccc; +// max-height: 100%; +// overflow-y: scroll; +//} +.panel-tab__title { + font-weight: 600; + padding: 0 8px; + font-size: 1.1em; + line-height: 1.2em; + i { + margin-right: 8px; + font-size: 1.2em; + } +} +.panel-tab__content { + width: 100%; + box-sizing: border-box; + //border-top: 1px solid #eeeeee; + padding: 8px 16px; + .panel-tab__content--title { + display: flex; + justify-content: space-between; + padding-bottom: 8px; + span { + flex: 1; + text-align: left; + } + } +} +.element-property { + width: 100%; + display: flex; + align-items: flex-start; + margin: 8px 0; + .element-property__label { + display: block; + width: 90px; + text-align: right; + overflow: hidden; + padding-right: 12px; + line-height: 32px; + font-size: 14px; + box-sizing: border-box; + } + .element-property__value { + flex: 1; + line-height: 32px; + } + .el-form-item { + width: 100%; + margin-bottom: 0; + padding-bottom: 18px; + } +} +.list-property { + flex-direction: column; + .element-listener-item { + width: 100%; + display: inline-grid; + grid-template-columns: 16px auto 32px 32px; + grid-column-gap: 8px; + } + .element-listener-item + .element-listener-item { + margin-top: 8px; + } +} +.listener-filed__title { + width: 100%; + justify-content: space-between; + align-items: center; + margin-top: 0; + span { + font-size: 14px; + } + i { + margin-right: 8px; + } +} +.element-drawer__button { + margin-top: 8px; + display: inline-flex; + justify-content: space-around; +} +.element-drawer__button > .el-button { + width: 100%; +} + +.element-drawer__button_save { + margin-top: 8px; + width: 100%; + display: inline-flex; + justify-content: space-around; +} +.element-drawer__button_save > .el-button { + width: 100%; +} + +.el-collapse-item__content { + padding-bottom: 0; +} +.el-input.is-disabled .el-input__inner { + color: #999999; +} +.el-form-item.el-form-item--mini { + margin-bottom: 0; + & + .el-form-item { + margin-top: 16px; + } +} +.el-drawer__header{ + margin-bottom: 0; + border-bottom: 1px solid #e8e8e8; + padding: 16px 16px 8px 16px; + font-size: 18px; + color: #303133; +} +.el-drawer__body{ + padding: 10px; +} diff --git a/src/components/Process/viewer/index.vue b/src/components/Process/viewer/index.vue new file mode 100644 index 0000000..8f476aa --- /dev/null +++ b/src/components/Process/viewer/index.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/src/components/QRCodeView/index.d.ts b/src/components/QRCodeView/index.d.ts new file mode 100644 index 0000000..aa04b8e --- /dev/null +++ b/src/components/QRCodeView/index.d.ts @@ -0,0 +1 @@ +declare module 'qrcode'; \ No newline at end of file diff --git a/src/components/QRCodeView/index.vue b/src/components/QRCodeView/index.vue new file mode 100644 index 0000000..f043cf7 --- /dev/null +++ b/src/components/QRCodeView/index.vue @@ -0,0 +1,71 @@ + + + \ No newline at end of file diff --git a/src/components/RightToolbar/index.vue b/src/components/RightToolbar/index.vue new file mode 100644 index 0000000..bb29c3a --- /dev/null +++ b/src/components/RightToolbar/index.vue @@ -0,0 +1,155 @@ + + + \ No newline at end of file diff --git a/src/components/Schema/form.vue b/src/components/Schema/form.vue new file mode 100644 index 0000000..de04c45 --- /dev/null +++ b/src/components/Schema/form.vue @@ -0,0 +1,23 @@ + + \ No newline at end of file diff --git a/src/components/Schema/index.ts b/src/components/Schema/index.ts new file mode 100644 index 0000000..24a2776 --- /dev/null +++ b/src/components/Schema/index.ts @@ -0,0 +1,4 @@ +import SchemaForm from "./form.vue"; +import SchemaTable from "./table.vue"; + +export { SchemaForm, SchemaTable }; \ No newline at end of file diff --git a/src/components/Schema/table.vue b/src/components/Schema/table.vue new file mode 100644 index 0000000..424d2aa --- /dev/null +++ b/src/components/Schema/table.vue @@ -0,0 +1,27 @@ + + \ No newline at end of file diff --git a/src/components/Screenfull/index.vue b/src/components/Screenfull/index.vue new file mode 100644 index 0000000..c899bf1 --- /dev/null +++ b/src/components/Screenfull/index.vue @@ -0,0 +1,20 @@ + + + \ No newline at end of file diff --git a/src/components/SizeSelect/index.vue b/src/components/SizeSelect/index.vue new file mode 100644 index 0000000..61ffa2c --- /dev/null +++ b/src/components/SizeSelect/index.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..3c2db42 --- /dev/null +++ b/src/components/SvgIcon/index.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/components/TransitionVisible/index.vue b/src/components/TransitionVisible/index.vue new file mode 100644 index 0000000..b66fbca --- /dev/null +++ b/src/components/TransitionVisible/index.vue @@ -0,0 +1,209 @@ + + + diff --git a/src/components/TreeSelect/index.vue b/src/components/TreeSelect/index.vue new file mode 100644 index 0000000..6b5445f --- /dev/null +++ b/src/components/TreeSelect/index.vue @@ -0,0 +1,145 @@ + + + + + \ No newline at end of file diff --git a/src/components/UploadComponents/ChunkUpload/TaskQueue.ts b/src/components/UploadComponents/ChunkUpload/TaskQueue.ts new file mode 100644 index 0000000..3178099 --- /dev/null +++ b/src/components/UploadComponents/ChunkUpload/TaskQueue.ts @@ -0,0 +1,246 @@ +import { nextTick } from "vue"; + +export type TaskFn = (signal?: AbortSignal) => Promise; +export type ErrorMode = 'continue' | 'abort'; + +export interface TaskQueueOptions { + concurrency?: number; // 并发数,默认 4 + errorMode?: ErrorMode; // 出错策略:继续 or 中止 + autoStart?: boolean; // add 时是否自动启动,默认 true +} + +export interface AddTaskOptions { + priority?: number; // 优先级,数值越大越先执行,默认 0 + signal?: AbortSignal; // 任务级取消信号 + timeout?: number; // 单任务超时(ms) + id?: string; // 任务标识,便于调试 +} + +class AbortError extends Error { + name = 'AbortError'; + constructor(message = 'Aborted') { + super(message); + } +} + +interface QueueItem { + id?: string; + priority: number; + fn: TaskFn; + resolve: (v: T) => void; + reject: (e: unknown) => void; + signal?: AbortSignal; + timeout?: number; + addedAt: number; +} + +export class TaskQueue { + /** 最大并发数 */ + private concurrency!: number; // 在构造函数中设置 + + /** 当前正在执行的任务数 */ + private runningCount = 0; + + /** 待执行任务队列(使用 unknown 以避免泛型入队时的类型不兼容) */ + private taskQueue: QueueItem[] = []; + + /** 出错策略 */ + private errorMode: ErrorMode = 'abort'; + + /** 自动启动 */ + private autoStart: boolean = true; + + /** 是否暂停调度 */ + private paused = false; + + /** 是否已中止(如因错误或手动 abort) */ + private aborted = false; + private abortReason?: string; + + /** 错误收集(errorMode=continue 时有用) */ + private errors: unknown[] = []; + + /** empty/idle 等待者 */ + private emptyWaiters: Array<() => void> = []; + private idleWaiters: Array<() => void> = []; + + constructor(options: number | TaskQueueOptions = 4) { + if (typeof options === 'number') { + this.concurrency = Math.max(1, options); + this.errorMode = 'abort'; + this.autoStart = true; + } else { + this.concurrency = Math.max(1, options.concurrency ?? 4); + this.errorMode = options.errorMode ?? 'abort'; + this.autoStart = options.autoStart ?? true; + } + } + + // 状态只读属性 + get size() { return this.taskQueue.length; } + get pending() { return this.runningCount; } + get isPaused() { return this.paused; } + get isAborted() { return this.aborted; } + get collectedErrors() { return this.errors.slice(); } + + /** + * 添加任务(必须是函数),返回该任务自身的 Promise。 + */ + public add(fn: TaskFn, opts: AddTaskOptions = {}): Promise { + return new Promise((resolve, reject) => { + if (this.aborted) { + reject(new AbortError(this.abortReason || 'Queue aborted')); + return; + } + + const item: QueueItem = { + id: opts.id, + priority: opts.priority ?? 0, + fn, + resolve, + reject, + signal: opts.signal, + timeout: opts.timeout, + addedAt: Date.now(), + }; + + this.enqueue(item as unknown as QueueItem); + if (this.autoStart && !this.paused) this.runNext(); + }); + } + + /** 批量添加 */ + public addAll(fns: Array>, opts?: AddTaskOptions): Promise[] { + return fns.map((fn) => this.add(fn, opts)); + } + + /** 等待队列空(无排队任务) */ + public onEmpty(): Promise { + if (this.size === 0) return Promise.resolve(); + return new Promise((resolve) => this.emptyWaiters.push(resolve)); + } + + /** 等待完全空闲(无排队、无运行中) => 等待所有任务完成 */ + public waitAll(): Promise { + if (this.size === 0 && this.runningCount === 0) return Promise.resolve(); + return new Promise((resolve) => this.idleWaiters.push(resolve)); + } + + /** 暂停调度 */ + public pause() { this.paused = true; } + + /** 恢复调度 */ + public resume() { + if (!this.paused) return; + this.paused = false; + this.runNext(); + } + + /** 手动中止:清空剩余队列并拒绝它们 */ + public abort(reason = 'Aborted by user') { + if (this.aborted) return; + this.aborted = true; + this.abortReason = reason; + this.clear(new AbortError(reason)); + } + + /** 清空待执行任务(不影响已在运行中的任务) */ + public clear(err: unknown = new AbortError('Cleared')) { + const pending = this.taskQueue.splice(0, this.taskQueue.length); + for (const item of pending) item.reject(err); + this.notifyEmptyIfNeeded(); + this.notifyIdleIfNeeded(); + } + + /** 动态调整并发度 */ + public setConcurrency(n: number) { + this.concurrency = Math.max(1, n | 0); + this.runNext(); + } + + /** 修改错误策略 */ + public setErrorMode(mode: ErrorMode) { this.errorMode = mode; } + + /** 入队(按优先级降序,稳定插入) */ + private enqueue(item: QueueItem) { + const idx = this.taskQueue.findIndex((q) => q.priority < item.priority); + if (idx === -1) this.taskQueue.push(item); + else this.taskQueue.splice(idx, 0, item); + } + + /** 调度下一批任务(在下一帧启动) */ + private runNext() { + if (this.paused || this.aborted) return; + + while (this.runningCount < this.concurrency && this.taskQueue.length > 0) { + const item = this.taskQueue.shift()!; + if (this.taskQueue.length === 0) this.notifyEmptyIfNeeded(); + + this.runningCount++; + nextTick(() => { + this.execute(item) + .catch(() => { /* 错误在 execute 中处理 */ }) + .finally(() => { + this.runningCount--; + if (!this.aborted) this.runNext(); + this.notifyIdleIfNeeded(); + }); + }); + } + } + + /** 实际执行(处理 signal、timeout、错误策略) */ + private async execute(item: QueueItem): Promise { + if (item.signal?.aborted) { + item.reject(new AbortError('Task aborted before start')); + return; + } + + let timer: number | undefined; + const onAbort = () => { + if (timer) clearTimeout(timer); + item.reject(new AbortError('Task aborted')); + }; + if (item.signal) item.signal.addEventListener('abort', onAbort, { once: true }); + + if (item.timeout && item.timeout > 0) { + timer = window.setTimeout(() => { + item.reject(new Error(`Task timeout after ${item.timeout}ms`)); + }, item.timeout); + } + + try { + const result = await item.fn(item.signal); + if (timer) clearTimeout(timer); + (item.resolve as (v: unknown) => void)(result); + } catch (err) { + if (timer) clearTimeout(timer); + this.errors.push(err); + item.reject(err); + + if (this.errorMode === 'abort' && !this.aborted) { + this.aborted = true; + this.abortReason = 'Aborted due to previous error'; + this.clear(err instanceof Error ? err : new Error(String(err))); + } + } finally { + if (item.signal) item.signal.removeEventListener('abort', onAbort); + } + } + + private notifyEmptyIfNeeded() { + if (this.taskQueue.length === 0 && this.emptyWaiters.length) { + const callbacks = this.emptyWaiters.splice(0, this.emptyWaiters.length); + for (const cb of callbacks) cb(); + } + } + + private notifyIdleIfNeeded() { + if (this.taskQueue.length === 0 && this.runningCount === 0 && this.idleWaiters.length) { + const callbacks = this.idleWaiters.splice(0, this.idleWaiters.length); + for (const cb of callbacks) cb(); + } + } +} + +export default TaskQueue; \ No newline at end of file diff --git a/src/components/UploadComponents/ChunkUpload/index.ts b/src/components/UploadComponents/ChunkUpload/index.ts new file mode 100644 index 0000000..11cf516 --- /dev/null +++ b/src/components/UploadComponents/ChunkUpload/index.ts @@ -0,0 +1,87 @@ +import { completeMultipartUpload, initMultipartUpload, uploadFileChunk } from "@/api/file/info"; +import TaskQueue from "./TaskQueue"; +import { computed, ref } from "vue"; + +type Chunk = { + partNumber: number; + chunk: Blob; +}; + +export function useChunkUpload(file?: File, options?: { chunkSize?: number; concurrency?: number }) { + const chunkBytes = options?.chunkSize || 5 * 1024 * 1024; // 5MB + const maxConcurrency = options?.concurrency || 3; // 最大并发数 + let uploadId: string | null = null; + let filePath: string | null = null; + let chunks: Chunk[] = []; + let partETags: { partNumber: number; etag: string }[] = []; + + const totalChunks = ref(0); + const uploadedChunks = ref(0); + const uploadPercentage = computed(() => { + if (totalChunks.value === 0) return 0; + return Math.round((uploadedChunks.value / totalChunks.value) * 100); + }); + const uploadMessage = ref(''); + const uploadStatus = ref<'' | 'success' | 'warning' | 'exception'>(''); + async function startUpload() { + uploadMessage.value = '开始初始化上传...'; + uploadStatus.value = ''; + if (!file) throw new Error('未选择文件'); + chunks = []; + partETags = []; + const fileName = file.name; + const fileSize = file.size; + uploadedChunks.value = 0; + const { data } = await initMultipartUpload({ fileName, fileSize }); + uploadId = data.uploadId; + filePath = data.filePath; + + uploadMessage.value = '初始化成功,开始上传分片...'; + for (let i = 0; i < file.size; i += chunkBytes) { + chunks.push({ + partNumber: i + 1, + chunk: file.slice(i, i + chunkBytes) + }); + } + + totalChunks.value = chunks.length; + + const taskQueue = new TaskQueue(maxConcurrency); + chunks.forEach((chunk) => taskQueue.add(async () => { + try { + const { data: chunkResponse } = await uploadFileChunk(uploadId, filePath, chunk.partNumber, chunk.chunk); + if (!chunkResponse || !chunkResponse.etag) { + throw new Error('服务器返回的分片信息无效'); + } + partETags.push({ partNumber: chunk.partNumber, etag: chunkResponse.etag }); + uploadedChunks.value = partETags.length; + uploadMessage.value = `上传分片 ${uploadedChunks.value} / ${totalChunks.value}...`; + } catch (error: any) { + console.error('分片上传失败:', error); + throw new Error(`分片 ${chunk.partNumber} 上传失败: ${error.message}`); + } + })); + await taskQueue.waitAll(); + + uploadMessage.value = '正在合并分片...'; + const formattedPartETags = partETags.map(item => ({ partNumber: item.partNumber, ETag: item.etag })); + await completeMultipartUpload({ + uploadId: uploadId, + filePath: filePath, + fileSize: file.size, + fileName: file.name, + partETags: formattedPartETags, + }); + + uploadMessage.value = '上传完成'; + uploadStatus.value = 'success'; + } + return { + startUpload, + uploadPercentage, + uploadStatus, + uploadMessage, + uploadedChunks, + totalChunks + } +} \ No newline at end of file diff --git a/src/components/UploadComponents/ChunkUpload/index.vue b/src/components/UploadComponents/ChunkUpload/index.vue new file mode 100644 index 0000000..50ed3cd --- /dev/null +++ b/src/components/UploadComponents/ChunkUpload/index.vue @@ -0,0 +1,229 @@ + + + \ No newline at end of file diff --git a/src/components/UploadComponents/FileUpload/index.vue b/src/components/UploadComponents/FileUpload/index.vue new file mode 100644 index 0000000..54973f5 --- /dev/null +++ b/src/components/UploadComponents/FileUpload/index.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/src/components/UploadComponents/ImageUpload/index.vue b/src/components/UploadComponents/ImageUpload/index.vue new file mode 100644 index 0000000..79f165f --- /dev/null +++ b/src/components/UploadComponents/ImageUpload/index.vue @@ -0,0 +1,207 @@ + + + + + \ No newline at end of file diff --git a/src/components/flow/ElInputTag/index.vue b/src/components/flow/ElInputTag/index.vue new file mode 100644 index 0000000..2de5a43 --- /dev/null +++ b/src/components/flow/ElInputTag/index.vue @@ -0,0 +1,191 @@ + + + + + + diff --git a/src/components/flow/Expression/index.vue b/src/components/flow/Expression/index.vue new file mode 100644 index 0000000..6409481 --- /dev/null +++ b/src/components/flow/Expression/index.vue @@ -0,0 +1,129 @@ + + + diff --git a/src/components/flow/Role/index.vue b/src/components/flow/Role/index.vue new file mode 100644 index 0000000..f64b6a1 --- /dev/null +++ b/src/components/flow/Role/index.vue @@ -0,0 +1,179 @@ + + + + diff --git a/src/components/flow/User/index.vue b/src/components/flow/User/index.vue new file mode 100644 index 0000000..81b743d --- /dev/null +++ b/src/components/flow/User/index.vue @@ -0,0 +1,222 @@ + + + + diff --git a/src/components/iFrame/index.vue b/src/components/iFrame/index.vue new file mode 100644 index 0000000..30de127 --- /dev/null +++ b/src/components/iFrame/index.vue @@ -0,0 +1,28 @@ + diff --git a/src/layout/components/Navbar/Breadcrumb.vue b/src/layout/components/Navbar/Breadcrumb.vue new file mode 100644 index 0000000..2a7d37b --- /dev/null +++ b/src/layout/components/Navbar/Breadcrumb.vue @@ -0,0 +1,102 @@ + + + \ No newline at end of file diff --git a/src/layout/components/Navbar/RuoYi/Doc/index.vue b/src/layout/components/Navbar/RuoYi/Doc/index.vue new file mode 100644 index 0000000..51f13cb --- /dev/null +++ b/src/layout/components/Navbar/RuoYi/Doc/index.vue @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/src/layout/components/Navbar/RuoYi/Git/gitee.vue b/src/layout/components/Navbar/RuoYi/Git/gitee.vue new file mode 100644 index 0000000..ec50a56 --- /dev/null +++ b/src/layout/components/Navbar/RuoYi/Git/gitee.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/layout/components/Navbar/RuoYi/Git/github.vue b/src/layout/components/Navbar/RuoYi/Git/github.vue new file mode 100644 index 0000000..28953d4 --- /dev/null +++ b/src/layout/components/Navbar/RuoYi/Git/github.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/layout/components/Navbar/TopNav.vue b/src/layout/components/Navbar/TopNav.vue new file mode 100644 index 0000000..1e8a0c4 --- /dev/null +++ b/src/layout/components/Navbar/TopNav.vue @@ -0,0 +1,252 @@ +/** +* TopNav组件 +* +* 功能说明: +* 1. 顶部导航栏组件,支持显示一级菜单和更多菜单折叠 +* 2. 支持两种菜单来源: +* - 仅显示后端动态路由(关闭TopNav导入本地路由时) +* - 混合显示本地路由和后端动态路由(开启TopNav导入本地路由时) +* 3. 特殊处理: +* - 空路径("")或根路径("/"):显示其第一个子路由为顶级菜单 +* - isTopMenu: 将该路由的第一个子路由显示为顶级菜单 +* +* 配置说明: +* 1. 在系统设置中可配置: +* - 开启/关闭TopNav +* - 开启/关闭TopNav导入本地路由 +* 2. 路由配置中可使用meta.isTopMenu控制菜单行为 +*/ + + + + diff --git a/src/layout/components/Navbar/index.vue b/src/layout/components/Navbar/index.vue new file mode 100644 index 0000000..522a434 --- /dev/null +++ b/src/layout/components/Navbar/index.vue @@ -0,0 +1,213 @@ + + + + + + diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue new file mode 100644 index 0000000..203cc83 --- /dev/null +++ b/src/layout/components/Settings/index.vue @@ -0,0 +1,267 @@ + + + + + + + \ No newline at end of file diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..3eb3c9f --- /dev/null +++ b/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,32 @@ + + + + diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..fc5e552 --- /dev/null +++ b/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,82 @@ + + + + \ No newline at end of file diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..01deffd --- /dev/null +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,96 @@ + + diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..b805c67 --- /dev/null +++ b/src/layout/components/Sidebar/index.vue @@ -0,0 +1,47 @@ + + diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..4be4c8e --- /dev/null +++ b/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,104 @@ + + + + + \ No newline at end of file diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue new file mode 100644 index 0000000..75f295c --- /dev/null +++ b/src/layout/components/TagsView/index.vue @@ -0,0 +1,332 @@ + + + + \ No newline at end of file diff --git a/src/layout/components/index.ts b/src/layout/components/index.ts new file mode 100644 index 0000000..d353dc8 --- /dev/null +++ b/src/layout/components/index.ts @@ -0,0 +1,5 @@ +export { default as AppMain } from './AppMain.vue' +export { default as Navbar } from './Navbar/index.vue' +export { default as Settings } from './Settings/index.vue' +export { default as TagsView } from './TagsView/index.vue' +export { default as Sidebar } from './Sidebar/index.vue' diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..73e4e43 --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,112 @@ + + + \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..0724c96 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,34 @@ +import { createApp } from 'vue' + +import 'element-plus/dist/index.css' +import '@/assets/styles/index.scss' // global css + +import App from './App.vue' +const app = createApp(App) + +import { download } from '@/utils/request' +import { useDict } from '@/utils/dict' +import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi' +// 全局方法挂载 +app.config.globalProperties.useDict = useDict +app.config.globalProperties.download = download +app.config.globalProperties.parseTime = parseTime +app.config.globalProperties.resetForm = resetForm +app.config.globalProperties.handleTree = handleTree +app.config.globalProperties.addDateRange = addDateRange +app.config.globalProperties.selectDictLabel = selectDictLabel +app.config.globalProperties.selectDictLabels = selectDictLabels + + +import router from './router' // 引入路由 +import store from './store' // 引入状态管理 +import plugins from './plugins' // 引入插件 +import directive from './directive' // 引入指令 +import compomemts from './components' // 引入全局组件 +app.use(router).use(store).use(plugins).use(directive).use(compomemts) + +import VForm3 from '@lib/vform/designer.umd.js' //引入VForm 3库 +import '@lib/vform/designer.style.css' //引入VForm3样式 +app.use(VForm3) + +app.mount('#app') \ No newline at end of file diff --git a/src/plugins/auth.ts b/src/plugins/auth.ts new file mode 100644 index 0000000..960de37 --- /dev/null +++ b/src/plugins/auth.ts @@ -0,0 +1,84 @@ +import useUserStore from "@/store/modules/user"; + +function authPermission(permission: string): boolean { + const all_permission = "*:*:*"; + const permissions = useUserStore().permissions; + if (permission && permission.length > 0) { + return permissions.some((v) => { + return all_permission === v || v === permission; + }); + } else { + return false; + } +} + +function authRole(role: string): boolean { + const super_admin = "admin"; + const roles = useUserStore().roles; + if (role && role.length > 0) { + return roles.some((v) => { + return super_admin === v || v === role; + }); + } else { + return false; + } +} + +export default { + /** + * 验证用户是否具备某权限 + * @param permission 权限符 + * @returns + */ + hasPermi(permission: string): boolean { + return authPermission(permission); + }, + /** + * 验证用户是否含有指定权限,只需包含其中一个 + * @param permissions 权限符数组 + * @returns + */ + hasPermiOr(permissions: Array): boolean { + return permissions.some((item) => { + return authPermission(item); + }); + }, + /** + * 验证用户是否含有指定权限,必须全部拥有 + * @param permissions 权限符数组 + * @returns + */ + hasPermiAnd(permissions: Array): boolean { + return permissions.every((item) => { + return authPermission(item); + }); + }, + /** + * 验证用户是否具备某角色 + * @param role 角色 + * @returns + */ + hasRole(role: string): boolean { + return authRole(role); + }, + /** + * 验证用户是否含有指定角色,只需包含其中一个 + * @param roles 角色数组 + * @returns + */ + hasRoleOr(roles: Array): boolean { + return roles.some((item) => { + return authRole(item); + }); + }, + /** + * 验证用户是否含有指定角色,必须全部拥有 + * @param roles 角色数组 + * @returns + */ + hasRoleAnd(roles: Array): boolean { + return roles.every((item) => { + return authRole(item); + }); + }, +}; diff --git a/src/plugins/bus.ts b/src/plugins/bus.ts new file mode 100644 index 0000000..b2c5074 --- /dev/null +++ b/src/plugins/bus.ts @@ -0,0 +1,28 @@ +const event: { [key: string]: Function } = {} +/** 事件句柄 */ +export default { + /** 绑定一个事件 */ + $on(eventName: string, eventFun: Function) { + if (event.hasOwnProperty(eventName)) { + throw new Error(`存在事件 => ${eventName}`) + } else { + event[eventName] = eventFun + } + }, + /** 解绑一个事件 */ + $off(eventName: keyof typeof event) { + if (event.hasOwnProperty(eventName)) { + delete event[eventName] + } else { + throw new Error(`不存在事件 => ${eventName}`) + } + }, + /** 触发一个事件 */ + $emit(eventName: keyof typeof event, ...args: any):T { + if (event.hasOwnProperty(eventName)) { + return event[eventName](...args) + } else { + throw new Error(`不存在事件 => ${eventName}`) + } + } +} diff --git a/src/plugins/cache.ts b/src/plugins/cache.ts new file mode 100644 index 0000000..723eca4 --- /dev/null +++ b/src/plugins/cache.ts @@ -0,0 +1,77 @@ +const sessionCache = { + set (key:string, value:any) { + if (!sessionStorage) { + return + } + if (key != null && value != null) { + sessionStorage.setItem(key, value) + } + }, + get (key:string) { + if (!sessionStorage) { + return null + } + if (key == null) { + return null + } + return sessionStorage.getItem(key) + }, + setJSON (key:string, jsonValue:any) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key:string) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove (key:string) { + sessionStorage.removeItem(key); + } +} +const localCache = { + set (key:string, value:any) { + if (!localStorage) { + return + } + if (key != null && value != null) { + localStorage.setItem(key, value) + } + }, + get (key:string|null) { + if (!localStorage) { + return null + } + if (key == null) { + return null + } + return localStorage.getItem(key) + }, + setJSON (key:string, jsonValue:any) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key:string) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove (key:string) { + localStorage.removeItem(key); + } +} + +export default { + /** + * 会话级缓存 + */ + session: sessionCache, + /** + * 本地缓存 + */ + local: localCache +} diff --git a/src/plugins/download.ts b/src/plugins/download.ts new file mode 100644 index 0000000..967e7db --- /dev/null +++ b/src/plugins/download.ts @@ -0,0 +1,72 @@ +import axios from 'axios' +import { ElMessage } from 'element-plus' +import { saveAs } from 'file-saver' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { blobValidate } from '@/utils/ruoyi' + +const baseURL = import.meta.env.VITE_APP_BASE_API + +export default { + name(name: string, isDelete = true) { + var url = baseURL + "/file/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(async (res) => { + const isLogin = await blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURIComponent(res.headers['download-filename']), undefined) + } else { + this.printErrMsg(res.data); + } + }) + }, + resource(resource: string) { + var url = baseURL + "/file/download/resource?resource=" + encodeURIComponent(resource); + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(async (res) => { + const isLogin = await blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURIComponent(res.headers['download-filename']), undefined) + } else { + this.printErrMsg(res.data); + } + }) + }, + zip(url: string, name: string) { + var url = baseURL + url + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(async (res) => { + const isLogin = await blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data], { type: 'application/zip' }) + this.saveAs(blob, name, undefined) + } else { + this.printErrMsg(res.data); + } + }) + }, + saveAs(text: string | Blob, name: string, opts: any) { + saveAs(text, name, opts); + }, + async printErrMsg(data: Blob) { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + ElMessage.error(errMsg); + } +} + diff --git a/src/plugins/index.ts b/src/plugins/index.ts new file mode 100644 index 0000000..6967e6a --- /dev/null +++ b/src/plugins/index.ts @@ -0,0 +1,33 @@ +import Tab from './tab' +import Auth from './auth' +import Cache from './cache' +import Modal from './modal' +import Download from './download' +import Bus from './bus'; +import Socket from './socketclient' +import type { App } from 'vue' + +export const tab = Tab; +export const auth = Auth; +export const modal = Modal; +export const bus = Bus +export const socket = Socket +export const download = Download +export const cache = Cache + +export default function installPlugins(app: App) { + // 页签操作 + app.config.globalProperties.$tab = tab + // 认证对象 + app.config.globalProperties.$auth = auth + // 缓存对象 + app.config.globalProperties.$cache = cache + // 模态框对象 + app.config.globalProperties.$modal = modal + // 全局事件总线 + app.config.globalProperties.$bus = bus + // socket对象 + app.config.globalProperties.$socket = socket + // 下载文件 + app.config.globalProperties.$download = download +} diff --git a/src/plugins/modal.ts b/src/plugins/modal.ts new file mode 100644 index 0000000..aa26523 --- /dev/null +++ b/src/plugins/modal.ts @@ -0,0 +1,82 @@ +import { ElMessage, ElMessageBox, ElNotification, ElLoading, MessageParamsWithType, ElMessageBoxOptions, NotificationParamsTyped } from 'element-plus' + +let loadingInstance:any; + +export default { + // 消息提示 + msg(content:MessageParamsWithType) { + ElMessage.info(content) + }, + // 错误消息 + msgError(content:MessageParamsWithType) { + ElMessage.error(content) + }, + // 成功消息 + msgSuccess(content:MessageParamsWithType) { + ElMessage.success(content) + }, + // 警告消息 + msgWarning(content:MessageParamsWithType) { + ElMessage.warning(content) + }, + // 弹出提示 + alert(content:ElMessageBoxOptions['message']) { + ElMessageBox.alert(content, "系统提示") + }, + // 错误提示 + alertError(content:ElMessageBoxOptions['message']) { + ElMessageBox.alert(content, "系统提示", { type: 'error' }) + }, + // 成功提示 + alertSuccess(content:ElMessageBoxOptions['message']) { + ElMessageBox.alert(content, "系统提示", { type: 'success' }) + }, + // 警告提示 + alertWarning(content:ElMessageBoxOptions['message']) { + ElMessageBox.alert(content, "系统提示", { type: 'warning' }) + }, + // 通知提示 + notify(content:NotificationParamsTyped | undefined) { + ElNotification.info(content) + }, + // 错误通知 + notifyError(content:NotificationParamsTyped | undefined) { + ElNotification.error(content); + }, + // 成功通知 + notifySuccess(content:NotificationParamsTyped | undefined) { + ElNotification.success(content) + }, + // 警告通知 + notifyWarning(content:NotificationParamsTyped | undefined) { + ElNotification.warning(content) + }, + // 确认窗体 + confirm(content:ElMessageBoxOptions['message']) { + return ElMessageBox.confirm(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 提交内容 + prompt(content:ElMessageBoxOptions['message']) { + return ElMessageBox.prompt(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 打开遮罩层 + loading(content:string) { + loadingInstance = ElLoading.service({ + lock: true, + text: content, + background: "rgba(0, 0, 0, 0.7)", + }) + }, + // 关闭遮罩层 + closeLoading() { + loadingInstance.close(); + } +} diff --git a/src/plugins/socketclient.ts b/src/plugins/socketclient.ts new file mode 100644 index 0000000..d40902d --- /dev/null +++ b/src/plugins/socketclient.ts @@ -0,0 +1,126 @@ +import { Message } from '@/types/Message'; +import { getToken } from '@/utils/auth' +import { StrUtil } from '@/utils/StrUtil'; +let _socket: WebSocket; +let _callback: { [key: string]: (data: any) => void } = {} +type ConnectSocketOption = { + url: string | URL, headers?: { + isToken?: boolean + } +} + + +export default { + /** + * 连接websocket + * 最简单的用法就是传入{url:"ws://demo"} + * 当连接成功后触发回调函数 + */ + connect(options: ConnectSocketOption) { + return new Promise(( + resolve: (client: WebSocket, en: Event) => void, + ) => { + const isToken = (options.headers || {}).isToken === false + let authorization = "" + if (getToken() && !isToken) { + authorization = 'Bearer ' + getToken() + } + if (_socket !== undefined) { + _socket.close() + } + _socket = new WebSocket(options.url + `?Authorization=${encodeURIComponent(authorization)}`); + _socket.onopen = (event: Event) => resolve(_socket, event); + this.onMessage(() => { }); + }) + }, + /** + * 关闭连接 + * @returns 关闭连接的Promise,回调函数只会运行一次 + */ + close() { + return new Promise((resolve) => { + let onclose = _socket.onclose + _socket.onclose = res => { + resolve(res) + _socket.onclose = onclose + } + _socket.close() + }) + }, + /** + * 发送信息 + * @param msg 消息,会被处理成json字符串 + * @returns + */ + send(msg: Message) { + _socket.send(JSON.stringify(msg)) + }, + /** + * 发送信息,可以异步回调 + * @param msg 消息,会被处理成json字符串 + * @returns + */ + asyncSend(msg: Message) { + return new Promise((resolve, reject) => { + _callback[msg.messageId] = resolve + _socket.send(JSON.stringify(msg)) + }) + }, + /** + * 监听事件 + * @param event 要监听的事件 + * @returns 在回调函数中处理事件 + */ + on(event: string, callback: (data: any) => void) { + _callback[event] = callback + }, + /** + * 取消监听事件 + * @param event 要取消监听的事件 + */ + off(event: string) { + delete _callback[event] + }, + /** + * 定义默认监听事件 + * @param callback 默认监听事件的处理函数 + */ + onMessage(callback: (data: Message) => void) { + _socket.onmessage = res => { + let uuid: string | undefined; + try { + let data: Message = JSON.parse(res.data) + uuid = data.messageId + const event = data.subject + if (StrUtil.isNotEmpty(uuid) && !!_callback[uuid]) { + _callback[uuid](data) + } else if (StrUtil.isNotEmpty(event) && !!_callback[event]) { + _callback[event](data) + } else { + callback(data); + } + } catch (error) { + console.error("WebSocket JSON parse error:", error); + console.error("Received data:", res.data); + } finally { + if (uuid && _callback[uuid]) { + delete _callback[uuid] + } + } + } + }, + /** + * 定义异常事件 + * @param callback 默认异常事件的处理函数 + */ + onError(callback: ((client: WebSocket, en: Event) => void)) { + _socket.onerror = (event) => callback(_socket, event); + }, + /** + * 定义关闭事件 + * @param callback 默认关闭事件的处理函数 + */ + onClose(callback: (client: WebSocket, en: Event) => void) { + _socket.onclose = (event) => callback(_socket, event); + } +}; \ No newline at end of file diff --git a/src/plugins/tab.ts b/src/plugins/tab.ts new file mode 100644 index 0000000..355d972 --- /dev/null +++ b/src/plugins/tab.ts @@ -0,0 +1,108 @@ +import useTagsViewStore from '@/store/modules/tagsView' +import { router } from '@/router' +import { RouteLocationNormalizedLoaded, RouteLocationRaw } from 'vue-router'; +import { RoutesAlias } from '@/router/routesAlias'; + +export default { + /** + * 刷新当前tab页签 + * @param {Object | undefined} obj - 页签对象,包含name、path和query等信息。如果未传入,则自动获取当前页签信息。 + */ + async refreshPage(obj: any | undefined) { + const { path, query, matched } = router.currentRoute.value; + if (obj === undefined) { + matched.forEach((m) => { + if (m.components && m.components.default && m.components.default.name) { + if (!['Layout', 'ParentView'].includes(m.components.default.name)) { + obj = { name: m.components.default.name, path: path, query: query }; + } + } + }); + } + await useTagsViewStore().delCachedView(obj); + const { path: path_1, query: query_1 } = obj; + router.replace({ + path: '/redirect' + path_1, + query: query_1 + }); + }, + + /** + * 关闭当前tab页签,并打开新页签 + * @param {RouteLocationRaw} obj - 新页签的路由信息。 + * @returns {Promise} 路由跳转的Promise对象。 + */ + closeOpenPage(obj: RouteLocationRaw) { + useTagsViewStore().delView(router.currentRoute.value); + if (obj !== undefined) { + return router.push(obj); + } + }, + + /** + * 关闭指定的tab页签 + * @param {RouteLocationNormalizedLoaded | undefined} obj - 要关闭的页签对象。如果未传入,则关闭当前页签。 + * @returns {Promise} 包含删除结果的Promise对象。 + */ + async closePage(obj: RouteLocationNormalizedLoaded | undefined) { + if (obj === undefined) { + const res = await useTagsViewStore().delView(router.currentRoute.value); + await router.push(res.lastPath || RoutesAlias.Home); + return res; + } + return useTagsViewStore().delView(obj); + }, + + /** + * 关闭所有tab页签 + * @returns {Promise} 包含删除结果的Promise对象。 + */ + closeAllPage() { + return useTagsViewStore().delAllViews(); + }, + + /** + * 关闭左侧的tab页签 + * @param {RouteLocationNormalizedLoaded | undefined | null} obj - 基准页签对象。如果未传入,则以当前页签为基准。 + * @returns {Promise} 包含删除结果的Promise对象。 + */ + closeLeftPage(obj: RouteLocationNormalizedLoaded | undefined | null) { + return useTagsViewStore().delLeftTags(obj || router.currentRoute.value); + }, + + /** + * 关闭右侧的tab页签 + * @param {RouteLocationNormalizedLoaded | undefined | null} obj - 基准页签对象。如果未传入,则以当前页签为基准。 + * @returns {Promise} 包含删除结果的Promise对象。 + */ + closeRightPage(obj: RouteLocationNormalizedLoaded | undefined | null) { + return useTagsViewStore().delRightTags(obj || router.currentRoute.value); + }, + + /** + * 关闭其他tab页签 + * @param {RouteLocationNormalizedLoaded | undefined | null} obj - 保留的页签对象。如果未传入,则保留当前页签。 + * @returns {Promise} 包含删除结果的Promise对象。 + */ + closeOtherPage(obj: RouteLocationNormalizedLoaded | undefined | null) { + return useTagsViewStore().delOthersViews(obj || router.currentRoute.value); + }, + + /** + * 打开新的tab页签 + * @param {RouteLocationRaw} url - 新页签的路由信息。 + * @returns {Promise} 路由跳转的Promise对象。 + */ + openPage(url: RouteLocationRaw) { + return router.push(url); + }, + + /** + * 修改tab页签信息 + * @param {RouteLocationNormalizedLoaded} obj - 要修改的页签对象。 + * @returns {Promise} 包含更新结果的Promise对象。 + */ + updatePage(obj: RouteLocationNormalizedLoaded) { + return useTagsViewStore().updateVisitedView(obj); + } +} diff --git a/src/router/guards/afterEach.ts b/src/router/guards/afterEach.ts new file mode 100644 index 0000000..b23ac1c --- /dev/null +++ b/src/router/guards/afterEach.ts @@ -0,0 +1,9 @@ +import { Router } from 'vue-router' +import NProgress from 'nprogress' + +/** 路由全局后置守卫 */ +export function setupAfterEachGuard(router: Router) { + router.afterEach(() => { + NProgress.done() + }) +} \ No newline at end of file diff --git a/src/router/guards/beforeEach.ts b/src/router/guards/beforeEach.ts new file mode 100644 index 0000000..9ba7d2f --- /dev/null +++ b/src/router/guards/beforeEach.ts @@ -0,0 +1,58 @@ +import type { Router } from 'vue-router' + +import { ElMessage } from 'element-plus' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import { getToken } from '@/utils/auth' +import { isHttp } from '@/utils/validate' +import { isRelogin } from '@/utils/request' +import useUserStore from '@/store/modules/user' +import useSettingsStore from '@/store/modules/settings' +import usePermissionStore from '@/store/modules/permission' +import { isPathMatch } from '@/utils/validate' +import { RoutesAlias } from '../routesAlias' + +const whiteList: string[] = [RoutesAlias.Login, RoutesAlias.Register] +const isWhiteList = (path: string) => whiteList.some(pattern => isPathMatch(pattern, path)) + +/** + * 路由全局前置守卫 + * 处理进度条、获取菜单列表、动态路由注册、404 检查、工作标签页及页面标题设置 + */ +export function setupBeforeEachGuard(router: Router): void { + router.beforeEach((to, from, next) => { + let title: string = typeof to.meta.title === 'function' ? to.meta.title(to) : to.meta.title ?? '' + useSettingsStore().setTitle(title) + NProgress.start() + if (isWhiteList(to.path)) { + next() + } else if (getToken()) { + if (useUserStore().roles.length === 0) { + isRelogin.show = true + // 判断当前用户是否已拉取完user_info信息 + useUserStore().getInfo().then(() => { + isRelogin.show = false + usePermissionStore().generateRoutes().then(accessRoutes => { + // 根据roles权限生成可访问的路由表 + accessRoutes.forEach(route => { + if (!isHttp(route.path)) { + router.addRoute(route) // 动态添加可访问路由表 + } + }) + next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 + }) + }).catch(err => { + useUserStore().logOut().then(() => { + ElMessage.error(err.message) + next({ path: RoutesAlias.Home }) + }) + }) + } else { + next() + } + } else { + if (to.fullPath) next(`${RoutesAlias.Login}?redirect=${to.fullPath}`) + else next(RoutesAlias.Login) + } + }) +} \ No newline at end of file diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..21b4a81 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,27 @@ +import { createWebHistory, createRouter, createWebHashHistory } from 'vue-router' +import { constantRoutes } from './routes/staticRoutes' +import { configureNProgress } from './utils/utils' +import { setupBeforeEachGuard } from './guards/beforeEach' +import { setupAfterEachGuard } from './guards/afterEach' +import type { App } from 'vue' + +export const router = createRouter({ + // createWebHistory createWebHashHistory + history: createWebHistory(import.meta.env.VITE_BASE_ROUTER), + routes: constantRoutes, + scrollBehavior(to, from, savedPosition) { + if (savedPosition) { + return savedPosition + } else { + return { top: 0 } + } + }, +}); + +// 初始化路由 +export default function initRouter(app: App): void { + configureNProgress() // 顶部进度条 + setupBeforeEachGuard(router) // 路由前置守卫 + setupAfterEachGuard(router) // 路由后置守卫 + app.use(router) +} diff --git a/src/router/routes/asyncRoutes.ts b/src/router/routes/asyncRoutes.ts new file mode 100644 index 0000000..903116f --- /dev/null +++ b/src/router/routes/asyncRoutes.ts @@ -0,0 +1,75 @@ +import { RouteItem } from '@/types/route' +const Layout = () => import('@/layout/index.vue') +// 动态路由,基于用户权限动态去加载,配置详情请参见RouteItem定义 +export const dynamicRoutes: RouteItem[] = [ + { + path: '/system/user-auth', + component: Layout, + hidden: true, + permissions: ['system:user:edit'], + children: [ + { + path: 'role/:userId(\\d+)', + component: () => import('@/views/system/user/authRole.vue'), + name: 'AuthRole', + meta: { title: '分配角色', activeMenu: '/system/user' } + } + ] + }, + { + path: '/system/role-auth', + component: Layout, + hidden: true, + permissions: ['system:role:edit'], + children: [ + { + path: 'user/:roleId(\\d+)', + component: () => import('@/views/system/role/authUser.vue'), + name: 'AuthUser', + meta: { title: '分配用户', activeMenu: '/system/role' } + } + ] + }, + { + path: '/system/dict-data', + component: Layout, + hidden: true, + permissions: ['system:dict:list'], + children: [ + { + path: 'index/:dictId(\\d+)', + component: () => import('@/views/system/dict/data.vue'), + name: 'DictData', + meta: { title: '字典数据', activeMenu: '/system/dict' } + } + ] + }, + { + path: '/monitor/job-log', + component: Layout, + hidden: true, + permissions: ['monitor:job:list'], + children: [ + { + path: 'index/:jobId(\\d+)', + component: () => import('@/views/monitor/job/log.vue'), + name: 'JobLog', + meta: { title: '调度日志', activeMenu: '/monitor/job' } + } + ] + }, + { + path: '/tool/gen-edit', + component: Layout, + hidden: true, + permissions: ['tool:gen:edit'], + children: [ + { + path: 'index/:tableId(\\d+)', + component: () => import('@/views/tool/gen/edit/index.vue'), + name: 'GenEdit', + meta: { title: '修改生成配置', activeMenu: '/tool/gen' } + } + ] + } +] \ No newline at end of file diff --git a/src/router/routes/staticRoutes.ts b/src/router/routes/staticRoutes.ts new file mode 100644 index 0000000..6d683de --- /dev/null +++ b/src/router/routes/staticRoutes.ts @@ -0,0 +1,134 @@ +import { RouteItem } from '@/types/route' +const Layout = () => import('@/layout/index.vue') + +// 公共路由,配置详情请参见RouteItem定义 +export const constantRoutes: RouteItem[] = [ + { + path: '/redirect', + component: Layout, + hidden: true, + children: [ + { + path: '/redirect/:path(.*)', + component: () => import('@/views/redirect/index.vue') + } + ] + }, + { + path: '/auth', + component: () => import('@/views/auth/index.vue'), + hidden: true, + children: [ + { + path: 'login', + name: 'Login', + component: () => import('@/views/auth/login.vue'), + hidden: true + }, + { + path: 'register', + name: 'Register', + component: () => import('@/views/auth/register.vue'), + hidden: true + } + ] + }, + { + path: "/:pathMatch(.*)*", + component: () => import('@/views/error/404.vue'), + hidden: true + }, + { + path: '/401', + component: () => import('@/views/error/401.vue'), + hidden: true + }, + { + path: '', + component: Layout, + redirect: '/index', + children: [ + { + path: '/index', + component: () => import('@/views/index.vue'), + name: 'Index', + meta: { title: '首页', icon: 'dashboard', affix: true } + } + ] + }, + { + path: '/laboratory', + component: Layout, + meta: { title: '实验室', icon: 'dashboard' }, + children: [ + { + path: 'threeTest', + component: () => import('@/views/three/gltfmode.vue'), + name: 'threeTest', + meta: { title: 'three实验室', icon: 'dashboard' } + }, + { + path: "websocket", + component: () => import('@/views/websocket.vue'), + name: 'websocket', + meta: { title: 'websocket实验室', icon: 'dashboard' } + }, + ] + }, + { + path: '/user', + component: Layout, + hidden: true, + redirect: 'noredirect', + children: [ + { + path: 'profile', + component: () => import('@/views/system/user/profile/index.vue'), + name: 'Profile', + meta: { title: '个人中心', icon: 'user' } + } + ] + }, + { + path: '/flowable', + component: Layout, + hidden: true, + children: [ + { + path: 'definition/model/', + component: () => import('@/views/flowable/definition/model.vue'), + name: 'Model', + hidden: true, + meta: { title: '流程设计', icon: '' } + }, + { + path: 'task/finished/detail/index', + component: () => import('@/views/flowable/task/finished/detail/index.vue'), + name: 'FinishedRecord', + hidden: true, + meta: { title: '流程详情', icon: '' } + }, + { + path: 'task/myProcess/detail/index', + component: () => import('@/views/flowable/task/myProcess/detail/index.vue'), + name: 'MyProcessRecord', + hidden: true, + meta: { title: '流程详情', icon: '' } + }, + { + path: 'task/myProcess/send/index', + component: () => import('@/views/flowable/task/myProcess/send/index.vue'), + name: 'SendRecord', + hidden: true, + meta: { title: '流程发起', icon: '' } + }, + { + path: 'task/todo/detail/index', + component: () => import('@/views/flowable/task/todo/detail/index.vue'), + name: 'TodoRecord', + hidden: true, + meta: { title: '流程处理', icon: '' } + } + ] + }, +] \ No newline at end of file diff --git a/src/router/routesAlias.ts b/src/router/routesAlias.ts new file mode 100644 index 0000000..621fec9 --- /dev/null +++ b/src/router/routesAlias.ts @@ -0,0 +1,8 @@ +/** + * 路由别名,方便快速找到页面,同时可以用作路由跳转 + */ +export enum RoutesAlias { + Home = '/index', // 首页 + Login = '/auth/login', // 登录 + Register = '/auth/register', // 注册 +} \ No newline at end of file diff --git a/src/router/utils/utils.ts b/src/router/utils/utils.ts new file mode 100644 index 0000000..0f9f6d2 --- /dev/null +++ b/src/router/utils/utils.ts @@ -0,0 +1,12 @@ +import NProgress from 'nprogress' + +/** 顶部进度条配置 */ +export const configureNProgress = () => { + NProgress.configure({ + easing: 'ease', + speed: 600, + showSpinner: false, + trickleSpeed: 200, + parent: 'body' + }) +} \ No newline at end of file diff --git a/src/settings.ts b/src/settings.ts new file mode 100644 index 0000000..778f948 --- /dev/null +++ b/src/settings.ts @@ -0,0 +1,80 @@ +import { getConfigKey } from '@/api/system/config' +interface Setting { + title: string; + theme: string; + sideTheme: string; + showSettings: boolean; + topNav: boolean; + tagsView: boolean; + fixedHeader: boolean; + sidebarLogo: boolean; + dynamicTitle: boolean; + footerVisible: boolean; + footerContent: string; + errorLog: string | string[]; + initDbSetting: () => Promise; +} +const setting = { + /** 网页标题 */ + title: import.meta.env.VITE_APP_TITLE, + /** 主题色 */ + theme: '#409EFF', + /** 侧边栏主题 深色主题theme-dark,浅色主题theme-light */ + sideTheme: 'theme-dark', + /** 是否系统布局配置 */ + showSettings: false, + /** 是否显示顶部导航 */ + topNav: false, + /** 是否显示 tagsView */ + tagsView: true, + /** 是否固定头部 */ + fixedHeader: false, + /** 是否显示logo */ + sidebarLogo: true, + /** 是否显示动态标题 */ + dynamicTitle: false, + /** 是否显示底部版权 */ + footerVisible: true, + /** 底部版权文本内容 */ + footerContent: 'Copyright © 2018-2025 RuoYi-Geek. All Rights Reserved.', + + /** + * @type {string | array} 'production' | ['production', 'development'] + * @description 需要显示错误日志组件的环境。 + * 默认只在生产环境中使用。 + * 如果你也想在开发环境中使用,可以传 ['production', 'development']。 + */ + errorLog: 'production', + + /** + * 获取后端配置的设置 + * @returns Promise + */ + async initDbSetting(): Promise { + const config = (key: string, type: any) => getConfigKey(key).then(res => { + if (type === String) { + return res.msg + } else if (type === Number) { + return +res.msg + } else if (type === Boolean) { + return res.msg === 'true' + } else if (type === Array) { + return res.msg.split(',') + } else { + return new type(res.msg) + } + }) + return { + theme: await config("sys.index.theme", String), + sideTheme: await config("sys.index.sideTheme", String), + topNav: await config("sys.index.topNav", Boolean), + tagsView: await config("sys.index.tagsView", Boolean), + fixedHeader: await config("sys.index.fixedHeader", Boolean), + sidebarLogo: await config("sys.index.sidebarLogo", Boolean), + dynamicTitle: await config("sys.index.dynamicTitle", Boolean), + } as Setting; + } +} + + +export default setting \ No newline at end of file diff --git a/src/store/index.ts b/src/store/index.ts new file mode 100644 index 0000000..d477079 --- /dev/null +++ b/src/store/index.ts @@ -0,0 +1,11 @@ +import { createPinia } from "pinia" +import type { App } from "vue" + +export const store = createPinia() + +/** + * 初始化 Store + */ +export default function initStore(app: App): void { + app.use(store) +} \ No newline at end of file diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts new file mode 100644 index 0000000..4761748 --- /dev/null +++ b/src/store/modules/app.ts @@ -0,0 +1,46 @@ +import { defineStore } from 'pinia'; + +const useAppStore = defineStore( + 'app', + { + state: () => ({ + sidebar: { + opened: localStorage.getItem('sidebarStatus') ? !!localStorage.getItem('sidebarStatus') : true, + withoutAnimation: false, + hide: false + }, + device: 'desktop', + size: (localStorage.getItem('size') || 'default') as 'large' | 'default' | 'small' + }), + actions: { + toggleSideBar(withoutAnimation: boolean) { + if (this.sidebar.hide) { + return false; + } + this.sidebar.opened = !this.sidebar.opened + this.sidebar.withoutAnimation = withoutAnimation + if (this.sidebar.opened) { + localStorage.setItem('sidebarStatus', '1') + } else { + localStorage.setItem('sidebarStatus', '0') + } + }, + closeSideBar(withoutAnimation: boolean) { + localStorage.setItem('sidebarStatus', '0') + this.sidebar.opened = false + this.sidebar.withoutAnimation = withoutAnimation + }, + toggleDevice(device: string) { + this.device = device + }, + setSize(size: 'large' | 'default' | 'small') { + this.size = size; + localStorage.setItem('size', size) + }, + toggleSideBarHide(status: boolean) { + this.sidebar.hide = status + } + } + }) + +export default useAppStore diff --git a/src/store/modules/dict.ts b/src/store/modules/dict.ts new file mode 100644 index 0000000..909fd98 --- /dev/null +++ b/src/store/modules/dict.ts @@ -0,0 +1,59 @@ +import { defineStore } from "pinia"; + +const useDictStore = defineStore( + 'dict', + { + state: () => ({ + dict: new Array<{key: DictKey, value: Array}>() + }), + actions: { + // 获取字典 + getDict(_key: DictKey) { + if (_key == null && _key == "") { + return null; + } + try { + for (let i = 0; i < this.dict.length; i++) { + if (this.dict[i].key == _key) { + return this.dict[i].value; + } + } + } catch (e) { + return null; + } + }, + // 设置字典 + setDict(_key: DictKey, value:Array) { + if (_key !== null && _key !== "") { + this.dict.push({ + key: _key, + value: value + }); + } + }, + // 删除字典 + removeDict(_key: DictKey) { + var bln = false; + try { + for (let i = 0; i < this.dict.length; i++) { + if (this.dict[i].key == _key) { + this.dict.splice(i, 1); + return true; + } + } + } catch (e) { + bln = false; + } + return bln; + }, + // 清空字典 + cleanDict() { + this.dict = new Array(); + }, + // 初始字典 + initDict() { + } + } + }) + +export default useDictStore diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts new file mode 100644 index 0000000..c1cf34d --- /dev/null +++ b/src/store/modules/permission.ts @@ -0,0 +1,178 @@ +import auth from '@/plugins/auth' +import { router } from '@/router' +import { getRouters } from '@/api/menu' +import Layout from '@/layout/index.vue' +import ParentView from '@/components/ParentView/index.vue' +import InnerLink from '@/layout/components/InnerLink/index.vue' +import { defineStore } from 'pinia' +import type { Component } from 'vue' +import { RouteItem } from '@/types/route' +import { constantRoutes } from '@/router/routes/staticRoutes' +import { dynamicRoutes } from '@/router/routes/asyncRoutes' +import { deepClone } from '@/utils' + +// 匹配views里面所有的.vue文件 +const modules = import.meta.glob('./../../views/**/*.vue') + +// 定义 store 状态接口 +interface PermissionState { + routes: RouteItem[] + addRoutes: RouteItem[] + defaultRoutes: RouteItem[] + topbarRouters: RouteItem[] + sidebarRouters: RouteItem[] +} + +/** + * 权限管理模块 + * + * 路由生成说明: + * 1. generateRoutes方法负责生成所有路由: + * - 从后端获取动态路由数据 + * - 处理动态路由数据(过滤、转换组件等) + * - 根据设置决定TopNav菜单的数据来源 + * + * 2. TopNav菜单数据生成规则: + * - 启用TopNav导入本地路由:constantRoutes + defaultRoutes + * - 关闭TopNav导入本地路由:仅使用defaultRoutes + * - 通过settingsStore.topNavMixMenu控制 + */ + +const usePermissionStore = defineStore( + 'permission', + { + state: (): PermissionState => ({ + routes: [], + addRoutes: [], + defaultRoutes: [], + topbarRouters: [], + sidebarRouters: [] + }), + actions: { + setRoutes(routes: RouteItem[]) { + this.routes = [...constantRoutes, ...routes]; + }, + setDefaultRoutes(routes: RouteItem[]) { + this.defaultRoutes = deepClone(routes); + }, + setTopbarRoutes(routes: RouteItem[]) { + this.topbarRouters = deepClone(routes); + }, + setSidebarRouters(routes: RouteItem[]) { + this.sidebarRouters = deepClone(routes); + }, + generateRoutes(): Promise { + return new Promise(resolve => { + // 向后端请求路由数据 + getRouters().then(res => { + const sidebarRoutes = constantRoutes.concat(filterAsyncRouter(deepClone(res.data))) + const rewriteRoutes = filterAsyncRouter(deepClone(res.data), true) + const asyncRoutes = filterDynamicRoutes(dynamicRoutes) + asyncRoutes.forEach(route => { router.addRoute(route) }) + this.setRoutes(rewriteRoutes) + this.setSidebarRouters(sidebarRoutes) + this.setDefaultRoutes(sidebarRoutes) + this.setTopbarRoutes(sidebarRoutes) + resolve(rewriteRoutes) + }) + }) + } + } + }) + +// 遍历后台传来的路由字符串,转换为组件对象 +function filterAsyncRouter(asyncRouterMap: RouteItem[], type = false): RouteItem[] { + return asyncRouterMap.filter(route => { + // 确保route有hidden属性 + if (route.hidden === undefined) { + route.hidden = false; + } + + if (type && route.children) { + route.children = filterChildren(route.children) + } + if (route.component) { + // Layout ParentView 组件特殊处理 + if (typeof route.component === 'string') { + if (route.component === 'Layout') { + route.component = Layout + } else if (route.component === 'ParentView') { + route.component = ParentView + } else if (route.component === 'InnerLink') { + route.component = InnerLink + } else { + route.component = loadView(route.component) + } + } + } + if (route.children != null && route.children && route.children.length) { + route.children = filterAsyncRouter(route.children, type) + } else { + delete route['children'] + delete route['redirect'] + } + return true + }) +} +/** + * 递归过滤并处理路由子项,将所有子路由展平为一个数组,并根据父路由调整路径。 + * 如果遇到组件为 'ParentView' 的路由,会将其子路由的路径拼接父路由路径,并继续递归处理。 + * + * @param childrenMap 路由子项数组 + * @param lastRouter 上一级父路由(可选),用于路径拼接 + * @returns 处理后的路由子项数组 + */ +function filterChildren(childrenMap: RouteItem[], lastRouter?: RouteItem): RouteItem[] { + const children: RouteItem[] = [] + childrenMap.forEach((el) => { + const item = { ...el, hidden: false } // 确保hidden属性存在 + if (el.children && el.children.length) { + if (el.component === 'ParentView' && !lastRouter) { + el.children.forEach((c: RouteItem) => { + c.path = el.path + '/' + c.path + if (c.children && c.children.length) { + children.push(...filterChildren(c.children, c)) + return + } + children.push(c) + }) + return + } + } + if (lastRouter && lastRouter.path) { + item.path = lastRouter.path + '/' + item.path + } + children.push(item) + }) + return children +} + +// 动态路由遍历,验证是否具备权限 +function filterDynamicRoutes(routes: readonly RouteItem[]): RouteItem[] { + const res: RouteItem[] = [] + routes.forEach(route => { + if (route.permissions) { + if (auth.hasPermiOr(route.permissions)) { + res.push(route) + } + } else if (route.roles) { + if (auth.hasRoleOr(route.roles)) { + res.push(route) + } + } + }) + return res +} + +const loadView = (view: string): (() => Promise) => { + let res: (() => Promise) | undefined + for (const path in modules) { + const dir = path.split('views/')[1].split('.vue')[0] + if (dir === view) { + res = modules[path] as () => Promise + } + } + return res || (() => Promise.resolve({} as Component)) +} + +export default usePermissionStore diff --git a/src/store/modules/settings.ts b/src/store/modules/settings.ts new file mode 100644 index 0000000..1aef725 --- /dev/null +++ b/src/store/modules/settings.ts @@ -0,0 +1,56 @@ +import defaultSettings from '@/settings' +import { useDynamicTitle } from '@/utils/dynamicTitle' +import { defineStore } from 'pinia' +import { handleThemeStyle } from '@/utils/theme' +const { theme, sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle, footerVisible, footerContent, initDbSetting } = defaultSettings + +const storageSetting: typeof defaultSettings = JSON.parse( + localStorage.getItem('layout-setting') || '{}' +) + +const useSettingsStore = defineStore('settings', { + state: () => ({ + title: '', + theme: '#11A983', + sideTheme: 'theme-light', + showSettings: showSettings, + topNav: false, + tagsView: true, + fixedHeader: true, + sidebarLogo: true, + dynamicTitle: true, + footerVisible: footerVisible, + footerContent: footerContent, + inited: false + }), + actions: { + async initSetting() { + if (this.inited) return + const config = await initDbSetting() + this.theme = storageSetting.theme ?? config.theme ?? theme + this.sideTheme = storageSetting.sideTheme ?? config.sideTheme ?? sideTheme + this.topNav = storageSetting.topNav ?? config.topNav ?? topNav + this.tagsView = storageSetting.tagsView ?? config.tagsView ?? tagsView + this.fixedHeader = storageSetting.fixedHeader ?? config.fixedHeader ?? fixedHeader + this.sidebarLogo = storageSetting.sidebarLogo ?? config.sidebarLogo ?? sidebarLogo + this.dynamicTitle = storageSetting.dynamicTitle ?? config.dynamicTitle ?? dynamicTitle + this.inited = true + handleThemeStyle(this.theme) + }, + // 修改布局设置 + changeSetting(data: { key: keyof typeof storageSetting, value: any }) { + const { key, value } = data + if (this.hasOwnProperty(key)) { + //@ts-ignore + this[key] = value + } + }, + // 设置网页标题 + setTitle(title: string) { + this.title = title + useDynamicTitle(); + } + } +}) + +export default useSettingsStore diff --git a/src/store/modules/tagsView.ts b/src/store/modules/tagsView.ts new file mode 100644 index 0000000..c14f818 --- /dev/null +++ b/src/store/modules/tagsView.ts @@ -0,0 +1,205 @@ +import { RouteLocationItem } from "@/types/route"; +import { defineStore } from "pinia"; +import { RouteLocationNormalizedLoaded, RouteLocationNormalizedLoadedGeneric, RouteRecordName } from "vue-router"; +type MatchPattern = string | RegExp; +const useTagsViewStore = defineStore("tags-view", { + state: () => ({ + visitedViews: Array(), + cachedViews: Array(), + iframeViews: Array(), + }), + actions: { + addView(view: RouteLocationItem) { + if (typeof view.meta?.group === 'function') view.meta.group = view.meta.group(view) + if (typeof view.meta?.title === 'function') view.meta.title = view.meta.title(view) + this.addVisitedView(view); + this.addCachedView(view); + }, + addIframeView(view: RouteLocationNormalizedLoadedGeneric) { + if (this.iframeViews.some((v) => v.path === view.path)) return; + this.iframeViews.push( + Object.assign({}, view, { + title: view.meta.title ? view.meta.title + '' : "no-name", + }) + ); + }, + addVisitedView(view: RouteLocationItem) { + if (this.visitedViews.some((v) => v.path === view.path)) return; + const _view = view.meta?.group ? this.visitedViews.find((v) => v.meta?.group == view.meta?.group) : undefined + if (_view) { + Object.assign(_view, view); + } else { + this.visitedViews.push( + Object.assign({}, view, { + title: view.meta?.title || "no-name", + }) + ); + } + }, + addCachedView(view: RouteLocationItem) { + if (this.cachedViews.includes(String(view.name))) return; + if (!view.meta?.noCache) { + this.cachedViews.push(String(view.name)); + } + }, + delView(view: RouteLocationItem) { + return new Promise<{ + visitedViews: RouteLocationItem[], + cachedViews: MatchPattern[], + lastPath: string | undefined + }>((resolve) => { + this.delVisitedView(view); + this.delCachedView(view); + resolve({ + visitedViews: [...this.visitedViews], + cachedViews: [...this.cachedViews], + lastPath: this.visitedViews[this.visitedViews.length - 1]?.path, + }); + }); + }, + delVisitedView(view: RouteLocationNormalizedLoadedGeneric) { + return new Promise((resolve) => { + for (const [i, v] of this.visitedViews.entries()) { + if (v.path === view.path) { + this.visitedViews.splice(i, 1); + break; + } + } + this.iframeViews = this.iframeViews.filter( + (item) => item.path !== view.path + ); + resolve([...this.visitedViews]); + }); + }, + delIframeView(view: RouteLocationNormalizedLoaded) { + return new Promise((resolve) => { + this.iframeViews = this.iframeViews.filter( + (item) => item.path !== view.path + ); + resolve([...this.iframeViews]); + }); + }, + delCachedView(view: RouteLocationItem) { + return new Promise((resolve) => { + const index = this.cachedViews.indexOf(String(view.name)); + index > -1 && this.cachedViews.splice(index, 1); + resolve([...this.cachedViews]); + }); + }, + delOthersViews(view: RouteLocationItem) { + return new Promise((resolve) => { + this.delOthersVisitedViews(view); + this.delOthersCachedViews(view); + resolve({ + visitedViews: [...this.visitedViews], + cachedViews: [...this.cachedViews], + }); + }); + }, + delOthersVisitedViews(view: RouteLocationItem) { + return new Promise((resolve) => { + this.visitedViews = this.visitedViews.filter((v) => { + return v.meta?.affix || v.path === view.path; + }); + this.iframeViews = this.iframeViews.filter( + (item) => item.path === view.path + ); + resolve([...this.visitedViews]); + }); + }, + delOthersCachedViews(view: RouteLocationItem) { + return new Promise((resolve) => { + const index = this.cachedViews.indexOf(String(view.name)); + if (index > -1) { + this.cachedViews = this.cachedViews.slice(index, index + 1); + } else { + this.cachedViews = []; + } + resolve([...this.cachedViews]); + }); + }, + delAllViews() { + return new Promise<{ + visitedViews: RouteLocationItem[], + cachedViews: MatchPattern[] + }>((resolve) => { + this.delAllVisitedViews(); + this.delAllCachedViews(); + resolve({ + visitedViews: [...this.visitedViews], + cachedViews: [...this.cachedViews], + }); + }); + }, + delAllVisitedViews() { + return new Promise((resolve) => { + const affixTags = this.visitedViews.filter((tag) => tag.meta?.affix); + this.visitedViews = affixTags; + this.iframeViews = []; + resolve([...this.visitedViews]); + }); + }, + delAllCachedViews() { + return new Promise((resolve) => { + this.cachedViews = []; + resolve([...this.cachedViews]); + }); + }, + updateVisitedView(view: RouteLocationNormalizedLoaded) { + for (let v of this.visitedViews) { + if (v.path === view.path) { + v = Object.assign(v, view); + break; + } + } + }, + delRightTags(view: RouteLocationNormalizedLoaded) { + return new Promise((resolve) => { + const index = this.visitedViews.findIndex((v) => v.path === view.path); + if (index === -1) { + return; + } + this.visitedViews = this.visitedViews.filter((item, idx) => { + if (idx <= index || (item.meta && item.meta.affix)) { + return true; + } + const i = this.cachedViews.indexOf(String(item.name)); + if (i > -1) { + this.cachedViews.splice(i, 1); + } + if (item.meta?.link) { + const fi = this.iframeViews.findIndex((v) => v.path === item.path); + this.iframeViews.splice(fi, 1); + } + return false; + }); + resolve([...this.visitedViews]); + }); + }, + delLeftTags(view: RouteLocationNormalizedLoaded) { + return new Promise((resolve) => { + const index = this.visitedViews.findIndex((v) => v.path === view.path); + if (index === -1) { + return; + } + this.visitedViews = this.visitedViews.filter((item, idx) => { + if (idx >= index || (item.meta && item.meta.affix)) { + return true; + } + const i = this.cachedViews.indexOf(String(item.name)); + if (i > -1) { + this.cachedViews.splice(i, 1); + } + if (item.meta?.link) { + const fi = this.iframeViews.findIndex((v) => v.path === item.path); + this.iframeViews.splice(fi, 1); + } + return false; + }); + resolve([...this.visitedViews]); + }); + }, + }, +}); + +export default useTagsViewStore; diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts new file mode 100644 index 0000000..7d0b1ec --- /dev/null +++ b/src/store/modules/user.ts @@ -0,0 +1,109 @@ +import { login, logout, getInfo, register, verifyPhoneCode, verifyEmailCode } from '@/api/login' +import { getToken, setToken, removeToken } from '@/utils/auth' +import defAva from '@/assets/images/profile.jpg' +import { defineStore } from 'pinia' +import { LoginForm, RegisterForm, RoleInfo, UserInfo } from '@/types/user' +import { ElMessageBox } from 'element-plus' +import { router } from '@/router' + +const useUserStore = defineStore( + 'user', + { + state: () => ({ + token: getToken(), + name: '', + nickName: '', + avatar: '', + roleName: '', + deptName: '', + loginDate: '', + roles: [] as string[], + permissions: [] as string[], + isDefaultModifyPwd: null as boolean | null, + isPasswordExpired: null as boolean | null + }), + actions: { + // 登录 + login(userInfo: LoginForm, method: 'password' | 'phone' | 'email' = 'password') { + let handel = { + 'password': login, + 'phone': (userInfo: LoginForm) => verifyPhoneCode(userInfo, 'login'), + 'email': (userInfo: LoginForm) => verifyEmailCode(userInfo, 'login') + } + return new Promise((resolve, reject) => { + handel[method](userInfo).then((res: any) => { + const token = res.token ?? res.data ?? res.msg + setToken(token) + this.token = token + resolve(null) + }).catch(error => { + reject(error) + }) + }) + }, + register(registerForm: RegisterForm, method: 'password' | 'phone' | 'email' = 'password') { + let handle = { + 'password': register, + 'phone': (registerForm: RegisterForm) => verifyPhoneCode(registerForm, 'register'), + 'email': (registerForm: RegisterForm) => verifyEmailCode(registerForm, 'register') + } + return handle[method](registerForm) + }, + // 获取用户信息 + getInfo() { + return new Promise<{ user: UserInfo, roles: RoleInfo[], permissions: string[] }>((resolve, reject) => { + getInfo().then((res: any) => { + const user = res.user + if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 + this.roles = res.roles + this.permissions = res.permissions + } else { + this.roles = ['ROLE_DEFAULT'] + } + this.name = user.userName + this.nickName = user.nickName + this.roleName = (user.roles || [])[0] ? user.roles[0].roleName : '普通角色' + this.deptName = user.dept ? user.dept.deptName : '暂无部门' + this.loginDate = user.loginDate + if (user.avatar == "" || user.avatar == null) { + this.avatar = defAva + } else { + this.avatar = user.avatar.startsWith('http') ? user.avatar : import.meta.env.VITE_APP_BASE_API + user.avatar; + } + /* 初始密码提示 */ + if (res.isDefaultModifyPwd && this.isPasswordExpired === null) { + this.isPasswordExpired = res.isPasswordExpired + ElMessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { + router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } }) + }).catch(() => { }) + } + if (!res.isDefaultModifyPwd && res.isPasswordExpired && this.isPasswordExpired === null) { + this.isDefaultModifyPwd = res.isDefaultModifyPwd + ElMessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { + router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } }) + }).catch(() => { }) + } + resolve(res) + }).catch(error => { + reject(error) + }) + }) + }, + // 退出系统 + logOut() { + return new Promise((resolve, reject) => { + logout().then(() => { + this.token = '' + this.roles = [] + this.permissions = [] + removeToken() + resolve(null) + }).catch(error => { + reject(error) + }) + }) + } + } + }) + +export default useUserStore diff --git a/src/types/Message.ts b/src/types/Message.ts new file mode 100644 index 0000000..29f921b --- /dev/null +++ b/src/types/Message.ts @@ -0,0 +1,76 @@ +import * as UUID from "uuid"; + +export class Message { + /** 消息唯一标识符 */ + messageId: string; + /** 发送者标识 */ + sender: string; + /** 接收者标识 */ + receiver: string; + /** 消息时间戳 */ + timestamp: string | number | Date; + /** 消息类型(如命令、聊天、日志、事件等) */ + type: MessageType; + /** 消息主题或事件名称 */ + subject: string; + /** 消息内容 */ + content: string; + /** 消息数据负载 */ + payload: Record; + /** 元数据,用于存储额外的信息 */ + metadata: Record; + /** 消息状态(如成功、失败、重试等) */ + status: string; + /** 重试次数 */ + retryCount: number; + /** 最大重试次数 */ + maxRetries: number; + /** 重试间隔 */ + retryInterval: string; + + constructor() { + this.messageId = UUID.v4(); + this.sender = ''; + this.receiver = ''; + this.timestamp = new Date(); + this.type = MessageType.MESSAGE; + this.content = ''; + this.subject = ''; + this.payload = {}; + this.metadata = {}; + this.status = ''; + this.retryCount = 0; + this.maxRetries = 3; + this.retryInterval = '1000ms'; + } +} + +export enum MessageType { + EVENT = 'event', + MESSAGE = 'message', + ASYNC_MESSAGE = 'asyncMessage', +} + +export function createMessage(receiver: string, params: Partial): Message { + const message = new Message(); + Object.assign(message, params); + message.type = MessageType.MESSAGE; + message.receiver = receiver; + return message; +} + +export function createEventMessage(eventName: string, params: Partial): Message { + const message = new Message(); + Object.assign(message, params); + message.type = MessageType.EVENT; + message.subject = eventName; + return message; +} + +export function createAsyncMessage(receiver: string, params: Partial): Message { + const message = new Message(); + Object.assign(message, params); + message.type = MessageType.ASYNC_MESSAGE; + message.receiver = receiver; + return message; +} \ No newline at end of file diff --git a/src/types/dict.ts b/src/types/dict.ts new file mode 100644 index 0000000..cec7515 --- /dev/null +++ b/src/types/dict.ts @@ -0,0 +1,26 @@ +type DictKey = string | null; +type Dict = { + createBy: string, + createTime: string, + updateBy: string | null, + updateTime: string | null, + remark: string | null, + dictName: string, + dictCode: string, + dictSort: number, + dictLabel: string, + dictValue: string, + dictType: string, + cssClass: null | string, + listClass: 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text', + isDefault: "N" | "Y", + status: "0" | "1", + default: boolean +} + +type DictValue = { + label: string, + value: string, + elTagType: 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text', + elTagClass: string | null +} diff --git a/src/types/request.ts b/src/types/request.ts new file mode 100644 index 0000000..cb8e321 --- /dev/null +++ b/src/types/request.ts @@ -0,0 +1,39 @@ +import { AxiosInstance, AxiosPromise, AxiosRequestHeaders, AxiosResponse, Method } from 'axios' + +export type GeekRequestConfig = { + /** 请求地址 */ + url?: string, + /** get请求映射params参数 */ + method?: Method | string, + /** 请求数据 */ + data?: any, + /** get请求映射params参数 */ + params?: any, + headers?: { + /** 是否需要防止数据重复提交 */ + repeatSubmit?: boolean, + /** 是否需要设置 token */ + isToken?: boolean, + } | AxiosRequestHeaders +} + +export type GeekResponse = { + code: number; + msg: string; + data: T; + total: number; + rows: Array +} + +export type GeekResponseForList = { + code: number; + msg: string; + total: number; + rows: Array +} + +export type GeekResponseForData = { + code: number; + msg: string; + data: T; +} \ No newline at end of file diff --git a/src/types/route.ts b/src/types/route.ts new file mode 100644 index 0000000..b64bec3 --- /dev/null +++ b/src/types/route.ts @@ -0,0 +1,56 @@ +import { Component } from "vue" +import { LocationQueryRaw, RouteLocationNormalized, RouteRecordRaw } from "vue-router" + +type RouteMeta = { + noCache?: boolean + title?: string | ((route: RouteItem) => string) + icon?: string + breadcrumb?: boolean + activeMenu?: string + group?: string | ((route: RouteItem) => string) + transition?: string + isTopMenu?: boolean + [key: string]: any +} + + +/** + * Note: 路由配置项 + * + * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 + * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 + * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 + * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 + * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 + * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 + * roles: ['admin', 'common'] // 访问路由的角色权限 + * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 + * meta : { + noCache: true // 如果设置为true,则不会被 缓存(默认 false) + title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字,可以是route对象里面的内容:(route)=>route.query.xx + icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg + breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 + activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 + group:"group" // 当路由设置了该属性,则相同组的路由共用一个tab标签,可以是route对象里面的内容:(route)=>route.query.xx + transition:"fade-transform" // 设置该路由的切换动画,默认淡出,不需要动画可以填none,动画需要自己在transition.scss中定义 + isTopMenu: true // 当设置为true时,该路由的第一个子路由会在TopNav模式下显示为顶级菜单 + } + */ + +export type RouteItem = RouteRecordRaw & { + path: string + component?: Component | string + redirect?: string + name?: string + query?: LocationQueryRaw + roles?: string[] + permissions?: string[] + hidden?: boolean + alwaysShow?: boolean + meta?: RouteMeta + children?: RouteItem[] +} + +export type RouteLocationItem = RouteLocationNormalized & RouteMeta \ No newline at end of file diff --git a/src/types/user.ts b/src/types/user.ts new file mode 100644 index 0000000..e637498 --- /dev/null +++ b/src/types/user.ts @@ -0,0 +1,53 @@ +export interface LoginForm { + username: string + password: string + code: string + uuid: string + email: string + phonenumber: string + rememberMe?: boolean + autoRegister?: boolean +} + +export interface RegisterForm { + username: string + password: string + code: string + uuid: string + email: string + phonenumber: string +} + + +export interface DeptInfo { + deptId: number; + deptName: string; + ancestors?: string; + leader?: string; + orderNum?: number; + parentId?: number; + status?: string; +} + +export interface RoleInfo { + roleId: number; + roleName: string; + roleKey?: string; + status?: string; +} + +export interface UserInfo { + userId: number; + userName: string; + nickName: string; + avatar: string | null; + dept: DeptInfo; + roles: RoleInfo[]; + phonenumber?: string; + email?: string; + loginDate?: string; + loginIp?: string; + createTime?: string; + status?: string; + remark?: string; +} \ No newline at end of file diff --git a/src/utils/StrUtil.ts b/src/utils/StrUtil.ts new file mode 100644 index 0000000..d59c9a8 --- /dev/null +++ b/src/utils/StrUtil.ts @@ -0,0 +1,737 @@ +/** + * 字符串工具类 + **/ +export const StrUtil = { + /** + * 字符串是否为空白 空白的定义如下:
+ * 1、为null
+ * 2、为不可见字符(如空格)
+ * 3、""
+ * + * @param str 被检测的字符串 + * @return boolean 是否为空 + */ + isBlank: function (str: string) { + return str === undefined || str == null || this.trim(str) === ""; + + }, + /** + * 字符串是否为非空白 空白的定义如下:
+ * 1、不为null
+ * 2、不为不可见字符(如空格)
+ * 3、不为""
+ * + * @param str 被检测的字符串 + * @return boolean 是否为非空 + */ + isNotBlank: function (str: string) { + // == 代表相同,=== 代表严格相同 + return false === StrUtil.isBlank(str); + }, + /** + * 字符串是否为空,空的定义如下:
+ * 1、为null
+ * 2、为""
+ * + * @param str 被检测的字符串 + * @return boolean 是否为空 + */ + isEmpty: function (str: string) { + return str == null || str === ""; + + }, + /** + * 字符串是否为非空白 空白的定义如下:
+ * 1、不为null
+ * 2、不为""
+ * + * @param str 被检测的字符串 + * @return boolean 是否为非空 + */ + isNotEmpty: function (str: string) { + return !StrUtil.isEmpty(str); + }, + /** + * 空对象转字符串 + * + * @param str 被检查的字符串 + * @return string 原字符串或者空串 + */ + nullToStr: function (str: string) { + if (StrUtil.isEmpty(str)) { + return ""; + } + return str; + }, + /** + * 空格截取 + * + * @param str 截取的字符串 + * @return string + */ + trim: function (str: string) { + if (str == null) { + return ""; + } + return str.toString().replace(/(^\s*)|(\s*$)|\r|\n/g, ""); + }, + /** + * 比较两个字符串(大小写敏感) + * + * @param str 字符串 + * @param that 比较的字符串 + * @return boolean + */ + equals: function (str: string, that: string) { + return str === that; + }, + /** + * 比较两个字符串(大小写不敏感) + * + * @param str 字符串 + * @param that 比较的字符串 + * @return boolean + */ + equalsIgnoreCase: function (str: string, that: string) { + return String(str).toUpperCase() === String(that).toUpperCase(); + }, + /** + * 将字符串按指定字符分割 + * + * @param str 字符串 + * @param sep 比较的字符串 + * @param maxLen 最大长度 + * @return string[] 分割后的数组 + */ + split: function (str: string, sep: string, maxLen?: number) { + if (StrUtil.isEmpty(str)) { + return null; + } + const value = String(str).split(sep); + return maxLen ? value.slice(0, maxLen - 1) : value; + }, + /** + * 字符串格式化(%s ) + * + * @param str 字符串 + * @return 格式化后的字符串 + */ + sprintf: function (str: string) { + let args = arguments, flag = true, i = 1; + str = str.replace(/%s/g, function () { + const arg = args[i++]; + if (typeof arg === 'undefined') { + flag = false; + return ''; + } + return arg; + }); + return flag ? str : ''; + }, + /** + * 判断字符串是否是以start开头 + * + * @param str 字符串 + * @param start 开始的字符串 + * @return boolean + */ + startWith: function (str: string, start: string) { + const reg = new RegExp("^" + start); + return reg.test(str); + }, + /** + * 判断字符串是否是以end结尾 + * + * @param str 字符串 + * @param end 结尾的字符串 + * @return boolean + */ + endWith: function (str: string, end: string) { + const reg = new RegExp(end + "$"); + return reg.test(str); + }, + /** + * 判断字符串是否包含指定的字符 + * + * @param input 字符串 + * @param searchStr 搜索的字符串 + * @return boolean + */ + contains: function (input: string, searchStr: string) { + if (this.isEmpty(input) || this.isEmpty(searchStr)) { + return false; + } + return input.indexOf(searchStr) !== -1; + }, + /** + * 检查字符串中是否包含空格 + * @param input 输入字符串 + * @returns boolean + */ + containsWhitespace: function (input: string) { + return this.contains(input, ' '); + }, + /** + * 生成指定个数的字符 + * @param ch 字符 + * @param repeatTimes 重复次数 + * @returns string + */ + repeat: function (ch: string, repeatTimes: number) { + let result = ""; + for (let i = 0; i < repeatTimes; i++) { + result += ch; + } + return result; + }, + /** + * 删除字符串中的空格 + * @param input 输入字符串 + * @returns string + */ + deleteWhitespace: function (input: string) { + return input.replace(/\s+/g, ''); + }, + /** + * 删除字符串中的空格 + * @param input 输入字符串 + * @returns string + */ + rightPad: function (input: string, size: number, padStr: string) { + return input + this.repeat(padStr, size); + }, + /** + * 在字符串左边填充指定字符,直到达到指定长度 + * @param input 输入字符串 + * @param size 目标长度 + * @param padStr 填充字符 + * @returns string + */ + leftPad: function (input: string, size: number, padStr: string) { + return this.repeat(padStr, size) + input; + }, + /** + * 首小写字母转大写 + * @param input 输入字符串 + * @returns string + */ + capitalize: function (input: string) { + let strLen = 0; + if (input == null || (strLen = input.length) === 0) { + return input; + } + return input.replace(/^[a-z]/, function (matchStr) { + return matchStr.toLocaleUpperCase(); + }); + }, + /** + * 首大写字母转小写 + * @param input 输入字符串 + * @returns string + */ + uncapitalize: function (input: string) { + let strLen = 0; + if (input == null || (strLen = input.length) === 0) { + return input; + } + return input.replace(/^[A-Z]/, function (matchStr) { + return matchStr.toLocaleLowerCase(); + }); + }, + /** + * 大写转小写,小写转大写 + * @param input 输入字符串 + * @returns string + */ + swapCase: function (input: string) { + return input.replace(/[a-z]/ig, function (matchStr) { + if (matchStr >= 'A' && matchStr <= 'Z') { + return matchStr.toLocaleLowerCase(); + } else if (matchStr >= 'a' && matchStr <= 'z') { + return matchStr.toLocaleUpperCase(); + } + return matchStr; + }); + }, + /** + * 下划线转驼峰法 + * @param input 输入字符串 + * @returns string + */ + camelCase: function (input: string) { + return input.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase()); + }, + /** + * 标题命名法 + * @param input 输入字符串 + * @returns string + */ + titleCase: function (input: string) { + return input.replace(/( |^)[a-z]/g, L => L.toUpperCase()); + }, + /** + * 统计含有的子字符串的个数 + * @param input 输入字符串 + * @param sub 子字符串 + * @returns number + */ + countMatches: function (input: string, sub: string) { + if (this.isEmpty(input) || this.isEmpty(sub)) { + return 0; + } + let count = 0; + let index = 0; + while ((index = input.indexOf(sub, index)) !== -1) { + index += sub.length; + count++; + } + return count; + }, + /** + * 只包含字母 + * @param input 输入字符串 + * @returns boolean + */ + isAlpha: function (input: string) { + return /^[a-z]+$/i.test(input); + }, + /** + * 只包含字母、空格 + * @param input 输入字符串 + * @returns boolean + */ + isAlphaSpace: function (input: string) { + return /^[a-z\s]*$/i.test(input); + }, + /** + * 只包含字母、数字 + * @param input 输入字符串 + * @returns boolean + */ + isAlphanumeric: function (input: string) { + return /^[a-z0-9]+$/i.test(input); + }, + /** + * 只包含字母、数字和空格 + * @param input 输入字符串 + * @returns boolean + */ + isAlphanumericSpace: function (input: string) { + return /^[a-z0-9\s]*$/i.test(input); + }, + /** + * 只包含数字 + * @param input 输入字符串 + * @returns boolean + */ + isNumeric: function (input: string) { + return /^(?:[1-9]\d*|0)(?:\.\d+)?$/.test(input); + }, + /** + * 小数 + * @param input 输入字符串 + * @returns boolean + */ + isDecimal: function (input: string) { + return /^[-+]?(?:0|[1-9]\d*)\.\d+$/.test(input); + }, + /** + * 负小数 + * @param input 输入字符串 + * @returns boolean + */ + isNegativeDecimal: function (input: string) { + return /^\-?(?:0|[1-9]\d*)\.\d+$/.test(input); + }, + /** + * 正小数 + * @param input 输入字符串 + * @returns boolean + */ + isPositiveDecimal: function (input: string) { + return /^\+?(?:0|[1-9]\d*)\.\d+$/.test(input); + }, + /** + * 整数 + * @param input 输入字符串 + * @returns boolean + */ + isInteger: function (input: string) { + return /^[-+]?(?:0|[1-9]\d*)$/.test(input); + }, + /** + * 正整数 + * @param input 输入字符串 + * @returns boolean + */ + isPositiveInteger: function (input: string) { + return /^\+?(?:0|[1-9]\d*)$/.test(input); + }, + /** + * 负整数 + * @param input 输入字符串 + * @returns boolean + */ + isNegativeInteger: function (input: string) { + return /^\-?(?:0|[1-9]\d*)$/.test(input); + }, + /** + * 只包含数字和空格 + * @param input 输入字符串 + * @returns boolean + */ + isNumericSpace: function (input: string) { + return /^[\d\s]*$/.test(input); + }, + /** + * 只包含空白 + * @param input 输入字符串 + * @returns boolean + */ + isWhitespace: function (input: string) { + return /^\s*$/.test(input); + }, + // 是否全是小写字母 + isAllLowerCase: function (input: string) { + return /^[a-z]+$/.test(input); + }, + /** + * 是否全是大写字母 + * @param input 输入字符串 + * @returns boolean + */ + isAllUpperCase: function (input: string) { + return /^[A-Z]+$/.test(input); + }, + /** + * 默认字符串 + * @param input 输入字符串 + * @param defaultStr 默认字符串 + * @returns string + */ + defaultString: function (input: string, defaultStr: string) { + return input == null ? defaultStr : input; + }, + /** + * 如果为空白,默认字符串 + * @param input 输入字符串 + * @param defaultStr 默认字符串 + * @returns string + */ + defaultIfBlank: function (input: string, defaultStr: string) { + return this.isBlank(input) ? defaultStr : input; + }, + /** + * 如果为空,默认字符串 + * @param input 输入字符串 + * @param defaultStr 默认字符串 + * @returns string + */ + defaultIfEmpty: function (input: string, defaultStr: string) { + return this.isEmpty(input) ? defaultStr : input; + }, + /** + * 字符串反转 + * @param input 输入字符串 + * @returns string + */ + reverse: function (input: string) { + if (this.isBlank(input)) { + input; + } + return input.split("").reverse().join(""); + }, + /** + * 删掉特殊字符(英文状态下) + * @param input 输入字符串 + * @returns string + */ + removeSpecialCharacter: function (input: string) { + return input.replace(/[!-/:-@\[-`{-~]/g, ""); + }, + /** + * 只包含特殊字符、数字和字母(不包括空格,若想包括空格,改为[ -~]) + * @param input 输入字符串 + * @returns boolean + */ + isSpecialCharacterAlphanumeric: function (input: string) { + return /^[!-~]+$/.test(input); + }, + /** + * 校验时排除某些字符串,即不能包含某些字符串 + * @param {Object} conditions:里面有多个属性,如下: + * + * @param {String} matcherFlag 匹配标识 + * 0:数字;1:字母;2:小写字母;3:大写字母;4:特殊字符,指英文状态下的标点符号及括号等;5:中文; + * 6:数字和字母;7:数字和小写字母;8:数字和大写字母;9:数字、字母和特殊字符;10:数字和中文; + * 11:小写字母和特殊字符;12:大写字母和特殊字符;13:字母和特殊字符;14:小写字母和中文;15:大写字母和中文; + * 16:字母和中文;17:特殊字符、和中文;18:特殊字符、字母和中文;19:特殊字符、小写字母和中文;20:特殊字符、大写字母和中文; + * 100:所有字符; + * @param {Array} excludeStrArr 排除的字符串,数组格式 + * @param {String} length 长度,可为空。1,2表示长度1到2之间;10,表示10个以上字符;5表示长度为5 + * @param {Boolean} ignoreCase 是否忽略大小写 + * conditions={matcherFlag:"0",excludeStrArr:[],length:"",ignoreCase:true} + */ + isPatternMustExcludeSomeStr: function (input: string, conditions: any) { + //参数 + const matcherFlag = conditions.matcherFlag; + const excludeStrArr = conditions.excludeStrArr; + const length = conditions.length; + const ignoreCase = conditions.ignoreCase; + //拼正则 + const size = excludeStrArr.length; + let regex = (size === 0) ? "^" : "^(?!.*(?:{0}))"; + let subPattern = ""; + for (let i = 0; i < size; i++) { + excludeStrArr[i] = this.escapeMetacharacterOfStr(excludeStrArr[i]); + subPattern += excludeStrArr[i]; + if (i !== size - 1) { + subPattern += "|"; + } + } + regex = this.format(regex, [subPattern]); + switch (matcherFlag) { + case '0': + regex += "\\d"; + break; + case '1': + regex += "[a-zA-Z]"; + break; + case '2': + regex += "[a-z]"; + break; + case '3': + regex += "[A-Z]"; + break; + case '4': + regex += "[!-/:-@\[-`{-~]"; + break; + case '5': + regex += "[\u4E00-\u9FA5]"; + break; + case '6': + regex += "[a-zA-Z0-9]"; + break; + case '7': + regex += "[a-z0-9]"; + break; + case '8': + regex += "[A-Z0-9]"; + break; + case '9': + regex += "[!-~]"; + break; + case '10': + regex += "[0-9\u4E00-\u9FA5]"; + break; + case '11': + regex += "[a-z!-/:-@\[-`{-~]"; + break; + case '12': + regex += "[A-Z!-/:-@\[-`{-~]"; + break; + case '13': + regex += "[a-zA-Z!-/:-@\[-`{-~]"; + break; + case '14': + regex += "[a-z\u4E00-\u9FA5]"; + break; + case '15': + regex += "[A-Z\u4E00-\u9FA5]"; + break; + case '16': + regex += "[a-zA-Z\u4E00-\u9FA5]"; + break; + case '17': + regex += "[\u4E00-\u9FA5!-/:-@\[-`{-~]"; + break; + case '18': + regex += "[\u4E00-\u9FA5!-~]"; + break; + case '19': + regex += "[a-z\u4E00-\u9FA5!-/:-@\[-`{-~]"; + break; + case '20': + regex += "[A-Z\u4E00-\u9FA5!-/:-@\[-`{-~]"; + break; + case '100': + regex += "[\s\S]"; + break; + default: + alert(matcherFlag + ":This type is not supported!"); + } + regex += this.isNotBlank(length) ? "{" + length + "}" : "+"; + regex += "$"; + const pattern = new RegExp(regex, ignoreCase ? "i" : ""); + return pattern.test(input); + }, + /** + * @param {String} message + * @param {Array} arr + * 消息格式化 + */ + format: function (message: string, arr: Array) { + return message.replace(/{(\d+)}/g, function (matchStr, group1) { + return arr[group1]; + }); + }, + /** + * 把连续出现多次的字母字符串进行压缩。如输入:aaabbbbcccccd 输出:3a4b5cd + * @param {String} input + * @param {Boolean} ignoreCase : true or false + */ + compressRepeatedStr: function (input: string, ignoreCase: boolean) { + const pattern = new RegExp("([a-z])\\1+", ignoreCase ? "ig" : "g"); + return input.replace(pattern, function (matchStr, group1) { + return matchStr.length + group1; + }); + }, + /** + * 校验必须同时包含某些字符串 + * @param {String} input + * @param {Object} conditions:里面有多个属性,如下: + * + * @param {String} matcherFlag 匹配标识 + * 0:数字;1:字母;2:小写字母;3:大写字母;4:特殊字符,指英文状态下的标点符号及括号等;5:中文; + * 6:数字和字母;7:数字和小写字母;8:数字和大写字母;9:数字、字母和特殊字符;10:数字和中文; + * 11:小写字母和特殊字符;12:大写字母和特殊字符;13:字母和特殊字符;14:小写字母和中文;15:大写字母和中文; + * 16:字母和中文;17:特殊字符、和中文;18:特殊字符、字母和中文;19:特殊字符、小写字母和中文;20:特殊字符、大写字母和中文; + * 100:所有字符; + * @param {Array} excludeStrArr 排除的字符串,数组格式 + * @param {String} length 长度,可为空。1,2表示长度1到2之间;10,表示10个以上字符;5表示长度为5 + * @param {Boolean} ignoreCase 是否忽略大小写 + * conditions={matcherFlag:"0",containStrArr:[],length:"",ignoreCase:true} + * + */ + isPatternMustContainSomeStr: function (input: string, conditions: { + matcherFlag: string, + containStrArr: Array, + length: string, + ignoreCase: boolean + }) { + //参数 + const matcherFlag = conditions.matcherFlag; + const containStrArr = conditions.containStrArr; + const length = conditions.length; + const ignoreCase = conditions.ignoreCase; + //创建正则 + const size = containStrArr.length; + let regex = "^"; + let subPattern = ""; + for (let i = 0; i < size; i++) { + containStrArr[i] = this.escapeMetacharacterOfStr(containStrArr[i]); + subPattern += "(?=.*" + containStrArr[i] + ")"; + } + regex += subPattern; + switch (matcherFlag) { + case '0': + regex += "\\d"; + break; + case '1': + regex += "[a-zA-Z]"; + break; + case '2': + regex += "[a-z]"; + break; + case '3': + regex += "[A-Z]"; + break; + case '4': + regex += "[!-/:-@\[-`{-~]"; + break; + case '5': + regex += "[\u4E00-\u9FA5]"; + break; + case '6': + regex += "[a-zA-Z0-9]"; + break; + case '7': + regex += "[a-z0-9]"; + break; + case '8': + regex += "[A-Z0-9]"; + break; + case '9': + regex += "[!-~]"; + break; + case '10': + regex += "[0-9\u4E00-\u9FA5]"; + break; + case '11': + regex += "[a-z!-/:-@\[-`{-~]"; + break; + case '12': + regex += "[A-Z!-/:-@\[-`{-~]"; + break; + case '13': + regex += "[a-zA-Z!-/:-@\[-`{-~]"; + break; + case '14': + regex += "[a-z\u4E00-\u9FA5]"; + break; + case '15': + regex += "[A-Z\u4E00-\u9FA5]"; + break; + case '16': + regex += "[a-zA-Z\u4E00-\u9FA5]"; + break; + case '17': + regex += "[\u4E00-\u9FA5!-/:-@\[-`{-~]"; + break; + case '18': + regex += "[\u4E00-\u9FA5!-~]"; + break; + case '19': + regex += "[a-z\u4E00-\u9FA5!-/:-@\[-`{-~]"; + break; + case '20': + regex += "[A-Z\u4E00-\u9FA5!-/:-@\[-`{-~]"; + break; + case '100': + regex += "[\s\S]"; + break; + default: + alert(matcherFlag + ":This type is not supported!"); + } + regex += this.isNotBlank(length) ? "{" + length + "}" : "+"; + regex += "$"; + const pattern = new RegExp(regex, ignoreCase ? "i" : ""); + return pattern.test(input); + }, + /** + * 中文校验 + * @param input 输入字符串 + * @returns boolean + */ + isChinese: function (input: string) { + return /^[\u4E00-\u9FA5]+$/.test(input); + }, + /** + * 去掉中文字符 + * @param input 输入字符串 + * @returns string + */ + removeChinese: function (input: string) { + return input.replace(/[\u4E00-\u9FA5]+/gm, ""); + }, + /** + * 转义元字符 + * @param input 输入字符串 + * @returns string + */ + escapeMetacharacter: function (input: string) { + const metacharacter = "^$()*+.[]|\\-?{}|"; + if (metacharacter.indexOf(input) >= 0) { + input = "\\" + input; + } + return input; + }, + /** + * 转义字符串中的元字符 + * @param input 输入字符串 + * @returns string + */ + escapeMetacharacterOfStr: function (input: string) { + return input.replace(/[\^\$\*\+\.\|\\\-\?\{\}\|]/gm, "\\$&"); + } +}; diff --git a/src/utils/auth.ts b/src/utils/auth.ts new file mode 100644 index 0000000..795cd0a --- /dev/null +++ b/src/utils/auth.ts @@ -0,0 +1,15 @@ +import Cookies from 'js-cookie' + +const TokenKey = 'Admin-Token' + +export function getToken() { + return localStorage.getItem(TokenKey) +} + +export function setToken(token: string) { + return localStorage.setItem(TokenKey, token) +} + +export function removeToken() { + return localStorage.removeItem(TokenKey) +} diff --git a/src/utils/dict.ts b/src/utils/dict.ts new file mode 100644 index 0000000..430cec7 --- /dev/null +++ b/src/utils/dict.ts @@ -0,0 +1,28 @@ +import useDictStore from '@/store/modules/dict' +import { getDicts } from '@/api/system/dict/data' +import { toRefs, ref, Ref } from 'vue'; + +/** + * 获取字典数据 + */ +export function useDict(...args: T) { + const res = ref({} as Record>); + args.forEach((dictType) => { + res.value[dictType] = []; + const dicts = useDictStore().getDict(dictType); + if (dicts) { + res.value[dictType] = dicts; + } else { + getDicts(dictType).then((resp: { data: Array }) => { + res.value[dictType] = resp.data.map(p => ({ + label: p.dictLabel, + value: p.dictValue, + elTagType: p.listClass, + elTagClass: p.cssClass + })); + useDictStore().setDict(dictType, res.value[dictType]); + }); + } + }); + return toRefs(res.value) as { [K in T[number]]: Ref> }; +} \ No newline at end of file diff --git a/src/utils/drag.ts b/src/utils/drag.ts new file mode 100644 index 0000000..dbd4d93 --- /dev/null +++ b/src/utils/drag.ts @@ -0,0 +1,42 @@ +/** + * 拖拽函数 + * @param onDraging 拖拽时触发的函数 + * @param beforeStop 拖拽结束前触发的函数 + * @returns 用于启动拖动的函数 + */ +export function drag(onDraging: (arg: { x: number, y: number, dx: number, dy: number }) => void, beforeStop?: Function) { + let initialX: null | number = null; + let initialY: null | number = null; + function doDrag(event: MouseEvent) { + if (initialX === null || initialY === null) { + initialX = event.clientX; + initialY = event.clientY; + } + fun.event = event; + onDraging({ + x: event.clientX, + y: event.clientY, + dx: event.clientX - initialX, + dy: event.clientY - initialY, + }) + initialX = event.clientX; + initialY = event.clientY; + } + function stopDrag() { + if (beforeStop) { + beforeStop() + } + initialX = null; + initialY = null; + window.removeEventListener("mousemove", doDrag); + window.removeEventListener("mouseup", stopDrag) + } + const fun = () => { + window.addEventListener("mousemove", doDrag); + window.addEventListener("mouseup", stopDrag); + } + fun.stopDrag = stopDrag + fun.onDraging = onDraging + fun.event = {} as any + return fun +} \ No newline at end of file diff --git a/src/utils/dynamicTitle.ts b/src/utils/dynamicTitle.ts new file mode 100644 index 0000000..8f0c2f0 --- /dev/null +++ b/src/utils/dynamicTitle.ts @@ -0,0 +1,15 @@ +import defaultSettings from '@/settings' +import useSettingsStore from '@/store/modules/settings' +import { StrUtil } from './StrUtil'; + +/** + * 动态修改标题 + */ +export function useDynamicTitle() { + const settingsStore = useSettingsStore(); + if (settingsStore.dynamicTitle && StrUtil.isNotBlank(settingsStore.title)) { + document.title = settingsStore.title + ' - ' + defaultSettings.title; + } else { + document.title = defaultSettings.title; + } +} \ No newline at end of file diff --git a/src/utils/errorCode.ts b/src/utils/errorCode.ts new file mode 100644 index 0000000..62f1d25 --- /dev/null +++ b/src/utils/errorCode.ts @@ -0,0 +1,6 @@ +export default { + '401': '认证失败,无法访问系统资源', + '403': '当前操作没有权限', + '404': '访问资源不存在', + 'default': '系统未知错误,请反馈给管理员' +} as { [key: string]: any } diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..bdc11ac --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,387 @@ +import { parseTime } from './ruoyi' + +/** + * 表格时间格式化 + */ +export function formatDate(cellValue) { + if (cellValue == null || cellValue == "") return ""; + var date = new Date(cellValue) + var year = date.getFullYear() + var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 + var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() + var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() + var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() + var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() + return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds +} + +/** + * 获取传入时间与当前时间的相差时间 + * @param {number} time 输入的时间 + * @param {string} option 与parseTime相同 + * @returns {string} 刚刚、1分钟前、1小时前、1天前、具体格式化的时间 + */ +export function formatTime(time, option) { + if (('' + time).length === 10) { + time = parseInt(time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d) / 1000 + + if (diff < 30) { + return '刚刚' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '分钟前' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '小时前' + } else if (diff < 3600 * 24 * 2) { + return '1天前' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) + } +} + +/** + * @param {string} url + * @returns {Object} + */ +export function getQueryObject(url) { + url = url == null ? window.location.href : url + const search = url.substring(url.lastIndexOf('?') + 1) + const obj = {} + const reg = /([^?&=]+)=([^?&=]*)/g + search.replace(reg, (rs, $1, $2) => { + const name = decodeURIComponent($1) + let val = decodeURIComponent($2) + val = String(val) + obj[name] = val + return rs + }) + return obj +} + +/** + * @param {string} input value + * @returns {number} output value + */ +export function byteLength(str) { + // returns the byte length of an utf8 string + let s = str.length + for (var i = str.length - 1; i >= 0; i--) { + const code = str.charCodeAt(i) + if (code > 0x7f && code <= 0x7ff) s++ + else if (code > 0x7ff && code <= 0xffff) s += 2 + if (code >= 0xDC00 && code <= 0xDFFF) i-- + } + return s +} + +/** + * 清空数组里面的空值 + * @param {Array} actual + * @returns {Array} + */ +export function cleanArray(actual) { + const newArray = [] + for (let i = 0; i < actual.length; i++) { + if (actual[i]) { + newArray.push(actual[i]) + } + } + return newArray +} + +/** + * 将对象转化为请求参数 + * @param {Object} json 复杂度在请求参数允许下的对象 + * @returns {Array} + */ +export function param(json) { + if (!json) return '' + return cleanArray( + Object.keys(json).map(key => { + if (json[key] === undefined) return '' + return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) + }) + ).join('&') +} + +/** + * 将请求参数转化为对象 + * @param {string} url 需要解析的url + * @returns {Object} 解析后的对象 + */ +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} + +/** + * 提取html中的文本 + * @param {string} val 要被提取的html片段 + * @returns {string} + */ +export function html2Text(val) { + const div = document.createElement('div') + div.innerHTML = val + return div.textContent || div.innerText +} + +/** + * 合并对象或数组。将source对象的属性合并到target对象中。如果source是数组,则返回source的浅拷贝。 + * @param {Object} target 目标对象 + * @param {(Object|Array)} source 来源对象 + * @returns {Object} 合并后的对象 + */ +export function objectMerge(target, source) { + if (typeof target !== 'object') { + target = {} + } + if (Array.isArray(source)) { + return source.slice() + } + Object.keys(source).forEach(property => { + const sourceProperty = source[property] + if (typeof sourceProperty === 'object') { + target[property] = objectMerge(target[property], sourceProperty) + } else { + target[property] = sourceProperty + } + }) + return target +} + +/** + * 为指定元素切换指定的类名,若类名存在则移除类名,若类名不存在则添加类名。 + * @param {HTMLElement} element - 需要操作类名的DOM元素。 + * @param {string} className - 需要切换的类名。 + * @returns {void} 不返回任何内容。 + */ +export function toggleClass(element, className) { + if (!element || !className) { + return + } + let classString = element.className + const nameIndex = classString.indexOf(className) + if (nameIndex === -1) { + classString += '' + className + } else { + classString = + classString.substr(0, nameIndex) + + classString.substr(nameIndex + className.length) + } + element.className = classString +} + +/** + * @param {string} type + * @returns {Date} + */ +export function getTime(type) { + if (type === 'start') { + return new Date().getTime() - 3600 * 1000 * 24 * 90 + } else { + return new Date(new Date().toDateString()) + } +} + +/** + * 函数防抖动封装 + * 函数防抖是一种优化策略,用于限制函数调用的频率,即在一定时间间隔内只调用一次函数。 + * @param {Function} func 要被防抖的函数 + * @param {number} wait 防抖时间间隔,单位为毫秒。 + * @param {boolean} immediate 是否在第一次调用时立即执行,而不是等待。 + * @return {Function} 返回一个经过防抖处理的函数。 + */ +export function debounce(func, wait, immediate) { + let timeout, args, context, timestamp, result + + const later = function () { + // 据上一次触发时间间隔 + const last = +new Date() - timestamp + + // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last) + } else { + timeout = null + // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 + if (!immediate) { + result = func.apply(context, args) + if (!timeout) context = args = null + } + } + } + + return function (...args) { + context = this + timestamp = +new Date() + const callNow = immediate && !timeout + // 如果延时不存在,重新设定延时 + if (!timeout) timeout = setTimeout(later, wait) + if (callNow) { + result = func.apply(context, args) + context = args = null + } + + return result + } +} + +/** + * 这只是deep copy的一个简单版本 + * 有很多边缘案例bug + * 如果要使用完美的深度拷贝,请使用lodash的_.cloneDeep + * @template T + * @param {T} source + * @returns {T} + */ +export function deepClone(source) { + if (!source && typeof source !== 'object') { + throw new Error('error arguments', 'deepClone') + } + const targetObj = source.constructor === Array ? [] : {} + Object.keys(source).forEach(keys => { + if (source[keys] && typeof source[keys] === 'object') { + targetObj[keys] = deepClone(source[keys]) + } else { + targetObj[keys] = source[keys] + } + }) + return targetObj +} + +/** + * 除数组中的重复元素并返回新数组 + * @param {Array} arr + * @returns {Array} + */ +export function uniqueArr(arr) { + return Array.from(new Set(arr)) +} + +/** + * 生成一个唯一的字符串 + * @returns {string} + */ +export function createUniqueString() { + const timestamp = +new Date() + '' + const randomNum = parseInt((1 + Math.random()) * 65536) + '' + return (+(randomNum + timestamp)).toString(32) +} + +/** + * 判断一个元素是否包含某个class + * @param {HTMLElement} elm + * @param {string} cls + * @returns {boolean} + */ +export function hasClass(ele, cls) { + return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) +} + +/** + * 给一个元素添加一个class + * @param {HTMLElement} elm + * @param {string} cls + */ +export function addClass(ele, cls) { + if (!hasClass(ele, cls)) ele.className += ' ' + cls +} + +/** + * 删除一个元素的给定class + * @param {HTMLElement} elm + * @param {string} cls + */ +export function removeClass(ele, cls) { + if (hasClass(ele, cls)) { + const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') + ele.className = ele.className.replace(reg, ' ') + } +} + +export function makeMap(str, expectsLowerCase) { + const map = Object.create(null) + const list = str.split(',') + for (let i = 0; i < list.length; i++) { + map[list[i]] = true + } + return expectsLowerCase + ? val => map[val.toLowerCase()] + : val => map[val] +} + +export const exportDefault = 'export default ' + +export const beautifierConf = { + html: { + indent_size: '2', + indent_char: ' ', + max_preserve_newlines: '-1', + preserve_newlines: false, + keep_array_indentation: false, + break_chained_methods: false, + indent_scripts: 'separate', + brace_style: 'end-expand', + space_before_conditional: true, + unescape_strings: false, + jslint_happy: false, + end_with_newline: true, + wrap_line_length: '110', + indent_inner_html: true, + comma_first: false, + e4x: true, + indent_empty_lines: true + }, + js: { + indent_size: '2', + indent_char: ' ', + max_preserve_newlines: '-1', + preserve_newlines: false, + keep_array_indentation: false, + break_chained_methods: false, + indent_scripts: 'normal', + brace_style: 'end-expand', + space_before_conditional: true, + unescape_strings: false, + jslint_happy: true, + end_with_newline: true, + wrap_line_length: '110', + indent_inner_html: true, + comma_first: false, + e4x: true, + indent_empty_lines: true + } +} \ No newline at end of file diff --git a/src/utils/jsencrypt.ts b/src/utils/jsencrypt.ts new file mode 100644 index 0000000..67f1e2f --- /dev/null +++ b/src/utils/jsencrypt.ts @@ -0,0 +1,30 @@ +import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' + +// 密钥对生成 http://web.chacuo.net/netrsakeypair + +const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + + 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' + +const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + + '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + + 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + + 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + + 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + + 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + + 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + + 'UP8iWi1Qw0Y=' + +// 加密 +export function encrypt(txt: string): string { + const encryptor = new JSEncrypt() + encryptor.setPublicKey(publicKey) // 设置公钥 + return encryptor.encrypt(txt) // 对数据进行加密 +} + +// 解密 +export function decrypt(txt: string): string { + const encryptor = new JSEncrypt() + encryptor.setPrivateKey(privateKey) // 设置私钥 + return encryptor.decrypt(txt) // 对数据进行解密 +} + diff --git a/src/utils/permission.ts b/src/utils/permission.ts new file mode 100644 index 0000000..95c66b6 --- /dev/null +++ b/src/utils/permission.ts @@ -0,0 +1,51 @@ +import useUserStore from '@/store/modules/user' + +/** + * 字符权限校验 + * @param {Array} value 校验值 + * @returns {Boolean} + */ +export function checkPermi(value: Array) { + if (value && value instanceof Array && value.length > 0) { + const permissions = useUserStore().permissions + const permissionDatas = value + const all_permission = "*:*:*"; + + const hasPermission = permissions.some(permission => { + return all_permission === permission || permissionDatas.includes(permission) + }) + + if (!hasPermission) { + return false + } + return true + } else { + console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`) + return false + } +} + +/** + * 角色权限校验 + * @param {Array} value 校验值 + * @returns {Boolean} + */ +export function checkRole(value: Array) { + if (value && value instanceof Array && value.length > 0) { + const roles = useUserStore().roles + const permissionRoles = value + const super_admin = "admin"; + + const hasRole = roles.some(role => { + return super_admin === role || permissionRoles.includes(role) + }) + + if (!hasRole) { + return false + } + return true + } else { + console.error(`need roles! Like checkRole="['admin','editor']"`) + return false + } +} \ No newline at end of file diff --git a/src/utils/request.ts b/src/utils/request.ts new file mode 100644 index 0000000..5699464 --- /dev/null +++ b/src/utils/request.ts @@ -0,0 +1,164 @@ +import axios, { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse, InternalAxiosRequestConfig } from 'axios' +import { ElNotification, ElMessageBox, ElMessage, ElLoading } from 'element-plus' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { tansParams, blobValidate } from '@/utils/ruoyi' +import cache from '@/plugins/cache' +import { saveAs } from 'file-saver' +import useUserStore from '@/store/modules/user' +import { router } from '@/router' + +let downloadLoadingInstance: any; +// 是否显示重新登录 +export let isRelogin = { show: false }; +//@ts-ignore +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +import { GeekRequestConfig, GeekResponse } from '@/types/request' +import { RoutesAlias } from '@/router/routesAlias' +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: import.meta.env.VITE_APP_BASE_API, + // 超时 + timeout: 10000 +}) + +// request拦截器 +service.interceptors.request.use((config) => { + // 是否需要设置 token + const isToken = (config.headers ?? {}).isToken === false + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers ?? {}).repeatSubmit === false + if (getToken() && !isToken) { + // 让每个请求携带自定义token 请根据实际情况自行修改 + config.headers['Authorization'] = 'Bearer ' + getToken() + } + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params); + url = url.slice(0, -1); + config.params = {}; + config.url = url; + } + if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { + const requestObj = { + url: config.url, + data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, + time: new Date().getTime() + } + const sessionObj = cache.session.getJSON('sessionObj') + if (sessionObj === undefined || sessionObj === null || sessionObj === '') { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url; // 请求地址 + const s_data = sessionObj.data; // 请求数据 + const s_time = sessionObj.time; // 请求时间 + const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 + if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { + const message = '数据正在处理,请勿重复提交'; + console.warn(`[${s_url}]: ` + message) + return Promise.reject(new Error(message)) + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } + return config +}, error => { + Promise.reject(error) +}) + +// 响应拦截器 +// (value: V) => V | Promise) | null) | null, options?: AxiosInterceptorOptions +service.interceptors.response.use((res: AxiosResponse, any>) => { + // 未设置状态码则默认成功状态 + const code = String(res.data.code || 200); + //获取错误信息 + const msg = errorCode[code] || res.data.msg || errorCode['default'] + // 二进制数据则直接返回 + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { + return res + } + if (code === '401') { + if (!isRelogin.show) { + isRelogin.show = true; + ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { + isRelogin.show = false; + useUserStore().logOut().then(() => { + location.href = router.resolve(RoutesAlias.Home).href; + }) + }).catch(() => { + isRelogin.show = false; + }); + } + return Promise.reject(new Error('无效的会话,或者会话已过期,请重新登录。')) + } else if (code === '500') { + ElMessage({ message: msg, type: 'error' }) + return Promise.reject(new Error(msg)) + } else if (code === '601') { + ElMessage({ message: msg, type: 'warning' }) + return Promise.reject(new Error(msg)) + } else if (code !== '200') { + ElNotification.error({ title: msg }) + return Promise.reject('error') + } else { + return Promise.resolve(res) + } +}, + error => { + let { message } = error; + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("timeout")) { + message = "系统接口请求超时"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + ElMessage({ message: message, type: 'error', duration: 5 * 1000 }) + return Promise.reject(error) + } +) + +// 通用下载方法 +export async function download(url: string, params: any, filename: string, config?: any) { + downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", }) + try { + const res = await service.post(url, params, { + transformRequest: [(params_1) => { return tansParams(params_1) }], + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob', + ...config + }) + const data: Blob = res.data + const isLogin = await blobValidate(data) + if (isLogin) { + const blob = new Blob([data]) + saveAs(blob, filename) + } else { + const resText = await data.text() + const rspObj: GeekResponse = JSON.parse(resText) + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + ElMessage.error(errMsg) + } + downloadLoadingInstance.close() + } catch (r) { + console.error(r) + ElMessage.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close() + } +} +const request = (config: GeekRequestConfig) => service>>(config).then(res => res.data) +export function postAction(url: string, data?: any, isToken: boolean = true) { + return request({ data, url, method: 'POST', headers: { isToken }, }) +} +export function getAction(url: string, params?: any, isToken: boolean = true) { + return request({ params, url, method: 'GET', headers: { isToken }, }) +} +export function putAction(url: string, data?: any, isToken: boolean = true) { + return request({ data, url, method: 'PUT', headers: { isToken }, }) +} +export function deleteAction(url: string, data?: any, isToken: boolean = true) { + return request({ data, url, method: 'DELETE', headers: { isToken }, }) +} + +export default request diff --git a/src/utils/ruoyi.js b/src/utils/ruoyi.js new file mode 100644 index 0000000..0f8c5f2 --- /dev/null +++ b/src/utils/ruoyi.js @@ -0,0 +1,253 @@ + + +/** + * 通用js方法封装处理 + * Copyright (c) 2019 ruoyi + */ + +// 日期格式化 +export function parseTime(time, pattern) { + if (arguments.length === 0 || !time) { + return null + } + const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + time = parseInt(time) + } else if (typeof time === 'string') { + time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); + } + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { + let value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } + if (result.length > 0 && value < 10) { + value = '0' + value + } + return value || 0 + }) + return time_str +} + +// 表单重置 +export function resetForm(refName) { + if (this.$refs[refName]) { + this.$refs[refName].resetFields(); + } +} + +// 添加日期范围 +export function addDateRange(params, dateRange, propName) { + let search = params; + search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; + dateRange = Array.isArray(dateRange) ? dateRange : []; + if (typeof (propName) === 'undefined') { + search.params['beginTime'] = dateRange[0]; + search.params['endTime'] = dateRange[1]; + } else { + search.params['begin' + propName] = dateRange[0]; + search.params['end' + propName] = dateRange[1]; + } + return search; +} + +// 回显数据字典 +export function selectDictLabel(datas, value) { + if (value === undefined) { + return ""; + } + var actions = []; + Object.keys(datas).some((key) => { + if (datas[key].value == ('' + value)) { + actions.push(datas[key].label); + return true; + } + }) + if (actions.length === 0) { + actions.push(value); + } + return actions.join(''); +} + +// 回显数据字典(字符串数组) +export function selectDictLabels(datas, value, separator) { + if (value === undefined || value.length === 0) { + return ""; + } + if (Array.isArray(value)) { + value = value.join(","); + } + var actions = []; + var currentSeparator = undefined === separator ? "," : separator; + var temp = value.split(currentSeparator); + Object.keys(value.split(currentSeparator)).some((val) => { + var match = false; + Object.keys(datas).some((key) => { + if (datas[key].value == ('' + temp[val])) { + actions.push(datas[key].label + currentSeparator); + match = true; + } + }) + if (!match) { + actions.push(temp[val] + currentSeparator); + } + }) + return actions.join('').substring(0, actions.join('').length - 1); +} + +// 字符串格式化(%s ) +export function sprintf(str, ...args) { + var flag = true, i = 0; + str = str.replace(/%s/g, function () { + var arg = args[i++]; + if (typeof arg === 'undefined') { + flag = false; + return ''; + } + return arg; + }); + return flag ? str : ''; +} + +// 转换字符串,undefined,null等转化为"" +export function parseStrEmpty(str) { + if (!str || str == "undefined" || str == "null") { + return ""; + } + return str; +} + +// 数据合并 +export function mergeRecursive(source, target) { + for (var p in target) { + try { + if (target[p].constructor == Object) { + source[p] = mergeRecursive(source[p], target[p]); + } else { + source[p] = target[p]; + } + } catch (e) { + source[p] = target[p]; + } + } + return source; +}; + +/** + * 构造树型结构数据 + * @param {*} data 数据源 + * @param {string} [id='id'] id字段,可选,默认 'id' + * @param {string} [parentId='parentId'] 父节点字段,可选,默认 'parentId' + * @param {string} [children='children'] 孩子节点字段,可选,默认 'children' + * @return {Array}>} 树型结构数据 + */ +export function handleTree(data, id, parentId, children) { + let config = { + id: id || 'id', + parentId: parentId || 'parentId', + childrenList: children || 'children' + }; + + var childrenListMap = {}; + var nodeIds = {}; + var tree = []; + + for (let d of data) { + let parentId = d[config.parentId]; + if (childrenListMap[parentId] == null) { + childrenListMap[parentId] = []; + } + nodeIds[d[config.id]] = d; + childrenListMap[parentId].push(d); + } + + for (let d of data) { + let parentId = d[config.parentId]; + if (nodeIds[parentId] == null) { + tree.push(d); + } + } + + for (let t of tree) { + adaptToChildrenList(t); + } + + function adaptToChildrenList(o) { + if (childrenListMap[o[config.id]] !== null) { + o[config.childrenList] = childrenListMap[o[config.id]]; + } + if (o[config.childrenList]) { + for (let c of o[config.childrenList]) { + adaptToChildrenList(c); + } + } + } + return tree; +} + +/** +* 参数处理 +* @param {*} params 参数 +*/ +export function tansParams(params) { + let result = '' + for (const propName of Object.keys(params)) { + const value = params[propName]; + var part = encodeURIComponent(propName) + "="; + if (value !== null && value !== "" && typeof (value) !== "undefined") { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { + let params = propName + '[' + key + ']'; + var subPart = encodeURIComponent(params) + "="; + result += subPart + encodeURIComponent(value[key]) + "&"; + } + } + } else { + result += part + encodeURIComponent(value) + "&"; + } + } + } + return result +} + + +// 返回项目路径 +export function getNormalPath(p) { + if (p.length === 0 || !p || p == 'undefined') { + return p + }; + let res = p.replace('//', '/') + if (res[res.length - 1] === '/') { + return res.slice(0, res.length - 1) + } + return res; +} + +// 验证是否为blob格式 +export async function blobValidate(data) { + try { + const text = await data.text(); + JSON.parse(text); + return false; + } catch (error) { + return true; + } +} \ No newline at end of file diff --git a/src/utils/scroll-to.ts b/src/utils/scroll-to.ts new file mode 100644 index 0000000..a4c61b1 --- /dev/null +++ b/src/utils/scroll-to.ts @@ -0,0 +1,62 @@ +const easeInOutQuad = function (t: number, b: number, c: number, d: number) { + t /= d / 2 + if (t < 1) { + return c / 2 * t * t + b + } + t-- + return -c / 2 * (t * (t - 2) - 1) + b +} + +// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts +const requestAnimFrame = (function () { + return window.requestAnimationFrame + || (window as any).webkitRequestAnimationFrame + || (window as any).mozRequestAnimationFrame + || function (callback) { window.setTimeout(callback, 1000 / 60) } +})() + +/** + * Because it's so fucking difficult to detect the scrolling element, just move them all + * @param {number} amount + */ +function move(amount: number) { + document.documentElement.scrollTop = amount; + (document.body.parentNode as HTMLElement).scrollTop = amount; + document.body.scrollTop = amount; +} + +function position() { + return document.documentElement.scrollTop + || (document.body.parentNode as HTMLElement).scrollTop + || document.body.scrollTop +} + +/** + * @param {number} to + * @param {number} duration + */ +export function scrollTo(to: number, duration: number) { + + return new Promise((resolve) => { + const start = position() + const change = to - start + const increment = 20 + let currentTime = 0 + duration = (typeof (duration) === 'undefined') ? 500 : duration + const animateScroll = function () { + // increment the time + currentTime += increment + // find the value with the quadratic in-out easing function + const val = easeInOutQuad(currentTime, start, change, duration) + // move the document.body + move(val) + // do the animation unless its over + if (currentTime < duration) { + requestAnimFrame(animateScroll) + } else { + resolve() + } + } + animateScroll() + }) +} diff --git a/src/utils/theme.ts b/src/utils/theme.ts new file mode 100644 index 0000000..fe2d642 --- /dev/null +++ b/src/utils/theme.ts @@ -0,0 +1,49 @@ +// 处理主题样式 +export function handleThemeStyle(theme:string) { + document.documentElement.style.setProperty('--el-color-primary', theme) + for (let i = 1; i <= 9; i++) { + document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, `${getLightColor(theme, i / 10)}`) + } + for (let i = 1; i <= 9; i++) { + document.documentElement.style.setProperty(`--el-color-primary-dark-${i}`, `${getDarkColor(theme, i / 10)}`) + } +} + +// hex颜色转rgb颜色 +export function hexToRgb(str:string) { + str = str.replace('#', '') + let hexs:any = str.match(/../g) + for (let i = 0; i < 3; i++) { + hexs[i] = parseInt(hexs[i], 16) + } + return hexs +} + +// rgb颜色转Hex颜色 +export function rgbToHex(r:number|string, g:number|string, b:number|string) { + let hexs = [r.toString(16), g.toString(16), b.toString(16)] + for (let i = 0; i < 3; i++) { + if (hexs[i].length == 1) { + hexs[i] = `0${hexs[i]}` + } + } + return `#${hexs.join('')}` +} + +// 变浅颜色值 +export function getLightColor(color:any, level:number) { + let rgb = hexToRgb(color) + for (let i = 0; i < 3; i++) { + rgb[i] = Math.floor((255 - rgb[i]) * level + rgb[i]) + } + return rgbToHex(rgb[0], rgb[1], rgb[2]) +} + +// 变深颜色值 +export function getDarkColor(color:any, level:number) { + let rgb = hexToRgb(color) + for (let i = 0; i < 3; i++) { + rgb[i] = Math.floor(rgb[i] * (1 - level)) + } + return rgbToHex(rgb[0], rgb[1], rgb[2]) +} diff --git a/src/utils/validate.ts b/src/utils/validate.ts new file mode 100644 index 0000000..1aceaa4 --- /dev/null +++ b/src/utils/validate.ts @@ -0,0 +1,106 @@ +/** + * 路径匹配器 + * @param {string} pattern + * @param {string} path + * @returns {Boolean} + */ +export function isPathMatch(pattern:string, path:string) { + const regexPattern = pattern.replace(/\//g, '\\/').replace(/\*\*/g, '.*').replace(/\*/g, '[^\\/]*') + const regex = new RegExp(`^${regexPattern}$`) + return regex.test(path) +} + + +/** + * 判断url是否是http或https + * @param {string} url + * @returns {Boolean} + */ +export function isHttp(url: string) { + return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1 +} + +/** + * 判断path是否为外链 + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path: string) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str: string) { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} + +/** + * @param {string} url + * @returns {Boolean} + */ +export function validURL(url: string) { + const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ + return reg.test(url) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validLowerCase(str: string) { + const reg = /^[a-z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUpperCase(str: string) { + const reg = /^[A-Z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validAlphabets(str: string) { + const reg = /^[A-Za-z]+$/ + return reg.test(str) +} + +/** + * @param {string} email + * @returns {Boolean} + */ +export function validEmail(email: string) { + const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + return reg.test(email) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function isString(str: string | String) { + if (typeof str === 'string' || str instanceof String) { + return true + } + return false +} + +/** + * @param {Array} arg + * @returns {Boolean} + */ +export function isArray(arg: string) { + if (typeof Array.isArray === 'undefined') { + return Object.prototype.toString.call(arg) === '[object Array]' + } + return Array.isArray(arg) +} diff --git a/src/views/auth/index.vue b/src/views/auth/index.vue new file mode 100644 index 0000000..f1b2e17 --- /dev/null +++ b/src/views/auth/index.vue @@ -0,0 +1,372 @@ + + + diff --git a/src/views/auth/login.vue b/src/views/auth/login.vue new file mode 100644 index 0000000..5934fcc --- /dev/null +++ b/src/views/auth/login.vue @@ -0,0 +1,245 @@ + + + + diff --git a/src/views/auth/oauth.vue b/src/views/auth/oauth.vue new file mode 100644 index 0000000..0d2d7f6 --- /dev/null +++ b/src/views/auth/oauth.vue @@ -0,0 +1,171 @@ + + + \ No newline at end of file diff --git a/src/views/auth/register.vue b/src/views/auth/register.vue new file mode 100644 index 0000000..89c74b2 --- /dev/null +++ b/src/views/auth/register.vue @@ -0,0 +1,248 @@ + + + + diff --git a/src/views/error/401.vue b/src/views/error/401.vue new file mode 100644 index 0000000..1ba3792 --- /dev/null +++ b/src/views/error/401.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/views/error/404.vue b/src/views/error/404.vue new file mode 100644 index 0000000..f205303 --- /dev/null +++ b/src/views/error/404.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/src/views/flowable/definition/index.vue b/src/views/flowable/definition/index.vue new file mode 100644 index 0000000..d07325d --- /dev/null +++ b/src/views/flowable/definition/index.vue @@ -0,0 +1,465 @@ + + + \ No newline at end of file diff --git a/src/views/flowable/definition/model.vue b/src/views/flowable/definition/model.vue new file mode 100644 index 0000000..f1d754f --- /dev/null +++ b/src/views/flowable/definition/model.vue @@ -0,0 +1,150 @@ + + + diff --git a/src/views/flowable/expression/index.vue b/src/views/flowable/expression/index.vue new file mode 100644 index 0000000..3ce98b5 --- /dev/null +++ b/src/views/flowable/expression/index.vue @@ -0,0 +1,254 @@ + + + diff --git a/src/views/flowable/listener/index.vue b/src/views/flowable/listener/index.vue new file mode 100644 index 0000000..abcf114 --- /dev/null +++ b/src/views/flowable/listener/index.vue @@ -0,0 +1,292 @@ + + + diff --git a/src/views/flowable/task/finished/detail/index.vue b/src/views/flowable/task/finished/detail/index.vue new file mode 100644 index 0000000..1ee4a37 --- /dev/null +++ b/src/views/flowable/task/finished/detail/index.vue @@ -0,0 +1,200 @@ + + + + diff --git a/src/views/flowable/task/finished/index.vue b/src/views/flowable/task/finished/index.vue new file mode 100644 index 0000000..6c0de6f --- /dev/null +++ b/src/views/flowable/task/finished/index.vue @@ -0,0 +1,195 @@ + + + diff --git a/src/views/flowable/task/myProcess/detail/index.vue b/src/views/flowable/task/myProcess/detail/index.vue new file mode 100644 index 0000000..a114477 --- /dev/null +++ b/src/views/flowable/task/myProcess/detail/index.vue @@ -0,0 +1,196 @@ + + + + diff --git a/src/views/flowable/task/myProcess/index.vue b/src/views/flowable/task/myProcess/index.vue new file mode 100644 index 0000000..00ca4bb --- /dev/null +++ b/src/views/flowable/task/myProcess/index.vue @@ -0,0 +1,293 @@ + + + diff --git a/src/views/flowable/task/myProcess/send/index.vue b/src/views/flowable/task/myProcess/send/index.vue new file mode 100644 index 0000000..85fbe39 --- /dev/null +++ b/src/views/flowable/task/myProcess/send/index.vue @@ -0,0 +1,251 @@ + + + + diff --git a/src/views/flowable/task/todo/detail/index.vue b/src/views/flowable/task/todo/detail/index.vue new file mode 100644 index 0000000..e399a4f --- /dev/null +++ b/src/views/flowable/task/todo/detail/index.vue @@ -0,0 +1,450 @@ + + + + diff --git a/src/views/flowable/task/todo/index.vue b/src/views/flowable/task/todo/index.vue new file mode 100644 index 0000000..60d948d --- /dev/null +++ b/src/views/flowable/task/todo/index.vue @@ -0,0 +1,181 @@ + + + diff --git a/src/views/form/data/index.vue b/src/views/form/data/index.vue new file mode 100644 index 0000000..844b3fe --- /dev/null +++ b/src/views/form/data/index.vue @@ -0,0 +1,239 @@ + + + diff --git a/src/views/form/template/index.vue b/src/views/form/template/index.vue new file mode 100644 index 0000000..9a53cf5 --- /dev/null +++ b/src/views/form/template/index.vue @@ -0,0 +1,285 @@ + + + diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..a0c00e3 --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,659 @@ + + + + + diff --git a/src/views/modelMessage/messageSystem/components/addMessage.vue b/src/views/modelMessage/messageSystem/components/addMessage.vue new file mode 100644 index 0000000..b5cce8d --- /dev/null +++ b/src/views/modelMessage/messageSystem/components/addMessage.vue @@ -0,0 +1,267 @@ + + + \ No newline at end of file diff --git a/src/views/modelMessage/messageSystem/components/recipientSelector.vue b/src/views/modelMessage/messageSystem/components/recipientSelector.vue new file mode 100644 index 0000000..bae4976 --- /dev/null +++ b/src/views/modelMessage/messageSystem/components/recipientSelector.vue @@ -0,0 +1,257 @@ + + + diff --git a/src/views/modelMessage/messageSystem/index.vue b/src/views/modelMessage/messageSystem/index.vue new file mode 100644 index 0000000..5b556f0 --- /dev/null +++ b/src/views/modelMessage/messageSystem/index.vue @@ -0,0 +1,182 @@ + + + \ No newline at end of file diff --git a/src/views/modelMessage/template/components/TemplateFormDialog.vue b/src/views/modelMessage/template/components/TemplateFormDialog.vue new file mode 100644 index 0000000..2d0d655 --- /dev/null +++ b/src/views/modelMessage/template/components/TemplateFormDialog.vue @@ -0,0 +1,183 @@ + + + diff --git a/src/views/modelMessage/template/index.vue b/src/views/modelMessage/template/index.vue new file mode 100644 index 0000000..3e38133 --- /dev/null +++ b/src/views/modelMessage/template/index.vue @@ -0,0 +1,226 @@ + + + \ No newline at end of file diff --git a/src/views/modelMessage/variable/components/VariableFormDialog.vue b/src/views/modelMessage/variable/components/VariableFormDialog.vue new file mode 100644 index 0000000..7aed860 --- /dev/null +++ b/src/views/modelMessage/variable/components/VariableFormDialog.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/views/modelMessage/variable/index.vue b/src/views/modelMessage/variable/index.vue new file mode 100644 index 0000000..c47c902 --- /dev/null +++ b/src/views/modelMessage/variable/index.vue @@ -0,0 +1,241 @@ + + + \ No newline at end of file diff --git a/src/views/monitor/cache/index.vue b/src/views/monitor/cache/index.vue new file mode 100644 index 0000000..aadbcf4 --- /dev/null +++ b/src/views/monitor/cache/index.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/views/monitor/cache/list.vue b/src/views/monitor/cache/list.vue new file mode 100644 index 0000000..3c09db5 --- /dev/null +++ b/src/views/monitor/cache/list.vue @@ -0,0 +1,168 @@ + + + diff --git a/src/views/monitor/druid/index.vue b/src/views/monitor/druid/index.vue new file mode 100644 index 0000000..13736ec --- /dev/null +++ b/src/views/monitor/druid/index.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/views/monitor/job/index.vue b/src/views/monitor/job/index.vue new file mode 100644 index 0000000..f4b9c21 --- /dev/null +++ b/src/views/monitor/job/index.vue @@ -0,0 +1,434 @@ + + + diff --git a/src/views/monitor/job/log.vue b/src/views/monitor/job/log.vue new file mode 100644 index 0000000..0dd2c07 --- /dev/null +++ b/src/views/monitor/job/log.vue @@ -0,0 +1,225 @@ + + + diff --git a/src/views/monitor/logininfor/index.vue b/src/views/monitor/logininfor/index.vue new file mode 100644 index 0000000..c97a91f --- /dev/null +++ b/src/views/monitor/logininfor/index.vue @@ -0,0 +1,179 @@ + + + diff --git a/src/views/monitor/online/index.vue b/src/views/monitor/online/index.vue new file mode 100644 index 0000000..67f7014 --- /dev/null +++ b/src/views/monitor/online/index.vue @@ -0,0 +1,98 @@ + + + diff --git a/src/views/monitor/operlog/index.vue b/src/views/monitor/operlog/index.vue new file mode 100644 index 0000000..63d91f9 --- /dev/null +++ b/src/views/monitor/operlog/index.vue @@ -0,0 +1,234 @@ + + + diff --git a/src/views/monitor/server/index.vue b/src/views/monitor/server/index.vue new file mode 100644 index 0000000..172443c --- /dev/null +++ b/src/views/monitor/server/index.vue @@ -0,0 +1,187 @@ + + + diff --git a/src/views/ngtools/FlowCal/index.vue b/src/views/ngtools/FlowCal/index.vue new file mode 100644 index 0000000..5ff2283 --- /dev/null +++ b/src/views/ngtools/FlowCal/index.vue @@ -0,0 +1,327 @@ + + + + + diff --git a/src/views/ngtools/components/index.vue b/src/views/ngtools/components/index.vue new file mode 100644 index 0000000..05768ab --- /dev/null +++ b/src/views/ngtools/components/index.vue @@ -0,0 +1,444 @@ + + + diff --git a/src/views/ngtools/meterpar/index.vue b/src/views/ngtools/meterpar/index.vue new file mode 100644 index 0000000..f21d90f --- /dev/null +++ b/src/views/ngtools/meterpar/index.vue @@ -0,0 +1,815 @@ + + + diff --git a/src/views/ngtools/meterresult/index.vue b/src/views/ngtools/meterresult/index.vue new file mode 100644 index 0000000..a72f245 --- /dev/null +++ b/src/views/ngtools/meterresult/index.vue @@ -0,0 +1,399 @@ + + + diff --git a/src/views/ngtools/ngpar/index.vue b/src/views/ngtools/ngpar/index.vue new file mode 100644 index 0000000..0393727 --- /dev/null +++ b/src/views/ngtools/ngpar/index.vue @@ -0,0 +1,693 @@ + + + diff --git a/src/views/online/db/index.vue b/src/views/online/db/index.vue new file mode 100644 index 0000000..3b16442 --- /dev/null +++ b/src/views/online/db/index.vue @@ -0,0 +1,53 @@ + + + \ No newline at end of file diff --git a/src/views/online/mb/index.vue b/src/views/online/mb/index.vue new file mode 100644 index 0000000..9b91b07 --- /dev/null +++ b/src/views/online/mb/index.vue @@ -0,0 +1,400 @@ + + + \ No newline at end of file diff --git a/src/views/online/mb/mybatis-input.vue b/src/views/online/mb/mybatis-input.vue new file mode 100644 index 0000000..f6e2c4a --- /dev/null +++ b/src/views/online/mb/mybatis-input.vue @@ -0,0 +1,238 @@ + + + \ No newline at end of file diff --git a/src/views/online/mb/online-preview.vue b/src/views/online/mb/online-preview.vue new file mode 100644 index 0000000..c7364fa --- /dev/null +++ b/src/views/online/mb/online-preview.vue @@ -0,0 +1,165 @@ + + + + \ No newline at end of file diff --git a/src/views/pay/invoice/index.vue b/src/views/pay/invoice/index.vue new file mode 100644 index 0000000..847fe6b --- /dev/null +++ b/src/views/pay/invoice/index.vue @@ -0,0 +1,146 @@ + + \ No newline at end of file diff --git a/src/views/pay/order/index.vue b/src/views/pay/order/index.vue new file mode 100644 index 0000000..b1a1327 --- /dev/null +++ b/src/views/pay/order/index.vue @@ -0,0 +1,202 @@ + + \ No newline at end of file diff --git a/src/views/pay/paytest/index.vue b/src/views/pay/paytest/index.vue new file mode 100644 index 0000000..1690c71 --- /dev/null +++ b/src/views/pay/paytest/index.vue @@ -0,0 +1,82 @@ + + + \ No newline at end of file diff --git a/src/views/redirect/index.vue b/src/views/redirect/index.vue new file mode 100644 index 0000000..a469960 --- /dev/null +++ b/src/views/redirect/index.vue @@ -0,0 +1,14 @@ + + + \ No newline at end of file diff --git a/src/views/system/config/index.vue b/src/views/system/config/index.vue new file mode 100644 index 0000000..cd66df2 --- /dev/null +++ b/src/views/system/config/index.vue @@ -0,0 +1,253 @@ + + + diff --git a/src/views/system/convert/index.vue b/src/views/system/convert/index.vue new file mode 100644 index 0000000..3af9985 --- /dev/null +++ b/src/views/system/convert/index.vue @@ -0,0 +1,352 @@ + + + diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue new file mode 100644 index 0000000..dc3050e --- /dev/null +++ b/src/views/system/dept/index.vue @@ -0,0 +1,248 @@ + + + diff --git a/src/views/system/dict/data.vue b/src/views/system/dict/data.vue new file mode 100644 index 0000000..2ec62c0 --- /dev/null +++ b/src/views/system/dict/data.vue @@ -0,0 +1,306 @@ + + + diff --git a/src/views/system/dict/index.vue b/src/views/system/dict/index.vue new file mode 100644 index 0000000..8d6d45e --- /dev/null +++ b/src/views/system/dict/index.vue @@ -0,0 +1,258 @@ + + + diff --git a/src/views/system/file/index.vue b/src/views/system/file/index.vue new file mode 100644 index 0000000..f0caafe --- /dev/null +++ b/src/views/system/file/index.vue @@ -0,0 +1,258 @@ + + + \ No newline at end of file diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue new file mode 100644 index 0000000..767a587 --- /dev/null +++ b/src/views/system/menu/index.vue @@ -0,0 +1,440 @@ + + + diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue new file mode 100644 index 0000000..560a73b --- /dev/null +++ b/src/views/system/notice/index.vue @@ -0,0 +1,248 @@ + + + diff --git a/src/views/system/oauth/index.vue b/src/views/system/oauth/index.vue new file mode 100644 index 0000000..5ce82ab --- /dev/null +++ b/src/views/system/oauth/index.vue @@ -0,0 +1,133 @@ + + \ No newline at end of file diff --git a/src/views/system/post/index.vue b/src/views/system/post/index.vue new file mode 100644 index 0000000..11013d6 --- /dev/null +++ b/src/views/system/post/index.vue @@ -0,0 +1,238 @@ + + + diff --git a/src/views/system/role/authUser.vue b/src/views/system/role/authUser.vue new file mode 100644 index 0000000..66b5f5e --- /dev/null +++ b/src/views/system/role/authUser.vue @@ -0,0 +1,172 @@ + + + + diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue new file mode 100644 index 0000000..cba4481 --- /dev/null +++ b/src/views/system/role/index.vue @@ -0,0 +1,489 @@ + + + diff --git a/src/views/system/role/selectUser.vue b/src/views/system/role/selectUser.vue new file mode 100644 index 0000000..9be1ec9 --- /dev/null +++ b/src/views/system/role/selectUser.vue @@ -0,0 +1,140 @@ + + + diff --git a/src/views/system/user/authRole.vue b/src/views/system/user/authRole.vue new file mode 100644 index 0000000..fc42bc6 --- /dev/null +++ b/src/views/system/user/authRole.vue @@ -0,0 +1,120 @@ + + + diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue new file mode 100644 index 0000000..4ae28ce --- /dev/null +++ b/src/views/system/user/index.vue @@ -0,0 +1,534 @@ + + + diff --git a/src/views/system/user/profile/index.vue b/src/views/system/user/profile/index.vue new file mode 100644 index 0000000..f60557c --- /dev/null +++ b/src/views/system/user/profile/index.vue @@ -0,0 +1,105 @@ + + + diff --git a/src/views/system/user/profile/resetEmail.vue b/src/views/system/user/profile/resetEmail.vue new file mode 100644 index 0000000..838ac84 --- /dev/null +++ b/src/views/system/user/profile/resetEmail.vue @@ -0,0 +1,50 @@ + + + \ No newline at end of file diff --git a/src/views/system/user/profile/resetPhone.vue b/src/views/system/user/profile/resetPhone.vue new file mode 100644 index 0000000..1b5819c --- /dev/null +++ b/src/views/system/user/profile/resetPhone.vue @@ -0,0 +1,50 @@ + + + \ No newline at end of file diff --git a/src/views/system/user/profile/resetPwd.vue b/src/views/system/user/profile/resetPwd.vue new file mode 100644 index 0000000..a8a7677 --- /dev/null +++ b/src/views/system/user/profile/resetPwd.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/views/system/user/profile/userAvatar.vue b/src/views/system/user/profile/userAvatar.vue new file mode 100644 index 0000000..f60b45b --- /dev/null +++ b/src/views/system/user/profile/userAvatar.vue @@ -0,0 +1,159 @@ + + + + + \ No newline at end of file diff --git a/src/views/system/user/profile/userInfo.vue b/src/views/system/user/profile/userInfo.vue new file mode 100644 index 0000000..23a5722 --- /dev/null +++ b/src/views/system/user/profile/userInfo.vue @@ -0,0 +1,62 @@ + + + diff --git a/src/views/three/ModelPanel.vue b/src/views/three/ModelPanel.vue new file mode 100644 index 0000000..d7893a9 --- /dev/null +++ b/src/views/three/ModelPanel.vue @@ -0,0 +1,95 @@ + + + \ No newline at end of file diff --git a/src/views/three/OperatePanel.vue b/src/views/three/OperatePanel.vue new file mode 100644 index 0000000..2330a68 --- /dev/null +++ b/src/views/three/OperatePanel.vue @@ -0,0 +1,67 @@ + + \ No newline at end of file diff --git a/src/views/three/Panel.vue b/src/views/three/Panel.vue new file mode 100644 index 0000000..078bc7d --- /dev/null +++ b/src/views/three/Panel.vue @@ -0,0 +1,103 @@ + + + \ No newline at end of file diff --git a/src/views/three/SelectedPanel.vue b/src/views/three/SelectedPanel.vue new file mode 100644 index 0000000..56ddd9d --- /dev/null +++ b/src/views/three/SelectedPanel.vue @@ -0,0 +1,102 @@ + + \ No newline at end of file diff --git a/src/views/three/ThreePanel.vue b/src/views/three/ThreePanel.vue new file mode 100644 index 0000000..33adb74 --- /dev/null +++ b/src/views/three/ThreePanel.vue @@ -0,0 +1,79 @@ + + + + \ No newline at end of file diff --git a/src/views/three/director.ts b/src/views/three/director.ts new file mode 100644 index 0000000..611e9f1 --- /dev/null +++ b/src/views/three/director.ts @@ -0,0 +1,92 @@ +import { ref, shallowReactive, watch } from "vue"; +import { Director, TreeNode } from "./three-plus/ThreeHelper"; +import * as THREE from 'three' +import { explodeModel, initExplodeModel } from "./three-plus/ExplodeControls"; +const director = new Director({ + width: window.innerWidth, + height: window.innerHeight, +}) +function initFastKey() { + document.addEventListener('keydown', (e) => { + console.log(e.altKey); + if (e.key === 'Escape') { + e.preventDefault(); + unselectObject() + } + if (e.key === 'Backspace') { + e.preventDefault(); + if (transform.object) { + let o = director.getObjectBySingleUUID(transform.object.uuid) + if (o) { + if (o.parent) { + o.parent.remove(o) + } else { + director.scene.remove(o) + } + refreshThree() + } + } + } + }) +} +export function initDirector(dom: HTMLElement) { + dom.appendChild(director.renderer.domElement) + initFastKey() + director.scene.background = new THREE.TextureLoader().load("/glb/bg.jpeg") + director.switchAxesHelper(true) + director.switchGridHelper(true) + director.switchStats(true) + director.startRender() +} + +export default director + + +const transform = shallowReactive<{ + mode: "translate" | "rotate" | "scale", + object: THREE.Object3D | null, + explode: number +}>({ + object: null, + mode: 'translate', + explode: 0, +}) + +export function selectObject(object: THREE.Object3D) { + transform.object = object + director.controls.selectControls.outlinePass.selectedObjects = [transform.object] + director.controls.dragControls.objects = [transform.object] + initExplodeModel(transform.object) +} +export function selectNode(object: THREE.Object3D) { + transform.object = object + director.controls.selectControls.outlinePass.selectedObjects = [transform.object] + director.controls.transformControls.attach(transform.object) + director.controls.selectControls.enabled = false + director.controls.dragControls.enabled = false + director.scene.add(director.controls.transformControls.getHelper()) + initExplodeModel(transform.object) +} +export function unselectObject() { + transform.object = null + director.controls.selectControls.outlinePass.selectedObjects = [] + director.controls.transformControls.detach() + director.controls.selectControls.enabled = true + director.controls.dragControls.enabled = true + director.scene.remove(director.controls.transformControls.getHelper()) +} +watch(() => transform.mode, () => { + if (!director) return + director.controls.transformControls.setMode(transform.mode) +}) +watch(() => transform.explode, value => { + if (!director || !transform.object) return + explodeModel(transform.object, value) +}) +export { transform } + +export const modelthree = ref(new Array()) +export function refreshThree() { + if (!director) return + modelthree.value = director.generateTreeData() +} \ No newline at end of file diff --git a/src/views/three/gltfmode.vue b/src/views/three/gltfmode.vue new file mode 100644 index 0000000..a89bb65 --- /dev/null +++ b/src/views/three/gltfmode.vue @@ -0,0 +1,68 @@ + + + + \ No newline at end of file diff --git a/src/views/three/three-plus/CapsControls.ts b/src/views/three/three-plus/CapsControls.ts new file mode 100644 index 0000000..71d0513 --- /dev/null +++ b/src/views/three/three-plus/CapsControls.ts @@ -0,0 +1,623 @@ +import * as THREE from 'three' +import { loadModel, MeshBasicMaterialToShaderMaterial } from './utils'; +import { setToNormalizedDeviceCoordinates, MeshStandardMaterialToShaderMaterial } from './utils'; + +type AxisKey = "x1" | "y1" | "z1" | "x2" | "y2" | "z2"; + +class Geometry extends THREE.BufferGeometry { + public vertices: THREE.Vector3[] = []; + constructor() { + super(); + this.name = "Geometry" + } + + push(...args: THREE.Vector3[]) { + this.vertices = this.vertices.concat(args); + const points = this.vertices.flatMap(v => [v.x, v.y, v.z]); + const positionAttribute = new THREE.Float32BufferAttribute(points, 3); + this.setAttribute('position', positionAttribute); + } + + set dynamic(value: boolean) { + this.attributes.position.needsUpdate = value; + } + + get dynamic() { + return this.attributes.position.needsUpdate; + } + + set verticesNeedUpdate(value: boolean) { + const points = this.vertices.flatMap(v => [v.x, v.y, v.z]); + const positionAttribute = new THREE.Float32BufferAttribute(points, 3); + this.setAttribute('position', positionAttribute); + this.attributes.position.needsUpdate = value; + } + + get verticesNeedUpdate() { + return this.attributes.position.needsUpdate; + } + + computeLineDistances() { + const positions = this.attributes.position.array; + if (positions.length === 0) return; + + const lineDistances = [0]; + let totalDistance = 0; + + for (let i = 1; i < positions.length / 3; i++) { + const x1 = positions[(i - 1) * 3]; + const y1 = positions[(i - 1) * 3 + 1]; + const z1 = positions[(i - 1) * 3 + 2]; + + const x2 = positions[i * 3]; + const y2 = positions[i * 3 + 1]; + const z2 = positions[i * 3 + 2]; + + const dx = x2 - x1; + const dy = y2 - y1; + const dz = z2 - z1; + + const distance = Math.sqrt(dx * dx + dy * dy + dz * dz); + totalDistance += distance; + lineDistances.push(totalDistance); + } + + const lineDistancesAttribute = new THREE.Float32BufferAttribute(lineDistances, 1); + this.setAttribute('lineDistance', lineDistancesAttribute); + } +} +class PlaneGeometry extends Geometry { + constructor(v0: THREE.Vector3, v1: THREE.Vector3, v2: THREE.Vector3, v3: THREE.Vector3) { + super(); + this.name = "PlaneGeometry"; + super.push(v0, v1, v2, v3); + + const indices = [ + 0, 1, 2, + 0, 2, 3 + ]; + const indexAttribute = new THREE.Uint16BufferAttribute(indices, 1); + this.setIndex(indexAttribute); + + super.computeVertexNormals(); + } +} +class CapsMesh extends THREE.Mesh { + constructor( + geometry: PlaneGeometry, + material: THREE.ShaderMaterial, + public axis: AxisKey, + public guardian: SelectionBoxFace + ) { + super(geometry, material); + this.name = 'CapsMesh' + } +} +class SelectionBoxFace { + lines: SelectionBoxLine[] = [] + constructor(axis: AxisKey, v0: THREE.Vector3, v1: THREE.Vector3, v2: THREE.Vector3, v3: THREE.Vector3, selection: Selection) { + const frontFaceGeometry = new PlaneGeometry(v0, v1, v2, v3); + frontFaceGeometry.name = "frontFaceGeometry" + frontFaceGeometry.dynamic = true; + selection.meshGeometries.push(frontFaceGeometry); + + const frontFaceMesh = new CapsMesh(frontFaceGeometry, CAPS.MATERIAL.Invisible, axis, this); + frontFaceMesh.name = "frontFaceMesh" + frontFaceMesh.userData.isCanSelect = false; + selection.touchMeshes.add(frontFaceMesh); + selection.selectables.push(frontFaceMesh); + + const backFaceGeometry = new PlaneGeometry(v3, v2, v1, v0); + backFaceGeometry.name = "backFaceGeometry" + backFaceGeometry.userData.isCanSelect = false; + backFaceGeometry.dynamic = true; + selection.meshGeometries.push(backFaceGeometry); + + const backFaceMesh = new THREE.Mesh(backFaceGeometry, CAPS.MATERIAL.BoxBackFace); + backFaceMesh.name = "backFaceMesh" + backFaceMesh.userData.isCanSelect = false; + selection.displayMeshes.add(backFaceMesh); + } + + rayOver() { + this.highlightLines(true); + } + + rayOut() { + this.highlightLines(false); + } + + highlightLines(b: boolean) { + for (let i = 0; i < this.lines.length; i++) { + this.lines[i].setHighlight(b); + } + } +} +class SelectionBoxLine { + line: THREE.LineSegments; + constructor(v0: THREE.Vector3, v1: THREE.Vector3, f0: SelectionBoxFace, f1: SelectionBoxFace, selection: Selection) { + const lineGeometry = new Geometry(); + lineGeometry.name = "lineGeometry" + lineGeometry.push(v0, v1); + // 手动计算线段距离 + lineGeometry.computeLineDistances(); + lineGeometry.dynamic = true; + selection.lineGeometries.push(lineGeometry); + + this.line = new THREE.LineSegments(lineGeometry, CAPS.MATERIAL.BoxWireframe); + this.line.name = "LineSegments" + this.line.userData.isCanSelect = false; + selection.displayMeshes.add(this.line); + + f0.lines.push(this); + f1.lines.push(this); + } + + setHighlight(b: boolean) { + this.line.material = b ? CAPS.MATERIAL.BoxWireActive : CAPS.MATERIAL.BoxWireframe; + } +} +class Selection { + faces: SelectionBoxFace[] = []; + box: THREE.BoxGeometry = new THREE.BoxGeometry(1, 1, 1); + boxMesh: THREE.Mesh; + vertices: THREE.Vector3[]; + touchMeshes: THREE.Object3D = new THREE.Object3D(); + displayMeshes: THREE.Object3D = new THREE.Object3D(); + meshGeometries: PlaneGeometry[] = []; + lineGeometries: Geometry[] = []; + selectables: THREE.Mesh[] = []; + + constructor(public limitLow: THREE.Vector3, public limitHigh: THREE.Vector3) { + this.touchMeshes.name = "touchMeshes" + this.displayMeshes.name = "displayMeshes" + this.boxMesh = new THREE.Mesh(this.box, CAPS.MATERIAL.cap()); + this.boxMesh.name = "boxMesh"; + this.vertices = [ + new THREE.Vector3(), new THREE.Vector3(), + new THREE.Vector3(), new THREE.Vector3(), + new THREE.Vector3(), new THREE.Vector3(), + new THREE.Vector3(), new THREE.Vector3() + ]; + this.updateVertices(); + const v = this.vertices; + const f = this.faces; + this.faces.push(new SelectionBoxFace('y1', v[0], v[1], v[5], v[4], this)); + this.faces.push(new SelectionBoxFace('z1', v[0], v[2], v[3], v[1], this)); + this.faces.push(new SelectionBoxFace('x1', v[0], v[4], v[6], v[2], this)); + this.faces.push(new SelectionBoxFace('x2', v[7], v[5], v[1], v[3], this)); + this.faces.push(new SelectionBoxFace('y2', v[7], v[3], v[2], v[6], this)); + this.faces.push(new SelectionBoxFace('z2', v[7], v[6], v[4], v[5], this)); + + const l0 = new SelectionBoxLine(v[0], v[1], f[0], f[1], this); + const l1 = new SelectionBoxLine(v[0], v[2], f[1], f[2], this); + const l2 = new SelectionBoxLine(v[0], v[4], f[0], f[2], this); + const l3 = new SelectionBoxLine(v[1], v[3], f[1], f[3], this); + const l4 = new SelectionBoxLine(v[1], v[5], f[0], f[3], this); + const l5 = new SelectionBoxLine(v[2], v[3], f[1], f[4], this); + const l6 = new SelectionBoxLine(v[2], v[6], f[2], f[4], this); + const l7 = new SelectionBoxLine(v[3], v[7], f[3], f[4], this); + const l8 = new SelectionBoxLine(v[4], v[5], f[0], f[5], this); + const l9 = new SelectionBoxLine(v[4], v[6], f[2], f[5], this); + const l10 = new SelectionBoxLine(v[5], v[7], f[3], f[5], this); + const l11 = new SelectionBoxLine(v[6], v[7], f[4], f[5], this); + + this.setBox(); + this.setUniforms(); + } + + updateVertices() { + this.vertices[0].set(this.limitLow.x, this.limitLow.y, this.limitLow.z); + this.vertices[1].set(this.limitHigh.x, this.limitLow.y, this.limitLow.z); + this.vertices[2].set(this.limitLow.x, this.limitHigh.y, this.limitLow.z); + this.vertices[3].set(this.limitHigh.x, this.limitHigh.y, this.limitLow.z); + this.vertices[4].set(this.limitLow.x, this.limitLow.y, this.limitHigh.z); + this.vertices[5].set(this.limitHigh.x, this.limitLow.y, this.limitHigh.z); + this.vertices[6].set(this.limitLow.x, this.limitHigh.y, this.limitHigh.z); + this.vertices[7].set(this.limitHigh.x, this.limitHigh.y, this.limitHigh.z); + } + + updateGeometries() { + for (let i = 0; i < this.meshGeometries.length; i++) { + this.meshGeometries[i].verticesNeedUpdate = true; + this.meshGeometries[i].computeBoundingSphere(); + this.meshGeometries[i].computeBoundingBox(); + } + for (let i = 0; i < this.lineGeometries.length; i++) { + this.lineGeometries[i].verticesNeedUpdate = true; + } + } + + setBox() { + const width = new THREE.Vector3(); + width.subVectors(this.limitHigh, this.limitLow); + + this.boxMesh.scale.copy(width); + width.multiplyScalar(0.5).add(this.limitLow); + this.boxMesh.position.copy(width); + } + + setUniforms() { + const uniforms = CAPS.UNIFORMS.clipping; + uniforms.clippingLow.value.copy(this.limitLow); + uniforms.clippingHigh.value.copy(this.limitHigh); + } + + setValue(axis: AxisKey, value: number) { + const buffer = 0.4; + const limit = 14; + + if (axis === 'x1') { + this.limitLow.x = Math.max(-limit, Math.min(this.limitHigh.x - buffer, value)); + } else if (axis === 'x2') { + this.limitHigh.x = Math.max(this.limitLow.x + buffer, Math.min(limit, value)); + } else if (axis === 'y1') { + this.limitLow.y = Math.max(-limit, Math.min(this.limitHigh.y - buffer, value)); + } else if (axis === 'y2') { + this.limitHigh.y = Math.max(this.limitLow.y + buffer, Math.min(limit, value)); + } else if (axis === 'z1') { + this.limitLow.z = Math.max(-limit, Math.min(this.limitHigh.z - buffer, value)); + } else if (axis === 'z2') { + this.limitHigh.z = Math.max(this.limitLow.z + buffer, Math.min(limit, value)); + } + + this.setBox(); + this.setUniforms(); + + this.updateVertices(); + this.updateGeometries(); + } +} +class Simulation { + capsScene: THREE.Scene = new THREE.Scene(); + backStencil: THREE.Scene = new THREE.Scene(); + frontStencil: THREE.Scene = new THREE.Scene(); + selection: Selection; + capGroup: THREE.Group = new THREE.Group(); + showCaps: boolean = true + visible: boolean = true + constructor( + public scene: THREE.Scene, + public camera: THREE.PerspectiveCamera, + public renderer: THREE.WebGLRenderer, + public controls: THREE.Controls<{}>, + + ) { + this.selection = new Selection( + new THREE.Vector3(-7, -14, -14), + new THREE.Vector3(14, 9, 3) + ); + this.init(); + } + + init() { + this.camera.position.set(20, 20, 30); + this.camera.lookAt(new THREE.Vector3(0, 0, 0)); + this.capsScene.add(this.selection.boxMesh); + this.capGroup.add(this.selection.displayMeshes); + this.capGroup.add(this.selection.touchMeshes); + this.capGroup.name = "CapHelper"; + this.scene.add(this.capGroup); + this.picking(); // must come before + } + + initScene(collada: THREE.Object3D) { + const setMaterial = (node: THREE.Object3D, material: THREE.ShaderMaterial | ((...age: any[]) => THREE.ShaderMaterial)) => { + if (node instanceof THREE.Mesh || node instanceof THREE.Line) { + if (typeof material === 'function') { + node.material = material(node.material); + } else { + node.material = material; + } + } + if (node.children) node.children.forEach(n => setMaterial(n, material)) + }; + const scale = 0.3 + const back = collada.clone(); + setMaterial(back, CAPS.MATERIAL.backStencil); + back.scale.set(scale, scale, scale); + back.updateMatrix(); + this.backStencil.add(back); + + const front = collada.clone(); + setMaterial(front, CAPS.MATERIAL.frontStencil); + front.scale.set(scale, scale, scale); + front.updateMatrix(); + this.frontStencil.add(front); + + const cloneCollada = collada.clone() + setMaterial(cloneCollada, CAPS.MATERIAL.sheet); + cloneCollada.scale.set(scale, scale, scale); + cloneCollada.updateMatrix(); + this.scene.add(cloneCollada); + this.scene.remove(collada) + + return { back, front, cloneCollada, collada } + } + + picking() { + let intersected: CapsMesh | null = null; + const mouse = new THREE.Vector2(); + const ray = new THREE.Raycaster(); + + const normals = { + x1: new THREE.Vector3(-1, 0, 0), + x2: new THREE.Vector3(1, 0, 0), + y1: new THREE.Vector3(0, -1, 0), + y2: new THREE.Vector3(0, 1, 0), + z1: new THREE.Vector3(0, 0, -1), + z2: new THREE.Vector3(0, 0, 1) + }; + + const CapPlane = new THREE.Mesh(new THREE.PlaneGeometry(100, 100, 4, 4), CAPS.MATERIAL.Invisible); + CapPlane.name = "CapPlane" + CapPlane.userData.isCanSelect = false; + this.capGroup.add(CapPlane); + + const targeting = (event: MouseEvent | TouchEvent) => { + if (!this.visible) return + setToNormalizedDeviceCoordinates(mouse, event, window); + ray.setFromCamera(mouse, this.camera); + const intersects = ray.intersectObjects(this.selection.selectables); + if (intersects.length > 0) { + console.log("targeting", intersects); + const candidate = intersects[0].object as CapsMesh; + if (intersected !== candidate) { + if (intersected !== null) { + intersected.guardian.rayOut(); + } + candidate.guardian.rayOver(); + intersected = candidate; + this.renderer.domElement.style.cursor = 'pointer'; + } + } else if (intersected !== null) { + intersected.guardian.rayOut(); + intersected = null; + this.renderer.domElement.style.cursor = 'auto'; + } + }; + + const beginDrag = (event: MouseEvent | TouchEvent) => { + if (!this.visible) return + setToNormalizedDeviceCoordinates(mouse, event, window); + ray.setFromCamera(mouse, this.camera); + const intersects = ray.intersectObjects(this.selection.selectables); + if (intersects.length > 0) { + event.preventDefault(); + event.stopPropagation(); + this.controls.enabled = false; + const intersectionPoint = intersects[0].point; + const object = intersects[0].object as CapsMesh + const axis = object.axis; + if (axis === 'x1' || axis === 'x2') { + intersectionPoint.setX(0); + } else if (axis === 'y1' || axis === 'y2') { + intersectionPoint.setY(0); + } else if (axis === 'z1' || axis === 'z2') { + intersectionPoint.setZ(0); + } + CapPlane.position.copy(intersectionPoint); + const newNormal = this.camera.position.clone().sub( + this.camera.position.clone().projectOnVector(normals[axis]) + ); + CapPlane.lookAt(newNormal.add(intersectionPoint)); + this.renderer.domElement.style.cursor = 'move'; + const continueDrag = (event: MouseEvent | TouchEvent) => { + event.preventDefault(); + event.stopPropagation(); + setToNormalizedDeviceCoordinates(mouse, event, window); + ray.setFromCamera(mouse, this.camera); + const intersects = ray.intersectObject(CapPlane); + if (intersects.length > 0) { + let value: number = NaN; + if (axis === 'x1' || axis === 'x2') { + value = intersects[0].point.x; + } else if (axis === 'y1' || axis === 'y2') { + value = intersects[0].point.y; + } else if (axis === 'z1' || axis === 'z2') { + value = intersects[0].point.z; + } + this.selection.setValue(axis, value); + } + }; + const endDrag = () => { + this.controls.enabled = true; + this.renderer.domElement.style.cursor = 'pointer'; + document.removeEventListener('mousemove', continueDrag, true); + document.removeEventListener('touchmove', continueDrag, true); + document.removeEventListener('mouseup', endDrag, false); + document.removeEventListener('touchend', endDrag, false); + document.removeEventListener('touchcancel', endDrag, false); + document.removeEventListener('touchleave', endDrag, false); + }; + + document.addEventListener('mousemove', continueDrag, true); + document.addEventListener('touchmove', continueDrag, true); + document.addEventListener('mouseup', endDrag, false); + document.addEventListener('touchend', endDrag, false); + document.addEventListener('touchcancel', endDrag, false); + document.addEventListener('touchleave', endDrag, false); + } + + }; + this.renderer.domElement.addEventListener('mousemove', targeting, true); + this.renderer.domElement.addEventListener('mousedown', beginDrag, false); + this.renderer.domElement.addEventListener('touchstart', beginDrag, false); + } + update() { + this.renderer.render(this.backStencil, this.camera); + this.renderer.render(this.capsScene, this.camera); + this.renderer.render(this.frontStencil, this.camera); + } +} +import vertexClipping from './glsl/CapsControls/vertexClipping.glsl' +import vertex from './glsl/CapsControls/vertex.glsl' +import fragment from './glsl/CapsControls/fragment.glsl' +import fragmentClipping from './glsl/CapsControls/fragmentClipping.glsl' +import fragmentClippingFront from './glsl/CapsControls/fragmentClippingFront.glsl' +import invisibleVertexShader from './glsl/CapsControls/invisibleVertexShader.glsl' +import invisibleFragmentShader from './glsl/CapsControls/invisibleFragmentShader.glsl' +const CAPS = { + SHADER: { + vertex, + vertexClipping, + fragment, + fragmentClipping, + fragmentClippingFront, + invisibleVertexShader, + invisibleFragmentShader, + }, + Simulation, + UNIFORMS: { + clipping: { + color: { type: "c", value: new THREE.Color(0x3d9ecb) }, + clippingLow: { type: "v3", value: new THREE.Vector3(0, 0, 0) }, + clippingHigh: { type: "v3", value: new THREE.Vector3(0, 0, 0) } + }, + caps: { + color: { type: "c", value: new THREE.Color(0xf83610) } + } + }, + SCHEDULE: { + postpone: (callback: Function, context: any, wait: number) => { + return (...args: any[]) => { + setTimeout(() => { + callback.apply(context, args); + }, wait); + }; + }, + }, + MATERIAL: { + BoxBackFace: new THREE.MeshBasicMaterial({ color: 0xEEDDCC, transparent: true }), + BoxWireframe: new THREE.LineBasicMaterial({ color: 0x000000, linewidth: 2 }), + BoxWireActive: new THREE.LineBasicMaterial({ color: 0xf83610, linewidth: 4 }), + cap: () => { + return new THREE.ShaderMaterial({ + uniforms: CAPS.UNIFORMS.caps, + vertexShader: CAPS.SHADER.vertex, + fragmentShader: CAPS.SHADER.fragment + }) + }, + sheet: (material?: THREE.Material): THREE.ShaderMaterial => { + const shaderMaterial = new THREE.ShaderMaterial({ + // 设置默认值 + uniforms: { + ...CAPS.UNIFORMS.clipping, + color: { value: new THREE.Color(0xffffff) }, // 默认白色 + roughness: { value: 0.5 }, + metalness: { value: 0.5 }, + emissive: { value: new THREE.Color(0x000000) }, + opacity: { value: 1.0 }, + envMap: { value: null }, + envMapIntensity: { value: 1.0 }, + lightMap: { value: null }, + lightMapIntensity: { value: 1.0 }, + aoMap: { value: null }, + aoMapIntensity: { value: 1.0 }, + bumpMap: { value: null }, + bumpScale: { value: 1 }, + normalMap: { value: null }, + normalScale: { value: new THREE.Vector2(1, 1) }, + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 }, + specularMap: { value: null }, + alphaMap: { value: null }, + map: { value: null }, + }, + vertexShader: CAPS.SHADER.vertexClipping, + fragmentShader: CAPS.SHADER.fragmentClipping, + }); + if (material) { + if (material instanceof THREE.MeshStandardMaterial) { + MeshStandardMaterialToShaderMaterial(material, shaderMaterial) + } else if (material instanceof THREE.MeshBasicMaterial) { + MeshBasicMaterialToShaderMaterial(material, shaderMaterial) + } else { + console.warn("不支持的材质类型:", material.constructor.name) + } + } + return shaderMaterial; + }, + backStencil: {} as THREE.ShaderMaterial, + frontStencil: {} as THREE.ShaderMaterial, + Invisible: {} as THREE.ShaderMaterial + } +} + +CAPS.MATERIAL.backStencil = new THREE.ShaderMaterial({ + uniforms: CAPS.UNIFORMS.clipping, + vertexShader: CAPS.SHADER.vertexClipping, + fragmentShader: CAPS.SHADER.fragmentClippingFront, + colorWrite: false, + depthWrite: false, + side: THREE.BackSide +}) + +CAPS.MATERIAL.frontStencil = new THREE.ShaderMaterial({ + uniforms: CAPS.UNIFORMS.clipping, + vertexShader: CAPS.SHADER.vertexClipping, + fragmentShader: CAPS.SHADER.fragmentClippingFront, + colorWrite: false, + depthWrite: false, +}) +CAPS.MATERIAL.Invisible = new THREE.ShaderMaterial({ + vertexShader: CAPS.SHADER.invisibleVertexShader, + fragmentShader: CAPS.SHADER.invisibleFragmentShader +}) +export default class CapsControls extends THREE.Controls<{}> { + public simulation: Simulation + private set visible(b: boolean) { + if (b) { + this.scene.add(this.simulation.capGroup) + this.simulation.visible = true + } else { + if (this._initSceneOpt) { + this.simulation.frontStencil.remove(this._initSceneOpt.front) + this.simulation.backStencil.remove(this._initSceneOpt.back) + this.simulation.scene.remove(this._initSceneOpt.cloneCollada) + this.simulation.scene.add(this._initSceneOpt.collada) + } + this.scene.remove(this.simulation.capGroup) + this.simulation.visible = false + } + } + private get visible() { + return this.simulation.visible + } + private _initSceneOpt?: { + back: THREE.Object3D; + front: THREE.Object3D; + cloneCollada: THREE.Object3D; + collada: THREE.Object3D; + } + set objects(obj: THREE.Object3D) { + if (this._initSceneOpt) { + this.simulation.frontStencil.remove(this._initSceneOpt.front) + this.simulation.backStencil.remove(this._initSceneOpt.back) + this.simulation.scene.remove(this._initSceneOpt.cloneCollada) + this.simulation.scene.add(this._initSceneOpt.collada) + } + this.scene.remove(obj) + this._initSceneOpt = this.simulation.initScene(obj) + } + constructor( + public scene: THREE.Scene, + public camera: THREE.PerspectiveCamera, + public renderer: THREE.WebGLRenderer, + public controls: THREE.Controls<{}> + ) { + super(camera, renderer.domElement) + this.simulation = new Simulation( + this.scene, + this.camera, + this.renderer, + this.controls + ) + } + + public update(): void { + if (this.visible != this.enabled) this.visible = this.enabled + this.simulation.update() + } +} \ No newline at end of file diff --git a/src/views/three/three-plus/ExplodeControls.ts b/src/views/three/three-plus/ExplodeControls.ts new file mode 100644 index 0000000..356e144 --- /dev/null +++ b/src/views/three/three-plus/ExplodeControls.ts @@ -0,0 +1,58 @@ +import * as THREE from 'three' +import { getWorldCenterPosition } from './utils'; +export class ExplodeControls extends THREE.Controls<{}> { + constructor(object: THREE.Object3D) { + super(object, null) + } +} +// 初始化爆炸数据保存到每个mesh的userdata上 +export function initExplodeModel(modelObject: THREE.Object3D) { + if (!modelObject) return; + + // 计算模型中心 + const explodeBox = new THREE.Box3(); + explodeBox.setFromObject(modelObject); + const explodeCenter = getWorldCenterPosition(explodeBox); + + const meshBox = new THREE.Box3(); + modelObject.userData.canExplode = true; + // 遍历整个模型,保存数据到userData上,以便爆炸函数使用 + modelObject.traverse(function (value: any) { + if (value.isLine || value.isSprite) return; + if (value.isMesh) { + meshBox.setFromObject(value); + const meshCenter = getWorldCenterPosition(meshBox); + // 爆炸方向 + value.userData.canExplode = true; + value.userData.worldDir = new THREE.Vector3() + .subVectors(meshCenter, explodeCenter) + .normalize(); + // 爆炸距离 mesh中心点到爆炸中心点的距离 + value.userData.worldDistance = new THREE.Vector3().subVectors(meshCenter, explodeCenter); + // 原始坐标 + value.userData.originPosition = value.getWorldPosition(new THREE.Vector3()); + // mesh中心点 + value.userData.meshCenter = meshCenter.clone(); + value.userData.explodeCenter = explodeCenter.clone(); + } + }); +} + +// 模型爆炸函数 +export function explodeModel(model: THREE.Object3D, scalar: number) { + model.traverse(function (value) { + // @ts-ignore + if (!value.isMesh || !value.userData.originPosition) return; + const distance = value.userData.worldDir + .clone() + .multiplyScalar(value.userData.worldDistance.length() * scalar); + const offset = new THREE.Vector3().subVectors( + value.userData.meshCenter, + value.userData.originPosition + ); + const center = value.userData.explodeCenter; + const newPos = new THREE.Vector3().copy(center).add(distance).sub(offset); + const localPosition = value.parent?.worldToLocal(newPos.clone()); + localPosition && value.position.copy(localPosition); + }); +}; \ No newline at end of file diff --git a/src/views/three/three-plus/SelectControls.ts b/src/views/three/three-plus/SelectControls.ts new file mode 100644 index 0000000..2045663 --- /dev/null +++ b/src/views/three/three-plus/SelectControls.ts @@ -0,0 +1,41 @@ +import * as THREE from 'three' +import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass'; +export class SelectControls extends THREE.Controls<{}> { + public outlinePass: OutlinePass + onSelect?: (obj: THREE.Object3D, event: MouseEvent) => void + constructor(scene: THREE.Scene, camera: THREE.Camera, domElement?: HTMLElement | null) { + super(camera, domElement) + if (!this.domElement) throw new Error("domElement is null") + const v2 = new THREE.Vector2(this.domElement.offsetWidth, this.domElement.offsetHeight); + this.outlinePass = new OutlinePass(v2, scene, camera); + this.outlinePass.edgeStrength = 2; // 描边宽度 + this.outlinePass.edgeGlow = 0.3; // 边缘发光强度 + this.outlinePass.visibleEdgeColor.set(new THREE.Color(0, 255, 0)); // 红色描边 + this.domElement.addEventListener("click", (event: MouseEvent) => { + if (!this.enabled) return + if (!this.domElement) throw new Error("domElement is null") + const rect = this.domElement.getBoundingClientRect(); + const mouse = new THREE.Vector2( + ((event.clientX - rect.left) / rect.width) * 2 - 1, + -((event.clientY - rect.top) / rect.height) * 2 + 1 + ); + const raycaster = new THREE.Raycaster(); + raycaster.setFromCamera(mouse, camera); + const intersects = raycaster.intersectObjects(scene.children, true); + for (let intersect of intersects) { + let obj3D = intersect.object + if (obj3D.type == 'GridHelper' || obj3D.type == 'AxesHelper' || obj3D.type == 'TransformControlsPlane') { + continue + } + if (obj3D.userData.isCanSelect === false) { + continue + } + this.outlinePass.selectedObjects = [obj3D] + console.log(obj3D); + if (this.onSelect) this.onSelect(obj3D, event) + return + } + }) + } + +} \ No newline at end of file diff --git a/src/views/three/three-plus/ThreeHelper.ts b/src/views/three/three-plus/ThreeHelper.ts new file mode 100644 index 0000000..a5b9d3b --- /dev/null +++ b/src/views/three/three-plus/ThreeHelper.ts @@ -0,0 +1,223 @@ +import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' +import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'; +import * as THREE from 'three' +import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass'; +import Stats from 'three/examples/jsm/libs/stats.module.js' +import { SelectControls } from './SelectControls'; +import CapsControls from './CapsControls'; +import { DragControls } from 'three/examples/jsm/controls/DragControls'; +import { TransformControls } from 'three/examples/jsm/controls/TransformControls' + +interface DirectorOption { + /** canvas DOM */ + canvas?: HTMLCanvasElement | THREE.OffscreenCanvas, + /** 宽度 */ + width: number, + /** 高度 */ + height: number, + /** 渲染之后 */ + afterRender?: Function, + FPS?: number +} +export interface TreeNode { + label: string; + id: string; + children: TreeNode[]; + type: string +} + +export class Director { + /** 场景 */ + scene = new THREE.Scene() + /** 相机 */ + camera = new THREE.PerspectiveCamera() + /** 时钟 */ + clock = new THREE.Clock() + /** 渲染器 */ + renderer: THREE.WebGLRenderer + /** 轨道控制器 */ + controls: { + orbitControls: THREE.Controls<{}> + selectControls: SelectControls + capsControls: CapsControls + dragControls: DragControls + transformControls: TransformControls + } + /** 渲染组合器 */ + composer: EffectComposer + /** FPS */ + wait: number = 0 + /** 环境光 */ + ambientLight: THREE.AmbientLight = new THREE.AmbientLight(0xffffff, 2) + /** 辅助坐标 */ + axesHelper: THREE.AxesHelper = new THREE.AxesHelper(100) + showAxesHelper: boolean = false + /** 辅助网格 */ + gridHelper: THREE.GridHelper = new THREE.GridHelper(100, 100) + showGridHelper: boolean = false + /** 状态监控 */ + stats: Stats = new Stats() + /** 窗口大小 */ + width: number + height: number + + get FPS() { + return this.wait + } + set FPS(fps: number) { + this.wait = 1 / fps + } + constructor(options: DirectorOption) { + this.width = options.width + this.height = options.height + this.camera.position.z = 10 + this.camera.position.y = 2 + this.scene.add(this.ambientLight) + this.renderer = new THREE.WebGLRenderer({ + antialias: true, + alpha: true, + canvas: options.canvas + }); + this.renderer.setSize(options.width, options.height) + this.renderer.setClearColor(0xffffff); + this.renderer.setPixelRatio(window.devicePixelRatio); + + const renderPass = new RenderPass(this.scene, this.camera); + const orbitControls = new OrbitControls(this.camera, this.renderer.domElement) + this.composer = new EffectComposer(this.renderer); + const selectControls = new SelectControls(this.scene, this.camera, this.renderer.domElement) + const capsControls = new CapsControls(this.scene, this.camera, this.renderer, orbitControls) + capsControls.enabled = false + const dragControls = new DragControls([], this.camera, this.renderer.domElement) + dragControls.addEventListener('dragstart', () => this.controls.orbitControls.enabled = false) + dragControls.addEventListener('dragend', () => this.controls.orbitControls.enabled = true) + const transformControls = new TransformControls(this.camera, this.renderer.domElement); + transformControls.addEventListener('dragging-changed', function (event) { + orbitControls.enabled = !event.value; + }) + this.controls = { orbitControls, selectControls, capsControls, dragControls, transformControls } + this.composer.addPass(renderPass); + this.composer.addPass(selectControls.outlinePass); + this.FPS = options.FPS || 30 + this.renderer.setPixelRatio(window.devicePixelRatio); + this.renderer.setSize(window.innerWidth, window.innerHeight); + this.renderer.setClearColor(0xffffff); + this.renderer.autoClear = false; + + this.stats.dom.style.position = 'absolute' + this.stats.dom.style.left = '' + this.stats.dom.style.right = '0px' + + const onWindowResize = () => { + this.width = window.innerWidth + this.height = window.innerHeight + this.renderer.setSize(this.width, this.height) + this.renderer.setPixelRatio(window.devicePixelRatio) + this.composer.setSize(this.width, this.height) + this.composer.setPixelRatio(window.devicePixelRatio) + this.camera.aspect = this.width / this.height + this.camera.updateProjectionMatrix() + } + window.addEventListener('resize', onWindowResize, false); + } + startRender(onRander?: (FPS: number) => void) { + let timeS = 0; + let realFPS = 0; + const animate = () => { + let T = this.clock.getDelta(); + timeS = timeS + T; + if (timeS >= this.wait) { + if (onRander) onRander(realFPS) + this.renderer.clear(); + this.stats.update() + Object.values(this.controls).forEach(controls => controls.update(T)) + this.composer.render(); + realFPS = 1 / timeS + timeS = 0; + } + requestAnimationFrame(animate) + } + animate() + + } + switchAxesHelper(show: boolean) { + if (show && !this.showAxesHelper) { + this.scene.add(this.axesHelper) + this.showAxesHelper = false + } else { + this.scene.remove(this.axesHelper) + } + } + switchGridHelper(show: boolean) { + if (show && !this.showGridHelper) { + this.scene.add(this.gridHelper) + this.showGridHelper = true + } else { + this.scene.remove(this.gridHelper) + this.showGridHelper = false + } + } + switchStats(show: boolean) { + if (show) { + this.renderer.domElement.parentElement!.appendChild(this.stats.dom) + } else { + this.renderer.domElement.parentElement!.removeChild(this.stats.dom) + } + } + generateTreeData() { + function _generateTreeData(node: THREE.Object3D, parent: TreeNode | null = null) { + const treeItem = { + label: node.name || node.type, + id: `${parent ? parent.id + '.' : ''}${node.uuid}`, // 使用唯一标识符作为id + type: node.type, + children: new Array() + } + if (node.children && node.children.length > 0) { + for (let child of node.children) { + treeItem.children.push(_generateTreeData(child, treeItem)); + } + } + return treeItem; + } + return _generateTreeData(this.scene).children + } + getObjectByUUID(uuidPath: string) { + const uuids = uuidPath.split('.'); + let currentObject: THREE.Object3D = this.scene; + for (let i = 1; i < uuids.length; i++) { + const uuid = uuids[i]; + let found = null; + if (currentObject.children) { + for (let j = 0; j < currentObject.children.length; j++) { + const child = currentObject.children[j]; + if (child.uuid === uuid) { + found = child; + break; + } + } + } + if (!found) { + console.log(`未找到具有UUID ${uuid} 的对象`); + return null; + } + currentObject = found; + } + return currentObject; + } + getObjectBySingleUUID(uuid: string): THREE.Object3D | null { + const traverseScene = (node: THREE.Object3D): THREE.Object3D | null => { + if (node.uuid === uuid) { + return node; + } + for (let i = 0; i < node.children.length; i++) { + const found = traverseScene(node.children[i]); + if (found) { + return found; + } + } + return null; + }; + + return traverseScene(this.scene); + } +} \ No newline at end of file diff --git a/src/views/three/three-plus/glsl/CapsControls/fragment.glsl b/src/views/three/three-plus/glsl/CapsControls/fragment.glsl new file mode 100644 index 0000000..ee7ac2b --- /dev/null +++ b/src/views/three/three-plus/glsl/CapsControls/fragment.glsl @@ -0,0 +1,9 @@ +uniform vec3 color; +varying vec3 pixelNormal; + +void main(void) { + float shade = (3.0 * pow(abs(pixelNormal.y), 2.0) + 2.0 * pow(abs(pixelNormal.z), 2.0) + 1.0 * pow(abs(pixelNormal.x), 2.0)) / 3.0; + + gl_FragColor = vec4(color * shade, 1.0); + +} \ No newline at end of file diff --git a/src/views/three/three-plus/glsl/CapsControls/fragmentClipping.glsl b/src/views/three/three-plus/glsl/CapsControls/fragmentClipping.glsl new file mode 100644 index 0000000..fa91705 --- /dev/null +++ b/src/views/three/three-plus/glsl/CapsControls/fragmentClipping.glsl @@ -0,0 +1,30 @@ +uniform vec3 color; +uniform vec3 clippingLow; +uniform vec3 clippingHigh; +uniform sampler2D map; + +varying vec3 pixelNormal; +varying vec4 worldPosition; +varying vec2 vUv; // 纹理坐标 + +uniform float opacity; // 透明度 + +void main(void) { + + float shade = (3.0 * pow(abs(pixelNormal.y), 2.0) + 2.0 * pow(abs(pixelNormal.z), 2.0) + 1.0 * pow(abs(pixelNormal.x), 2.0)) / 3.0; + + + if(worldPosition.x < clippingLow.x || worldPosition.x > clippingHigh.x || worldPosition.y < clippingLow.y || worldPosition.y > clippingHigh.y || worldPosition.z < clippingLow.z || worldPosition.z > clippingHigh.z) { + + discard; + + } else { + vec4 textureColor = texture2D(map, vUv); + if(textureColor.a > 0.1) { + gl_FragColor = vec4(textureColor.rgb * shade, textureColor.a * 1.0); + } else { + gl_FragColor = vec4(color * shade, 1.0); + } + } + +} \ No newline at end of file diff --git a/src/views/three/three-plus/glsl/CapsControls/fragmentClippingFront.glsl b/src/views/three/three-plus/glsl/CapsControls/fragmentClippingFront.glsl new file mode 100644 index 0000000..14468cb --- /dev/null +++ b/src/views/three/three-plus/glsl/CapsControls/fragmentClippingFront.glsl @@ -0,0 +1,23 @@ +uniform vec3 color; +uniform vec3 clippingLow; +uniform vec3 clippingHigh; + +varying vec3 pixelNormal; +varying vec4 worldPosition; +varying vec3 camPosition; + +void main(void) { + + float shade = (3.0 * pow(abs(pixelNormal.y), 2.0) + 2.0 * pow(abs(pixelNormal.z), 2.0) + 1.0 * pow(abs(pixelNormal.x), 2.0)) / 3.0; + + if(worldPosition.x < clippingLow.x && camPosition.x < clippingLow.x || worldPosition.x > clippingHigh.x && camPosition.x > clippingHigh.x || worldPosition.y < clippingLow.y && camPosition.y < clippingLow.y || worldPosition.y > clippingHigh.y && camPosition.y > clippingHigh.y || worldPosition.z < clippingLow.z && camPosition.z < clippingLow.z || worldPosition.z > clippingHigh.z && camPosition.z > clippingHigh.z) { + + discard; + + } else { + + gl_FragColor = vec4(color * shade, 1.0); + + } + +} \ No newline at end of file diff --git a/src/views/three/three-plus/glsl/CapsControls/invisibleFragmentShader.glsl b/src/views/three/three-plus/glsl/CapsControls/invisibleFragmentShader.glsl new file mode 100644 index 0000000..c92fd72 --- /dev/null +++ b/src/views/three/three-plus/glsl/CapsControls/invisibleFragmentShader.glsl @@ -0,0 +1,4 @@ +void main(void) { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + discard; +} \ No newline at end of file diff --git a/src/views/three/three-plus/glsl/CapsControls/invisibleVertexShader.glsl b/src/views/three/three-plus/glsl/CapsControls/invisibleVertexShader.glsl new file mode 100644 index 0000000..a25c50c --- /dev/null +++ b/src/views/three/three-plus/glsl/CapsControls/invisibleVertexShader.glsl @@ -0,0 +1,4 @@ +void main() { + vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); + gl_Position = projectionMatrix * mvPosition; +} \ No newline at end of file diff --git a/src/views/three/three-plus/glsl/CapsControls/vertex.glsl b/src/views/three/three-plus/glsl/CapsControls/vertex.glsl new file mode 100644 index 0000000..b25aebf --- /dev/null +++ b/src/views/three/three-plus/glsl/CapsControls/vertex.glsl @@ -0,0 +1,9 @@ +uniform vec3 color; +varying vec3 pixelNormal; + +void main() { + + pixelNormal = normal; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + +} \ No newline at end of file diff --git a/src/views/three/three-plus/glsl/CapsControls/vertexClipping.glsl b/src/views/three/three-plus/glsl/CapsControls/vertexClipping.glsl new file mode 100644 index 0000000..d86bbf8 --- /dev/null +++ b/src/views/three/three-plus/glsl/CapsControls/vertexClipping.glsl @@ -0,0 +1,17 @@ +uniform vec3 clippingLow; +uniform vec3 clippingHigh; + +varying vec3 pixelNormal; +varying vec4 worldPosition; +varying vec3 camPosition; + +varying vec2 vUv; // 纹理坐标 +void main() { + vUv = uv; + pixelNormal = normal; + worldPosition = modelMatrix * vec4(position, 1.0); + camPosition = cameraPosition; + + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + +} \ No newline at end of file diff --git a/src/views/three/three-plus/utils.ts b/src/views/three/three-plus/utils.ts new file mode 100644 index 0000000..6a19010 --- /dev/null +++ b/src/views/three/three-plus/utils.ts @@ -0,0 +1,183 @@ +import * as THREE from 'three' +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader' +import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'; +import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader' +import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader' +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader' + +/** + * 将事件坐标转换为标准化设备坐标系(NDC) + * + * @param vector 接收坐标转换结果的Vector2对象 + * @param event 触发的鼠标或触摸事件 + * @param window 窗口对象 + */ +export function setToNormalizedDeviceCoordinates( + vector: THREE.Vector2, + event: MouseEvent | TouchEvent, + window: Window +) { + vector.x = event instanceof MouseEvent ? event.clientX : (event.touches && event.touches[0].clientX); + vector.y = event instanceof MouseEvent ? event.clientY : (event.touches && event.touches[0].clientY); + vector.x = (vector.x / window.innerWidth) * 2 - 1; + vector.y = - (vector.y / window.innerHeight) * 2 + 1; +} + +/** + * gltf/glb fbx obj+mtl(材质) + * @param model + * @param type + * @returns + */ +export function loadModel(model: { gltf?: string, obj?: string, mtl?: string, fbx?: string }, type: "gltf" | "glb" | "obj" | "fbx", onProgress?: (progress: ProgressEvent) => void): Promise { + return new Promise((resolve, reject,) => { + if ((type == "gltf" || type == "glb") && !!model.gltf) { + const gltfloader = new GLTFLoader() + const dracoLoader = new DRACOLoader(); + dracoLoader.setDecoderPath('/draco/gltf/'); + dracoLoader.setDecoderConfig({ type: "js" }); + dracoLoader.preload(); + gltfloader.setDRACOLoader(dracoLoader); + gltfloader.load( + model.gltf, + load => { + console.log(load); + resolve(load.scene) + }, + progress => { + if (onProgress) onProgress(progress) + }, + error => { + console.log(error); + } + ) + } else if (type == "obj" && !!model.obj) { + if (!!model.mtl) { + const mtlLoader = new MTLLoader() + mtlLoader.load(model.mtl, (mtl) => { + mtl.preload() + const objLoader = new OBJLoader() + objLoader.setMaterials(mtl) + if (!!model.obj) { + objLoader.load(model.obj, resolve) + } + }) + } else { + const objLoader = new OBJLoader() + objLoader.load(model.obj, resolve) + } + } else if (type == "fbx" && !!model.fbx) { + const fbxLoader = new FBXLoader() + fbxLoader.load(model.fbx, resolve) + } + }) +} + +export function getWorldCenterPosition(box: THREE.Box3, scalar = 0.5): THREE.Vector3 { + return new THREE.Vector3().addVectors(box.max, box.min).multiplyScalar(scalar); +} + +export function MeshStandardMaterialToShaderMaterial(msm: THREE.MeshStandardMaterial, sm: THREE.ShaderMaterial) { + // 迁移基础属性 + if (msm.color) { + sm.uniforms['color'].value.copy(msm.color); + } + sm.uniforms['roughness'].value = msm.roughness; + sm.uniforms['metalness'].value = msm.metalness; + if (msm.emissive) { + sm.uniforms['emissive'].value.copy(msm.emissive); + } + + // 迁移纹理属性 + if (msm.map) { + sm.uniforms['map'].value = msm.map; + } + + if (msm.envMap) { + sm.uniforms['envMap'].value = msm.envMap; + sm.uniforms['envMapIntensity'].value = msm.envMapIntensity; + } + + if (msm.lightMap) { + sm.uniforms['lightMap'].value = msm.lightMap; + sm.uniforms['lightMapIntensity'].value = msm.lightMapIntensity; + } + + if (msm.aoMap) { + sm.uniforms['aoMap'].value = msm.aoMap; + sm.uniforms['aoMapIntensity'].value = msm.aoMapIntensity; + } + + if (msm.bumpMap) { + sm.uniforms['bumpMap'].value = msm.bumpMap; + sm.uniforms['bumpScale'].value = msm.bumpScale; + } + + if (msm.normalMap) { + sm.uniforms['normalMap'].value = msm.normalMap; + sm.uniforms['normalScale'].value.copy(msm.normalScale); + } + + if (msm.displacementMap) { + sm.uniforms['displacementMap'].value = msm.displacementMap; + sm.uniforms['displacementScale'].value = msm.displacementScale; + sm.uniforms['displacementBias'].value = msm.displacementBias; + } + + if (msm.alphaMap) { + sm.uniforms['alphaMap'].value = msm.alphaMap; + } + + // 确保其他属性也被正确设置 + sm.side = msm.side; + sm.transparent = msm.transparent; + sm.opacity = msm.opacity; + sm.depthTest = msm.depthTest; + sm.depthWrite = msm.depthWrite; + sm.blending = msm.blending; + sm.alphaTest = msm.alphaTest; + sm.blendSrc = msm.blendSrc; + sm.blendDst = msm.blendDst; + sm.blendEquation = msm.blendEquation; + sm.dithering = msm.dithering; + sm.premultipliedAlpha = msm.premultipliedAlpha; + sm.visible = msm.visible; + sm.toneMapped = msm.toneMapped; +} + +export function MeshBasicMaterialToShaderMaterial(basicMat: THREE.MeshBasicMaterial, shaderMat: THREE.ShaderMaterial) { + console.log(basicMat); + + // 迁移基础属性 + if (basicMat.color) { + shaderMat.uniforms['color'].value.copy(basicMat.color); + } + shaderMat.uniforms['opacity'].value = basicMat.opacity; + + // 迁移纹理属性 + if (basicMat.map) { + shaderMat.uniforms['map'].value = basicMat.map; + } + if (basicMat.alphaMap) { + shaderMat.uniforms['alphaMap'].value = basicMat.alphaMap; + } + // 确保其他属性也被正确设置 + shaderMat.side = basicMat.side; + shaderMat.transparent = basicMat.transparent; + shaderMat.depthTest = basicMat.depthTest; + shaderMat.depthWrite = basicMat.depthWrite; + shaderMat.blending = basicMat.blending; + shaderMat.alphaTest = basicMat.alphaTest; + shaderMat.blendSrc = basicMat.blendSrc; + shaderMat.blendDst = basicMat.blendDst; + shaderMat.blendEquation = basicMat.blendEquation; + shaderMat.dithering = basicMat.dithering; + shaderMat.premultipliedAlpha = basicMat.premultipliedAlpha; + shaderMat.visible = basicMat.visible; + shaderMat.toneMapped = basicMat.toneMapped; + shaderMat.wireframe = basicMat.wireframe; + shaderMat.wireframeLinewidth = basicMat.wireframeLinewidth; + shaderMat.fog = basicMat.fog; + // 设置 needsUpdate 标志为 true 以确保着色器和uniforms得到更新 + shaderMat.needsUpdate = true; +} \ No newline at end of file diff --git a/src/views/tool/build/index.vue b/src/views/tool/build/index.vue new file mode 100644 index 0000000..b673d41 --- /dev/null +++ b/src/views/tool/build/index.vue @@ -0,0 +1,92 @@ + + + \ No newline at end of file diff --git a/src/views/tool/gen/components/createTable.vue b/src/views/tool/gen/components/createTable.vue new file mode 100644 index 0000000..c4b3ad5 --- /dev/null +++ b/src/views/tool/gen/components/createTable.vue @@ -0,0 +1,327 @@ + + + diff --git a/src/views/tool/gen/components/importTable.vue b/src/views/tool/gen/components/importTable.vue new file mode 100644 index 0000000..35efd61 --- /dev/null +++ b/src/views/tool/gen/components/importTable.vue @@ -0,0 +1,111 @@ + + diff --git a/src/views/tool/gen/edit/basicInfoForm.vue b/src/views/tool/gen/edit/basicInfoForm.vue new file mode 100644 index 0000000..eb18a82 --- /dev/null +++ b/src/views/tool/gen/edit/basicInfoForm.vue @@ -0,0 +1,52 @@ + + diff --git a/src/views/tool/gen/edit/editTableForm.vue b/src/views/tool/gen/edit/editTableForm.vue new file mode 100644 index 0000000..9351bec --- /dev/null +++ b/src/views/tool/gen/edit/editTableForm.vue @@ -0,0 +1,182 @@ + + \ No newline at end of file diff --git a/src/views/tool/gen/edit/genInfoForm.vue b/src/views/tool/gen/edit/genInfoForm.vue new file mode 100644 index 0000000..b172c27 --- /dev/null +++ b/src/views/tool/gen/edit/genInfoForm.vue @@ -0,0 +1,259 @@ + + + \ No newline at end of file diff --git a/src/views/tool/gen/edit/index.ts b/src/views/tool/gen/edit/index.ts new file mode 100644 index 0000000..42053c4 --- /dev/null +++ b/src/views/tool/gen/edit/index.ts @@ -0,0 +1,332 @@ +import { getGenTable, updateGenTable } from "@/api/tool/gen"; +import { modal } from "@/plugins"; +import { createGlobalState } from "@vueuse/core"; +import { ref } from "vue"; + +export class BaseEntity { + /** 搜索值 */ + searchValue!: string; + + /** 创建者 */ + createBy!: string; + + /** 创建时间 */ + createTime!: string; + + /** 更新者 */ + updateBy!: string; + + /** 更新时间 */ + updateTime!: string; + + /** 备注 */ + remark!: string; + + /** 请求参数 */ + params!: Record; +} + +export class GenTableVo extends BaseEntity { + /** 业务表 */ + table!: GenTable; + + /** 业务表的列 */ + columns!: GenColumn[]; + + /** 关联信息 */ + joinTablesMate!: GenJoin[]; + + /** 参与关联的表 */ + joinTables!: GenTable[]; + + /** 参与关联的列 */ + joinColumns!: GenColumn[]; + + getAllGenTables(): GenTable[] { + const allGenTables: GenTable[] = []; + allGenTables.push(this.table); + if (this.joinTables) { + allGenTables.push(...this.joinTables); + } + return allGenTables; + } + + getAllGenColumns(): GenColumn[] { + const allGenColumns: GenColumn[] = []; + if (this.columns) { + allGenColumns.push(...this.columns); + } + if (this.joinColumns) { + allGenColumns.push(...this.joinColumns); + } + return allGenColumns; + } + + getTableMap(): Record { + const tableMap: Record = {}; + if (this.table) { + tableMap[this.table.tableId] = this.table; + } + if (this.joinTables) { + for (const genTable of this.joinTables) { + if (genTable) { + tableMap[genTable.tableId] = genTable; + } + } + } + return tableMap; + } + + getTableAliasMap(): Record { + const tableMap: Record = {}; + if (this.table) { + tableMap[this.table.tableId] = this.table.tableAlias; + } + if (this.joinTablesMate) { + for (const genTable of this.joinTablesMate) { + if (genTable) { + tableMap[genTable.leftTableId] = genTable.leftTableAlias; + tableMap[genTable.rightTableId] = genTable.rightTableAlias; + } + } + } + return tableMap; + } + + getColumnMap(): Record { + const columnMap: Record = {}; + const genTables = this.getAllGenTables(); + for (const genTable of genTables) { + for (const genTableColumn of genTable.columns) { + columnMap[genTableColumn.columnId] = genTableColumn; + } + } + return columnMap; + } +} + +export class GenJoin extends BaseEntity { + /** 表编号 */ + tableId!: number; + + leftTableId!: number; + + /** 关联表编号 */ + rightTableId!: number; + + /** 新引入的表 */ + newTableId!: number; + + /** 主表别名 */ + leftTableAlias!: string; + + /** 关联表别名 */ + rightTableAlias!: string; + + /** 主表外键 */ + leftTableFk!: number; + + /** 关联表外键 */ + rightTableFk!: number; + + /** 连接类型 */ + joinType!: string; + + /** 关联字段 */ + joinColumns!: string[]; + + orderNum!: number; +} + +export class GenTable extends BaseEntity { + /** 编号 */ + tableId!: number; + + /** 表名称 */ + tableName!: string; + + /** 表别名 */ + tableAlias!: string; + + /** 表描述 */ + tableComment!: string; + + /** 关联父表的表名 */ + subTableName!: string; + + /** 本表关联父表的外键名 */ + subTableFkName!: string; + + /** 实体类名称(首字母大写) */ + className!: string; + + /** 使用的模板(crud单表操作 tree树表操作 sub主子表操作) */ + tplCategory!: string; + + /** 前端类型(element-ui模版 element-plus模版) */ + tplWebType!: string; + + /** 生成包路径 */ + packageName!: string; + + /** 生成模块名 */ + moduleName!: string; + + /** 生成业务名 */ + businessName!: string; + + /** 生成功能名 */ + functionName!: string; + + /** 生成作者 */ + functionAuthor!: string; + + /** 生成代码方式(0zip压缩包 1自定义路径) */ + genType!: string; + + /** 生成路径(不填默认项目路径) */ + genPath!: string; + + /** 主键信息 */ + pkColumn!: GenColumn; + + /** 子表信息 */ + subTable!: GenTable; + + /** 表列信息 */ + columns!: GenColumn[]; + + /** 其它生成选项 */ + options!: string; + + /** 树编码字段 */ + treeCode!: string; + + /** 树父编码字段 */ + treeParentCode!: string; + + /** 树名称字段 */ + treeName!: string; + + /** 上级菜单ID字段 */ + parentMenuId!: string; + + /** 上级菜单名称字段 */ + parentMenuName!: string; + + /** 是否含有关联字段 */ + haveSubColumn!: string; +} + +export class GenColumn extends BaseEntity { + /** 编号 */ + columnId!: number; + + /** 归属表编号 */ + tableId!: number; + + /** 列名称 */ + columnName!: string; + + /** 列描述 */ + columnComment!: string; + + /** 列类型 */ + columnType!: string; + + /** JAVA类型 */ + javaType!: string; + + /** JAVA字段名 */ + javaField!: string; + + /** 是否主键(1是) */ + isPk!: string; + + /** 是否自增(1是) */ + isIncrement!: string; + + /** 是否必填(1是) */ + isRequired!: string; + + /** 是否为插入字段(1是) */ + isInsert!: string; + + /** 是否编辑字段(1是) */ + isEdit!: string; + + /** 是否列表字段(1是) */ + isList!: string; + + /** 是否查询字段(1是) */ + isQuery!: string; + + /** 查询方式(EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围) */ + queryType!: string; + + /** + * 显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、image图片上传控件、upload文件上传控件、editor富文本控件) + */ + htmlType!: string; + + /** 字典类型 */ + dictType!: string; + + /** 排序 */ + sort!: number; + + /** 关联表名称 */ + subColumnTableName!: string; + + /** 关联字段名称 */ + subColumnFkName!: string; + + /** 映射字段名称 */ + subColumnName!: string; + + /** 映射字段Java字段名 */ + subColumnJavaField!: string; + + /** 映射字段Java类型 */ + subColumnJavaType!: string; +} + +export const genTableState = createGlobalState(() => { + const info = ref(new GenTable()); + const tables = ref([]); + const joins = ref([]); + const columns = ref([]); + const tableDict = ref({}); + + const initGenTableVo = (tableId: string) => { + getGenTable(tableId).then(res => { + columns.value = res.data.columns; + info.value = res.data.table; + tables.value = res.data.joinTables; + joins.value = res.data.joinTablesMate; + }); + } + const updateGenTableVo = () => { + const genTable = Object.assign({}, info.value); + genTable.columns = columns.value; + genTable.params = { + treeCode: info.value.treeCode, + treeName: info.value.treeName, + treeParentCode: info.value.treeParentCode, + parentMenuId: info.value.parentMenuId + }; + updateGenTable({ + table: genTable, + columns: columns.value, + joinTables: tables.value, + joinColumns: [], + joinTablesMate: joins.value + }).then(res => { + modal.msgSuccess(res.msg); + if (res.code === 200) { + close(); + } + }); + } + return { info, tables, joins, columns, tableDict, initGenTableVo, updateGenTableVo }; +}) \ No newline at end of file diff --git a/src/views/tool/gen/edit/index.vue b/src/views/tool/gen/edit/index.vue new file mode 100644 index 0000000..bab2c65 --- /dev/null +++ b/src/views/tool/gen/edit/index.vue @@ -0,0 +1,76 @@ + + \ No newline at end of file diff --git a/src/views/tool/gen/edit/joinTableForm.vue b/src/views/tool/gen/edit/joinTableForm.vue new file mode 100644 index 0000000..8830876 --- /dev/null +++ b/src/views/tool/gen/edit/joinTableForm.vue @@ -0,0 +1,179 @@ + + + \ No newline at end of file diff --git a/src/views/tool/gen/index.vue b/src/views/tool/gen/index.vue new file mode 100644 index 0000000..6be1255 --- /dev/null +++ b/src/views/tool/gen/index.vue @@ -0,0 +1,242 @@ + + + diff --git a/src/views/tool/swagger/index.vue b/src/views/tool/swagger/index.vue new file mode 100644 index 0000000..a44fa71 --- /dev/null +++ b/src/views/tool/swagger/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/views/websocket.vue b/src/views/websocket.vue new file mode 100644 index 0000000..aff2d67 --- /dev/null +++ b/src/views/websocket.vue @@ -0,0 +1,339 @@ + + + \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..3064d67 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,31 @@ +{ + "include": ["src/**/*", "src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "exclude": ["node_modules", "dist", "**/*.js"], + "compilerOptions": { + "types":["vite/client"], + "target": "ES2022", + "experimentalDecorators": true, + "noImplicitAny":true, + "importHelpers": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "downlevelIteration":true, + "outDir": "dist/compiled", + "allowSyntheticDefaultImports": true, + "allowJs": true, + "jsx": "preserve", + "moduleResolution": "node", + "module": "ES2022", + "lib": ["ES2022", "dom"], + "declaration": true, + "baseUrl": ".", + "paths": { + "@": ["src"], + "@/*": ["src/*"], + "@lib": ["lib"], + "@lib/*": ["lib/*"], + "vue": ["node_modules/vue"], + "tslib" : ["node_modules/tslib/tslib.d.ts"] + } + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..f81b4eb --- /dev/null +++ b/vite.config.js @@ -0,0 +1,78 @@ +import { defineConfig, loadEnv } from 'vite' +import path from 'path' +import createVitePlugins from './vite/plugins' +// https://vitejs.dev/config/ +export default defineConfig(({ mode, command }) => { + const env = loadEnv(mode, process.cwd()) + const { VITE_APP_ENV, VITE_BASE_ROUTER } = env + return { + // 部署生产环境和开发环境下的URL。 + // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上 + // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 + base: VITE_APP_ENV === 'production' ? VITE_BASE_ROUTER : VITE_BASE_ROUTER, + plugins: createVitePlugins(env, command === 'build'), + resolve: { + // https://cn.vitejs.dev/config/#resolve-alias + alias: { + // 设置路径 + '~': path.resolve(__dirname, './'), + // 设置别名 + '@': path.resolve(__dirname, './src'), + '@lib': path.resolve(__dirname, './lib'), + }, + // https://cn.vitejs.dev/config/#resolve-extensions + extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] + }, + // vite 相关配置 + server: { + port: 80, + host: true, + open: false, // 启动时是否启动自动打开浏览器 + proxy: { + // https://cn.vitejs.dev/config/#server-proxy + '/dev-api': { + target: 'http://localhost:9090', + changeOrigin: true, + rewrite: (p) => p.replace(/^\/dev-api/, '') + }, + '/v3': { + target: 'http://localhost:9090', + changeOrigin: true, + rewrite: (p) => p.replace(/^\/dev-api/, '') + } + } + }, + //fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file + css: { + preprocessorOptions: { + scss: { + api: 'modern-compiler' + } + }, + postcss: { + plugins: [ + { + postcssPlugin: 'internal:charset-removal', + AtRule: { + charset: (atRule) => { + if (atRule.name === 'charset') { + atRule.remove(); + } + } + } + } + ] + } + }, + optimizeDeps: { + include: [ + '@lib/vform/designer.umd.js', + ] + }, + build: { + commonjsOptions: { + include: /node_modules|lib/ + } + } + } +}) diff --git a/vite/plugins/auto-import.js b/vite/plugins/auto-import.js new file mode 100644 index 0000000..a5d3576 --- /dev/null +++ b/vite/plugins/auto-import.js @@ -0,0 +1,12 @@ +import autoImport from 'unplugin-auto-import/vite' + +export default function createAutoImport() { + return autoImport({ + imports: [ + 'vue', + 'vue-router', + 'pinia' + ], + dts: false + }) +} diff --git a/vite/plugins/compression.js b/vite/plugins/compression.js new file mode 100644 index 0000000..e90aaec --- /dev/null +++ b/vite/plugins/compression.js @@ -0,0 +1,28 @@ +import compression from 'vite-plugin-compression' + +export default function createCompression(env) { + const { VITE_BUILD_COMPRESS } = env + const plugin = [] + if (VITE_BUILD_COMPRESS) { + const compressList = VITE_BUILD_COMPRESS.split(',') + if (compressList.includes('gzip')) { + // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 + plugin.push( + compression({ + ext: '.gz', + deleteOriginFile: false + }) + ) + } + if (compressList.includes('brotli')) { + plugin.push( + compression({ + ext: '.br', + algorithm: 'brotliCompress', + deleteOriginFile: false + }) + ) + } + } + return plugin +} diff --git a/vite/plugins/index.js b/vite/plugins/index.js new file mode 100644 index 0000000..b65044d --- /dev/null +++ b/vite/plugins/index.js @@ -0,0 +1,16 @@ +import vue from '@vitejs/plugin-vue' + +import createAutoImport from './auto-import' +import createSvgIcon from './svg-icon' +import createCompression from './compression' +import createSetupExtend from './setup-extend' +import glsl from "vite-plugin-glsl"; + +export default function createVitePlugins(viteEnv, isBuild = false) { + const vitePlugins = [vue(),glsl()] + vitePlugins.push(createAutoImport()) + vitePlugins.push(createSetupExtend()) + vitePlugins.push(createSvgIcon(isBuild)) + isBuild && vitePlugins.push(...createCompression(viteEnv)) + return vitePlugins +} diff --git a/vite/plugins/setup-extend.js b/vite/plugins/setup-extend.js new file mode 100644 index 0000000..a4980f3 --- /dev/null +++ b/vite/plugins/setup-extend.js @@ -0,0 +1,5 @@ +import setupExtend from 'vite-plugin-vue-setup-extend' + +export default function createSetupExtend() { + return setupExtend() +} diff --git a/vite/plugins/svg-icon.js b/vite/plugins/svg-icon.js new file mode 100644 index 0000000..30a4140 --- /dev/null +++ b/vite/plugins/svg-icon.js @@ -0,0 +1,10 @@ +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' +import path from 'path' + +export default function createSvgIcon(isBuild) { + return createSvgIconsPlugin({ + iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')], + symbolId: 'icon-[dir]-[name]', + svgoOptions: isBuild + }) +}