diff --git a/.gitignore b/.gitignore index 66bc1452..d7c334d3 100644 --- a/.gitignore +++ b/.gitignore @@ -267,8 +267,6 @@ dist .vscode /Yi.Abp.Net8/src/Yi.Abp.Web/appsettings.Development.json /Yi.Abp.Net8/src/Yi.Abp.Web/appsettings.Production.json -Logs -logs /Yi.Abp.Net8/test/Yi.Abp.Test/appsettings.Development.json /Yi.Abp.Net8/test/Yi.Abp.Test/appsettings.Production.json database_backup diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Config/ConfigGetListInputVo.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Config/ConfigGetListInputVo.cs index e31d1ff1..0261aab0 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Config/ConfigGetListInputVo.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Config/ConfigGetListInputVo.cs @@ -4,17 +4,17 @@ using Yi.Framework.Ddd.Application.Contracts; namespace Yi.Framework.Rbac.Application.Contracts.Dtos.Config { /// - /// òѯ + /// 配置查询参数 /// public class ConfigGetListInputVo : PagedAllResultRequestDto { /// - /// + /// 配置名称 /// public string? ConfigName { get; set; } /// - /// ü + /// 配置键 /// public string? ConfigKey { get; set; } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Dept/DeptCreateInputVo.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Dept/DeptCreateInputVo.cs index 0b3b6d7d..b9a8812a 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Dept/DeptCreateInputVo.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Dept/DeptCreateInputVo.cs @@ -5,14 +5,11 @@ namespace Yi.Framework.Rbac.Application.Contracts.Dtos.Dept /// public class DeptCreateInputVo { - public Guid Id { get; set; } - public DateTime CreationTime { get; set; } = DateTime.Now; - public Guid? CreatorId { get; set; } public bool State { get; set; } - public string DeptName { get; set; } = string.Empty; - public string DeptCode { get; set; } = string.Empty; + public string DeptName { get; set; } + public string DeptCode { get; set; } public string? Leader { get; set; } - public Guid ParentId { get; set; } + public Guid? ParentId { get; set; }=Guid.Empty; public string? Remark { get; set; } } } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Dept/DeptUpdateInputVo.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Dept/DeptUpdateInputVo.cs index 8b5c9002..bbf808f9 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Dept/DeptUpdateInputVo.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Dept/DeptUpdateInputVo.cs @@ -2,14 +2,11 @@ namespace Yi.Framework.Rbac.Application.Contracts.Dtos.Dept { public class DeptUpdateInputVo { - public Guid Id { get; set; } - public DateTime CreationTime { get; set; } = DateTime.Now; - public Guid? CreatorId { get; set; } public bool State { get; set; } public string DeptName { get; set; } = string.Empty; public string DeptCode { get; set; } = string.Empty; public string? Leader { get; set; } - public Guid ParentId { get; set; } + public Guid? ParentId { get; set; }=Guid.Empty; public string? Remark { get; set; } } } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Post/PostCreateInputVo.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Post/PostCreateInputVo.cs index 0dc73506..cffdb958 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Post/PostCreateInputVo.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Post/PostCreateInputVo.cs @@ -5,12 +5,9 @@ namespace Yi.Framework.Rbac.Application.Contracts.Dtos.Post /// public class PostCreateInputVo { - public Guid Id { get; set; } - public DateTime CreationTime { get; set; } = DateTime.Now; - public long? CreatorId { get; set; } public bool? State { get; set; } - public string PostCode { get; set; } = string.Empty; - public string PostName { get; set; } = string.Empty; + public string PostCode { get; set; } + public string PostName { get; set; } public string? Remark { get; set; } } } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Post/PostUpdateInputVo.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Post/PostUpdateInputVo.cs index 2304f8ac..0fd1154a 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Post/PostUpdateInputVo.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/Dtos/Post/PostUpdateInputVo.cs @@ -2,12 +2,9 @@ namespace Yi.Framework.Rbac.Application.Contracts.Dtos.Post { public class PostUpdateInputVo { - public Guid Id { get; set; } - public DateTime CreationTime { get; set; } = DateTime.Now; - public Guid? CreatorId { get; set; } public bool? State { get; set; } - public string PostCode { get; set; } = string.Empty; - public string PostName { get; set; } = string.Empty; + public string PostCode { get; set; } + public string PostName { get; set; } public string? Remark { get; set; } } } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs index 45e80bcc..7a838659 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs @@ -1,6 +1,8 @@ using System.Text.RegularExpressions; using Lazy.Captcha.Core; +using Mapster; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.DependencyInjection; @@ -25,6 +27,7 @@ using Yi.Framework.Rbac.Domain.Repositories; using Yi.Framework.Rbac.Domain.Shared.Caches; using Yi.Framework.Rbac.Domain.Shared.Consts; using Yi.Framework.Rbac.Domain.Shared.Dtos; +using Yi.Framework.Rbac.Domain.Shared.Etos; using Yi.Framework.Rbac.Domain.Shared.Options; using Yi.Framework.SqlSugarCore.Abstractions; @@ -40,7 +43,7 @@ namespace Yi.Framework.Rbac.Application.Services private readonly IAliyunManger _aliyunManger; private IDistributedCache _userCache; private UserManager _userManager; - + private IHttpContextAccessor _httpContextAccessor; public AccountService(IUserRepository userRepository, ICurrentUser currentUser, IAccountManager accountManager, @@ -51,7 +54,7 @@ namespace Yi.Framework.Rbac.Application.Services IGuidGenerator guidGenerator, IOptions options, IAliyunManger aliyunManger, - UserManager userManager) + UserManager userManager, IHttpContextAccessor httpContextAccessor) { _userRepository = userRepository; _currentUser = currentUser; @@ -64,6 +67,7 @@ namespace Yi.Framework.Rbac.Application.Services _aliyunManger = aliyunManger; _userCache = userCache; _userManager = userManager; + _httpContextAccessor = httpContextAccessor; } @@ -109,10 +113,21 @@ namespace Yi.Framework.Rbac.Application.Services //校验 await _accountManager.LoginValidationAsync(input.UserName, input.Password, x => user = x); + var userInfo = new UserRoleMenuDto(); //获取token - var accessToken = await _accountManager.GetTokenByUserIdAsync(user.Id); + var accessToken = await _accountManager.GetTokenByUserIdAsync(user.Id, (info) => userInfo = info); var refreshToken = _accountManager.CreateRefreshToken(user.Id); + //这里抛出一个登录的事件,也可以在全部流程走完,在应用层组装 + if (_httpContextAccessor.HttpContext is not null) + { + var loginEntity = new LoginLogAggregateRoot().GetInfoByHttpContext(_httpContextAccessor.HttpContext); + var loginEto = loginEntity.Adapt(); + loginEto.UserName = userInfo.User.UserName; + loginEto.UserId = userInfo.User.Id; + await LocalEventBus.PublishAsync(loginEto); + } + return new { Token = accessToken, RefreshToken = refreshToken }; } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/AccountManager.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/AccountManager.cs index b7a58206..233518dd 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/AccountManager.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/AccountManager.cs @@ -34,13 +34,11 @@ namespace Yi.Framework.Rbac.Domain.Managers private readonly ILocalEventBus _localEventBus; private readonly JwtOptions _jwtOptions; private readonly RbacOptions _options; - private IHttpContextAccessor _httpContextAccessor; private UserManager _userManager; private ISqlSugarRepository _roleRepository; private RefreshJwtOptions _refreshJwtOptions; public AccountManager(IUserRepository repository - , IHttpContextAccessor httpContextAccessor , IOptions jwtOptions , ILocalEventBus localEventBus , UserManager userManager @@ -49,7 +47,6 @@ namespace Yi.Framework.Rbac.Domain.Managers , IOptions options) { _repository = repository; - _httpContextAccessor = httpContextAccessor; _jwtOptions = jwtOptions.Value; _localEventBus = localEventBus; _userManager = userManager; @@ -62,9 +59,10 @@ namespace Yi.Framework.Rbac.Domain.Managers /// 根据用户id获取token /// /// + /// /// /// - public async Task GetTokenByUserIdAsync(Guid userId) + public async Task GetTokenByUserIdAsync(Guid userId,Action? getUserInfo=null) { //获取用户信息 var userInfo = await _userManager.GetInfoAsync(userId); @@ -79,23 +77,18 @@ namespace Yi.Framework.Rbac.Domain.Managers { throw new UserFriendlyException(UserConst.No_Role); } - if (userInfo.PermissionCodes.Count() == 0) + if (!userInfo.PermissionCodes.Any()) { throw new UserFriendlyException(UserConst.No_Permission); } - //这里抛出一个登录的事件,也可以在全部流程走完,在应用层组装 - if (_httpContextAccessor.HttpContext is not null) + + if (getUserInfo is not null) { - var loginEntity = new LoginLogAggregateRoot().GetInfoByHttpContext(_httpContextAccessor.HttpContext); - var loginEto = loginEntity.Adapt(); - loginEto.UserName = userInfo.User.UserName; - loginEto.UserId = userInfo.User.Id; - await _localEventBus.PublishAsync(loginEto); + getUserInfo(userInfo); } + var accessToken = CreateToken(this.UserInfoToClaim(userInfo)); //将用户信息添加到缓存中,需要考虑的是更改了用户、角色、菜单等整个体系都需要将缓存进行刷新,看具体业务进行选择 - - return accessToken; } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/IAccountManager.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/IAccountManager.cs index c4581d46..cbbf5eb9 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/IAccountManager.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/IAccountManager.cs @@ -5,14 +5,15 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Services; using Yi.Framework.Rbac.Domain.Entities; +using Yi.Framework.Rbac.Domain.Shared.Dtos; namespace Yi.Framework.Rbac.Domain.Managers { public interface IAccountManager : IDomainService { string CreateRefreshToken(Guid userId); - Task GetTokenByUserIdAsync(Guid userId); - Task LoginValidationAsync(string userName, string password, Action userAction = null); + Task GetTokenByUserIdAsync(Guid userId,Action? getUserInfo=null); + Task LoginValidationAsync(string userName, string password, Action? userAction = null); Task RegisterAsync(string userName, string password, long phone); Task RestPasswordAsync(Guid userId, string password); Task UpdatePasswordAsync(Guid userId, string newPassword, string oldPassword); diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/UserManager.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/UserManager.cs index cfc4d1cc..2e14bbd5 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/UserManager.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/UserManager.cs @@ -162,14 +162,23 @@ namespace Yi.Framework.Rbac.Domain.Managers } /// - /// 查询用户信息,已缓存 + /// 查询用户信息,取消缓存 /// /// public async Task GetInfoAsync(Guid userId) { - - var output = await GetInfoByCacheAsync(userId); - return output; + var user = await _userRepository.GetUserAllInfoAsync(userId); + var data = EntityMapToDto(user); + //系统用户数据被重置,老前端访问重新授权 + if (data is null) + { + throw new AbpAuthorizationException(); + } + //data.Menus.Clear(); + // output = data; + return data; + // var output = await GetInfoByCacheAsync(userId); + // return output; } private async Task GetInfoByCacheAsync(Guid userId) { diff --git a/Yi.Pure.Vue3/.browserslistrc b/Yi.Pure.Vue3/.browserslistrc new file mode 100644 index 00000000..40bd99ce --- /dev/null +++ b/Yi.Pure.Vue3/.browserslistrc @@ -0,0 +1,4 @@ +> 1% +last 2 versions +not dead +not ie 11 \ No newline at end of file diff --git a/Yi.Pure.Vue3/.dockerignore b/Yi.Pure.Vue3/.dockerignore new file mode 100644 index 00000000..0376edde --- /dev/null +++ b/Yi.Pure.Vue3/.dockerignore @@ -0,0 +1,21 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.eslintcache +report.html + +yarn.lock +npm-debug.log* +.pnpm-error.log* +.pnpm-debug.log +tests/**/coverage/ + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +tsconfig.tsbuildinfo diff --git a/Yi.Pure.Vue3/.editorconfig b/Yi.Pure.Vue3/.editorconfig new file mode 100644 index 00000000..ea6e20f5 --- /dev/null +++ b/Yi.Pure.Vue3/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/Yi.Pure.Vue3/.env b/Yi.Pure.Vue3/.env new file mode 100644 index 00000000..09344c15 --- /dev/null +++ b/Yi.Pure.Vue3/.env @@ -0,0 +1,5 @@ +# 平台本地运行端口号 +VITE_PORT = 8848 + +# 是否隐藏首页 隐藏 true 不隐藏 false (勿删除,VITE_HIDE_HOME只需在.env文件配置) +VITE_HIDE_HOME = false diff --git a/Yi.Pure.Vue3/.env.development b/Yi.Pure.Vue3/.env.development new file mode 100644 index 00000000..aa557120 --- /dev/null +++ b/Yi.Pure.Vue3/.env.development @@ -0,0 +1,21 @@ +# 平台本地运行端口号 +VITE_PORT = 8848 + +# 开发环境读取配置文件路径 +VITE_PUBLIC_PATH = / + +# 开发环境路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数") +VITE_ROUTER_HISTORY = "hash" + + +# 开发环境 +VITE_APP_BASE_API = '/dev-api' + +# ws/开发环境 +VITE_APP_BASE_WS = '/dev-ws' + +#RBAC +VITE_APP_BASE_URL='http://localhost:19001/api/app' + +#长连接 +VITE_APP_BASE_URL_WS='http://localhost:19001/hub' diff --git a/Yi.Pure.Vue3/.env.production b/Yi.Pure.Vue3/.env.production new file mode 100644 index 00000000..066186a8 --- /dev/null +++ b/Yi.Pure.Vue3/.env.production @@ -0,0 +1,19 @@ +# 线上环境平台打包路径 +VITE_PUBLIC_PATH = / + +# 线上环境路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数") +VITE_ROUTER_HISTORY = "hash" + +# 是否在打包时使用cdn替换本地库 替换 true 不替换 false +VITE_CDN = false + +# 生产环境 +VITE_APP_BASE_API = '/prod-api' + +# ws/开发环境 +VITE_APP_BASE_WS = '/prod-ws' + +# 是否启用gzip压缩或brotli压缩(分两种情况,删除原始文件和不删除原始文件) +# 压缩时不删除原始文件的配置:gzip、brotli、both(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) +# 压缩时删除原始文件的配置:gzip-clear、brotli-clear、both-clear(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) +VITE_COMPRESSION = "none" diff --git a/Yi.Pure.Vue3/.env.staging b/Yi.Pure.Vue3/.env.staging new file mode 100644 index 00000000..65b57e3c --- /dev/null +++ b/Yi.Pure.Vue3/.env.staging @@ -0,0 +1,16 @@ +# 预发布也需要生产环境的行为 +# https://cn.vitejs.dev/guide/env-and-mode.html#modes +# NODE_ENV = development + +VITE_PUBLIC_PATH = / + +# 预发布环境路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数") +VITE_ROUTER_HISTORY = "hash" + +# 是否在打包时使用cdn替换本地库 替换 true 不替换 false +VITE_CDN = true + +# 是否启用gzip压缩或brotli压缩(分两种情况,删除原始文件和不删除原始文件) +# 压缩时不删除原始文件的配置:gzip、brotli、both(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) +# 压缩时删除原始文件的配置:gzip-clear、brotli-clear、both-clear(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) +VITE_COMPRESSION = "none" diff --git a/Yi.Pure.Vue3/.gitattributes b/Yi.Pure.Vue3/.gitattributes new file mode 100644 index 00000000..00ff609a --- /dev/null +++ b/Yi.Pure.Vue3/.gitattributes @@ -0,0 +1,2 @@ +public/wasm/capture.worker.js linguist-language=Vue +public/wasm/index.js linguist-language=Vue \ No newline at end of file diff --git a/Yi.Pure.Vue3/.github/ISSUE_TEMPLATE/bug_report.yml b/Yi.Pure.Vue3/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..aff0c8f5 --- /dev/null +++ b/Yi.Pure.Vue3/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,38 @@ +name: "\U0001F41E Bug report" +description: Report an issue with vue-pure-admin +body: + - type: markdown + attributes: + value: | + 感谢您花时间填写此错误报告 (Thanks for taking the time to fill out this bug report) + - type: textarea + id: bug-description + attributes: + label: 描述问题 (Describe the problem) + placeholder: 请描述您的问题 (Please describe your problem) + validations: + required: true + - type: textarea + id: reproduction-steps + attributes: + label: 如何复现该问题 (How to reproduce the problem) + placeholder: 请提供复现问题的具体操作步骤,以便平台快速定位、高效地解决问题。当然如果问题的操作步骤较复杂,您可以fork平台,然后去改动代码复现问题,这样更高效 (Please provide specific steps to reproduce the problem, so that the platform can quickly locate and solve the problem efficiently. Of course, if the operation steps of the problem are more complicated, you can fork the platform, and then modify the code to reproduce the problem, which is more efficient) + validations: + required: true + - type: textarea + id: system-info + attributes: + label: 操作系统和浏览器信息 (Operating system and browser information) + placeholder: 如果您遇到操作系统或浏览器兼容性问题,可选填此项 (Optional if you encounter operating system or browser compatibility issues) + validations: + required: false + - type: checkboxes + id: checkboxes + attributes: + label: 验证 (Verify) + description: 在提交问题之前,请确保您执行以下操作 (Before submitting an issue, please ensure you do the following) + options: + - label: 是否仔细阅读过 [文档](https://pure-admin.github.io/pure-admin-doc/) (Have you read [documentation](https://pure-admin.github.io/pure-admin-doc/) carefully) + required: true + - label: 检查是否存在相同或类似的问题 [issues](https://github.com/pure-admin/vue-pure-admin/issues) (Check for the same or similar [issues](https://github.com/pure-admin/vue-pure-admin/issues)) + required: true diff --git a/Yi.Pure.Vue3/.github/ISSUE_TEMPLATE/config.yml b/Yi.Pure.Vue3/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..3ba13e0c --- /dev/null +++ b/Yi.Pure.Vue3/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/Yi.Pure.Vue3/.github/workflows/linter.yml b/Yi.Pure.Vue3/.github/workflows/linter.yml new file mode 100644 index 00000000..2dbbcb1f --- /dev/null +++ b/Yi.Pure.Vue3/.github/workflows/linter.yml @@ -0,0 +1,52 @@ +name: Lint Code +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build: + name: Lint Code + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v3 + name: Install pnpm + id: pnpm-install + with: + version: 9 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Start Lint Code + run: | + pnpm install --no-frozen-lockfile + pnpm lint + pnpm typecheck + env: + VALIDATE_ALL_CODEBASE: false + DEFAULT_BRANCH: main + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Yi.Pure.Vue3/.github/workflows/pages.yml b/Yi.Pure.Vue3/.github/workflows/pages.yml new file mode 100644 index 00000000..7085c8eb --- /dev/null +++ b/Yi.Pure.Vue3/.github/workflows/pages.yml @@ -0,0 +1,42 @@ +name: Build and Deploy +permissions: + contents: write +on: + push: + branches: + - pages + +jobs: + deploy: + concurrency: ci-${{ github.ref }} + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: https://registry.npmjs.com/ + + - uses: pnpm/action-setup@v3 + name: Install pnpm + id: pnpm-install + with: + version: 9 + run_install: false + + - name: Deploy 🔧 + run: | + pnpm install --no-frozen-lockfile + sed -i "s#VITE_PUBLIC_PATH = /#VITE_PUBLIC_PATH = /vue-pure-admin/#g" $(pwd)/.env.production + pnpm build + cd dist + touch README.md .nojekyll + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: dist + clean: true \ No newline at end of file diff --git a/Yi.Pure.Vue3/.gitignore b/Yi.Pure.Vue3/.gitignore new file mode 100644 index 00000000..423ed2b8 --- /dev/null +++ b/Yi.Pure.Vue3/.gitignore @@ -0,0 +1,22 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.eslintcache +report.html +vite.config.*.timestamp* + +yarn.lock +npm-debug.log* +.pnpm-error.log* +.pnpm-debug.log +tests/**/coverage/ + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/Yi.Pure.Vue3/.gitpod.yml b/Yi.Pure.Vue3/.gitpod.yml new file mode 100644 index 00000000..57324a3b --- /dev/null +++ b/Yi.Pure.Vue3/.gitpod.yml @@ -0,0 +1,5 @@ +ports: + - port: 3344 + onOpen: open-preview +tasks: + - init: pnpm install && pnpm serve diff --git a/Yi.Pure.Vue3/.husky/commit-msg b/Yi.Pure.Vue3/.husky/commit-msg new file mode 100644 index 00000000..5ee2d163 --- /dev/null +++ b/Yi.Pure.Vue3/.husky/commit-msg @@ -0,0 +1,8 @@ +#!/bin/sh + +# shellcheck source=./_/husky.sh +. "$(dirname "$0")/_/husky.sh" + +PATH="/usr/local/bin:$PATH" + +npx --no-install commitlint --edit "$1" \ No newline at end of file diff --git a/Yi.Pure.Vue3/.husky/common.sh b/Yi.Pure.Vue3/.husky/common.sh new file mode 100644 index 00000000..5f0540b7 --- /dev/null +++ b/Yi.Pure.Vue3/.husky/common.sh @@ -0,0 +1,9 @@ +#!/bin/sh +command_exists () { + command -v "$1" >/dev/null 2>&1 +} + +# Workaround for Windows 10, Git Bash and Pnpm +if command_exists winpty && test -t 1; then + exec < /dev/tty +fi diff --git a/Yi.Pure.Vue3/.husky/pre-commit b/Yi.Pure.Vue3/.husky/pre-commit new file mode 100644 index 00000000..6e229ea3 --- /dev/null +++ b/Yi.Pure.Vue3/.husky/pre-commit @@ -0,0 +1,10 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" +. "$(dirname "$0")/common.sh" + +[ -n "$CI" ] && exit 0 + +PATH="/usr/local/bin:$PATH" + +# Perform lint check on files in the staging area through .lintstagedrc configuration +pnpm exec lint-staged \ No newline at end of file diff --git a/Yi.Pure.Vue3/.lintstagedrc b/Yi.Pure.Vue3/.lintstagedrc new file mode 100644 index 00000000..ebf359aa --- /dev/null +++ b/Yi.Pure.Vue3/.lintstagedrc @@ -0,0 +1,20 @@ +{ + "*.{js,jsx,ts,tsx}": [ + "prettier --cache --ignore-unknown --write", + "eslint --cache --fix" + ], + "{!(package)*.json,*.code-snippets,.!({browserslist,npm,nvm})*rc}": [ + "prettier --cache --write--parser json" + ], + "package.json": ["prettier --cache --write"], + "*.vue": [ + "prettier --write", + "eslint --cache --fix", + "stylelint --fix --allow-empty-input" + ], + "*.{css,scss,html}": [ + "prettier --cache --ignore-unknown --write", + "stylelint --fix --allow-empty-input" + ], + "*.md": ["prettier --cache --ignore-unknown --write"] +} diff --git a/Yi.Pure.Vue3/.markdownlint.json b/Yi.Pure.Vue3/.markdownlint.json new file mode 100644 index 00000000..d628d441 --- /dev/null +++ b/Yi.Pure.Vue3/.markdownlint.json @@ -0,0 +1,11 @@ +{ + "default": true, + "MD003": false, + "MD033": false, + "MD013": false, + "MD001": false, + "MD025": false, + "MD024": false, + "MD007": { "indent": 4 }, + "no-hard-tabs": false +} diff --git a/Yi.Pure.Vue3/.npmrc b/Yi.Pure.Vue3/.npmrc new file mode 100644 index 00000000..dddf8bc0 --- /dev/null +++ b/Yi.Pure.Vue3/.npmrc @@ -0,0 +1,4 @@ +shell-emulator=true +shamefully-hoist=true +enable-pre-post-scripts=false +strict-peer-dependencies=false \ No newline at end of file diff --git a/Yi.Pure.Vue3/.nvmrc b/Yi.Pure.Vue3/.nvmrc new file mode 100644 index 00000000..47465842 --- /dev/null +++ b/Yi.Pure.Vue3/.nvmrc @@ -0,0 +1 @@ +v20.15.0 \ No newline at end of file diff --git a/Yi.Pure.Vue3/.prettierignore b/Yi.Pure.Vue3/.prettierignore new file mode 100644 index 00000000..1667337a --- /dev/null +++ b/Yi.Pure.Vue3/.prettierignore @@ -0,0 +1 @@ +src/views/system/menu/README.md \ No newline at end of file diff --git a/Yi.Pure.Vue3/.prettierrc.js b/Yi.Pure.Vue3/.prettierrc.js new file mode 100644 index 00000000..775d970a --- /dev/null +++ b/Yi.Pure.Vue3/.prettierrc.js @@ -0,0 +1,9 @@ +// @ts-check + +/** @type {import("prettier").Config} */ +export default { + bracketSpacing: true, + singleQuote: false, + arrowParens: "avoid", + trailingComma: "none" +}; diff --git a/Yi.Pure.Vue3/.stylelintignore b/Yi.Pure.Vue3/.stylelintignore new file mode 100644 index 00000000..0c34e619 --- /dev/null +++ b/Yi.Pure.Vue3/.stylelintignore @@ -0,0 +1,4 @@ +/dist/* +/public/* +public/* +src/style/reset.scss \ No newline at end of file diff --git a/Yi.Pure.Vue3/CHANGELOG.en_US.md b/Yi.Pure.Vue3/CHANGELOG.en_US.md new file mode 100644 index 00000000..af4d69e8 --- /dev/null +++ b/Yi.Pure.Vue3/CHANGELOG.en_US.md @@ -0,0 +1,928 @@ +# 5.8.0 (2024-08-19) + +### 🎫 Feat + +- Added a second button permission command (judged based on the `permissions` field returned by the login interface) +- Functional pop-up box `ReDialog` adds whether to enable the `loading` loading animation function after clicking the confirmation button +- `PureTableBar` component adds full screen and exit full screen functions +- `VxeTableBar` component adds full screen and exit full screen functions +- The OK button of the `ReDialog` component provides the close button animation `closeLoading` function +- Add development environment code debugging `vite-plugin-vue-inspector` plug-in to improve development experience +- Added `vite-plugin-checker` plugin for stricter type and `eslint` verification + +### 🐞 Bug fixes + +- Fixed the problem that the current tab cannot be closed after configuring the routing attribute `fixedTag` to `false` +- Fixed the issue where `logo` cannot be hidden in top menu mode + +### 🍏 Perf + +- Optimize type hints for custom instructions +- Optimize the press enter login function on the login page +- Optimize the mask level of the left menu on the mobile side +- Optimize system management-permission function style of role management +- Upgraded dependencies, compatible with the latest version of `element-plus` + +# 5.7.0 (2024-06-04) + +### 🎫 Feat + +- Add Google style tabs + +### 🐞 Bug fixes + +- Fixed the issue where the text exceeds and is not hidden after the menu is folded in Firefox browser + +# 5.6.0 (2024-05-14) + +### ✔️ Refactor + +- Upgrade `pnpm` to `v9` version, requiring `pnpm` version `>=9` + +### 🐞 Bug fixes + +- Fixed the issue where clicking on an external link would jump twice + +### 🍏 Perf + +- Optimize `ReSegmented` component + +# 5.5.0 (2024-05-07) + +### 📄 Docs + +The addresses of the document site and full version preview site have been changed! + +- The latest document site address: https://pure-admin.github.io/pure-admin-doc +- The latest full version preview site address: https://pure-admin.github.io/vue-pure-admin + +### ✔️ Refactor + +- Reconstruct the `layout` file naming convention to make it more readable + +### 🎫 Feat + +- Add new component `ReVxeTableBar` to be used with `vxe-table` + +### 🐞 Bug fixes + +- Fixed the issue where the background color is white when `FixedHeader` is set to `false` in dark mode +- Fixed the problem of delayed closing of functional pop-up window `ReDialog` when clicking the cancel button + +### 🍏 Perf + +- Optimize account settings-avatar upload function + +# 5.4.0 (2024-04-18) + +### 🎫 Feat + +- Add global disabled attribute `disabled` to `ReSegmented` component +- Added mind map examples +- Functional pop-up box `ReDialog` adds `Popconfirm` bubble confirmation box +- `pure-table` adds `headerSlot` custom header slot usage example +- The route adds a configurable `fixedTag` attribute, which determines whether the current menu name is fixedly displayed on the tab and cannot be closed. +- Added account setting function page and compatible with mobile terminals +- Upgrade `eslint9` and related compatibility processing +- Added global configuration `MaxTagsLevel` property to set the maximum number of open tabs +- Full coverage of the internationalization of the core code of the framework (only the internationalization of the business code needs to be processed) + +### 🐞 Bug fixes + +- Fixed the issue where columns cannot be dragged normally when there are multiple `RePureTableBar` components on a page +- Fixed the problem of icon display style after the third-level menu is folded to the left +- Fixed the issue where the font color does not take effect after refreshing the account settings page +- Fixed the issue where the `refreshToken` parameter is empty when calling the refresh `token` interface + +### 🍏 Perf + +- Optimize login interface +- Optimize the logic of obtaining the top menu +- Optimize request whitelist logic and be compatible with more scenarios +- Simplified export and import usage in `store` files +- Removed unnecessary `cloc` tool dependency package, which uses the `GPL` open source license and is controversial +- Optimize the types of `post` and `get` utility functions in `src/utils/http` files + +# 5.3.0 (2024-03-28) + +### ✔️ Refactor + +- Reconstruct internationalized file naming conventions and demo pages with code location hints + +### 🎫 Feat + +- Add `MQTT` example +- Added `docx` and `excel` file preview examples +- The `ReSegmented` segmented controller has a new `size` attribute, which can set three sizes +- The `RePureTableBar` component and `pure-admin-table` support international switching of table headers + +# 5.2.0 (2024-03-22) + +### ✔️ Refactor + +- Place the full screen button at the top to make it visible and easy to operate + +### 🎫 Feat + +- Added `v-ripple` command (water ripple effect) +- Add global `Stretch` configuration to the content area to customize compact pages and easily find the required information +- Added roaming guidance based on `ElTour` +- Improve role management-menu permission function, novel interactive experience +- Add system monitoring-online users +- Add system monitoring-login log +- Add system monitoring-operation log +- Add system monitoring-system log +- Add more more convenient `pure-admin-table` editable table examples (overall editing, single row editing, cell editing) +- The `ReSegmented` component has a new `block` attribute to make it fit the width of the parent element +- Add [vue-flow](https://vueflow.dev/) flow chart example +- Add virtual table example +- Added Gantt chart example +- Add graphic verification code example +- Add form examples, which can be generated through `JSON` format configuration (basic form, pop-up form, drawer form, step-by-step form, search form) +- Add a folding and expanding menu function on the middle right side of the left menu + +### 🐞 Bug fixes + +- Fixed the scroll bar issue when clicking on the registration page under `windwos` +- Fixed the problem of scroll bars appearing in the content area when switching pages under `windows` +- Fixed the problem of status style disappearing in `pure-table` with status table under dark overall style +- Fixed the problem of turning on the gray mode and dark overall style in the project configuration and refreshing the overall style of the page. + +### 🍏 Perf + +- All pages of system management and system monitoring are compatible with mobile terminals + +# 5.1.0 (2024-03-02) + +### ✔️ Refactor + +- Reconstruct the tab page `UI` to make it more convenient to click the close button + +### 🎫 Feat + +- Added multi-select card example +- The menu supports all browser behaviors of right-clicking on the `a` tag (opening links in new tabs, new windows, dragging and dropping to open in new tabs, etc.) +- Added search history and collection functions to menu search + +### 🐞 Bug fixes + +- Fixed the problem of scroll bars appearing on the login page under `windows` system + +### 🍏 Perf + +- Standardize the naming rules when registering local icons to better match the icon selector + +# 5.0.0 (2024-02-26) + +Totally `ESM` version + +### ✔️ Refactor + +- Upgrade `vite` to `v5` version, specify `node` version `>18.18.0`, `pnpm` version `>=8.6.10` +- Use [vite-plugin-fake-server](https://www.npmjs.com/package/vite-plugin-fake-server) to replace [vite-plugin-mock](https://www.npmjs.com/package/vite-plugin-mock), use [@faker-js/faker](https://www.npmjs.com/package/@faker-js/faker) to replace [mockjs](https://www.npmjs.com/package/mockjs) +- Rename `tailwind.config.js` to `tailwind.config.ts` and update its file to `esm` syntax +- Updated `.prettierrc.js` file to `esm` syntax +- Updated `postcss.config.js` file to `esm` syntax +- Updated `commitlint.config.js` file to `esm` syntax +- Use `eslint.config.js` to replace `.eslintrc.js` and follow `esm` syntax +- Upgrade `stylelint` to `16` version and follow `esm` syntax +- All `search` search icons are uniformly replaced with `@iconify-icons/ri/search-line` which is more commonly used and put into the global offline icon +- Removed the filter effect of `iframe` in dark mode +- Bring a more beautiful and refined homepage +- Cleaner and neater pop-up panel on the right side of project configuration +- Restructure the About page to make it more compact and key information more prominent + +### 🎫 Feat + +- Add system management-menu management +- Improve system management-user management +- Embedded `iframe` pages support setting `keepAlive` to maintain page status +- Optimized navigation, the pop-up menu is adaptive and scrollable beyond the content area +- Added file upload example +- Added overall style adaptive operating system light, dark, and automatic theme functions +- Add footer +- Supports multi-tab pages to open systems that have already been logged in without logging in again and adds an internal login-free function (users can choose the number of days without login) +- Terminal command line that brings a high-level feel +- Add audio visualization function example +- Added video frame interception - `WebAssembly` version, supports `MP4`, `MOV`, `AVI`, `WebM`, `MKV` and other mainstream formats +- Added methods to block keyboard `F12`, browser default right-click menu, page element selection, and picture default draggability +- The secondary package `localforage` supports setting expiration time and provides complete type prompts +- Add `AnimateCss` selector component `ReAnimateSelector` +- Added `ReText` component, supports automatic omission and display of `Tooltip` function, supports multi-line omission, high reusability +- Add an art drawing board function, which can be used to draw some design idea architecture diagrams, for example +- New component - optional button example +- Add common button examples +- Added color picker component example +- Add date picker component example +- Added datetime picker example +- Added time selector example +- Added statistics component example +- Add label component example +- Added accordion panel component example +- Add progress bar component example +- Upgrade `Swiper 11` +- Add [vite-plugin-router-warn](https://www.npmjs.com/package/vite-plugin-router-warn) plug-in to eliminate unnecessary `vue-router` dynamic routing warning`No match found for location with path` + +### 🐞 Bug fixes + +- Fixed the problem that in `query` routing parameter passing mode, two `router` jumps will be triggered when clicking the tab page to switch operations. +- Fixed an issue in card tab mode, when passing parameters through the `query` route, the `card-active` attribute still exists after leaving the active tab, resulting in the font color not changing when the mouse `hover` +- Fixed the error in reading and parsing the same name in the `src/layout/components/appMain.vue` file +- Fixed the issue where the height of the embedded page `frameView` does not adapt after hiding the tab page. +- Fixed the problem of invalid routing `meta.transition.name` configuration +- Fixed the problem that the right-click tab page panel cannot be closed when clicking on the `iframe` page and the right-click tab page panel is blocked when on the `iframe` page +- Fixed the problem of missing parameters when clicking on breadcrumbs to jump to the page in routing `query` and `params` modes + +### 🍏 Perf + +- Optimize theme color +- Tabs can be slid left or right according to the sliding force +- The interface naming rules are unified into `kebab-case` string naming method +- The `label` of `el-form` is consistent with the global `label` style +- `VITE_PUBLIC_PATH` defaults to `/`, which is more friendly to `VITE_ROUTER_HISTORY` in `h5` mode +- Optimize the `transformI18n` function and support unlimited nesting levels for internationalization (of course, the platform still recommends that the fewer nesting levels, the better) +- When initializing the page, load `pinia` first and then `router`, which is compatible with more usage scenarios. +- Optimize the judgment logic of request whitelist +- The navigation style of the left menu has been adjusted to optimize the different display methods on PC and mobile when there is no logo. +- Upgrade code specification style related libraries to the latest +- Optimize login page `loading` judgment +- Optimize the `IconSelect` icon selector component to improve user experience +- Optimize the segmented controller component and add `v-model` support +- Optimize the method of obtaining platform `logo` +- Upgraded `@pureadmin/theme`, bringing more friendly `esm` support +- Optimize some functions in the `build/info.ts` file to make it friendly and support `esm` +- Optimize the column setting pop-up box of the `PureTableBar` component, set the maximum height, and scroll beyond it +- Optimize the functional pop-up component `ReDialog` to retain the closing animation +- Test the Chinese path and delete the `sass-loader` dependency +- The packaged code is changed to the browser that natively supports [ES2015](https://caniuse.com/es6) by default +- Remove the `stylelint` plug-in dependency that will be automatically installed +- Enhance the way `useRenderIcon` uses local `svg` +- Optimize the style of the expand and collapse buttons in the lower left corner of the left menu under the bright white theme color scheme +- Optimize all `description` contents of `el-empty`. Add `el-empty` when the icon selector content is empty +- The `tooltip` theme after the left menu is collapsed is consistent with the overall menu +- Update `svgo` command to `svgo -f . -r` (compress all `SVG` files in the current directory) +- Optimize project construction related functions +- Enhanced `ReTypeit` component to support slots and all `typeit` configuration items +- Optimize internationalization-related processing logic and add cache during initialization to avoid unnecessary performance consumption + +# 4.5.0 (2023-06-26) + +### ✔️ Refactor + +- Refactor image crop `ReCropper` component, add more useful functions + +### 🎫 Feat + +- The menu search function supports pinyin search, such as searching for image cropping, input `tp` or `tupian` and other corresponding pinyin +- Add long press command and usage example, the long press command supports continuous callback of custom duration +- Add an example of sensitive word filtering function +- Add an example of Chinese Pinyin function + +### 🐞 Bug fixes + +- Fixed `V4.4.0` version, the problem that the page does not cache the page for the first time after the `keepAlive` cache is enabled +- Fixed the issue that the column setting tick option was not correctly initialized according to the `hide` property when the `RePureTableBar` component was initialized + +### 🍏 Perf + +- Change `VITE_PUBLIC_PATH` to `./` by default to be compatible with more path scenarios, +- Compatible with the `OSS` scene where `VITE_PUBLIC_PATH` is `url`, need to upgrade `@pureadin/theme` to the latest version + +# 4.4.0 (2023-06-14) + +### 🎫 Feat + +- Route `meta` adds `activePath` attribute, which can activate a menu (mainly used for routes that pass parameters through `query` or `params`, when they are not displayed in the menu after configuring `showLink: false`, they will be There will be no menu highlighting, but you can get highlighting by setting `activePath` to specify the active menu, `activePath` is the `path` of the specified active menu [View details](https://github.com/pure-admin/vue-pure-admin/commit/58cafbc73ffa27253446ee93077e1e382519ce8a#commitcomment-117834411)) +- Example of advanced usage of `pure-admin-table` to add adaptive content area height +- Add anti-shake, throttling and text copy instructions and standardize the prompts when custom instructions are used incorrectly and add usage examples +- Add `el-empty` component when the `notice` message prompts the component to have empty data +- Example code of functional popup window adding subcomponent `prop` as `primitive` type example +- Add `vscode-docker` plugin + +### 🐞 Bug fixes + +- Fix internationalization switch to English mode and refresh will return to Chinese mode +- Fixed the problem that the pop-up mask of the search menu function did not cover the left menu + +### 🍏 Perf + +- Page switching performance optimization, regardless of the network, the speed of page switching logic is almost `3-4` times faster than before [View optimization details](https://github.com/pure-admin/vue-pure-admin/pull/600#issuecomment-1586094078) +- Optimized tab page operation-routing parameter transfer mode usage +- All tables in the system management are changed to adaptive content area height, need to upgrade `@pureadmin/table` to the latest version +- Use the `useResizeObserver` function of `vueuse` to replace the `v-resize` custom directive, and the performance will be better from the performance after testing +- For unbound public events, unbind when the page is destroyed + +# 4.3.0 (2023-06-04) + +### 🎫 Feat + +- Add `docker` support +- Add project version real-time update detection function +- Improve system management - role management page +- Waterfall component adds infinite scrolling +- Add `updateDialog` to the functional bullet box to change the property value of the bullet box itself +- `wangeditor` rich text add multiple rich text and custom image upload examples +- Advanced usage of `pure-table` table added keep checked `CheckBox` option example +- Added `title` slot to `RePureTableBar` component + +### 🐞 Bug fixes + +- Fixed the problem that the countdown to obtain the verification code will be disabled with a delay of `1s` +- Fixed the problem that the icon selector did not initialize the preview correctly +- Fixed dynamic routing redirection causing duplicate content on tabs +- Fix the problem that the `getTopMenu()` function cannot get `path` and report an error when the page is forced to refresh +- Fix the problem that the left menu does not display as a whole due to the sudden pull up after the left menu is folded +- Fixed `RePureTableBar` scrollbar issue in `windows` after turning off column settings + +### 🍏 Perf + +-Optimized tab page operation-routing parameter transfer mode usage + +- Optimize menu search function and style +- Update `vscode` code snippets +- Optimize the initialization call timing of `dataThemeChange` theme setting + +# 4.2.0 (2023-05-15) + +### 🎫 Feat + +- Added segment controller component and adapted to dark mode +- Static routing supports configuration array format +- Functional bullet box component adds full screen and exit full screen operation buttons +- New component - Waterfall `demo` +- Add `Exclusive` type mutual exclusion syntactic sugar + +### 🍏 Perf + +- Standardize the way of writing routes in `template` template, no longer use `$route` and `$router`, this way of writing `vue-tsc` fails to compile + +# 4.1.0 (2023-05-12) + +### 🎫 Feat + +- Add a `demo` example combined with `Form` for the functional pop-up box component +- wrapper `el-col` component of `element-plus` +- Add `beforeCancel` and `beforeSure` callbacks to the functional popup component, which can suspend the closing of the popup +- Improve `System Management-Department Management` page +- Optimize `PureTableBar` component, add drag and drop function for column display + +### 🐞 Bug fixes + +- Fix the problem that the page cache still exists when you click the tab to reload after turning on `keepAlive` +- Fix the problem that the left menu will flicker after refreshing the tab in the mixed mode menu + +### 🍏 Perf + +- Optimize home page layout +- Dependency update to `vue3.3+` and remove `unplugin-vue-define-options` plugin + +# 4.0.0 (2023-05-09) + +[View 4.0.0 version optimization details](https://github.com/pure-admin/vue-pure-admin/issues/428#issuecomment-1422191158) + +### ✔️ Refactor + +- Use `css` pseudo-class `before` to refactor the activation background of the menu, similar to [ant.design-menu](https://ant.design/components/menu-cn#components-menu-demo-inline-collapsed) + +### 🎫 Feat + +- Optimize the extra icon on the right side of the menu name to support more icon rendering modes +- Configurable home menu display and hide +- Promote the namespace of the local reactive store into the global configuration +- Added functional popup components and `demo` examples, making it easier to use +- `PureTableBar` component adds column display function + +### 🐞 Bug fixes + +- Fixed the `echarts` chart on the home page not adapting to the container when the menu is collapsed or expanded +- Fixed the problem that when there is only one submenu, the search function cannot find the submenu +- Fix the problem that the global configuration `Theme` is empty cache for `light` and re-login theme configuration does not take effect +- Fixed the problem that the search boxes were not automatically gathered after the menu search function pop-up box was opened +- Fixed the problem of toolbar button text display after pressing `ESC` to exit full screen +- Fix the problem of `tooltip` click penetration in the notification bar of the mobile terminal +- Fixed the problem that the text is not displayed when switching to `horizontal` navigation mode after the left menu is collapsed +- Fixed the problem that the status cannot be reset when closing other tabs when navigating `tab` +- Fix the page hot update error caused by uninitialized environment variables in the `getHistoryMode` function +- Fixed too many `tabs` in the navigation, which caused the tabs on the left to be closed and could not be displayed normally +- Fixed the problem of full-screen error reporting when clicking on the content area +- Fixed the problem that the left navigation bar is always loading after opening `showLink:false` page under hybrid navigation and refreshing +- Fixed the left navigation memory overflow problem caused by calling `initRouter` function in mixed mode navigation +- Fixed the problem that the cached page was not destroyed when closing the left, right, other, and all tab operations +- Fix the problem that the route passes parameters through `query` or `params`, and the cache invalidation problem occurs when the tab page is closed after the cache is enabled +- Fixed the problem that the breadcrumbs could not find the parent path in the `params` route parameter passing mode + +### 🍏 Perf + +- Optimize `buttons` named slot of `RePureTableBar` component +- Optimize navigation style and menu collapse animation +- Optimize the extra icon on the right side of the menu name to support more icon rendering modes +- Optimize `logo` image and text layout and unified configuration +- After the routing information `showLink` is set to `false`, the current routing information will not be added to the tab +- Export `addPathMatch` function +- All `getters` in `pinia` are changed to the official recommended way of writing, and `this` is changed to `state` to automatically deduce the type +- Adapt to the `api` of the latest version of `pure-table` +- Ignore `deprecation` warnings for `sourcemap-codec` and `stable` dependencies +- Remove `"incremental": true` from `tsconfig.json` file +- Update `stylelint` and related configurations to the latest, strengthen style validation +- Breadcrumbs are removed from the homepage, and are displayed according to the selected menu. The homepage is no longer fixed in the breadcrumbs, and the routing monitoring of the breadcrumbs page is optimized + +# 3.9.7 (2022-12-26) + +### 🍏 Perf + +- Use `path.posix.resolve` instead of `path.resolve` to avoid drive letter problems when using `electron` in `windows` environment +- By default, the `CachingAsyncRoutes` dynamic routing cache is turned off locally, making it easier to debug in the development environment. It is not necessary to clear the local cached dynamic routing every time you modify the dynamic routing. It is recommended to enable it in the production environment + +# 3.9.6 (2022-12-19) + +### 🎫 Chores + +- Upgrade `vite4` version + +### 🐞 Bug fixes + +- Fix the problem that `hmr` of `vite` is slow due to the wrong way of importing `tailwind.css` + +### 🍏 Perf + +- Update [@pureadmin/theme](https://github.com/pure-admin/pure-admin-theme) to the latest version, bringing more friendly type hints +- Optimize [PureTableBar](https://github.com/pure-admin/vue-pure-admin/tree/main/src/components/RePureTableBar) component +- Optimize the business code of the system management page to bring better code reference + +# 3.9.5 (2022-12-13) + +### ✔️ Refactor + +- completely removed `lodash` and its related libraries + [Click here to see Why Removed? How to integrate it yourself? ](https://pure-admin.github.io/pure-admin-doc/pages/FAQ/#%E5%B9%B3%E5%8F%B0%E5%9C%A8-v3-9-5-%E7 %89%88%E6%9C%AC%E5%AE%8C%E5%85%A8%E7%A7%BB%E9%99%A4%E4%BA%86-lodash-%E5%92%8C% E5%85%B6%E7%9B%B8%E5%85%B3%E5%BA%93-%E4%B8%BA%E4%BB%80%E4%B9%88%E7%A7%BB%E9 %99%A4-%E5%A6%82%E4%BD%95%E8%87%AA%E8%A1%8C%E9%9B%86%E6%88%90) + +### 🎫 Feat + +- Add `@pureadmin/table` table dynamic column example + +### 🐞 Bug fixes + +- Fix dynamic route `rank` issue +- Fix dark theme styling issues + +### 🍏 Perf + +- optimize the route `rank`, when `rank` does not exist, it will be created automatically according to the order, the home page route will always be the first + +# 3.9.4 (2022-12-05) + +### ✔️ Refactor + +- Completely removed `vxe-table`, after removal, the overall package size of the full version is reduced by `1.82MB`, and the initial startup time is basically the same as the lite version 🐮 + [Click here to see Why Removed? How to integrate it yourself?](https://pure-admin.github.io/pure-admin-doc/pages/FAQ/#%E5%B9%B3%E5%8F%B0%E5%9C%A8-v3-9-4-%E7%89%88%E6%9C%AC%E5%AE%8C%E5%85%A8%E7%A7%BB%E9%99%A4%E4%BA%86-vxe-table-%E4%B8%BA%E4%BB%80%E4%B9%88%E7%A7%BB%E9%99%A4-%E5%A6%82%E4%BD%95%E8%87%AA%E8%A1%8C%E9%9B%86%E6%88%90) + +### 🎫 Feat + +- Add `@pureadmin/table` table selector (single select, multiple select) example + +# 3.9.3 (2022-12-04) + +### 🎫 Feat + +- Add `@pureadmin/table` pagination and loading animation example + +### 🐞 Bug fixes + +- Fixed the problem that the refresh page would be blank due to changes in dynamic routes stored in local storage after enabling `CachingAsyncRoutes` +- Fixed `Tooltip` displayed abnormally after the menu is collapsed + +### 🍏 Perf + +- Expand the use of local icons, the first launch of the full version reduces `13` requests again +- When the menu loading is slow, add `loading` animation to optimize user experience +- Theme initialization is placed in `onBeforeMount` to avoid flashing of the initialization page + +# 3.9.2 (2022-12-03) + +### 🍏 Perf + +- Global coverage of `el-dialog`, `el-drawer`, `el-message-box`, `el-notification` components of `element-plus`The style of the close icon in the upper right corner makes it more vivid [specific modification Code record](https://github.com/pure-admin/vue-pure-admin/commit/c80818d792276666aaea4b18413a0f08777f2ed1) +- The packaging output information is compatible with different packaging output paths +- Optimize some animations + +# 3.9.1 (2022-12-02) + +### 🎫 Feat + +- Add `CachingAsyncRoutes` whether to enable dynamic route cache local global configuration, default `true` +- Add `TooltipEffect` global configuration, you can configure the `effect` attribute of all `el-tooltip` on the platform body, the default `light`, does not affect the business code +- Add directory, menu text exceeds display `Tooltip` text prompt demo + +### 🍏 Perf + +- Optimize `initRouter` method, compatible with `sso` scenario +- Breadcrumb animation style optimization + +# 3.9.0 (2022-11-30) + +### 🐞 Bug fixes + +- Fixed the jitter problem caused by the scroll bar on the page when the text is too long when exiting the full screen +- Fix some type errors + +### 🍏 Perf + +- perf: Great optimization of the first screen loading. Compared with the version before `3.9.0`, the first screen requests are reduced by `71`, and the first screen loading resources are reduced by `4.1 MB` + +# 3.8.7 (2022-11-28) + +### 🍏 Perf + +- perf: Great package optimization, please be sure to upgrade! Use `unplugin-vue-define-options` to replace `unplugin-vue-macros`, the packaging speed is increased several times, use `unplugin-vue-macros` to take `mac` with moderate performance as an example, the packaging time of the full version is` 6` minutes😭, after replacing it with `unplugin-vue-define-options`, the packaging time on the same computer is `50` seconds☺️ + +# 3.8.6 (2022-11-27) + +### 🎫 Feat + +- Add `message` message prompt function, compatible with `Element Plus` and `Ant ​​Design` two `Message` style styles, use and package size are extremely low cost and adapt to dark mode, really fragrant 😂 + +### 🍏 Perf + +- perf: No need to install `@vue/runtime-core`, compatible with `volar` hints of all `element-plus` components + +# 3.8.5 (2022-11-26) + +### 🍏 Perf + +- Great optimization, remove `@pureadmin/components` and use compatible writing, the package size of the platform is reduced by `0.4` MB before compression is not enabled, and the resource of `2.3` MB is reduced for the first screen request, which is for the [lite version ](https://github.com/pure-admin/pure-admin-thin) is a very big optimization, the streamlined version has synchronized code + +# 3.8.0 (2022-11-26) + +### 🎫 Feat + +- Add `@pureadmin/table` multiple data format (deep structure) examples +- Add `@pureadmin/table` image preview example +- Add `@pureadmin/table` row and column drag example +- Add `@pureadmin/table` context menu example +- Add `@pureadmin/table` export `Excel` example +- Add `@pureadmin/table` edit cell example +- Add `@pureadmin/table` watermark example +- Add `@pureadmin/table` print example +- Add `@pureadmin/table` embedded `echarts` chart example +- Add `svgo` to compress all `svg` files on the platform to reduce the size + +### 🍏 Perf + +- The static routing platform automatically imports without manual import +- Improved global type hints +- Optimize `vite` to rely on pre-built configurations in the platform, and the loading speed of page switching is significantly accelerated + +# 3.7.1 (2022-11-22) + +### 🔥 hotfix + +- Fixed the problem that the tab page may not be reset when logging out when the tab page cache is not turned on + +# 3.7.0 (2022-11-21) + +### ✔️ Refactor + +- Replace `driver.js` with `intro.js` + +### 🎫 Feat + +- Add front-end single sign-on, test address https://pure-admin.github.io/vue-pure-admin/#/pure-table/index?username=sso&roles=admin&accessToken=eyJhbGciOiJIUzUxMiJ9.admin +- Add more examples for [@pureadmin/table](https://github.com/pure-admin/pure-admin-table) and `element-plus` [table](https://element-plus.org /zh-CN/component/table.html) example remains the same +- Rich watermark function page (supports customizing various colors, shadows, text, additional attributes, setting undeletable watermarks and setting watermarks for specified elements) +- Optimize the menu, add `MenuArrowIconNoTransition` global configuration, configure it in `public/platform-config.json`, for the left menu mode, the menu expansion can be set `MenuArrowIconNoTransition: true` to solve +- Replacement form designer component demo + +### 🐞 Bug fixes + +- Repair the in-page menu with parameters to jump to each other, the label is not selected and highlighted + +### 🍏 Perf + +- Removed deprecated `$baseUrl` +- Compatible importing a certain library leads to `global is not defined` error, importing `src/utils/globalPolyfills.ts` file into `src/main.ts` can solve the problem +- Remove `@vitejs/plugin-legacy`, `vue3` cannot make it support `ie` through any tool + +# 3.6.4 (2022-11-10) + +### 🎫 Feat + +- Menu icon `icon` supports using online icons + +### 🐞 Bug fixes + +- Fixed `vxe-button` font color issue after mouse overlay and some other style issues + +### 🍏 Perf + +- Optimize the routing guard, if you have logged in and there is login information, you cannot jump to the routing whitelist, but continue to stay on the current page +- Removed `baseURL` and global environment proxy, and can be written directly in `vite.config.ts`, which is convenient and supports multiple proxy addresses + +# 3.6.3 (2022-11-01) + +### 🎫 Feat + +- Static resource classification and packaging +- Add danmaku component `demo` + +### 🐞 Bug fixes + +- Fix the `collapse` property added in the latest version of `tailwindcss` conflicts with the platform `class` class name +- Fix that when the `token` expires, if the page has multiple requests, the `token` will be refreshed repeatedly + +# 3.6.2 (2022-10-27) + +### ✔️ Refactor + +- Replace `/@/` alias with `@/` alias + +# 3.6.1 (2022-10-27) + +### 🎫 Feat + +- Add whether to start `cdn` for packaging to replace the local library configuration, the default `false` does not start +- Added optional `gzip` and `brotli` compression modes for packaging builds + +### 🐞 Bug fixes + +- Fix `title` too long display style problem +- Fix the parent `name` in the route should not be repeated with the child `name`, which will cause redirection to jump `404` problem + +### 🍏 Perf + +- Upgrade `axios` to the latest version + +# 3.6.0 (2022-10-25) + +### 🎫 Feat + +- Add file download `demo` +- Add typewriter component `demo` +- Added `json` editor `demo` + +### ✔️ Refactor + +- Refactor the permission module, adopt the most commonly used `RBAC` (Role-Based Access List): role-based permission control (User -> Role -> Permission), and update the page permission and button permission `demo` example, button Permissions support three operation modes (judging permissions in component mode, judging permissions in function mode, and judging permissions in instruction mode) + +### 🐞 Bug fixes + +- Fixed the theme not being emptied when clearing the cache and returning to the login page +- Fix `menu` display problem in production environment in `horizontal` mode +- Fixed the problem that the `mix` mixed mode navigation might not be displayed in the left menu of the production environment +- After the `token` expires, calling the refresh `token` interface will cause an infinite loop + +### 🍏 Perf + +- Removed uncommon `@apply` from `tailwind.css` +- Replace `//` comments with `/** */`, which is more friendly to the editor's intellisense +- Optimize the login enter event +- Simplified some functions, eliminated useless functions, and optimized page loading speed + +# 3.5.0 (2022-9-10) + +### 🎫 Feat + +- Add `cssnano` to compress the size of `css` when packaging +- Add `element-plus` seamless scrolling `Table` page demo +- Open `vscode` bracket pair guide + +### ✔️ Refactor + +- Replace `unocss` with `tailwindcss`, add `tailwindcss` [documentation](https://pure-admin.github.io/pure-admin-doc/pages/tailwindcss/) + +### 🐞 Bug fixes + +- `token` expires, refresh the infinite loop + +### 🍏 Perf + +- When resetting the route, clear the cached page + +# 3.4.6 (2022-8-23) + +### 🐞 Bug fixes + +- `process` is not defined in path +- Fixed an error when dynamic routing `children` is an empty array +- Fixed `iframe` loading failure + +# 3.4.5 (2022-8-22) + +### 🐞 Bug fixes + +- Fix local responsive storage object setting issue + +# 3.4.0 (2022-8-22) + +### 🍏 Perf + +- Optimized routing +- Optimized for mobile compatibility +- Optimized routing parameters (`query`, `params` way to refresh the page does not need to open the tab page cache, the parameters can be retained on the `url` and `tab page`) + +# 3.3.5 (2022-8-19) + +### 🎫 Feat + +- Secondary encapsulation of `Table` of `element-plus` into [@pureadmin/table](https://github.com/pure-admin/pure-admin-table), providing flexible configuration items and integrating into the platform +- Secondary encapsulation of `Descriptions` of `element-plus` into [@pureadmin/descriptions](https://github.com/pure-admin/pure-admin-descriptions), providing flexible configuration items and integrating into the platform +- Centralize most of the tools and hooks of the platform to [@pureadmin/utils](https://pure-admin-utils.netlify.app), and delete the code concentrated in this library to reduce the size of the platform +- Add [unplugin-vue-define-options](https://www.npmjs.com/package/unplugin-vue-define-options) plugin, the page can directly write `defineOptions({name: custom name})` +- Add project files, language analysis tool [cloc](https://www.npmjs.com/package/cloc) +- Added landing page internationalization +- Add full routing configuration table type declaration +- Add virtual listing page demo +- Add `PDF` preview page demo +- Added export `excel` page demo +- Added blank page demo without `Layout` + +### ✔️ Refactor + +- Refactored the theme color to adapt to `element-plus` dark mode (also solved the problem that the same element `css` in `3.3.0` and earlier versions was overwritten many times, resulting in poor style debugging) +- Refactored route reset function + +### 🍏 Perf + +- The compatible project storage directory is named in Chinese, but we really do not recommend Chinese naming, because a library may not escape the Chinese path, causing the project to crash +- Optimized interface type + +### 🐞 Bug fixes + +- Fixed async routes with `showlink` set to `false`, not showing after refresh +- Fixed vertical navigation menu text being hidden after collapse when there is no `icon` + +# 3.3.0 (2022-5-11) + +### 🎫 Feat + +- Add user management page demo +- Add role management page demo +- Add department management page demo +- Add card list page demo +- Integrated form designer +- Added `PPT` demo +- Added anti-shake interception demo in the function menu +- Upgrade `wangeditorV5` (and support internationalization and custom themes) +- Integrate `tauri` version +- Added barcode function +- Added QR code function +- Use the `Cascader` cascade selector in `element-plus` to write a three-level and two-level linkage demo of Chinese provinces and cities +- Integrate `Swiper` plugin +- Routing supports passing `component`, representing the component path +- Added pre-release packaging mode +- Add [hooks] to close a tag (https://github.com/pure-admin/vue-pure-admin/commit/5e8723a031923e79f507e5a17151d3bd88a51523) + +### ✔️ Refactor + +- Refactored the landing page to be more inclined to the actual business scenario +- Use `unocss` instead of `windicss`, `unocss` has better performance in development environment, no memory leaks, and `api` is compatible with `windicss` + +### 🍏 Perf + +- Optimized the style of the `split-pane` component for the platform +- Optimize internationalization, no longer pass the `i18n` field in the route, the platform automatically reads the files in the `locales` folder of the root directory for internationalization matching +- Optimized icon selector +- Optimize `layout` to display user information [commit](https://github.com/pure-admin/vue-pure-admin/commit/56f9dc85e7fbe0637605c43577c794de9f8968aa) + +### 🐞 Bug fixes + +- Fix route initialization problem (Cannot access 'constantRoutes' before initialization) + +# 3.2.0 (2022-3-22) + +### 🎫 Feat + +- Icon selection component +- Menu search function +- Added results page +- Extended `element-plus` timeline component +- Extended `element-plus` tree component to support connecting lines +- Add tree selector, support single and multiple selection + +### 🍏 Perf + +- Optimized the error page UI +- Optimize the internationalization function +- Optimized routing `rank` sorting, compatible with the case where the value of the `rank` field in the routing `meta` is `null` + +### 🐞 Bug fixes + +- Fixed the situation where the menu expands and folds will freeze on some computers + +# 3.1.0 (2022-3-3) + +### 🎫 Feat + +- iframe supports dynamic loading +- Watermark example +- Print examples (pictures, tables, echarts) +- Add running and packaging information, use `lodash-unified` to replace `lodash-es`, `lodash-unified` supports `ESM` and is compatible with `CJS` + +### 🐞 Bug fixes + +- Fixed jumping to another menu page alone in one menu page, the routing page jumped but the tab page was not displayed +- Fixed the route that returns dynamic level 3 and above in the background, and the menu does not correspond to the page + +# 3.0 (2022-2-14) + +### 🎫 Feat + +- Added mix navigation + +### 🐞 Bug fixes + +- Fix tab page bug + +# 2.9.0 (2022-2-5) + +### 🎫 Feat + +- Added package size analysis, command `pnpm report` + +### 🍏 Perf + +- Use `iconify` to introduce icons on demand, optimize icon size, and reduce network requests +- Optimize the route, the route can not pass `showLink: true`, it is displayed by default + +# 2.8.5 (2022-1-21) + +### 🎫 Feat + +- Added `WindiCSS` support +- Add online environment remove console plugin `vite-plugin-remove-console` + +### ✔️ Refactor + +- Replace `@element-plus/icons-vue` with `@iconify-icons/ep` + +# 2.8.0(2022-1-4) + +### 🎫 Feat + +-Added dark theme +-Add element-plus custom theme +-Add guide page + +### 🍏 Perf + +-Optimize internationalization, compatible with the vscode plug-in i18n Ally smart reminder +-Optimize the back-end return routing structure +-Optimize local storage, with four built-in buttons `responsive-configure`, `responsive-locale`, `responsive-layout`, `responsive-tags`, which are basic configuration, international configuration, layout configuration, and tab persistent configuration + +# 2.7.0(2021-12-18) + +### 🎫 Feat + +- New tab reuse +- New message reminder template +- Added front-end menu tree structure example +- Refactor routing, optimize permissions modules, and bring a more convenient experience +- Refactor the env environment and http request to bring a more convenient experience +- Currently, the tabs of the platform are forced to associate with local storage. The next step is to put the tabs in the memory by default and support configurable persistent tabs +- Navigation menu icons support fontawesome, iconfont, remixicon, element-plus/icons, custom svg +- Update font-awesome to version 5.0, because versions below 5.0 are no longer officially maintained, but the platform will still be compatible with font-awesome4 version + +### 🍏 Perf + +- Optimize the tab page to bring a better interactive experience +- Routing title supports direct writing in Chinese, which can be separated from internationalization +- Route history mode is read from env and supports base parameter + +# 2.6.0(2021-11-10) + +### 🎫 Feat + +- Refactored navigation theme color, supports multiple color schemes +- Refactored login page, illustration style + +### 🍏 Perf + +- Optimize the navigation style +- Eliminate strong navigation dependence on vxe-table +- Synchronously update element-plus, replace Font Icon with SVG Icon + +# 2.1.0(2021-10-14) + +### 🎫 Feat + +- Route animation (each route can add different animations) +- Extra icons (for example, this is a newly added page, a new icon is displayed in the upper right corner of the routing menu) +- Extract the default configuration options +- Perfect type file + +### 🐞 Bug fixes + +- Fix the issue of element-plus internationalization +- Fix routing issues +- Fix navigation adaptation problem + +# 2.0.1(2021-9-29) + +### 🎫 Feat + +- Feat horizontal nav + +# 2.0.0(2021-4-13) + +### 🎫 Chores + +- Release 2.0.0 version diff --git a/Yi.Pure.Vue3/CHANGELOG.md b/Yi.Pure.Vue3/CHANGELOG.md new file mode 100644 index 00000000..af4d69e8 --- /dev/null +++ b/Yi.Pure.Vue3/CHANGELOG.md @@ -0,0 +1,928 @@ +# 5.8.0 (2024-08-19) + +### 🎫 Feat + +- Added a second button permission command (judged based on the `permissions` field returned by the login interface) +- Functional pop-up box `ReDialog` adds whether to enable the `loading` loading animation function after clicking the confirmation button +- `PureTableBar` component adds full screen and exit full screen functions +- `VxeTableBar` component adds full screen and exit full screen functions +- The OK button of the `ReDialog` component provides the close button animation `closeLoading` function +- Add development environment code debugging `vite-plugin-vue-inspector` plug-in to improve development experience +- Added `vite-plugin-checker` plugin for stricter type and `eslint` verification + +### 🐞 Bug fixes + +- Fixed the problem that the current tab cannot be closed after configuring the routing attribute `fixedTag` to `false` +- Fixed the issue where `logo` cannot be hidden in top menu mode + +### 🍏 Perf + +- Optimize type hints for custom instructions +- Optimize the press enter login function on the login page +- Optimize the mask level of the left menu on the mobile side +- Optimize system management-permission function style of role management +- Upgraded dependencies, compatible with the latest version of `element-plus` + +# 5.7.0 (2024-06-04) + +### 🎫 Feat + +- Add Google style tabs + +### 🐞 Bug fixes + +- Fixed the issue where the text exceeds and is not hidden after the menu is folded in Firefox browser + +# 5.6.0 (2024-05-14) + +### ✔️ Refactor + +- Upgrade `pnpm` to `v9` version, requiring `pnpm` version `>=9` + +### 🐞 Bug fixes + +- Fixed the issue where clicking on an external link would jump twice + +### 🍏 Perf + +- Optimize `ReSegmented` component + +# 5.5.0 (2024-05-07) + +### 📄 Docs + +The addresses of the document site and full version preview site have been changed! + +- The latest document site address: https://pure-admin.github.io/pure-admin-doc +- The latest full version preview site address: https://pure-admin.github.io/vue-pure-admin + +### ✔️ Refactor + +- Reconstruct the `layout` file naming convention to make it more readable + +### 🎫 Feat + +- Add new component `ReVxeTableBar` to be used with `vxe-table` + +### 🐞 Bug fixes + +- Fixed the issue where the background color is white when `FixedHeader` is set to `false` in dark mode +- Fixed the problem of delayed closing of functional pop-up window `ReDialog` when clicking the cancel button + +### 🍏 Perf + +- Optimize account settings-avatar upload function + +# 5.4.0 (2024-04-18) + +### 🎫 Feat + +- Add global disabled attribute `disabled` to `ReSegmented` component +- Added mind map examples +- Functional pop-up box `ReDialog` adds `Popconfirm` bubble confirmation box +- `pure-table` adds `headerSlot` custom header slot usage example +- The route adds a configurable `fixedTag` attribute, which determines whether the current menu name is fixedly displayed on the tab and cannot be closed. +- Added account setting function page and compatible with mobile terminals +- Upgrade `eslint9` and related compatibility processing +- Added global configuration `MaxTagsLevel` property to set the maximum number of open tabs +- Full coverage of the internationalization of the core code of the framework (only the internationalization of the business code needs to be processed) + +### 🐞 Bug fixes + +- Fixed the issue where columns cannot be dragged normally when there are multiple `RePureTableBar` components on a page +- Fixed the problem of icon display style after the third-level menu is folded to the left +- Fixed the issue where the font color does not take effect after refreshing the account settings page +- Fixed the issue where the `refreshToken` parameter is empty when calling the refresh `token` interface + +### 🍏 Perf + +- Optimize login interface +- Optimize the logic of obtaining the top menu +- Optimize request whitelist logic and be compatible with more scenarios +- Simplified export and import usage in `store` files +- Removed unnecessary `cloc` tool dependency package, which uses the `GPL` open source license and is controversial +- Optimize the types of `post` and `get` utility functions in `src/utils/http` files + +# 5.3.0 (2024-03-28) + +### ✔️ Refactor + +- Reconstruct internationalized file naming conventions and demo pages with code location hints + +### 🎫 Feat + +- Add `MQTT` example +- Added `docx` and `excel` file preview examples +- The `ReSegmented` segmented controller has a new `size` attribute, which can set three sizes +- The `RePureTableBar` component and `pure-admin-table` support international switching of table headers + +# 5.2.0 (2024-03-22) + +### ✔️ Refactor + +- Place the full screen button at the top to make it visible and easy to operate + +### 🎫 Feat + +- Added `v-ripple` command (water ripple effect) +- Add global `Stretch` configuration to the content area to customize compact pages and easily find the required information +- Added roaming guidance based on `ElTour` +- Improve role management-menu permission function, novel interactive experience +- Add system monitoring-online users +- Add system monitoring-login log +- Add system monitoring-operation log +- Add system monitoring-system log +- Add more more convenient `pure-admin-table` editable table examples (overall editing, single row editing, cell editing) +- The `ReSegmented` component has a new `block` attribute to make it fit the width of the parent element +- Add [vue-flow](https://vueflow.dev/) flow chart example +- Add virtual table example +- Added Gantt chart example +- Add graphic verification code example +- Add form examples, which can be generated through `JSON` format configuration (basic form, pop-up form, drawer form, step-by-step form, search form) +- Add a folding and expanding menu function on the middle right side of the left menu + +### 🐞 Bug fixes + +- Fixed the scroll bar issue when clicking on the registration page under `windwos` +- Fixed the problem of scroll bars appearing in the content area when switching pages under `windows` +- Fixed the problem of status style disappearing in `pure-table` with status table under dark overall style +- Fixed the problem of turning on the gray mode and dark overall style in the project configuration and refreshing the overall style of the page. + +### 🍏 Perf + +- All pages of system management and system monitoring are compatible with mobile terminals + +# 5.1.0 (2024-03-02) + +### ✔️ Refactor + +- Reconstruct the tab page `UI` to make it more convenient to click the close button + +### 🎫 Feat + +- Added multi-select card example +- The menu supports all browser behaviors of right-clicking on the `a` tag (opening links in new tabs, new windows, dragging and dropping to open in new tabs, etc.) +- Added search history and collection functions to menu search + +### 🐞 Bug fixes + +- Fixed the problem of scroll bars appearing on the login page under `windows` system + +### 🍏 Perf + +- Standardize the naming rules when registering local icons to better match the icon selector + +# 5.0.0 (2024-02-26) + +Totally `ESM` version + +### ✔️ Refactor + +- Upgrade `vite` to `v5` version, specify `node` version `>18.18.0`, `pnpm` version `>=8.6.10` +- Use [vite-plugin-fake-server](https://www.npmjs.com/package/vite-plugin-fake-server) to replace [vite-plugin-mock](https://www.npmjs.com/package/vite-plugin-mock), use [@faker-js/faker](https://www.npmjs.com/package/@faker-js/faker) to replace [mockjs](https://www.npmjs.com/package/mockjs) +- Rename `tailwind.config.js` to `tailwind.config.ts` and update its file to `esm` syntax +- Updated `.prettierrc.js` file to `esm` syntax +- Updated `postcss.config.js` file to `esm` syntax +- Updated `commitlint.config.js` file to `esm` syntax +- Use `eslint.config.js` to replace `.eslintrc.js` and follow `esm` syntax +- Upgrade `stylelint` to `16` version and follow `esm` syntax +- All `search` search icons are uniformly replaced with `@iconify-icons/ri/search-line` which is more commonly used and put into the global offline icon +- Removed the filter effect of `iframe` in dark mode +- Bring a more beautiful and refined homepage +- Cleaner and neater pop-up panel on the right side of project configuration +- Restructure the About page to make it more compact and key information more prominent + +### 🎫 Feat + +- Add system management-menu management +- Improve system management-user management +- Embedded `iframe` pages support setting `keepAlive` to maintain page status +- Optimized navigation, the pop-up menu is adaptive and scrollable beyond the content area +- Added file upload example +- Added overall style adaptive operating system light, dark, and automatic theme functions +- Add footer +- Supports multi-tab pages to open systems that have already been logged in without logging in again and adds an internal login-free function (users can choose the number of days without login) +- Terminal command line that brings a high-level feel +- Add audio visualization function example +- Added video frame interception - `WebAssembly` version, supports `MP4`, `MOV`, `AVI`, `WebM`, `MKV` and other mainstream formats +- Added methods to block keyboard `F12`, browser default right-click menu, page element selection, and picture default draggability +- The secondary package `localforage` supports setting expiration time and provides complete type prompts +- Add `AnimateCss` selector component `ReAnimateSelector` +- Added `ReText` component, supports automatic omission and display of `Tooltip` function, supports multi-line omission, high reusability +- Add an art drawing board function, which can be used to draw some design idea architecture diagrams, for example +- New component - optional button example +- Add common button examples +- Added color picker component example +- Add date picker component example +- Added datetime picker example +- Added time selector example +- Added statistics component example +- Add label component example +- Added accordion panel component example +- Add progress bar component example +- Upgrade `Swiper 11` +- Add [vite-plugin-router-warn](https://www.npmjs.com/package/vite-plugin-router-warn) plug-in to eliminate unnecessary `vue-router` dynamic routing warning`No match found for location with path` + +### 🐞 Bug fixes + +- Fixed the problem that in `query` routing parameter passing mode, two `router` jumps will be triggered when clicking the tab page to switch operations. +- Fixed an issue in card tab mode, when passing parameters through the `query` route, the `card-active` attribute still exists after leaving the active tab, resulting in the font color not changing when the mouse `hover` +- Fixed the error in reading and parsing the same name in the `src/layout/components/appMain.vue` file +- Fixed the issue where the height of the embedded page `frameView` does not adapt after hiding the tab page. +- Fixed the problem of invalid routing `meta.transition.name` configuration +- Fixed the problem that the right-click tab page panel cannot be closed when clicking on the `iframe` page and the right-click tab page panel is blocked when on the `iframe` page +- Fixed the problem of missing parameters when clicking on breadcrumbs to jump to the page in routing `query` and `params` modes + +### 🍏 Perf + +- Optimize theme color +- Tabs can be slid left or right according to the sliding force +- The interface naming rules are unified into `kebab-case` string naming method +- The `label` of `el-form` is consistent with the global `label` style +- `VITE_PUBLIC_PATH` defaults to `/`, which is more friendly to `VITE_ROUTER_HISTORY` in `h5` mode +- Optimize the `transformI18n` function and support unlimited nesting levels for internationalization (of course, the platform still recommends that the fewer nesting levels, the better) +- When initializing the page, load `pinia` first and then `router`, which is compatible with more usage scenarios. +- Optimize the judgment logic of request whitelist +- The navigation style of the left menu has been adjusted to optimize the different display methods on PC and mobile when there is no logo. +- Upgrade code specification style related libraries to the latest +- Optimize login page `loading` judgment +- Optimize the `IconSelect` icon selector component to improve user experience +- Optimize the segmented controller component and add `v-model` support +- Optimize the method of obtaining platform `logo` +- Upgraded `@pureadmin/theme`, bringing more friendly `esm` support +- Optimize some functions in the `build/info.ts` file to make it friendly and support `esm` +- Optimize the column setting pop-up box of the `PureTableBar` component, set the maximum height, and scroll beyond it +- Optimize the functional pop-up component `ReDialog` to retain the closing animation +- Test the Chinese path and delete the `sass-loader` dependency +- The packaged code is changed to the browser that natively supports [ES2015](https://caniuse.com/es6) by default +- Remove the `stylelint` plug-in dependency that will be automatically installed +- Enhance the way `useRenderIcon` uses local `svg` +- Optimize the style of the expand and collapse buttons in the lower left corner of the left menu under the bright white theme color scheme +- Optimize all `description` contents of `el-empty`. Add `el-empty` when the icon selector content is empty +- The `tooltip` theme after the left menu is collapsed is consistent with the overall menu +- Update `svgo` command to `svgo -f . -r` (compress all `SVG` files in the current directory) +- Optimize project construction related functions +- Enhanced `ReTypeit` component to support slots and all `typeit` configuration items +- Optimize internationalization-related processing logic and add cache during initialization to avoid unnecessary performance consumption + +# 4.5.0 (2023-06-26) + +### ✔️ Refactor + +- Refactor image crop `ReCropper` component, add more useful functions + +### 🎫 Feat + +- The menu search function supports pinyin search, such as searching for image cropping, input `tp` or `tupian` and other corresponding pinyin +- Add long press command and usage example, the long press command supports continuous callback of custom duration +- Add an example of sensitive word filtering function +- Add an example of Chinese Pinyin function + +### 🐞 Bug fixes + +- Fixed `V4.4.0` version, the problem that the page does not cache the page for the first time after the `keepAlive` cache is enabled +- Fixed the issue that the column setting tick option was not correctly initialized according to the `hide` property when the `RePureTableBar` component was initialized + +### 🍏 Perf + +- Change `VITE_PUBLIC_PATH` to `./` by default to be compatible with more path scenarios, +- Compatible with the `OSS` scene where `VITE_PUBLIC_PATH` is `url`, need to upgrade `@pureadin/theme` to the latest version + +# 4.4.0 (2023-06-14) + +### 🎫 Feat + +- Route `meta` adds `activePath` attribute, which can activate a menu (mainly used for routes that pass parameters through `query` or `params`, when they are not displayed in the menu after configuring `showLink: false`, they will be There will be no menu highlighting, but you can get highlighting by setting `activePath` to specify the active menu, `activePath` is the `path` of the specified active menu [View details](https://github.com/pure-admin/vue-pure-admin/commit/58cafbc73ffa27253446ee93077e1e382519ce8a#commitcomment-117834411)) +- Example of advanced usage of `pure-admin-table` to add adaptive content area height +- Add anti-shake, throttling and text copy instructions and standardize the prompts when custom instructions are used incorrectly and add usage examples +- Add `el-empty` component when the `notice` message prompts the component to have empty data +- Example code of functional popup window adding subcomponent `prop` as `primitive` type example +- Add `vscode-docker` plugin + +### 🐞 Bug fixes + +- Fix internationalization switch to English mode and refresh will return to Chinese mode +- Fixed the problem that the pop-up mask of the search menu function did not cover the left menu + +### 🍏 Perf + +- Page switching performance optimization, regardless of the network, the speed of page switching logic is almost `3-4` times faster than before [View optimization details](https://github.com/pure-admin/vue-pure-admin/pull/600#issuecomment-1586094078) +- Optimized tab page operation-routing parameter transfer mode usage +- All tables in the system management are changed to adaptive content area height, need to upgrade `@pureadmin/table` to the latest version +- Use the `useResizeObserver` function of `vueuse` to replace the `v-resize` custom directive, and the performance will be better from the performance after testing +- For unbound public events, unbind when the page is destroyed + +# 4.3.0 (2023-06-04) + +### 🎫 Feat + +- Add `docker` support +- Add project version real-time update detection function +- Improve system management - role management page +- Waterfall component adds infinite scrolling +- Add `updateDialog` to the functional bullet box to change the property value of the bullet box itself +- `wangeditor` rich text add multiple rich text and custom image upload examples +- Advanced usage of `pure-table` table added keep checked `CheckBox` option example +- Added `title` slot to `RePureTableBar` component + +### 🐞 Bug fixes + +- Fixed the problem that the countdown to obtain the verification code will be disabled with a delay of `1s` +- Fixed the problem that the icon selector did not initialize the preview correctly +- Fixed dynamic routing redirection causing duplicate content on tabs +- Fix the problem that the `getTopMenu()` function cannot get `path` and report an error when the page is forced to refresh +- Fix the problem that the left menu does not display as a whole due to the sudden pull up after the left menu is folded +- Fixed `RePureTableBar` scrollbar issue in `windows` after turning off column settings + +### 🍏 Perf + +-Optimized tab page operation-routing parameter transfer mode usage + +- Optimize menu search function and style +- Update `vscode` code snippets +- Optimize the initialization call timing of `dataThemeChange` theme setting + +# 4.2.0 (2023-05-15) + +### 🎫 Feat + +- Added segment controller component and adapted to dark mode +- Static routing supports configuration array format +- Functional bullet box component adds full screen and exit full screen operation buttons +- New component - Waterfall `demo` +- Add `Exclusive` type mutual exclusion syntactic sugar + +### 🍏 Perf + +- Standardize the way of writing routes in `template` template, no longer use `$route` and `$router`, this way of writing `vue-tsc` fails to compile + +# 4.1.0 (2023-05-12) + +### 🎫 Feat + +- Add a `demo` example combined with `Form` for the functional pop-up box component +- wrapper `el-col` component of `element-plus` +- Add `beforeCancel` and `beforeSure` callbacks to the functional popup component, which can suspend the closing of the popup +- Improve `System Management-Department Management` page +- Optimize `PureTableBar` component, add drag and drop function for column display + +### 🐞 Bug fixes + +- Fix the problem that the page cache still exists when you click the tab to reload after turning on `keepAlive` +- Fix the problem that the left menu will flicker after refreshing the tab in the mixed mode menu + +### 🍏 Perf + +- Optimize home page layout +- Dependency update to `vue3.3+` and remove `unplugin-vue-define-options` plugin + +# 4.0.0 (2023-05-09) + +[View 4.0.0 version optimization details](https://github.com/pure-admin/vue-pure-admin/issues/428#issuecomment-1422191158) + +### ✔️ Refactor + +- Use `css` pseudo-class `before` to refactor the activation background of the menu, similar to [ant.design-menu](https://ant.design/components/menu-cn#components-menu-demo-inline-collapsed) + +### 🎫 Feat + +- Optimize the extra icon on the right side of the menu name to support more icon rendering modes +- Configurable home menu display and hide +- Promote the namespace of the local reactive store into the global configuration +- Added functional popup components and `demo` examples, making it easier to use +- `PureTableBar` component adds column display function + +### 🐞 Bug fixes + +- Fixed the `echarts` chart on the home page not adapting to the container when the menu is collapsed or expanded +- Fixed the problem that when there is only one submenu, the search function cannot find the submenu +- Fix the problem that the global configuration `Theme` is empty cache for `light` and re-login theme configuration does not take effect +- Fixed the problem that the search boxes were not automatically gathered after the menu search function pop-up box was opened +- Fixed the problem of toolbar button text display after pressing `ESC` to exit full screen +- Fix the problem of `tooltip` click penetration in the notification bar of the mobile terminal +- Fixed the problem that the text is not displayed when switching to `horizontal` navigation mode after the left menu is collapsed +- Fixed the problem that the status cannot be reset when closing other tabs when navigating `tab` +- Fix the page hot update error caused by uninitialized environment variables in the `getHistoryMode` function +- Fixed too many `tabs` in the navigation, which caused the tabs on the left to be closed and could not be displayed normally +- Fixed the problem of full-screen error reporting when clicking on the content area +- Fixed the problem that the left navigation bar is always loading after opening `showLink:false` page under hybrid navigation and refreshing +- Fixed the left navigation memory overflow problem caused by calling `initRouter` function in mixed mode navigation +- Fixed the problem that the cached page was not destroyed when closing the left, right, other, and all tab operations +- Fix the problem that the route passes parameters through `query` or `params`, and the cache invalidation problem occurs when the tab page is closed after the cache is enabled +- Fixed the problem that the breadcrumbs could not find the parent path in the `params` route parameter passing mode + +### 🍏 Perf + +- Optimize `buttons` named slot of `RePureTableBar` component +- Optimize navigation style and menu collapse animation +- Optimize the extra icon on the right side of the menu name to support more icon rendering modes +- Optimize `logo` image and text layout and unified configuration +- After the routing information `showLink` is set to `false`, the current routing information will not be added to the tab +- Export `addPathMatch` function +- All `getters` in `pinia` are changed to the official recommended way of writing, and `this` is changed to `state` to automatically deduce the type +- Adapt to the `api` of the latest version of `pure-table` +- Ignore `deprecation` warnings for `sourcemap-codec` and `stable` dependencies +- Remove `"incremental": true` from `tsconfig.json` file +- Update `stylelint` and related configurations to the latest, strengthen style validation +- Breadcrumbs are removed from the homepage, and are displayed according to the selected menu. The homepage is no longer fixed in the breadcrumbs, and the routing monitoring of the breadcrumbs page is optimized + +# 3.9.7 (2022-12-26) + +### 🍏 Perf + +- Use `path.posix.resolve` instead of `path.resolve` to avoid drive letter problems when using `electron` in `windows` environment +- By default, the `CachingAsyncRoutes` dynamic routing cache is turned off locally, making it easier to debug in the development environment. It is not necessary to clear the local cached dynamic routing every time you modify the dynamic routing. It is recommended to enable it in the production environment + +# 3.9.6 (2022-12-19) + +### 🎫 Chores + +- Upgrade `vite4` version + +### 🐞 Bug fixes + +- Fix the problem that `hmr` of `vite` is slow due to the wrong way of importing `tailwind.css` + +### 🍏 Perf + +- Update [@pureadmin/theme](https://github.com/pure-admin/pure-admin-theme) to the latest version, bringing more friendly type hints +- Optimize [PureTableBar](https://github.com/pure-admin/vue-pure-admin/tree/main/src/components/RePureTableBar) component +- Optimize the business code of the system management page to bring better code reference + +# 3.9.5 (2022-12-13) + +### ✔️ Refactor + +- completely removed `lodash` and its related libraries + [Click here to see Why Removed? How to integrate it yourself? ](https://pure-admin.github.io/pure-admin-doc/pages/FAQ/#%E5%B9%B3%E5%8F%B0%E5%9C%A8-v3-9-5-%E7 %89%88%E6%9C%AC%E5%AE%8C%E5%85%A8%E7%A7%BB%E9%99%A4%E4%BA%86-lodash-%E5%92%8C% E5%85%B6%E7%9B%B8%E5%85%B3%E5%BA%93-%E4%B8%BA%E4%BB%80%E4%B9%88%E7%A7%BB%E9 %99%A4-%E5%A6%82%E4%BD%95%E8%87%AA%E8%A1%8C%E9%9B%86%E6%88%90) + +### 🎫 Feat + +- Add `@pureadmin/table` table dynamic column example + +### 🐞 Bug fixes + +- Fix dynamic route `rank` issue +- Fix dark theme styling issues + +### 🍏 Perf + +- optimize the route `rank`, when `rank` does not exist, it will be created automatically according to the order, the home page route will always be the first + +# 3.9.4 (2022-12-05) + +### ✔️ Refactor + +- Completely removed `vxe-table`, after removal, the overall package size of the full version is reduced by `1.82MB`, and the initial startup time is basically the same as the lite version 🐮 + [Click here to see Why Removed? How to integrate it yourself?](https://pure-admin.github.io/pure-admin-doc/pages/FAQ/#%E5%B9%B3%E5%8F%B0%E5%9C%A8-v3-9-4-%E7%89%88%E6%9C%AC%E5%AE%8C%E5%85%A8%E7%A7%BB%E9%99%A4%E4%BA%86-vxe-table-%E4%B8%BA%E4%BB%80%E4%B9%88%E7%A7%BB%E9%99%A4-%E5%A6%82%E4%BD%95%E8%87%AA%E8%A1%8C%E9%9B%86%E6%88%90) + +### 🎫 Feat + +- Add `@pureadmin/table` table selector (single select, multiple select) example + +# 3.9.3 (2022-12-04) + +### 🎫 Feat + +- Add `@pureadmin/table` pagination and loading animation example + +### 🐞 Bug fixes + +- Fixed the problem that the refresh page would be blank due to changes in dynamic routes stored in local storage after enabling `CachingAsyncRoutes` +- Fixed `Tooltip` displayed abnormally after the menu is collapsed + +### 🍏 Perf + +- Expand the use of local icons, the first launch of the full version reduces `13` requests again +- When the menu loading is slow, add `loading` animation to optimize user experience +- Theme initialization is placed in `onBeforeMount` to avoid flashing of the initialization page + +# 3.9.2 (2022-12-03) + +### 🍏 Perf + +- Global coverage of `el-dialog`, `el-drawer`, `el-message-box`, `el-notification` components of `element-plus`The style of the close icon in the upper right corner makes it more vivid [specific modification Code record](https://github.com/pure-admin/vue-pure-admin/commit/c80818d792276666aaea4b18413a0f08777f2ed1) +- The packaging output information is compatible with different packaging output paths +- Optimize some animations + +# 3.9.1 (2022-12-02) + +### 🎫 Feat + +- Add `CachingAsyncRoutes` whether to enable dynamic route cache local global configuration, default `true` +- Add `TooltipEffect` global configuration, you can configure the `effect` attribute of all `el-tooltip` on the platform body, the default `light`, does not affect the business code +- Add directory, menu text exceeds display `Tooltip` text prompt demo + +### 🍏 Perf + +- Optimize `initRouter` method, compatible with `sso` scenario +- Breadcrumb animation style optimization + +# 3.9.0 (2022-11-30) + +### 🐞 Bug fixes + +- Fixed the jitter problem caused by the scroll bar on the page when the text is too long when exiting the full screen +- Fix some type errors + +### 🍏 Perf + +- perf: Great optimization of the first screen loading. Compared with the version before `3.9.0`, the first screen requests are reduced by `71`, and the first screen loading resources are reduced by `4.1 MB` + +# 3.8.7 (2022-11-28) + +### 🍏 Perf + +- perf: Great package optimization, please be sure to upgrade! Use `unplugin-vue-define-options` to replace `unplugin-vue-macros`, the packaging speed is increased several times, use `unplugin-vue-macros` to take `mac` with moderate performance as an example, the packaging time of the full version is` 6` minutes😭, after replacing it with `unplugin-vue-define-options`, the packaging time on the same computer is `50` seconds☺️ + +# 3.8.6 (2022-11-27) + +### 🎫 Feat + +- Add `message` message prompt function, compatible with `Element Plus` and `Ant ​​Design` two `Message` style styles, use and package size are extremely low cost and adapt to dark mode, really fragrant 😂 + +### 🍏 Perf + +- perf: No need to install `@vue/runtime-core`, compatible with `volar` hints of all `element-plus` components + +# 3.8.5 (2022-11-26) + +### 🍏 Perf + +- Great optimization, remove `@pureadmin/components` and use compatible writing, the package size of the platform is reduced by `0.4` MB before compression is not enabled, and the resource of `2.3` MB is reduced for the first screen request, which is for the [lite version ](https://github.com/pure-admin/pure-admin-thin) is a very big optimization, the streamlined version has synchronized code + +# 3.8.0 (2022-11-26) + +### 🎫 Feat + +- Add `@pureadmin/table` multiple data format (deep structure) examples +- Add `@pureadmin/table` image preview example +- Add `@pureadmin/table` row and column drag example +- Add `@pureadmin/table` context menu example +- Add `@pureadmin/table` export `Excel` example +- Add `@pureadmin/table` edit cell example +- Add `@pureadmin/table` watermark example +- Add `@pureadmin/table` print example +- Add `@pureadmin/table` embedded `echarts` chart example +- Add `svgo` to compress all `svg` files on the platform to reduce the size + +### 🍏 Perf + +- The static routing platform automatically imports without manual import +- Improved global type hints +- Optimize `vite` to rely on pre-built configurations in the platform, and the loading speed of page switching is significantly accelerated + +# 3.7.1 (2022-11-22) + +### 🔥 hotfix + +- Fixed the problem that the tab page may not be reset when logging out when the tab page cache is not turned on + +# 3.7.0 (2022-11-21) + +### ✔️ Refactor + +- Replace `driver.js` with `intro.js` + +### 🎫 Feat + +- Add front-end single sign-on, test address https://pure-admin.github.io/vue-pure-admin/#/pure-table/index?username=sso&roles=admin&accessToken=eyJhbGciOiJIUzUxMiJ9.admin +- Add more examples for [@pureadmin/table](https://github.com/pure-admin/pure-admin-table) and `element-plus` [table](https://element-plus.org /zh-CN/component/table.html) example remains the same +- Rich watermark function page (supports customizing various colors, shadows, text, additional attributes, setting undeletable watermarks and setting watermarks for specified elements) +- Optimize the menu, add `MenuArrowIconNoTransition` global configuration, configure it in `public/platform-config.json`, for the left menu mode, the menu expansion can be set `MenuArrowIconNoTransition: true` to solve +- Replacement form designer component demo + +### 🐞 Bug fixes + +- Repair the in-page menu with parameters to jump to each other, the label is not selected and highlighted + +### 🍏 Perf + +- Removed deprecated `$baseUrl` +- Compatible importing a certain library leads to `global is not defined` error, importing `src/utils/globalPolyfills.ts` file into `src/main.ts` can solve the problem +- Remove `@vitejs/plugin-legacy`, `vue3` cannot make it support `ie` through any tool + +# 3.6.4 (2022-11-10) + +### 🎫 Feat + +- Menu icon `icon` supports using online icons + +### 🐞 Bug fixes + +- Fixed `vxe-button` font color issue after mouse overlay and some other style issues + +### 🍏 Perf + +- Optimize the routing guard, if you have logged in and there is login information, you cannot jump to the routing whitelist, but continue to stay on the current page +- Removed `baseURL` and global environment proxy, and can be written directly in `vite.config.ts`, which is convenient and supports multiple proxy addresses + +# 3.6.3 (2022-11-01) + +### 🎫 Feat + +- Static resource classification and packaging +- Add danmaku component `demo` + +### 🐞 Bug fixes + +- Fix the `collapse` property added in the latest version of `tailwindcss` conflicts with the platform `class` class name +- Fix that when the `token` expires, if the page has multiple requests, the `token` will be refreshed repeatedly + +# 3.6.2 (2022-10-27) + +### ✔️ Refactor + +- Replace `/@/` alias with `@/` alias + +# 3.6.1 (2022-10-27) + +### 🎫 Feat + +- Add whether to start `cdn` for packaging to replace the local library configuration, the default `false` does not start +- Added optional `gzip` and `brotli` compression modes for packaging builds + +### 🐞 Bug fixes + +- Fix `title` too long display style problem +- Fix the parent `name` in the route should not be repeated with the child `name`, which will cause redirection to jump `404` problem + +### 🍏 Perf + +- Upgrade `axios` to the latest version + +# 3.6.0 (2022-10-25) + +### 🎫 Feat + +- Add file download `demo` +- Add typewriter component `demo` +- Added `json` editor `demo` + +### ✔️ Refactor + +- Refactor the permission module, adopt the most commonly used `RBAC` (Role-Based Access List): role-based permission control (User -> Role -> Permission), and update the page permission and button permission `demo` example, button Permissions support three operation modes (judging permissions in component mode, judging permissions in function mode, and judging permissions in instruction mode) + +### 🐞 Bug fixes + +- Fixed the theme not being emptied when clearing the cache and returning to the login page +- Fix `menu` display problem in production environment in `horizontal` mode +- Fixed the problem that the `mix` mixed mode navigation might not be displayed in the left menu of the production environment +- After the `token` expires, calling the refresh `token` interface will cause an infinite loop + +### 🍏 Perf + +- Removed uncommon `@apply` from `tailwind.css` +- Replace `//` comments with `/** */`, which is more friendly to the editor's intellisense +- Optimize the login enter event +- Simplified some functions, eliminated useless functions, and optimized page loading speed + +# 3.5.0 (2022-9-10) + +### 🎫 Feat + +- Add `cssnano` to compress the size of `css` when packaging +- Add `element-plus` seamless scrolling `Table` page demo +- Open `vscode` bracket pair guide + +### ✔️ Refactor + +- Replace `unocss` with `tailwindcss`, add `tailwindcss` [documentation](https://pure-admin.github.io/pure-admin-doc/pages/tailwindcss/) + +### 🐞 Bug fixes + +- `token` expires, refresh the infinite loop + +### 🍏 Perf + +- When resetting the route, clear the cached page + +# 3.4.6 (2022-8-23) + +### 🐞 Bug fixes + +- `process` is not defined in path +- Fixed an error when dynamic routing `children` is an empty array +- Fixed `iframe` loading failure + +# 3.4.5 (2022-8-22) + +### 🐞 Bug fixes + +- Fix local responsive storage object setting issue + +# 3.4.0 (2022-8-22) + +### 🍏 Perf + +- Optimized routing +- Optimized for mobile compatibility +- Optimized routing parameters (`query`, `params` way to refresh the page does not need to open the tab page cache, the parameters can be retained on the `url` and `tab page`) + +# 3.3.5 (2022-8-19) + +### 🎫 Feat + +- Secondary encapsulation of `Table` of `element-plus` into [@pureadmin/table](https://github.com/pure-admin/pure-admin-table), providing flexible configuration items and integrating into the platform +- Secondary encapsulation of `Descriptions` of `element-plus` into [@pureadmin/descriptions](https://github.com/pure-admin/pure-admin-descriptions), providing flexible configuration items and integrating into the platform +- Centralize most of the tools and hooks of the platform to [@pureadmin/utils](https://pure-admin-utils.netlify.app), and delete the code concentrated in this library to reduce the size of the platform +- Add [unplugin-vue-define-options](https://www.npmjs.com/package/unplugin-vue-define-options) plugin, the page can directly write `defineOptions({name: custom name})` +- Add project files, language analysis tool [cloc](https://www.npmjs.com/package/cloc) +- Added landing page internationalization +- Add full routing configuration table type declaration +- Add virtual listing page demo +- Add `PDF` preview page demo +- Added export `excel` page demo +- Added blank page demo without `Layout` + +### ✔️ Refactor + +- Refactored the theme color to adapt to `element-plus` dark mode (also solved the problem that the same element `css` in `3.3.0` and earlier versions was overwritten many times, resulting in poor style debugging) +- Refactored route reset function + +### 🍏 Perf + +- The compatible project storage directory is named in Chinese, but we really do not recommend Chinese naming, because a library may not escape the Chinese path, causing the project to crash +- Optimized interface type + +### 🐞 Bug fixes + +- Fixed async routes with `showlink` set to `false`, not showing after refresh +- Fixed vertical navigation menu text being hidden after collapse when there is no `icon` + +# 3.3.0 (2022-5-11) + +### 🎫 Feat + +- Add user management page demo +- Add role management page demo +- Add department management page demo +- Add card list page demo +- Integrated form designer +- Added `PPT` demo +- Added anti-shake interception demo in the function menu +- Upgrade `wangeditorV5` (and support internationalization and custom themes) +- Integrate `tauri` version +- Added barcode function +- Added QR code function +- Use the `Cascader` cascade selector in `element-plus` to write a three-level and two-level linkage demo of Chinese provinces and cities +- Integrate `Swiper` plugin +- Routing supports passing `component`, representing the component path +- Added pre-release packaging mode +- Add [hooks] to close a tag (https://github.com/pure-admin/vue-pure-admin/commit/5e8723a031923e79f507e5a17151d3bd88a51523) + +### ✔️ Refactor + +- Refactored the landing page to be more inclined to the actual business scenario +- Use `unocss` instead of `windicss`, `unocss` has better performance in development environment, no memory leaks, and `api` is compatible with `windicss` + +### 🍏 Perf + +- Optimized the style of the `split-pane` component for the platform +- Optimize internationalization, no longer pass the `i18n` field in the route, the platform automatically reads the files in the `locales` folder of the root directory for internationalization matching +- Optimized icon selector +- Optimize `layout` to display user information [commit](https://github.com/pure-admin/vue-pure-admin/commit/56f9dc85e7fbe0637605c43577c794de9f8968aa) + +### 🐞 Bug fixes + +- Fix route initialization problem (Cannot access 'constantRoutes' before initialization) + +# 3.2.0 (2022-3-22) + +### 🎫 Feat + +- Icon selection component +- Menu search function +- Added results page +- Extended `element-plus` timeline component +- Extended `element-plus` tree component to support connecting lines +- Add tree selector, support single and multiple selection + +### 🍏 Perf + +- Optimized the error page UI +- Optimize the internationalization function +- Optimized routing `rank` sorting, compatible with the case where the value of the `rank` field in the routing `meta` is `null` + +### 🐞 Bug fixes + +- Fixed the situation where the menu expands and folds will freeze on some computers + +# 3.1.0 (2022-3-3) + +### 🎫 Feat + +- iframe supports dynamic loading +- Watermark example +- Print examples (pictures, tables, echarts) +- Add running and packaging information, use `lodash-unified` to replace `lodash-es`, `lodash-unified` supports `ESM` and is compatible with `CJS` + +### 🐞 Bug fixes + +- Fixed jumping to another menu page alone in one menu page, the routing page jumped but the tab page was not displayed +- Fixed the route that returns dynamic level 3 and above in the background, and the menu does not correspond to the page + +# 3.0 (2022-2-14) + +### 🎫 Feat + +- Added mix navigation + +### 🐞 Bug fixes + +- Fix tab page bug + +# 2.9.0 (2022-2-5) + +### 🎫 Feat + +- Added package size analysis, command `pnpm report` + +### 🍏 Perf + +- Use `iconify` to introduce icons on demand, optimize icon size, and reduce network requests +- Optimize the route, the route can not pass `showLink: true`, it is displayed by default + +# 2.8.5 (2022-1-21) + +### 🎫 Feat + +- Added `WindiCSS` support +- Add online environment remove console plugin `vite-plugin-remove-console` + +### ✔️ Refactor + +- Replace `@element-plus/icons-vue` with `@iconify-icons/ep` + +# 2.8.0(2022-1-4) + +### 🎫 Feat + +-Added dark theme +-Add element-plus custom theme +-Add guide page + +### 🍏 Perf + +-Optimize internationalization, compatible with the vscode plug-in i18n Ally smart reminder +-Optimize the back-end return routing structure +-Optimize local storage, with four built-in buttons `responsive-configure`, `responsive-locale`, `responsive-layout`, `responsive-tags`, which are basic configuration, international configuration, layout configuration, and tab persistent configuration + +# 2.7.0(2021-12-18) + +### 🎫 Feat + +- New tab reuse +- New message reminder template +- Added front-end menu tree structure example +- Refactor routing, optimize permissions modules, and bring a more convenient experience +- Refactor the env environment and http request to bring a more convenient experience +- Currently, the tabs of the platform are forced to associate with local storage. The next step is to put the tabs in the memory by default and support configurable persistent tabs +- Navigation menu icons support fontawesome, iconfont, remixicon, element-plus/icons, custom svg +- Update font-awesome to version 5.0, because versions below 5.0 are no longer officially maintained, but the platform will still be compatible with font-awesome4 version + +### 🍏 Perf + +- Optimize the tab page to bring a better interactive experience +- Routing title supports direct writing in Chinese, which can be separated from internationalization +- Route history mode is read from env and supports base parameter + +# 2.6.0(2021-11-10) + +### 🎫 Feat + +- Refactored navigation theme color, supports multiple color schemes +- Refactored login page, illustration style + +### 🍏 Perf + +- Optimize the navigation style +- Eliminate strong navigation dependence on vxe-table +- Synchronously update element-plus, replace Font Icon with SVG Icon + +# 2.1.0(2021-10-14) + +### 🎫 Feat + +- Route animation (each route can add different animations) +- Extra icons (for example, this is a newly added page, a new icon is displayed in the upper right corner of the routing menu) +- Extract the default configuration options +- Perfect type file + +### 🐞 Bug fixes + +- Fix the issue of element-plus internationalization +- Fix routing issues +- Fix navigation adaptation problem + +# 2.0.1(2021-9-29) + +### 🎫 Feat + +- Feat horizontal nav + +# 2.0.0(2021-4-13) + +### 🎫 Chores + +- Release 2.0.0 version diff --git a/Yi.Pure.Vue3/CHANGELOG.zh_CN.md b/Yi.Pure.Vue3/CHANGELOG.zh_CN.md new file mode 100644 index 00000000..68c4ef65 --- /dev/null +++ b/Yi.Pure.Vue3/CHANGELOG.zh_CN.md @@ -0,0 +1,927 @@ +# 5.8.0 (2024-08-19) + +### 🎫 Feat + +- 新增第二种按钮权限指令(根据登录接口返回的`permissions`字段进行判断) +- 函数式弹框`ReDialog`添加点击确认按钮后是否开启`loading`加载动画功能 +- `PureTableBar`组件添加全屏和退出全屏功能 +- `VxeTableBar`组件添加全屏和退出全屏功能 +- `ReDialog`组件的确定按钮提供关闭按钮动画`closeLoading`功能 +- 添加开发环境代码调试`vite-plugin-vue-inspector`插件,提升开发体验 +- 添加`vite-plugin-checker`插件,更严格的类型和`eslint`校验 + +### 🐞 Bug fixes + +- 修复配置路由属性`fixedTag`为`false`后当前标签页不可关闭的问题 +- 修复顶部菜单模式下`logo`不可隐藏的问题 + +### 🍏 Perf + +- 优化自定义指令的类型提示 +- 优化登录页回车登录功能 +- 优化移动端左侧菜单遮罩层级 +- 优化系统管理-角色管理的权限功能样式 +- 升级依赖,`element-plus`最新版兼容处理 + +# 5.7.0 (2024-06-04) + +### 🎫 Feat + +- 添加谷歌风格的页签 + +### 🐞 Bug fixes + +- 修复在火狐浏览器中菜单折叠后,文字超出未隐藏的问题 + +# 5.6.0 (2024-05-14) + +### ✔️ Refactor + +- 升级`pnpm`至`v9`版本,规定`pnpm`版本`>=9` + +### 🐞 Bug fixes + +- 修复点击外链会跳转两次的问题 + +### 🍏 Perf + +- 优化`ReSegmented`组件 + +# 5.5.0 (2024-05-07) + +### 📄 Docs + +文档站和完整版预览站地址更换! + +- 最新文档站地址:https://pure-admin.github.io/pure-admin-doc +- 最新完整版预览站地址:https://pure-admin.github.io/vue-pure-admin + +### ✔️ Refactor + +- 重构`layout`文件命名规范,更易读 + +### 🎫 Feat + +- 添加新组件`ReVxeTableBar`搭配`vxe-table`使用 + +### 🐞 Bug fixes + +- 修复深色模式下设置`FixedHeader`为`false`时,背景色为白色的问题 +- 修复函数式弹窗`ReDialog`点击取消按钮,延时关闭无效问题 + +### 🍏 Perf + +- 优化账号设置-头像上传功能 + +# 5.4.0 (2024-04-18) + +### 🎫 Feat + +- 分段控制器组件添加全局禁用属性`disabled` +- 添加思维导图示例 +- 函数式弹框`ReDialog`添加`Popconfirm`气泡确认框 +- `pure-table`添加`headerSlot`自定义表头插槽用法示例 +- 路由添加可配置的`fixedTag`属性,作用为当前菜单名称是否固定显示在标签页且不可关闭 +- 添加账户设置功能页面且兼容移动端 +- 升级`eslint9`,相关兼容处理 +- 添加全局配置`MaxTagsLevel`属性,可设置打开标签页最大数 +- 框架核心代码国际化全量覆盖(仅需处理业务代码国际化即可) + +### 🐞 Bug fixes + +- 修复当一个页面存在多个`RePureTableBar`组件,列无法正常拖动问题 +- 修复三级菜单向左折叠后图标显示样式问题 +- 修复账户设置页面,刷新后字体颜色未生效的问题 +- 修复调用刷新`token`接口时,`refreshToken`参数为空的问题 + +### 🍏 Perf + +- 优化登录接口 +- 优化获取顶级菜单逻辑 +- 优化请求白名单逻辑,兼容更多场景 +- 简化`store`文件中导出和导入用法 +- 移除非必要的`cloc`工具依赖包,它使用`GPL`开源许可证具有争议性 +- 优化`src/utils/http`文件中`post`和`get`工具函数的类型 + +# 5.3.0 (2024-03-28) + +### ✔️ Refactor + +- 重构国际化文件命名规范以及演示页加上代码位置提示 + +### 🎫 Feat + +- 添加`MQTT`示例 +- 添加`docx`、`excel`文件预览示例 +- `ReSegmented`分段控制器新增`size`属性,可设置三种尺寸 +- `RePureTableBar`组件搭配`pure-admin-table`支持表头国际化切换 + +# 5.2.0 (2024-03-22) + +### ✔️ Refactor + +- 将全屏按钮置于顶部,使其显眼且易于操作 + +### 🎫 Feat + +- 新增`v-ripple`指令(水波纹效果) +- 内容区添加全局`Stretch`配置,可自定义紧凑页面,轻松找到所需信息 +- 添加基于`ElTour`实现的漫游式引导 +- 完善角色管理-菜单权限功能,新颖的交互体验 +- 添加系统监控-在线用户 +- 添加系统监控-登录日志 +- 添加系统监控-操作日志 +- 添加系统监控-系统日志 +- 添加更多更方便的`pure-admin-table`可编辑表格示例(整体编辑、单行编辑、单元格编辑) +- `ReSegmented`组件新增`block`属性,可使其适合父元素宽度 +- 添加 [vue-flow](https://vueflow.dev/) 流程图示例 +- 添加虚拟表格示例 +- 添加甘特图示例 +- 添加图形验证码示例 +- 添加表单示例,可通过`JSON`格式配置生成(基础表单、弹框表单、抽屉表单、分步表单、搜索表单) +- 在左侧菜单右中侧再加一个折叠展开菜单的功能 + +### 🐞 Bug fixes + +- 修复`windwos`下点击注册页面会出现滚动条问题 +- 修复`windows`下页面切换,内容区会出现滚动条问题 +- 修复`pure-table`带状态表格在深色整体风格下状态样式消失的问题 +- 修复系统配置中开启灰色模式和深色整体风格,刷新页面整体风格异常 + +### 🍏 Perf + +- 系统管理、系统监控的所有页面兼容移动端 + +# 5.1.0 (2024-03-02) + +### ✔️ Refactor + +- 重构标签页`UI`,点击关闭按钮更方便 + +### 🎫 Feat + +- 添加多选卡片示例 +- 菜单支持`a`标签右键的所有浏览器行为(在新标签页中、新窗口中打开链接,拖拽到新标签页打开等) +- 菜单搜索新增搜索历史和收藏功能 + +### 🐞 Bug fixes + +- 修复`windows`系统下登录页出现滚动条的问题 + +### 🍏 Perf + +- 规范注册本地图标时的命名规则,使其更好地配合图标选择器 + +# 5.0.0 (2024-02-26) + +全面`ESM`版本 + +### ✔️ Refactor + +- 升级`vite`至`v5`版本,规定`node`版本`>18.18.0`,`pnpm`版本`>=8.6.10` +- 使用 [vite-plugin-fake-server](https://www.npmjs.com/package/vite-plugin-fake-server) 替换 [vite-plugin-mock](https://www.npmjs.com/package/vite-plugin-mock),使用 [@faker-js/faker](https://www.npmjs.com/package/@faker-js/faker) 替换 [mockjs](https://www.npmjs.com/package/mockjs) +- 重命名`tailwind.config.js`为`tailwind.config.ts`并更新其文件为`esm`语法 +- 更新`.prettierrc.js`文件为`esm`语法 +- 更新`postcss.config.js`文件为`esm`语法 +- 更新`commitlint.config.js`文件为`esm`语法 +- 使用`eslint.config.js`替换`.eslintrc.js`并遵循`esm`语法 +- 升级`stylelint`至`16`版本并遵循`esm`语法 +- 所有`search`搜索图标统一替换为`@iconify-icons/ri/search-line`它比较常用将其放入全局离线图标中 +- 移除`iframe`在暗模式下的滤镜效果 +- 带来更美观精致的首页 +- 更干净整洁的系统配置右侧弹出面板 +- 重构关于页面,整体更紧致,关键信息更突出 + +### 🎫 Feat + +- 添加系统管理-菜单管理 +- 完善系统管理-用户管理 +- 内嵌`iframe`页支持设置`keepAlive`,保持页面状态 +- 优化导航,弹出的菜单超出内容区自适应且可滚动 +- 添加文件上传示例 +- 添加整体风格自适应操作系统浅色、深色、自动主题功能 +- 添加页脚 +- 支持多标签页打开已经登录的系统后无需再登录并添加内免登录功能(用户可选择免登录的天数) +- 带来高级感的终端命令行 +- 添加音频可视化功能示例 +- 添加视频帧截取-`WebAssembly`版,支持`MP4`、`MOV`、`AVI`、`WebM`、`MKV`等主流格式 +- 添加阻止键盘`F12`、浏览器默认右键菜单、页面元素选中、图片默认可拖动方法 +- 二次封装`localforage`支持设置过期时间,提供完整的类型提示 +- 添加`AnimateCss`选择器组件`ReAnimateSelector` +- 添加`ReText`组件,支持自动省略显示`Tooltip`功能, 支持多行省略, 高可复用性 +- 添加艺术画板功能,比如可以用来绘制一些设计思想架构图 +- 新增组件-可选按钮示例 +- 添加常用按钮示例 +- 添加颜色选择器组件示例 +- 添加日期选择器组件示例 +- 添加日期时间选择器示例 +- 添加时间选择(器)示例 +- 添加统计组件示例 +- 添加标签组件示例 +- 添加折叠面板组件示例 +- 添加进度条组件示例 +- 升级`Swiper 11` +- 添加 [vite-plugin-router-warn](https://www.npmjs.com/package/vite-plugin-router-warn) 插件,根治非必要的`vue-router`动态路由警告`No match found for location with path` + +### 🐞 Bug fixes + +- 修复`query`路由传参模式下,点击标签页进行切换操作时会触发两次`router`跳转问题 +- 修复卡片标签页模式下,通过`query`路由传参时,离开激活的标签后仍存在`card-active`属性,导致鼠标`hover`时字体颜色未改变 +- 修复`src/layout/components/appMain.vue`文件中同名词读取解析错误 +- 修复内嵌页面`frameView`在隐藏标签页后高度没有自适应 +- 修复路由`meta.transition.name`配置无效的问题 +- 修复点击`iframe`页面无法关闭右键标签页面板以及在`iframe`页面时右键标签页面板被遮挡的问题 +- 修复在路由`query`、`params`模式下点击面包屑跳转页面少参问题 + +### 🍏 Perf + +- 优化主题色 +- 标签页可按滑动力度进行左右滑动 +- 接口命名规则统一为`kebab-case`串式命名法 +- `el-form`的`label`和全局的`label`样式保持一致 +- `VITE_PUBLIC_PATH`默认还原为 `/` 对`VITE_ROUTER_HISTORY`为`h5`模式更友好 +- 优化`transformI18n`函数,国际化支持无限嵌套级别(当然平台还是推荐嵌套层级越少越好) +- 页面初始化时先加载`pinia`再加载`router`,兼容更多使用场景 +- 优化请求白名单的判断逻辑 +- 左侧菜单导航样式调整,优化有无`logo`时`pc`端和移动端不同的展示方式 +- 升级代码规范风格相关库至最新 +- 优化登录页`loading`判断 +- 优化`IconSelect`图标选择器组件,提升用户体验 +- 优化分段控制器组件,添加`v-model`支持 +- 优化平台`logo`获取方式 +- 升级`@pureadmin/theme`,带来了更友好的`esm`支持 +- 优化`build/info.ts`文件中的一些函数,使其友好支持`esm` +- 优化`PureTableBar`组件的列设置弹出框,设置最大高度,超出可滚动 +- 优化函数式弹框组件`ReDialog`保留关闭动画 +- 对中文路径做测试,删除`sass-loader`依赖 +- 打包后的代码改为默认原生支持 [ES2015](https://caniuse.com/es6) 的浏览器 +- 删除会自动安装的`stylelint`插件依赖 +- 增强`useRenderIcon`使用本地`svg`的方式 +- 优化左侧菜单最左下角的展开、折叠按钮在亮白主题配色下的样式 +- 优化所有`el-empty`的`description`内容。图标选择器内容为空时加上`el-empty` +- 左侧菜单折叠后的`tooltip`主题与整体菜单保持统一 +- 更新`svgo`命令为`svgo -f . -r`(压缩当前目录下的所有`SVG`文件) +- 优化项目构建相关函数 +- 增强`ReTypeit`组件,支持插槽以及所有`typeit`配置项 +- 优化国际化相关处理逻辑,初始化时添加缓存以避免不必要的性能消耗 + +# 4.5.0 (2023-06-26) + +### ✔️ Refactor + +- 重构图片裁剪 `ReCropper` 组件,添加更多实用功能 + +### 🎫 Feat + +- 菜单搜索功能支持拼音搜索,比如搜图片裁剪,输入 `tp` 或 `tupian` 等对应拼音即可 +- 添加长按指令及使用示例,该长按指令支持自定义时长的持续回调 +- 添加敏感词过滤功能示例 +- 添加汉语拼音功能示例 + +### 🐞 Bug fixes + +- 修复 `V4.4.0` 版本,页面开启 `keepAlive` 缓存后第一次加载并未缓存页面的问题 +- 修复 `RePureTableBar` 组件初始化时列设置勾选项未根据 `hide` 属性正确初始化 + +### 🍏 Perf + +- 将 `VITE_PUBLIC_PATH` 默认改为 `./` 兼容更多路径场景, +- 兼容 `VITE_PUBLIC_PATH` 为 `url` 的 `OSS` 场景,需将 `@pureadmin/theme` 升级至最新版 + +# 4.4.0 (2023-06-14) + +### 🎫 Feat + +- 路由 `meta` 添加 `activePath` 属性,可将某个菜单激活(主要用于通过 `query` 或 `params` 传参的路由,当它们通过配置 `showLink: false` 后不在菜单中显示,就不会有任何菜单高亮,而通过设置 `activePath` 指定激活菜单即可获得高亮,`activePath` 为指定激活菜单的 `path` [查看详情](https://github.com/pure-admin/vue-pure-admin/commit/58cafbc73ffa27253446ee93077e1e382519ce8a#commitcomment-117834411)) +- `pure-admin-table` 高级用法添加自适应内容区高度示例 +- 添加防抖、节流和文本复制指令并规范自定义指令用法错误时的提示以及添加使用示例 +- `notice` 消息提示组件空数据时添加 `el-empty` 组件 +- 函数式弹窗示例代码添加子组件 `prop` 为 `primitive` 类型的示例 +- 添加 `vscode-docker` 插件 + +### 🐞 Bug fixes + +- 修复国际化切换到英文模式刷新会回到中文模式 +- 修复搜索菜单功能的弹框遮罩未覆盖左侧菜单的问题 + +### 🍏 Perf + +- 页面切换性能优化,不考虑网络的情况下,页面切换逻辑的速度差不多比之前快 `3-4` 倍 [查看优化详情](https://github.com/pure-admin/vue-pure-admin/pull/600#issuecomment-1586094078) +- 优化标签页操作-路由传参模式用法 +- 系统管理中表格均改为自适应内容区高度,需将 `@pureadmin/table` 升级到最新版 +- 使用 `vueuse` 的 `useResizeObserver` 函数替换 `v-resize` 自定义指令,从测试后的表现来看性能会更好 +- 对未解绑的公共事件,在页面销毁时解绑 + +# 4.3.0 (2023-06-04) + +### 🎫 Feat + +- 添加 `docker` 支持 +- 添加项目版本实时更新检测功能 +- 完善系统管理-角色管理页面 +- 瀑布流组件添加无限滚动 +- 函数式弹框添加 `updateDialog` 更改弹框自身属性值方法 +- `wangeditor` 富文本添加多个富文本和自定义图片上传示例 +- `pure-table` 表格高级用法添加保留已选中的 `CheckBox` 选项示例 +- `RePureTableBar` 组件添加 `title` 插槽 + +### 🐞 Bug fixes + +- 修复获取验证码倒计时会有 `1s` 延时禁用的问题 +- 修复图标选择器未正确初始化预览问题 +- 修复动态路由重定向造成标签页出现重复内容 +- 修复强制刷新页面 `getTopMenu()` 函数获取不到 `path` 报错的问题 +- 修复左侧菜单折叠后突然拉升造成左侧菜单整体不显示的问题 +- 修复 `RePureTableBar` 关闭列设置后在 `windows` 出现滚动条的问题 + +### 🍏 Perf + +- 优化标签页操作-路由传参模式用法 +- 优化菜单搜索功能和样式 +- 更新 `vscode` 代码片段 +- 优化 `dataThemeChange` 主题设置的初始化调用时机 + +# 4.2.0 (2023-05-15) + +### 🎫 Feat + +- 新增分段控制器组件并适配暗黑模式 +- 静态路由支持配置数组格式 +- 函数式弹框组件添加全屏、退出全屏操作按钮 +- 新增组件-瀑布流 `demo` +- 添加 `Exclusive` 类型互斥语法糖 + +### 🍏 Perf + +- 规范 `template` 模版中路由写法,不再使用 `$route` 和 `$router`,此写法 `vue-tsc` 编译不通过 + +# 4.1.0 (2023-05-12) + +### 🎫 Feat + +- 函数式弹框组件添加结合 `Form` 的 `demo` 示例 +- 封装 `element-plus` 的 `el-col` 组件 +- 函数式弹框组件添加 `beforeCancel` 和 `beforeSure` 回调,可暂停弹框的关闭 +- 完善 `系统管理-部门管理` 页面 +- 优化 `PureTableBar` 组件,列展示添加拖拽功能 + +### 🐞 Bug fixes + +- 修复开启 `keepAlive` 后点击标签页的重新加载,页面缓存还存在的问题 +- 修复混合模式菜单下刷新页签后左侧菜单会闪烁一下的问题 + +### 🍏 Perf + +- 优化首页布局 +- 依赖更新到 `vue3.3+` 以及删除 `unplugin-vue-define-options` 插件 + +# 4.0.0 (2023-05-09) + +[查看 4.0.0 版本优化细节](https://github.com/pure-admin/vue-pure-admin/issues/428#issuecomment-1422191158) + +### ✔️ Refactor + +- 采用 `css` 伪类 `before` 写法重构菜单的激活背景,类似于 [ant.design-menu](https://ant.design/components/menu-cn#components-menu-demo-inline-collapsed) + +### 🎫 Feat + +- 优化菜单名称右侧的额外图标,使其支持更多图标渲染模式 +- 可配置首页菜单显示与隐藏 +- 将本地响应式存储的命名空间提升到全局配置中 +- 新增函数式弹框组件以及 `demo` 示例,使用更便捷 +- `PureTableBar` 组件添加列展示功能 + +### 🐞 Bug fixes + +- 修复当菜单折叠或展开时首页 `echarts` 图表未自适应容器 +- 修复当只有一个子菜单时,搜索功能搜索不到该子菜单问题 +- 修复全局配置 `Theme` 为 `light` 清空缓存重新登录主题配置不生效的问题 +- 修复菜单搜索功能弹框打开后搜索框未自动聚集的问题 +- 修复按 `ESC` 退出全屏后,工具栏按钮文案展示问题 +- 修复移动端通知栏 `tooltip` 点击穿透问题 +- 修复当左侧菜单收起后,切换到 `horizontal` 导航模式时文字不展示的问题 +- 修复导航 `tab` 关闭其他标签页无法重置状态问题 +- 修复 `getHistoryMode` 函数中环境变量未初始化带来的页面热更新报错 +- 修复导航 `tab` 过多导致关闭左侧标签页无法正常显示 +- 修复点击内容区全屏报错问题 +- 修复混合导航下打开 `showLink:false` 页面并刷新后,左侧导航栏一直处于加载状态的问题 +- 修复混合模式导航下调用 `initRouter` 函数导致左侧导航内存溢出问题 +- 修复关闭左侧、右侧、其他、全部标签页操作时缓存页面并没有销毁问题 +- 修复路由通过 `query` 或 `params` 传参,开启缓存后关闭标签页缓存失效问题 +- 修复 `params` 路由传参模式下,面包屑无法找到父级路径问题 + +### 🍏 Perf + +- 优化 `RePureTableBar` 组件的 `buttons` 具名插槽 +- 优化导航样式以及菜单折叠动画 +- 优化菜单名称右侧的额外图标,使其支持更多图标渲染模式 +- 优化 `logo` 图和文字布局以及统一配置 +- 路由信息 `showLink` 设置成 `false` 后,当前路由信息不添加到标签页 +- 导出 `addPathMatch` 函数 +- `pinia` 中所有 `getters` 改为官方推荐写法,`this` 改成 `state` 可自动推导类型 +- 适配最新版 `pure-table` 的 `api` +- 忽略 `sourcemap-codec` 和 `stable` 依赖包的 `deprecation` 警告 +- 从 `tsconfig.json` 文件中移除 `"incremental": true` +- 更新 `stylelint` 以及相关配置至最新,强化样式校验 +- 面包屑去首页化,根据选择的菜单对应显示,首页不在固定到面包屑里,并优化面包屑页面的路由监听 + +# 3.9.7 (2022-12-26) + +### 🍏 Perf + +- 使用 `path.posix.resolve` 替代 `path.resolve` 避免 `windows` 环境下使用 `electron` 出现盘符问题 +- 默认关闭 `CachingAsyncRoutes` 动态路由缓存本地,使其在开发环境下调试更方便,不用每次修改动态路由都要先清空本地缓存的动态路由,更推荐在生产环境开启 + +# 3.9.6 (2022-12-19) + +### 🎫 Chores + +- 升级 `vite4` 版本 + +### 🐞 Bug fixes + +- 修复 `tailwind.css` 错误的引入方式导致 `vite` 的 `hmr` 慢的问题 + +### 🍏 Perf + +- 更新 [@pureadmin/theme](https://github.com/pure-admin/pure-admin-theme) 至最新版,带来更友好的类型提示 +- 优化 [PureTableBar](https://github.com/pure-admin/vue-pure-admin/tree/main/src/components/RePureTableBar) 组件 +- 优化系统管理页面业务代码,带来更好的代码参考 + +# 3.9.5 (2022-12-13) + +### ✔️ Refactor + +- 完全移除了 `lodash` 和其相关库 + [点击此处查看为什么移除?如何自行集成?](https://pure-admin.github.io/pure-admin-doc/pages/FAQ/#%E5%B9%B3%E5%8F%B0%E5%9C%A8-v3-9-5-%E7%89%88%E6%9C%AC%E5%AE%8C%E5%85%A8%E7%A7%BB%E9%99%A4%E4%BA%86-lodash-%E5%92%8C%E5%85%B6%E7%9B%B8%E5%85%B3%E5%BA%93-%E4%B8%BA%E4%BB%80%E4%B9%88%E7%A7%BB%E9%99%A4-%E5%A6%82%E4%BD%95%E8%87%AA%E8%A1%8C%E9%9B%86%E6%88%90) + +### 🎫 Feat + +- 添加 `@pureadmin/table` 表格动态列示例 + +### 🐞 Bug fixes + +- 修复动态路由 `rank` 问题 +- 修复暗黑主题样式问题 + +### 🍏 Perf + +- 优化路由 `rank` ,当 `rank` 不存在时,根据顺序自动创建,首页路由永远在第一位 + +# 3.9.4 (2022-12-05) + +### ✔️ Refactor + +- 完全移除了 `vxe-table`,移除后,完整版整体打包大小减少 `1.82MB`,首启动时长基本和精简版持平 🐮 + [点击此处查看为什么移除?如何自行集成?](https://pure-admin.github.io/pure-admin-doc/pages/FAQ/#%E5%B9%B3%E5%8F%B0%E5%9C%A8-v3-9-4-%E7%89%88%E6%9C%AC%E5%AE%8C%E5%85%A8%E7%A7%BB%E9%99%A4%E4%BA%86-vxe-table-%E4%B8%BA%E4%BB%80%E4%B9%88%E7%A7%BB%E9%99%A4-%E5%A6%82%E4%BD%95%E8%87%AA%E8%A1%8C%E9%9B%86%E6%88%90) + +### 🎫 Feat + +- 添加 `@pureadmin/table` 表格选择器(单选、多选)示例 + +# 3.9.3 (2022-12-04) + +### 🎫 Feat + +- 添加 `@pureadmin/table` 分页和加载动画示例 + +### 🐞 Bug fixes + +- 修复开启 `CachingAsyncRoutes` 后,存入本地存储的动态路由改变造成刷新页面空白的问题 +- 修复菜单折叠后 `Tooltip` 显示异常 + +### 🍏 Perf + +- 扩展本地图标使用方式,完整版首启动再次减少 `13` 个请求 +- 当菜单加载慢时,添加 `loading` 动画,优化用户体验 +- 主题初始化放在 `onBeforeMount` 里,避免初始化页面闪烁 + +# 3.9.2 (2022-12-03) + +### 🍏 Perf + +- 全局覆盖 `element-plus` 的 `el-dialog`、`el-drawer`、`el-message-box`、`el-notification` 组件右上角关闭图标的样式,使其表现更鲜明 [具体代码修改记录](https://github.com/pure-admin/vue-pure-admin/commit/c80818d792276666aaea4b18413a0f08777f2ed1) +- 打包输出信息兼容不同打包输出路径 +- 优化一些动画 + +# 3.9.1 (2022-12-02) + +### 🎫 Feat + +- 添加 `CachingAsyncRoutes` 是否开启动态路由缓存本地的全局配置,默认 `true` +- 添加 `TooltipEffect` 全局配置,可配置平台主体所有 `el-tooltip` 的 `effect` 属性,默认 `light`,不影响业务代码 +- 添加目录、菜单文字超出显示 `Tooltip` 文字提示演示 + +### 🍏 Perf + +- 优化 `initRouter` 方法,兼容 `sso` 场景 +- 面包屑动画样式优化 + +# 3.9.0 (2022-11-30) + +### 🐞 Bug fixes + +- 修复退出全屏时文字过长导致页面出现滚动条后带来的抖动问题 +- 修复一些类型错误 + +### 🍏 Perf + +- perf: 首屏加载大优化,对比 `3.9.0` 之前版本,首屏请求减少 `71` 个,首屏加载资源减少 `4.1 MB` + +# 3.8.7 (2022-11-28) + +### 🍏 Perf + +- perf: 打包大优化,请务必升级!使用 `unplugin-vue-define-options` 替换 `unplugin-vue-macros` ,打包速度提升数倍,使用 `unplugin-vue-macros` 以性能中等偏上的 `mac` 为例完整版打包时长为 `6` 分钟 😭,使用 `unplugin-vue-define-options` 替换后,相同电脑下打包时长为 `50` 秒 ☺️ + +# 3.8.6 (2022-11-27) + +### 🎫 Feat + +- 添加 `message` 消息提示函数,兼容 `Element Plus` 和 `Ant Design` 两种 `Message` 样式风格,使用和打包大小成本极低并适配暗黑模式,真香 😂 + +### 🍏 Perf + +- perf: 无需安装 `@vue/runtime-core` ,兼容所有 `element-plus` 组件的 `volar` 提示 + +# 3.8.5 (2022-11-26) + +### 🍏 Perf + +- 大优化,移除 `@pureadmin/components` 并采用兼容写法,平台打包大小在未启用压缩前对比优化前减少 `0.4` MB , 首屏请求减少 `2.3` MB 的资源,这对于 [精简版](https://github.com/pure-admin/pure-admin-thin) 来说是非常大的优化,精简版已经同步代码 + +# 3.8.0 (2022-11-26) + +### 🎫 Feat + +- 添加 `@pureadmin/table` 多种数据格式(深层结构)示例 +- 添加 `@pureadmin/table` 图像预览示例 +- 添加 `@pureadmin/table` 行、列拖拽示例 +- 添加 `@pureadmin/table` 右键菜单示例 +- 添加 `@pureadmin/table` 导出 `Excel` 示例 +- 添加 `@pureadmin/table` 修改单元格示例 +- 添加 `@pureadmin/table` 水印示例 +- 添加 `@pureadmin/table` 打印示例 +- 添加 `@pureadmin/table` 内嵌 `echarts` 图表示例 +- 添加 `svgo` 压缩平台所有 `svg` 文件,减少体积 + +### 🍏 Perf + +- 静态路由平台自动导入,无需手动引入 +- 更完善的全局类型提示 +- 优化 `vite` 依赖预构建在平台里的配置,页面切换加载速度显著加快 + +# 3.7.1 (2022-11-22) + +### 🔥 hotfix + +- 修复在未开启标签页缓存时退出登录,可能存在标签页未重置的问题 + +# 3.7.0 (2022-11-21) + +### ✔️ Refactor + +- 使用 `intro.js` 替换 `driver.js` + +### 🎫 Feat + +- 添加前端单点登录,测试地址 https://pure-admin.github.io/vue-pure-admin/#/pure-table/index?username=sso&roles=admin&accessToken=eyJhbGciOiJIUzUxMiJ9.admin +- 为 [@pureadmin/table](https://github.com/pure-admin/pure-admin-table) 添加更多的示例和 `element-plus` 的 [table](https://element-plus.org/zh-CN/component/table.html) 示例保持一致 +- 丰富水印功能页面(支持自定义各种颜色、阴影、文字、额外属性、设置不可删除水印以及给指定元素设置水印) +- 优化菜单,添加 `MenuArrowIconNoTransition` 全局配置,在 `public/platform-config.json` 中配置即可,对于出现左侧菜单模式,菜单展开卡顿的可设置 `MenuArrowIconNoTransition: true` 即可解决 +- 更换表单设计器组件演示 + +### 🐞 Bug fixes + +- 修复页内菜单带参互相跳转,标签没有选中高亮 + +### 🍏 Perf + +- 删除已废弃的 `$baseUrl` +- 兼容引入某个库导致 `global is not defined` 报错,将 `src/utils/globalPolyfills.ts` 文件引入 `src/main.ts` 即可解决 +- 删除 `@vitejs/plugin-legacy`,`vue3` 无法通过任何工具使其支持 `ie` + +# 3.6.4 (2022-11-10) + +### 🎫 Feat + +- 菜单图标 `icon` 支持使用在线图标 + +### 🐞 Bug fixes + +- 修复 `vxe-button` 鼠标覆盖后字体颜色问题以及一些别的样式问题 + +### 🍏 Perf + +- 优化路由守卫,如果已经登录并存在登录信息后不能跳转到路由白名单,而是继续保持在当前页面 +- 将 `baseURL` 和全局环境代理删除,可直接在 `vite.config.ts` 编写,即方便又支持多个代理地址 + +# 3.6.3 (2022-11-01) + +### 🎫 Feat + +- 静态资源分类打包 +- 添加弹幕组件 `demo` + +### 🐞 Bug fixes + +- 修复 `tailwindcss` 最新版新增的 `collapse` 属性与平台 `class` 类名冲突 +- 修复当 `token` 过期后,如果页面有多个请求会重复刷新 `token` + +# 3.6.2 (2022-10-27) + +### ✔️ Refactor + +- 使用`@/`别名替换`/@/`别名 + +# 3.6.1 (2022-10-27) + +### 🎫 Feat + +- 添加打包是否启动`cdn`替换本地库配置,默认`false`不启动 +- 添加打包构建可选`gzip`与`brotli`压缩模式 + +### 🐞 Bug fixes + +- 修复`title`过长显示样式问题 +- 修复路由中父级`name`不应和子级`name`重复,会造成重定向跳转`404`问题 + +### 🍏 Perf + +- 升级`axios`至最新版 + +# 3.6.0 (2022-10-25) + +### 🎫 Feat + +- 添加文件下载`demo` +- 添加打字机组件`demo` +- 添加`json`编辑器`demo` + +### ✔️ Refactor + +- 重构权限模块,采用目前最常用的`RBAC`(Role-Based Access List): 基于角色的权限控制( 用户 -> 角色 -> 权限 ),并更新页面权限和按钮权限`demo`示例,按钮权限支持三种操作模式(组件方式判断权限、函数方式判断权限、指令方式判断权限) + +### 🐞 Bug fixes + +- 修复清空缓存并返回登录页时未清空主题 +- 修复`horizontal`模式下`menu`在生产环境显示问题 +- 修复`mix`混合模式导航在生产环境左侧菜单一定机率不显示的问题 +- `token`过期后调用刷新`token`接口会无限循环的问题 + +### 🍏 Perf + +- 从`tailwind.css`中移除不常用的`@apply` +- 使用`/** */`替换`//`注释,对编辑器的智能提示更友好 +- 优化登录回车事件 +- 简化了一些函数,剔除了无用函数,优化了页面加载速度 + +# 3.5.0 (2022-9-10) + +### 🎫 Feat + +- 添加 `cssnano` ,打包时压缩 `css` 体积 +- 添加 `element-plus` 无缝滚动 `Table` 页面 demo +- 开启 `vscode` 括号对指南 + +### ✔️ Refactor + +- 使用 `tailwindcss` 替换 `unocss`,新增 `tailwindcss` [使用文档](https://pure-admin.github.io/pure-admin-doc/pages/tailwindcss/) + +### 🐞 Bug fixes + +- `token` 过期,刷新死循环 + +### 🍏 Perf + +- 重置路由时,清空缓存页面 + +# 3.4.6 (2022-8-23) + +### 🐞 Bug fixes + +- `process` is not defined in path +- 修复动态路由`children`为空数组时报错 +- 修复`iframe`加载失败 + +# 3.4.5 (2022-8-22) + +### 🐞 Bug fixes + +- 修复本地响应式存储对象设置问题 + +# 3.4.0 (2022-8-22) + +### 🍏 Perf + +- 优化路由 +- 优化移动端兼容性 +- 优化路由传参(`query`、`params` 方式刷新页面不需要再开启标签页缓存也能保留参数在`url`和`标签页`上) + +# 3.3.5 (2022-8-19) + +### 🎫 Feat + +- 将 `element-plus` 的 `Table` 二次封装到[@pureadmin/table](https://github.com/pure-admin/pure-admin-table),提供灵活的配置项并集成到平台里 +- 将 `element-plus` 的 `Descriptions` 二次封装到[@pureadmin/descriptions](https://github.com/pure-admin/pure-admin-descriptions),提供灵活的配置项并集成到平台里 +- 将平台的大部分工具以及 `hooks` 都集中到[@pureadmin/utils](https://pure-admin-utils.netlify.app),并删除集中到这个库里的代码,减少平台体积 +- 添加[unplugin-vue-define-options](https://www.npmjs.com/package/unplugin-vue-define-options)插件,页面可直接写 `defineOptions({name: 自定义名称})` +- 添加项目文件、语言分析工具 [cloc](https://www.npmjs.com/package/cloc) +- 添加登录页国际化 +- 添加完整路由配置表类型声明 +- 添加虚拟列表页面 demo +- 添加 `PDF` 预览页面 demo +- 添加导出 `excel` 页面 demo +- 添加无 `Layout` 的空白页面 demo + +### ✔️ Refactor + +- 重构主题色,适配 `element-plus` 暗黑模式(同时也解决了 `3.3.0` 及更低版本中同样的元素 `css` 被多次覆盖,导致样式不好调试的问题) +- 重构路由重置功能 + +### 🍏 Perf + +- 兼容项目存放目录以中文命名,但我们真心不推荐中文命名,因为可能某个库没有对中文路径做转义处理,导致项目奔溃 +- 优化接口类型 + +### 🐞 Bug fixes + +- 修复路由 `showlink` 为 `false` 的异步路由,刷新后不显示 +- 修复当没有 `icon` 时,垂直导航菜单折叠后文字被隐藏 + +# 3.3.0 (2022-5-11) + +### 🎫 Feat + +- 添加用户管理页面 demo +- 添加角色管理页面 demo +- 添加部门管理页面 demo +- 添加卡片列表页面 demo +- 集成表单设计器 +- 新增`PPT`demo +- 在功能菜单中新增防抖截流 demo +- 升级`wangeditorV5`(并支持国际化和自定义主题) +- 集成`tauri`版本 +- 新增条形码功能 +- 新增二维码功能 +- 使用`element-plus`中的`Cascader`级联选择器编写中国省市区三级、二级联动 demo +- 集成`Swiper`插件 +- 路由支持传`component`,代表组件路径 +- 添加预发布打包模式 +- 添加关闭某个标签的[hooks](https://github.com/pure-admin/vue-pure-admin/commit/5e8723a031923e79f507e5a17151d3bd88a51523) + +### ✔️ Refactor + +- 重构登录页,更偏向实际业务场景 +- 使用`unocss`替换`windicss`,`unocss`开发环境下性能更好,没有内存泄露,而且`api`使用上兼容`windicss` + +### 🍏 Perf + +- 优化平台的`split-pane`组件样式 +- 优化国际化,路由不再传`i18n`字段,平台自动读取根目录`locales`文件夹下文件进行国际化匹配 +- 优化图标选择器 +- 优化`layout`显示用户信息[commit](https://github.com/pure-admin/vue-pure-admin/commit/56f9dc85e7fbe0637605c43577c794de9f8968aa) + +### 🐞 Bug fixes + +- 修复路由初始化问题(Cannot access 'constantRoutes' before initialization) + +# 3.2.0 (2022-3-22) + +### 🎫 Feat + +- 图标选择组件 +- 菜单搜索功能 +- 添加结果页面 +- 扩展`element-plus`时间线组件 +- 扩展`element-plus`树组件,支持连接线 +- 添加树形选择器,支持单选和多选 + +### 🍏 Perf + +- 优化错误页面 UI +- 优化国际化功能 +- 优化路由`rank`排序,兼容路由`meta`中`rank`字段值为`null`的情况 + +### 🐞 Bug fixes + +- 修复菜单展开折叠在部分电脑出现卡顿的情况 + +# 3.1.0 (2022-3-3) + +### 🎫 Feat + +- iframe 支持动态加载 +- 水印示例 +- 打印示例(图片、表格、echarts) +- 添加运行、打包信息, 使用`lodash-unified`替换`lodash-es`,`lodash-unified`支持`ESM`同时兼容`CJS` + +### 🐞 Bug fixes + +- 修复在一个菜单页面内单独跳转到另一个菜单页面,路由页面跳转了但是标签页不显示的情况 +- 修复后台返回动态三级及以上的路由,出现菜单与页面不对应的情况 + +# 3.0 (2022-2-14) + +### 🎫 Feat + +- 添加混合导航 + +### 🐞 Bug fixes + +- 修复标签页 bug + +# 2.9.0(2022-2-5) + +### 🎫 Feat + +- 添加打包大小分析,命令`pnpm report` + +### 🍏 Perf + +- 采用`iconify`按需引入图标,优化图标大小,减少网络请求 +- 优化路由,路由可不传`showLink: true`,默认显示 + +# 2.8.5(2022-1-21) + +### 🎫 Feat + +- 添加 `WindiCSS` 支持 +- 添加线上环境删 console 插件`vite-plugin-remove-console` + +### ✔️ Refactor + +- 使用`@iconify-icons/ep`替换`@element-plus/icons-vue` + +# 2.8.0(2022-1-4) + +### 🎫 Feat + +- 添加暗黑主题 +- 添加 element-plus 自定义主题 +- 添加引导页 + +### 🍏 Perf + +- 优化国际化,兼容 vscode 插件 i18n Ally 智能提醒 +- 优化后端返回路由结构 +- 优化本地存储,内置四个键`responsive-configure`、`responsive-locale`、`responsive-layout`、`responsive-tags`,分别为基本配置、国际化配置、布局配置、标签页持久化配置 + +# 2.7.0(2021-12-18) + +### 🎫 Feat + +- 新增标签页复用 +- 新增消息提醒模版 +- 新增前端菜单树结构例子 +- 重构路由,优化权限模块,带来更方便的体验 +- 重构 env 环境和 http 请求,带来更方便的体验 +- 目前平台的标签页强制关联了本地存储,下一步标签页默认放到内存中并支持可配置持久化标签页 +- 导航菜单图标支持 fontawesome、iconfont、remixicon、element-plus/icons、自定义 svg +- 更新 font-awesome 到 5.0 版本,因为 5.0 以下的版本官方不再维护,但平台依旧会兼容 font-awesome4 版本 + +### 🍏 Perf + +- 优化标签页,带来更好的交互体验 +- 路由 title 支持直接写中文,可脱离国际化 +- 路由历史模式从 env 读取并支持 base 参数 + +# 2.6.0(2021-11-10) + +### 🎫 Feat + +- 重构导航主题色,支持多种配色 +- 重构登录页,插画风格 + +### 🍏 Perf + +- 优化导航样式 +- 剔除导航强依赖 vxe-table +- 同步更新 element-plus,使用 SVG Icon 替换 Font Icon + +# 2.1.0(2021-10-14) + +### 🎫 Feat + +- 路由动画(每个路由都可添加不同动画) +- 额外图标(比如这个是新加的页面,路由菜单右上角显示个新图标) +- 抽离默认配置选项 +- 完善类型文件 + +### 🐞 Bug fixes + +- 修复 element-plus 国际化使用问题 +- 修复路由问题 +- 修复导航适配问题 + +# 2.0.1(2021-9-29) + +### 🎫 Feat + +- 添加 horizontal 水平模式导航 + +# 2.0.0(2021-4-13) + +### 🎫 Chores + +- 发布 2.0.0 版本 diff --git a/Yi.Pure.Vue3/Dockerfile b/Yi.Pure.Vue3/Dockerfile new file mode 100644 index 00000000..cd6d51a9 --- /dev/null +++ b/Yi.Pure.Vue3/Dockerfile @@ -0,0 +1,20 @@ +FROM node:20-alpine as build-stage + +WORKDIR /app +RUN corepack enable +RUN corepack prepare pnpm@latest --activate + +RUN npm config set registry https://registry.npmmirror.com + +COPY .npmrc package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +COPY . . +RUN pnpm build + +FROM nginx:stable-alpine as production-stage + +COPY --from=build-stage /app/dist /usr/share/nginx/html +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/Yi.Pure.Vue3/LICENSE b/Yi.Pure.Vue3/LICENSE new file mode 100644 index 00000000..6d4889d0 --- /dev/null +++ b/Yi.Pure.Vue3/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-present, pure-admin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Yi.Pure.Vue3/README.en-US.md b/Yi.Pure.Vue3/README.en-US.md new file mode 100644 index 00000000..65051fc6 --- /dev/null +++ b/Yi.Pure.Vue3/README.en-US.md @@ -0,0 +1,243 @@ +

vue-pure-admin

+ +![GitHub license](https://img.shields.io/github/license/pure-admin/vue-pure-admin?style=flat) +![GitHub stars](https://img.shields.io/github/stars/pure-admin/vue-pure-admin?color=fa6470&style=flat) +![GitHub forks](https://img.shields.io/github/forks/pure-admin/vue-pure-admin?style=flat) + +**English** | [中文](./README.md) + +## Introduction + +`vue-pure-admin` is an open source, free and out-of-the-box middle and backend management system template. Completely adopts `ECMAScript` module (`ESM`) specifications to write and organize code, using the latest `Vue3`, `Vite`, `Element-Plus`, `TypeScript`, `Pinia`, `Tailwindcss` and other mainstream technologies develop + +## R&D philosophy + +Seek innovation in stability and see the future in technology + +## Thin version (offering non-internationalized and internationalized versions) + +The simplified version is based on the shelf extracted from [vue-pure-admin](https://github.com/pure-admin/vue-pure-admin), which contains main functions and is more suitable for actual project development. The packaged size is introduced globally [element-plus](https://element-plus.org) is still below `2.3MB`, and the full version of the code will be permanently synchronized. After enabling `brotli` compression and `cdn` to replace the local library mode, the package size is less than `350kb` + +[Click to view the non-internationalized version](https://github.com/pure-admin/pure-admin-thin) +[Click to view Internationalization version](https://github.com/pure-admin/pure-admin-thin/tree/i18n) + +## Supporting video + +[Click me to view UI design](https://www.bilibili.com/video/BV17g411T7rq) +[Click me to view the rapid development tutorial](https://www.bilibili.com/video/BV1kg411v7QT) + +## Nanny-level documents + +[Click me to view vue-pure-admin documentation](https://pure-admin.github.io/pure-admin-doc) +[Click me to view @pureadmin/utils documentation](https://pure-admin-utils.netlify.app) + +## Quality service, software outsourcing, sponsorship support + +[Click me for details](https://pure-admin.github.io/pure-admin-doc/pages/service/) + +## `js` version + +[Click me to view js version](https://pure-admin.github.io/pure-admin-doc/pages/js/) + +## `max` version + +[Click me to view the max version](https://github.com/pure-admin/vue-pure-admin-max) + +## Tauri + +[Click Watch Tauri](https://github.com/pure-admin/tauri-pure-admin) + +## Electron + +[Click Watch Electron](https://github.com/pure-admin/electron-pure-admin) + +## Preview + +[preview station](https://pure-admin.github.io/vue-pure-admin) + +`PC` + +

+ PureAdmin +
+ PureAdmin +

+ +`DarkMode` + +

+ PureAdmin +
+ PureAdmin +

+ +`Mobile` + +

+ PureAdmin +

+ +### Use Gitpod + +Open the project in Gitpod (free online dev environment for GitHub) and start coding immediately. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/pure-admin/vue-pure-admin) + +## Install And Use + +### Pull code + +#### It is recommended to use `@pureadmin/cli` scaffolding + +
+pure-admin-cli + +1. Global installation + +```bash +npm install -g @pureadmin/cli +``` + +2. Interactively select templates and create projects + +```bash +pure create +``` + +[Click to view the detailed usage of @pureadmin/cli scaffolding](https://github.com/pure-admin/pure-admin-cli#pureadmincli) + +#### Pull from `GitHub` + +```bash +git clone https://github.com/pure-admin/vue-pure-admin.git +``` + +#### Pulled from `Gitee` + +```bash +git clone https://gitee.com/yiming_chang/vue-pure-admin.git +``` + +### Install dependencies + +```bash +cd vue-pure-admin + +pnpm install +``` + +### Run platform + +```bash +pnpm dev +``` + +### Project packaging + +```bash +pnpm build +``` + +## Docker support + +1. Customize the image named `vue-pure-admin` (please note that there is a dot `.` at the end of the command below, indicating that the `Dockerfile` file in the current path is used, and the path can be specified according to the actual situation) + +```bash +docker build -t vue-pure-admin . +``` + +2. Port mapping and start the `docker` container (`8080:80`: indicates that the `80` port is used in the container, and the port is forwarded to the `8080` port of the host; `pure-admin`: indicates a custom container name; `vue-pure-admin`: indicates the custom image name) + +```bash +docker run -dp 8080:80 --name pure-admin vue-pure-admin +``` + +After operating the above two commands, open `http://localhost:8080` in the browser to preview + +Of course, you can also operate the `docker` project through the [Docker Desktop](https://www.docker.com/products/docker-desktop/) visual interface, as shown below + +

+ docker-desktop +

+ +## Change Log + +[CHANGELOG](./CHANGELOG.en_US.md) + +## How to contribute + +You are very welcome to join![Raise an issue](https://github.com/pure-admin/vue-pure-admin/issues/new/choose) Or submit a Pull Request + +**Pull Request:** + +1. Fork code! +2. Create your own branch: `git checkout -b feat/xxxx` +3. Submit your changes: `git commit -am 'feat(function): add xxxxx'` +4. Push your branch: `git push origin feat/xxxx` +5. submit`pull request` + +## Special code contributions + +Thank you very much for your in-depth understanding of the source code and your outstanding contributions to the `pure-admin` organization ❤️ + +| **Contributor** | **SpecificCode** | +| :---------------------------------------------: | :------------------------------------------------------------------------------: | +| [hb0730](https://github.com/hb0730) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=hb0730) | +| [o-cc](https://github.com/o-cc) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=o-cc) | +| [yj-liuzepeng](https://github.com/yj-liuzepeng) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=yj-liuzepeng) | +| [skyline523](https://github.com/skyline523) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=skyline523) | +| [shark-lajiao](https://github.com/shark-lajiao) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=shark-lajiao) | +| [WitMiao](https://github.com/WitMiao) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=WitMiao) | +| [QFifteen](https://github.com/QFifteen) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=QFifteen) | +| [edgexie](https://github.com/edgexie) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=edgexie) | +| [way-jm](https://github.com/way-jm) | [code](https://github.com/pure-admin/vue-pure-admin/commits?author=way-jm) | + +## Git Contribution submission specification + +reference [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) specification ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular)) + +- `feat` Add new features +- `fix` Fix the problem/BUG +- `style` The code style is related and does not affect the running result +- `perf` Optimization/performance improvement +- `refactor` Refactor +- `revert` Undo edit +- `test` Test related +- `docs` Documentation/notes +- `chore` Dependency update/scaffolding configuration modification etc. +- `workflow` Workflow improvements +- `ci` Continuous integration +- `types` Type definition file changes +- `wip` In development + +## Browser support + +It is recommended to use `Chrome`, `Edge`, and `Firefox` browsers for local development. The author commonly uses the latest version of `Chrome` browser. +In actual use, I feel that `Firefox` is smoother in animation than other browsers, but the author is used to using `Chrome`. It depends on personal preference. +For more detailed browser compatibility support, please see [Which browsers does Vue support? ](https://vuejs.org/about/faq.html#what-browsers-does-vue-support) and [Vite browser compatibility](https://vitejs.dev/guide/build.html#browser-compatibility) + +| [ Edge](http://godban.github.io/browsers-support-badges/)
IE | [ Edge](http://godban.github.io/browsers-support-badges/)
Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions | + +## Maintainer + +[xiaoxian521](https://github.com/xiaoxian521)、[Ten-K](https://github.com/Ten-K) + +## License + +Completely free and open source + +[MIT © 2020-present, pure-admin](./LICENSE) + +## `Star` + +Many thanks to the kind individuals who leave a star. Your support is much appreciated :heart: + +[![Stargazers repo roster for @pure-admin/vue-pure-admin](https://bytecrank.com/nastyox/reporoster/php/stargazersSVG.php?user=pure-admin&repo=vue-pure-admin)](https://github.com/pure-admin/vue-pure-admin/stargazers) + +## `Fork` + +It's so cool that you study hard :heart: + +[![Forkers repo roster for @pure-admin/vue-pure-admin](https://bytecrank.com/nastyox/reporoster/php/forkersSVG.php?user=pure-admin&repo=vue-pure-admin)](https://github.com/pure-admin/vue-pure-admin/network/members) diff --git a/Yi.Pure.Vue3/README.md b/Yi.Pure.Vue3/README.md new file mode 100644 index 00000000..7eb6ff1e --- /dev/null +++ b/Yi.Pure.Vue3/README.md @@ -0,0 +1,244 @@ +

vue-pure-admin

+ +![GitHub license](https://img.shields.io/github/license/pure-admin/vue-pure-admin?style=flat) +![GitHub stars](https://img.shields.io/github/stars/pure-admin/vue-pure-admin?color=fa6470&style=flat) +![GitHub forks](https://img.shields.io/github/forks/pure-admin/vue-pure-admin?style=flat) + +**中文** | [English](./README.en-US.md) + +## 简介 + +`vue-pure-admin` 是一款开源免费且开箱即用的中后台管理系统模版。完全采用 `ECMAScript` 模块(`ESM`)规范来编写和组织代码,使用了最新的 `Vue3`、 +`Vite`、`Element-Plus`、`TypeScript`、`Pinia`、`Tailwindcss` 等主流技术开发 + +## 研发理念 + +稳定中求创新,技术中见未来 + +## 精简版本(实际项目开发请用精简版本,提供 `非国际化` 、`国际化` 两个版本选择) + +精简版本是基于 [vue-pure-admin](https://github.com/pure-admin/vue-pure-admin) 提炼出的架子,包含主体功能,更适合实际项目开发,打包后的大小在全局引入 [element-plus](https://element-plus.org) 的情况下仍然低于 `2.3MB`,并且会永久同步完整版的代码。开启 `brotli` 压缩和 `cdn` 替换本地库模式后,打包大小低于 `350kb` + +[点我查看非国际化精简版本](https://github.com/pure-admin/pure-admin-thin) +[点我查看国际化精简版本](https://github.com/pure-admin/pure-admin-thin/tree/i18n) + +## 配套视频 + +[点我查看 UI 设计](https://www.bilibili.com/video/BV17g411T7rq) +[点我查看快速开发教程](https://www.bilibili.com/video/BV1kg411v7QT) + +## 配套保姆级文档 + +[点我查看 vue-pure-admin 文档](https://pure-admin.github.io/pure-admin-doc) +[点我查看 @pureadmin/utils 文档](https://pure-admin-utils.netlify.app) + +## 优质服务、软件外包、赞助支持 + +[点我查看详情](https://pure-admin.github.io/pure-admin-doc/pages/service/) + +## `js` 版本 + +[点我查看 js 版本](https://pure-admin.github.io/pure-admin-doc/pages/js/) + +## `max` 版本 + +[点我查看 max 版本](https://github.com/pure-admin/vue-pure-admin-max) + +## `Tauri` 版本 + +[点我查看 Tauri 版本](https://github.com/pure-admin/tauri-pure-admin) + +## `Electron` 版本 + +[点我查看 Electron 版本](https://github.com/pure-admin/electron-pure-admin) + +## 预览 + +[点我查看预览](https://pure-admin.github.io/vue-pure-admin) + +`PC` 端 + +

+ PureAdmin +
+ PureAdmin +

+ +暗色风格 + +

+ PureAdmin +
+ PureAdmin +

+ +移动端 + +

+ PureAdmin +

+ +### 使用 `Gitpod` + +在 `Gitpod`(适用于 `GitHub` 的免费在线开发环境)中打开项目,并立即开始编码. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/pure-admin/vue-pure-admin) + +## 安装使用 + +### 拉取代码 + +#### 推荐使用 `@pureadmin/cli` 脚手架 + +
+pure-admin-cli + +1. 全局安装 + +```bash +npm install -g @pureadmin/cli +``` + +2. 交互式选择模板并创建项目 + +```bash +pure create +``` + +[点我查看 @pureadmin/cli 脚手架详细用法](https://github.com/pure-admin/pure-admin-cli#pureadmincli) + +#### 从 `GitHub` 上拉取 + +```bash +git clone https://github.com/pure-admin/vue-pure-admin.git +``` + +#### 从 `Gitee` 上拉取 + +```bash +git clone https://gitee.com/yiming_chang/vue-pure-admin.git +``` + +### 安装依赖 + +```bash +cd vue-pure-admin + +pnpm install +``` + +### 启动平台 + +```bash +pnpm dev +``` + +### 项目打包 + +```bash +pnpm build +``` + +## Docker 支持 + +1. 自定义镜像名为 `vue-pure-admin` 的镜像(请注意下面命令末尾有一个点 `.` 表示使用当前路径下的 `Dockerfile` 文件,可根据实际情况指定路径) + +```bash +docker build -t vue-pure-admin . +``` + +2. 端口映射并启动 `docker` 容器(`8080:80`:表示在容器中使用 `80` 端口,并将该端口转发到主机的 `8080` 端口;`pure-admin`:表示自定义容器名;`vue-pure-admin`:表示自定义镜像名) + +```bash +docker run -dp 8080:80 --name pure-admin vue-pure-admin +``` + +操作完上面两个命令后,在浏览器打开 `http://localhost:8080` 即可预览 + +当然也可以通过 [Docker Desktop](https://www.docker.com/products/docker-desktop/) 可视化界面去操作 `docker` 项目,如下图 + +

+ docker-desktop +

+ +## 更新日志 + +[CHANGELOG](./CHANGELOG.zh_CN.md) + +## 如何贡献 + +非常欢迎您的加入![提一个 Issue](https://github.com/pure-admin/vue-pure-admin/issues/new/choose) 或者提交一个 `Pull Request` + +**Pull Request:** + +1. Fork 代码! +2. 创建自己的分支: `git checkout -b feat/xxxx` +3. 提交您的修改: `git commit -am 'feat(function): add xxxxx'` +4. 推送您的分支: `git push origin feat/xxxx` +5. 提交`pull request` + +## 特别代码贡献 + +非常感谢你们能深入了解源码并对 `pure-admin` 组织作出优秀贡献 ❤️ + +| **贡献人** | **具体代码** | +| :---------------------------------------------: | :------------------------------------------------------------------------------: | +| [hb0730](https://github.com/hb0730) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=hb0730) | +| [o-cc](https://github.com/o-cc) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=o-cc) | +| [yj-liuzepeng](https://github.com/yj-liuzepeng) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=yj-liuzepeng) | +| [skyline523](https://github.com/skyline523) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=skyline523) | +| [shark-lajiao](https://github.com/shark-lajiao) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=shark-lajiao) | +| [WitMiao](https://github.com/WitMiao) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=WitMiao) | +| [QFifteen](https://github.com/QFifteen) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=QFifteen) | +| [edgexie](https://github.com/edgexie) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=edgexie) | +| [way-jm](https://github.com/way-jm) | [代码](https://github.com/pure-admin/vue-pure-admin/commits?author=way-jm) | + +## `Git` 贡献提交规范 + +参考 [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) 规范 ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular)) + +- `feat` 增加新功能 +- `fix` 修复问题/BUG +- `style` 代码风格相关无影响运行结果的 +- `perf` 优化/性能提升 +- `refactor` 重构 +- `revert` 撤销修改 +- `test` 测试相关 +- `docs` 文档/注释 +- `chore` 依赖更新/脚手架配置修改等 +- `workflow` 工作流改进 +- `ci` 持续集成 +- `types` 类型定义文件更改 +- `wip` 开发中 + +## 浏览器支持 + +本地开发推荐使用 `Chrome`、`Edge`、`Firefox` 浏览器,作者常用的是最新版 `Chrome` 浏览器 +实际使用中感觉 `Firefox` 在动画上要比别的浏览器更加丝滑,只是作者用 `Chrome` 已经习惯了,看个人爱好选择吧 +更详细的浏览器兼容性支持请看 [Vue 支持哪些浏览器?](https://cn.vuejs.org/about/faq.html#what-browsers-does-vue-support) 和 [Vite 浏览器兼容性](https://cn.vitejs.dev/guide/build#browser-compatibility) + +| [ Edge](http://godban.github.io/browsers-support-badges/)
IE | [ Edge](http://godban.github.io/browsers-support-badges/)
Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| 不支持 | 最后两个版本 | 最后两个版本 | 最后两个版本 | 最后两个版本 | + +## 维护者 + +[xiaoxian521](https://github.com/xiaoxian521)、[Ten-K](https://github.com/Ten-K) + +## 许可证 + +完全免费开源 + +[MIT © 2020-present, pure-admin](./LICENSE) + +## `Star` + +非常感谢留下星星的好心人,感谢您的支持 :heart: + +[![Stargazers repo roster for @pure-admin/vue-pure-admin](https://bytecrank.com/nastyox/reporoster/php/stargazersSVG.php?user=pure-admin&repo=vue-pure-admin)](https://github.com/pure-admin/vue-pure-admin/stargazers) + +## `Fork` + +瞧,那些 `小哥哥` 、`小姐姐` 认真 `学习` 的样子真滴是 `哎呦不错哦` :heart: + +[![Forkers repo roster for @pure-admin/vue-pure-admin](https://bytecrank.com/nastyox/reporoster/php/forkersSVG.php?user=pure-admin&repo=vue-pure-admin)](https://github.com/pure-admin/vue-pure-admin/network/members) diff --git a/Yi.Pure.Vue3/build/cdn.ts b/Yi.Pure.Vue3/build/cdn.ts new file mode 100644 index 00000000..9e4bfe04 --- /dev/null +++ b/Yi.Pure.Vue3/build/cdn.ts @@ -0,0 +1,60 @@ +import { Plugin as importToCDN } from "vite-plugin-cdn-import"; + +/** + * @description 打包时采用`cdn`模式,仅限外网使用(默认不采用,如果需要采用cdn模式,请在 .env.production 文件,将 VITE_CDN 设置成true) + * 平台采用国内cdn:https://www.bootcdn.cn,当然你也可以选择 https://unpkg.com 或者 https://www.jsdelivr.com + * 注意:上面提到的仅限外网使用也不是完全肯定的,如果你们公司内网部署的有相关js、css文件,也可以将下面配置对应改一下,整一套内网版cdn + */ +export const cdn = importToCDN({ + //(prodUrl解释: name: 对应下面modules的name,version: 自动读取本地package.json中dependencies依赖中对应包的版本号,path: 对应下面modules的path,当然也可写完整路径,会替换prodUrl) + prodUrl: "https://cdn.bootcdn.net/ajax/libs/{name}/{version}/{path}", + modules: [ + { + name: "vue", + var: "Vue", + path: "vue.global.prod.min.js" + }, + { + name: "vue-router", + var: "VueRouter", + path: "vue-router.global.min.js" + }, + { + name: "vue-i18n", + var: "VueI18n", + path: "vue-i18n.runtime.global.prod.min.js" + }, + // 项目中没有直接安装vue-demi,但是pinia用到了,所以需要在引入pinia前引入vue-demi(https://github.com/vuejs/pinia/blob/v2/packages/pinia/package.json#L77) + { + name: "vue-demi", + var: "VueDemi", + path: "index.iife.min.js" + }, + { + name: "pinia", + var: "Pinia", + path: "pinia.iife.min.js" + }, + { + name: "element-plus", + var: "ElementPlus", + path: "index.full.min.js", + css: "index.min.css" + }, + { + name: "axios", + var: "axios", + path: "axios.min.js" + }, + { + name: "dayjs", + var: "dayjs", + path: "dayjs.min.js" + }, + { + name: "echarts", + var: "echarts", + path: "echarts.min.js" + } + ] +}); diff --git a/Yi.Pure.Vue3/build/compress.ts b/Yi.Pure.Vue3/build/compress.ts new file mode 100644 index 00000000..6178986b --- /dev/null +++ b/Yi.Pure.Vue3/build/compress.ts @@ -0,0 +1,63 @@ +import type { Plugin } from "vite"; +import { isArray } from "@pureadmin/utils"; +import compressPlugin from "vite-plugin-compression"; + +export const configCompressPlugin = ( + compress: ViteCompression +): Plugin | Plugin[] => { + if (compress === "none") return null; + + const gz = { + // 生成的压缩包后缀 + ext: ".gz", + // 体积大于threshold才会被压缩 + threshold: 0, + // 默认压缩.js|mjs|json|css|html后缀文件,设置成true,压缩全部文件 + filter: () => true, + // 压缩后是否删除原始文件 + deleteOriginFile: false + }; + const br = { + ext: ".br", + algorithm: "brotliCompress", + threshold: 0, + filter: () => true, + deleteOriginFile: false + }; + + const codeList = [ + { k: "gzip", v: gz }, + { k: "brotli", v: br }, + { k: "both", v: [gz, br] } + ]; + + const plugins: Plugin[] = []; + + codeList.forEach(item => { + if (compress.includes(item.k)) { + if (compress.includes("clear")) { + if (isArray(item.v)) { + item.v.forEach(vItem => { + plugins.push( + compressPlugin(Object.assign(vItem, { deleteOriginFile: true })) + ); + }); + } else { + plugins.push( + compressPlugin(Object.assign(item.v, { deleteOriginFile: true })) + ); + } + } else { + if (isArray(item.v)) { + item.v.forEach(vItem => { + plugins.push(compressPlugin(vItem)); + }); + } else { + plugins.push(compressPlugin(item.v)); + } + } + } + }); + + return plugins; +}; diff --git a/Yi.Pure.Vue3/build/info.ts b/Yi.Pure.Vue3/build/info.ts new file mode 100644 index 00000000..6d7c8be2 --- /dev/null +++ b/Yi.Pure.Vue3/build/info.ts @@ -0,0 +1,57 @@ +import type { Plugin } from "vite"; +import { getPackageSize } from "./utils"; +import dayjs, { type Dayjs } from "dayjs"; +import duration from "dayjs/plugin/duration"; +import gradientString from "gradient-string"; +import boxen, { type Options as BoxenOptions } from "boxen"; +dayjs.extend(duration); + +const welcomeMessage = gradientString("cyan", "magenta").multiline( + `您好! 欢迎使用 pure-admin 开源项目\n我们为您精心准备了下面两个贴心的保姆级文档\nhttps://pure-admin.github.io/pure-admin-doc\nhttps://pure-admin-utils.netlify.app` +); + +const boxenOptions: BoxenOptions = { + padding: 0.5, + borderColor: "cyan", + borderStyle: "round" +}; + +export function viteBuildInfo(): Plugin { + let config: { command: string }; + let startTime: Dayjs; + let endTime: Dayjs; + let outDir: string; + return { + name: "vite:buildInfo", + configResolved(resolvedConfig) { + config = resolvedConfig; + outDir = resolvedConfig.build?.outDir ?? "dist"; + }, + buildStart() { + console.log(boxen(welcomeMessage, boxenOptions)); + if (config.command === "build") { + startTime = dayjs(new Date()); + } + }, + closeBundle() { + if (config.command === "build") { + endTime = dayjs(new Date()); + getPackageSize({ + folder: outDir, + callback: (size: string) => { + console.log( + boxen( + gradientString("cyan", "magenta").multiline( + `🎉 恭喜打包完成(总用时${dayjs + .duration(endTime.diff(startTime)) + .format("mm分ss秒")},打包后的大小为${size})` + ), + boxenOptions + ) + ); + } + }); + } + } + }; +} diff --git a/Yi.Pure.Vue3/build/optimize.ts b/Yi.Pure.Vue3/build/optimize.ts new file mode 100644 index 00000000..9beb4f0e --- /dev/null +++ b/Yi.Pure.Vue3/build/optimize.ts @@ -0,0 +1,63 @@ +/** + * 此文件作用于 `vite.config.ts` 的 `optimizeDeps.include` 依赖预构建配置项 + * 依赖预构建,`vite` 启动时会将下面 include 里的模块,编译成 esm 格式并缓存到 node_modules/.vite 文件夹,页面加载到对应模块时如果浏览器有缓存就读取浏览器缓存,如果没有会读取本地缓存并按需加载 + * 尤其当您禁用浏览器缓存时(这种情况只应该发生在调试阶段)必须将对应模块加入到 include里,否则会遇到开发环境切换页面卡顿的问题(vite 会认为它是一个新的依赖包会重新加载并强制刷新页面),因为它既无法使用浏览器缓存,又没有在本地 node_modules/.vite 里缓存 + * 温馨提示:如果您使用的第三方库是全局引入,也就是引入到 src/main.ts 文件里,就不需要再添加到 include 里了,因为 vite 会自动将它们缓存到 node_modules/.vite + */ +const include = [ + "qs", + "mitt", + "xlsx", + "dayjs", + "axios", + "pinia", + "typeit", + "swiper", + "qrcode", + "intro.js", + "vue-i18n", + "vxe-table", + "vue-types", + "js-cookie", + "vue-tippy", + "cropperjs", + "jsbarcode", + "pinyin-pro", + "sortablejs", + "swiper/vue", + "mint-filter", + "@vueuse/core", + "vue3-danmaku", + "v-contextmenu", + "vue-pdf-embed", + "wavesurfer.js", + "swiper/modules", + "china-area-data", + "vue-json-pretty", + "@logicflow/core", + "@pureadmin/utils", + "@wangeditor/editor", + "responsive-storage", + "plus-pro-components", + "@howdyjs/mouse-menu", + "@logicflow/extension", + "vue-virtual-scroller", + "@amap/amap-jsapi-loader", + "el-table-infinite-scroll", + "vue-waterfall-plugin-next", + "@infectoone/vue-ganttastic", + "@wangeditor/editor-for-vue", + "vuedraggable/src/vuedraggable" +]; + +/** + * 在预构建中强制排除的依赖项 + * 温馨提示:所有以 `@iconify-icons/` 开头引入的的本地图标模块,都应该加入到下面的 `exclude` 里,因为平台推荐的使用方式是哪里需要哪里引入而且都是单个的引入,不需要预构建,直接让浏览器加载就好 + */ +const exclude = [ + "@iconify-icons/ep", + "@iconify-icons/ri", + "@pureadmin/theme/dist/browser-utils" +]; + +export { include, exclude }; diff --git a/Yi.Pure.Vue3/build/plugins.ts b/Yi.Pure.Vue3/build/plugins.ts new file mode 100644 index 00000000..37c8278a --- /dev/null +++ b/Yi.Pure.Vue3/build/plugins.ts @@ -0,0 +1,76 @@ +import { cdn } from "./cdn"; +import vue from "@vitejs/plugin-vue"; +import { pathResolve } from "./utils"; +import { viteBuildInfo } from "./info"; +import svgLoader from "vite-svg-loader"; +import type { PluginOption } from "vite"; +import checker from "vite-plugin-checker"; +import vueJsx from "@vitejs/plugin-vue-jsx"; +import Inspector from "vite-plugin-vue-inspector"; +import { configCompressPlugin } from "./compress"; +import removeNoMatch from "vite-plugin-router-warn"; +import { visualizer } from "rollup-plugin-visualizer"; +import removeConsole from "vite-plugin-remove-console"; +import { themePreprocessorPlugin } from "@pureadmin/theme"; +import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite"; +import { genScssMultipleScopeVars } from "../src/layout/theme"; +import { vitePluginFakeServer } from "vite-plugin-fake-server"; + +export function getPluginsList( + VITE_CDN: boolean, + VITE_COMPRESSION: ViteCompression +): PluginOption[] { + const lifecycle = process.env.npm_lifecycle_event; + return [ + vue(), + // jsx、tsx语法支持 + vueJsx(), + VueI18nPlugin({ + jitCompilation: false, + include: [pathResolve("../locales/**")] + }), + checker({ + typescript: true, + vueTsc: true, + eslint: { + lintCommand: `eslint ${pathResolve("../{src,mock,build}/**/*.{vue,js,ts,tsx}")}`, + useFlatConfig: true + }, + terminal: false, + enableBuild: false + }), + // 按下Command(⌘)+Shift(⇧),然后点击页面元素会自动打开本地IDE并跳转到对应的代码位置 + Inspector(), + viteBuildInfo(), + /** + * 开发环境下移除非必要的vue-router动态路由警告No match found for location with path + * 非必要具体看 https://github.com/vuejs/router/issues/521 和 https://github.com/vuejs/router/issues/359 + * vite-plugin-router-warn只在开发环境下启用,只处理vue-router文件并且只在服务启动或重启时运行一次,性能消耗可忽略不计 + */ + removeNoMatch(), + // mock支持 + vitePluginFakeServer({ + logger: false, + include: "mock", + infixName: false, + enableProd: true + }), + // 自定义主题 + themePreprocessorPlugin({ + scss: { + multipleScopeVars: genScssMultipleScopeVars(), + extract: true + } + }), + // svg组件化支持 + svgLoader(), + VITE_CDN ? cdn : null, + configCompressPlugin(VITE_COMPRESSION), + // 线上环境删除console + removeConsole({ external: ["src/assets/iconfont/iconfont.js"] }), + // 打包分析 + lifecycle === "report" + ? visualizer({ open: true, brotliSize: true, filename: "report.html" }) + : (null as any) + ]; +} diff --git a/Yi.Pure.Vue3/build/utils.ts b/Yi.Pure.Vue3/build/utils.ts new file mode 100644 index 00000000..27dceb79 --- /dev/null +++ b/Yi.Pure.Vue3/build/utils.ts @@ -0,0 +1,114 @@ +import dayjs from "dayjs"; +import { readdir, stat } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, resolve } from "node:path"; +import { sum, formatBytes } from "@pureadmin/utils"; +import { + name, + version, + engines, + dependencies, + devDependencies +} from "../package.json"; + +/** 启动`node`进程时所在工作目录的绝对路径 */ +const root: string = process.cwd(); + +/** + * @description 根据可选的路径片段生成一个新的绝对路径 + * @param dir 路径片段,默认`build` + * @param metaUrl 模块的完整`url`,如果在`build`目录外调用必传`import.meta.url` + */ +const pathResolve = (dir = ".", metaUrl = import.meta.url) => { + // 当前文件目录的绝对路径 + const currentFileDir = dirname(fileURLToPath(metaUrl)); + // build 目录的绝对路径 + const buildDir = resolve(currentFileDir, "build"); + // 解析的绝对路径 + const resolvedPath = resolve(currentFileDir, dir); + // 检查解析的绝对路径是否在 build 目录内 + if (resolvedPath.startsWith(buildDir)) { + // 在 build 目录内,返回当前文件路径 + return fileURLToPath(metaUrl); + } + // 不在 build 目录内,返回解析后的绝对路径 + return resolvedPath; +}; + +/** 设置别名 */ +const alias: Record = { + "@": pathResolve("../src"), + "@build": pathResolve() +}; + +/** 平台的名称、版本、运行所需的`node`和`pnpm`版本、依赖、最后构建时间的类型提示 */ +const __APP_INFO__ = { + pkg: { name, version, engines, dependencies, devDependencies }, + lastBuildTime: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss") +}; + +/** 处理环境变量 */ +const wrapperEnv = (envConf: Recordable): ViteEnv => { + // 默认值 + const ret: ViteEnv = { + VITE_PORT: 8848, + VITE_PUBLIC_PATH: "", + VITE_ROUTER_HISTORY: "", + VITE_CDN: false, + VITE_HIDE_HOME: "false", + VITE_COMPRESSION: "none", + VITE_APP_BASE_API: "", + VITE_APP_BASE_URL: "", + VITE_APP_BASE_URL_WS: "", + VITE_APP_BASE_WS: "" + }; + + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = + realName === "true" ? true : realName === "false" ? false : realName; + + if (envName === "VITE_PORT") { + realName = Number(realName); + } + ret[envName] = realName; + if (typeof realName === "string") { + process.env[envName] = realName; + } else if (typeof realName === "object") { + process.env[envName] = JSON.stringify(realName); + } + } + return ret; +}; + +const fileListTotal: number[] = []; + +/** 获取指定文件夹中所有文件的总大小 */ +const getPackageSize = options => { + const { folder = "dist", callback, format = true } = options; + readdir(folder, (err, files: string[]) => { + if (err) throw err; + let count = 0; + const checkEnd = () => { + ++count == files.length && + callback(format ? formatBytes(sum(fileListTotal)) : sum(fileListTotal)); + }; + files.forEach((item: string) => { + stat(`${folder}/${item}`, async (err, stats) => { + if (err) throw err; + if (stats.isFile()) { + fileListTotal.push(stats.size); + checkEnd(); + } else if (stats.isDirectory()) { + getPackageSize({ + folder: `${folder}/${item}/`, + callback: checkEnd + }); + } + }); + }); + files.length === 0 && callback(0); + }); +}; + +export { root, pathResolve, alias, __APP_INFO__, wrapperEnv, getPackageSize }; diff --git a/Yi.Pure.Vue3/commitlint.config.js b/Yi.Pure.Vue3/commitlint.config.js new file mode 100644 index 00000000..eea755d0 --- /dev/null +++ b/Yi.Pure.Vue3/commitlint.config.js @@ -0,0 +1,35 @@ +// @ts-check + +/** @type {import("@commitlint/types").UserConfig} */ +export default { + ignores: [commit => commit.includes("init")], + extends: ["@commitlint/config-conventional"], + rules: { + "body-leading-blank": [2, "always"], + "footer-leading-blank": [1, "always"], + "header-max-length": [2, "always", 108], + "subject-empty": [2, "never"], + "type-empty": [2, "never"], + "type-enum": [ + 2, + "always", + [ + "feat", + "fix", + "perf", + "style", + "docs", + "test", + "refactor", + "build", + "ci", + "chore", + "revert", + "wip", + "workflow", + "types", + "release" + ] + ] + } +}; diff --git a/Yi.Pure.Vue3/eslint.config.js b/Yi.Pure.Vue3/eslint.config.js new file mode 100644 index 00000000..b4d48fbc --- /dev/null +++ b/Yi.Pure.Vue3/eslint.config.js @@ -0,0 +1,181 @@ +import js from "@eslint/js"; +import pluginVue from "eslint-plugin-vue"; +import * as parserVue from "vue-eslint-parser"; +import configPrettier from "eslint-config-prettier"; +import pluginPrettier from "eslint-plugin-prettier"; +import { defineFlatConfig } from "eslint-define-config"; +import * as parserTypeScript from "@typescript-eslint/parser"; +import pluginTypeScript from "@typescript-eslint/eslint-plugin"; + +export default defineFlatConfig([ + { + ...js.configs.recommended, + ignores: [ + "**/.*", + "dist/*", + "*.d.ts", + "public/*", + "src/assets/**", + "src/**/iconfont/**" + ], + languageOptions: { + globals: { + // index.d.ts + RefType: "readonly", + EmitType: "readonly", + TargetContext: "readonly", + ComponentRef: "readonly", + ElRef: "readonly", + ForDataType: "readonly", + AnyFunction: "readonly", + PropType: "readonly", + Writable: "readonly", + Nullable: "readonly", + NonNullable: "readonly", + Recordable: "readonly", + ReadonlyRecordable: "readonly", + Indexable: "readonly", + DeepPartial: "readonly", + Without: "readonly", + Exclusive: "readonly", + TimeoutHandle: "readonly", + IntervalHandle: "readonly", + Effect: "readonly", + ChangeEvent: "readonly", + WheelEvent: "readonly", + ImportMetaEnv: "readonly", + Fn: "readonly", + PromiseFn: "readonly", + ComponentElRef: "readonly", + parseInt: "readonly", + parseFloat: "readonly" + } + }, + plugins: { + prettier: pluginPrettier + }, + rules: { + ...configPrettier.rules, + ...pluginPrettier.configs.recommended.rules, + "no-debugger": "off", + "no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_" + } + ], + "prettier/prettier": [ + "error", + { + endOfLine: "auto" + } + ] + } + }, + { + files: ["**/*.?([cm])ts", "**/*.?([cm])tsx"], + languageOptions: { + parser: parserTypeScript, + parserOptions: { + sourceType: "module" + } + }, + plugins: { + "@typescript-eslint": pluginTypeScript + }, + rules: { + ...pluginTypeScript.configs.strict.rules, + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-redeclare": "error", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/prefer-as-const": "warn", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/consistent-type-imports": [ + "error", + { disallowTypeAnnotations: false, fixStyle: "inline-type-imports" } + ], + "@typescript-eslint/prefer-literal-enum-member": [ + "error", + { allowBitwiseExpressions: true } + ], + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_" + } + ] + } + }, + { + files: ["**/*.d.ts"], + rules: { + "eslint-comments/no-unlimited-disable": "off", + "import/no-duplicates": "off", + "unused-imports/no-unused-vars": "off" + } + }, + { + files: ["**/*.?([cm])js"], + rules: { + "@typescript-eslint/no-require-imports": "off", + "@typescript-eslint/no-var-requires": "off" + } + }, + { + files: ["**/*.vue"], + languageOptions: { + globals: { + $: "readonly", + $$: "readonly", + $computed: "readonly", + $customRef: "readonly", + $ref: "readonly", + $shallowRef: "readonly", + $toRef: "readonly" + }, + parser: parserVue, + parserOptions: { + ecmaFeatures: { + jsx: true + }, + extraFileExtensions: [".vue"], + parser: "@typescript-eslint/parser", + sourceType: "module" + } + }, + plugins: { + vue: pluginVue + }, + processor: pluginVue.processors[".vue"], + rules: { + ...pluginVue.configs.base.rules, + ...pluginVue.configs["vue3-essential"].rules, + ...pluginVue.configs["vue3-recommended"].rules, + "no-undef": "off", + "no-unused-vars": "off", + "vue/no-v-html": "off", + "vue/require-default-prop": "off", + "vue/require-explicit-emits": "off", + "vue/multi-word-component-names": "off", + "vue/no-setup-props-reactivity-loss": "off", + "vue/html-self-closing": [ + "error", + { + html: { + void: "always", + normal: "always", + component: "always" + }, + svg: "always", + math: "always" + } + ] + } + } +]); diff --git a/Yi.Pure.Vue3/index.html b/Yi.Pure.Vue3/index.html new file mode 100644 index 00000000..37868842 --- /dev/null +++ b/Yi.Pure.Vue3/index.html @@ -0,0 +1,87 @@ + + + + + + + + vue-pure-admin + + + + + +
+ +
+
+ + + diff --git a/Yi.Pure.Vue3/locales/en.yaml b/Yi.Pure.Vue3/locales/en.yaml new file mode 100644 index 00000000..aace64a0 --- /dev/null +++ b/Yi.Pure.Vue3/locales/en.yaml @@ -0,0 +1,237 @@ +buttons: + pureAccountSettings: Account + pureLoginOut: LoginOut + pureLogin: Login + pureOpenSystemSet: Open System Configs + pureReload: Reload + pureCloseCurrentTab: Close CurrentTab + pureCloseLeftTabs: Close LeftTabs + pureCloseRightTabs: Close RightTabs + pureCloseOtherTabs: Close OtherTabs + pureCloseAllTabs: Close AllTabs + pureContentFullScreen: Content FullScreen + pureContentExitFullScreen: Content ExitFullScreen + pureClickCollapse: Collapse + pureClickExpand: Expand + pureConfirm: Confirm + pureSwitch: Switch + pureClose: Close + pureBackTop: BackTop + pureOpenText: Open + pureCloseText: Close +search: + pureTotal: Total + pureHistory: History + pureCollect: Collect + pureDragSort: (Drag Sort) + pureEmpty: Empty + purePlaceholder: Search Menu +panel: + pureSystemSet: System Configs + pureCloseSystemSet: Close System Configs + pureClearCacheAndToLogin: Clear cache and return to login page + pureClearCache: Clear Cache + pureOverallStyle: Overall Style + pureOverallStyleLight: Light + pureOverallStyleLightTip: Set sail freshly and light up the comfortable work interface + pureOverallStyleDark: Dark + pureOverallStyleDarkTip: Moonlight Overture, indulge in the tranquility and elegance of the night + pureOverallStyleSystem: Auto + pureOverallStyleSystemTip: Synchronize time, the interface naturally responds to morning and dusk + pureThemeColor: Theme Color + pureLayoutModel: Layout Model + pureVerticalTip: The menu on the left is familiar and friendly + pureHorizontalTip: Top menu, concise overview + pureMixTip: Mixed menu, flexible + pureStretch: Stretch Page + pureStretchFixed: Fixed + pureStretchFixedTip: Compact pages make it easy to find the information you need + pureStretchCustom: Custom + pureStretchCustomTip: Minimum 1280, maximum 1600 + pureTagsStyle: Tags Style + pureTagsStyleSmart: Smart + pureTagsStyleSmartTip: Smart tags add fun and brilliance + pureTagsStyleCard: Card + pureTagsStyleCardTip: Card tags for efficient browsing + pureTagsStyleChrome: Chrome + pureTagsStyleChromeTip: Chrome style is classic and elegant + pureInterfaceDisplay: Interface Display + pureGreyModel: Grey Model + pureWeakModel: Weak Model + pureHiddenTags: Hidden Tags + pureHiddenFooter: Hidden Footer + pureMultiTagsCache: MultiTags Cache +menus: + pureHome: Home + pureLogin: Login + pureEmpty: Empty Page + pureTable: Table + pureSysManagement: System Manage + pureUser: User Manage + pureRole: Role Manage + pureSystemMenu: Menu Manage + pureDept: Dept Manage + purePost: Post Manage + pureSysMonitor: System Monitor + pureOnlineUser: Online User + pureLoginLog: Login Log + pureOperationLog: Operation Log + pureSystemLog: System Log + pureEditor: Editor + pureAbnormal: Abnormal Page + pureFourZeroFour: "404" + pureFourZeroOne: "403" + pureFive: "500" + pureComponents: Components + pureDialog: Dialog + pureMessage: Message Tips + pureVideo: Video + pureSegmented: Segmented + pureWaterfall: Waterfall + pureMap: Map + pureDraggable: Draggable + pureSplitPane: Split Pane + pureText: Text Ellipsis + pureElButton: Button + pureButton: Button Animation + pureCheckButton: Check Button + pureCropping: Picture Cropping + pureAnimatecss: AnimateCss Selector + pureCountTo: Digital Animation + pureSelector: Scope Selector + pureFlowChart: Flow Chart + pureSeamless: Seamless Scroll + pureContextmenu: Context Menu + pureTypeit: Typeit + pureJsonEditor: JSON Editor + pureColorPicker: Color Picker + pureDatePicker: Date Picker + pureDateTimePicker: DateTimePicker + pureTimePicker: TimePicker + pureTag: Tag + pureStatistic: Statistic + pureCollapse: Collapse + pureGanttastic: Gantt Chart + pureProgress: Progress + pureUpload: File Upload + pureCheckCard: CheckCard + pureMenus: MultiLevel Menu + pureMenu1: Menu1 + pureMenu1-1: Menu1-1 + pureMenu1-2: Menu1-2 + pureMenu1-2-1: Menu1-2-1 + pureMenu1-2-2: Menu1-2-2 + pureMenu1-3: Menu1-3 + pureMenu2: Menu2 + purePermission: Permission Manage + purePermissionPage: Page Permission + purePermissionButton: Button Permission + purePermissionButtonRouter: Route return button permission + purePermissionButtonLogin: Login interface return button permission + pureTabs: Tabs Operate + pureGuide: Guide + pureAble: Able + pureMenuTree: Menu Tree + pureVideoFrame: Video Frame Capture + pureWavesurfer: Audio Visualization + pureRipple: Ripple + pureMqtt: Mqtt Client + pureOptimize: Debounce、Throttle、Copy、Longpress Directives + pureVerify: Captcha + pureWatermark: Water Mark + purePrint: Print + pureDownload: Download + pureExternalPage: External Page + pureExternalDoc: Docs External + pureEmbeddedDoc: Docs Embedded + pureExternalLink: Vue-Pure-Admin + pureUtilsLink: Pure-Admin-Utils + pureColorHuntDoc: ColorHunt + pureUiGradients: UiGradients + pureEpDoc: Element-Plus + pureTailwindcssDoc: Tailwindcss + pureVueDoc: Vue3 + pureViteDoc: Vite + purePiniaDoc: Pinia + pureRouterDoc: Vue-Router + pureAbout: About + pureResult: Result Page + pureSuccess: Success Page + pureFail: Fail Page + pureIconSelect: Icon Select + pureTimeline: Time Line + pureLineTree: LineTree + pureList: List Page + pureCardList: Card List Page + pureDebounce: Debounce & Throttle + pureFormDesign: Form Design + pureBarcode: Barcode + pureQrcode: Qrcode + pureCascader: Area Cascader + pureSwiper: Swiper Plugin + pureVirtualList: Virtual List + purePdf: PDF Preview + pureExcel: Export Excel + pureInfiniteScroll: Table Infinite Scroll + pureSensitive: Sensitive Filter + purePinyin: PinYin + pureDanmaku: Danmaku + pureSchemaForm: Form + pureTableBase: Base Usage + pureTableHigh: High Usage + pureTableEdit: Edit Usage + pureVxeTable: Virtual Usage + pureBoard: Paint Board + pureMindMap: Mind Map + pureMenuOverflow: Menu Overflow Show Tooltip Text + pureChildMenuOverflow: Child Menu Overflow Show Tooltip Text +status: + pureLoad: Loading... + pureMessage: Message + pureNotify: Notify + pureTodo: Todo + pureNoMessage: No Message + pureNoNotify: No Notify + pureNoTodo: No Todo +login: + pureUsername: Username + purePassword: Password + pureVerifyCode: VerifyCode + pureRemember: days no need to login + pureRememberInfo: After checking and logging in, will automatically log in to the system without entering your username and password within the specified number of days. + pureSure: Sure Password + pureForget: Forget Password? + pureLogin: Login + pureThirdLogin: Third Login + purePhoneLogin: Phone Login + pureQRCodeLogin: QRCode Login + pureRegister: Register + pureWeChatLogin: WeChat Login + pureAlipayLogin: Alipay Login + pureQQLogin: QQ Login + pureWeiBoLogin: Weibo Login + purePhone: Phone + pureSmsVerifyCode: SMS VerifyCode + pureBack: Back + pureTest: Mock Test + pureTip: After scanning the code, click "Confirm" to complete the login + pureDefinite: Definite + pureLoginSuccess: Login Success + pureLoginFail: Login Fail + pureRegisterSuccess: Regist Success + pureTickPrivacy: Please tick Privacy Policy + pureReadAccept: I have read it carefully and accept + purePrivacyPolicy: Privacy Policy + pureGetVerifyCode: Get VerifyCode + pureInfo: Seconds + pureUsernameReg: Please enter username + purePassWordReg: Please enter password + pureVerifyCodeReg: Please enter verify code + pureVerifyCodeCorrectReg: Please enter correct verify code + pureVerifyCodeSixReg: Please enter a 6-digit verify code + purePhoneReg: Please enter the phone + purePhoneCorrectReg: Please enter the correct phone number format + purePassWordRuleReg: The password format should be any combination of 8-18 digits + purePassWordSureReg: Please enter confirm password + purePassWordDifferentReg: The two passwords do not match! + purePassWordUpdateReg: Password has been updated diff --git a/Yi.Pure.Vue3/locales/zh-CN.yaml b/Yi.Pure.Vue3/locales/zh-CN.yaml new file mode 100644 index 00000000..c25d8ff4 --- /dev/null +++ b/Yi.Pure.Vue3/locales/zh-CN.yaml @@ -0,0 +1,237 @@ +buttons: + pureAccountSettings: 账户设置 + pureLoginOut: 退出系统 + pureLogin: 登录 + pureOpenSystemSet: 打开系统配置 + pureReload: 重新加载 + pureCloseCurrentTab: 关闭当前标签页 + pureCloseLeftTabs: 关闭左侧标签页 + pureCloseRightTabs: 关闭右侧标签页 + pureCloseOtherTabs: 关闭其他标签页 + pureCloseAllTabs: 关闭全部标签页 + pureContentFullScreen: 内容区全屏 + pureContentExitFullScreen: 内容区退出全屏 + pureClickCollapse: 点击折叠 + pureClickExpand: 点击展开 + pureConfirm: 确认 + pureSwitch: 切换 + pureClose: 关闭 + pureBackTop: 回到顶部 + pureOpenText: 开 + pureCloseText: 关 +search: + pureTotal: 共 + pureHistory: 搜索历史 + pureCollect: 收藏 + pureDragSort: (可拖拽排序) + pureEmpty: 暂无搜索结果 + purePlaceholder: 搜索菜单(支持拼音搜索) +panel: + pureSystemSet: 系统配置 + pureCloseSystemSet: 关闭配置 + pureClearCacheAndToLogin: 清空缓存并返回登录页 + pureClearCache: 清空缓存 + pureOverallStyle: 整体风格 + pureOverallStyleLight: 浅色 + pureOverallStyleLightTip: 清新启航,点亮舒适的工作界面 + pureOverallStyleDark: 深色 + pureOverallStyleDarkTip: 月光序曲,沉醉于夜的静谧雅致 + pureOverallStyleSystem: 自动 + pureOverallStyleSystemTip: 同步时光,界面随晨昏自然呼应 + pureThemeColor: 主题色 + pureLayoutModel: 导航模式 + pureVerticalTip: 左侧菜单,亲切熟悉 + pureHorizontalTip: 顶部菜单,简洁概览 + pureMixTip: 混合菜单,灵活多变 + pureStretch: 页宽 + pureStretchFixed: 固定 + pureStretchFixedTip: 紧凑页面,轻松找到所需信息 + pureStretchCustom: 自定义 + pureStretchCustomTip: 最小1280、最大1600 + pureTagsStyle: 页签风格 + pureTagsStyleSmart: 灵动 + pureTagsStyleSmartTip: 灵动标签,添趣生辉 + pureTagsStyleCard: 卡片 + pureTagsStyleCardTip: 卡片标签,高效浏览 + pureTagsStyleChrome: 谷歌 + pureTagsStyleChromeTip: 谷歌风格,经典美观 + pureInterfaceDisplay: 界面显示 + pureGreyModel: 灰色模式 + pureWeakModel: 色弱模式 + pureHiddenTags: 隐藏标签页 + pureHiddenFooter: 隐藏页脚 + pureMultiTagsCache: 页签持久化 +menus: + pureHome: 首页 + pureLogin: 登录 + pureEmpty: 无Layout页 + pureTable: 表格 + pureSysManagement: 系统管理 + pureUser: 用户管理 + pureRole: 角色管理 + pureSystemMenu: 菜单管理 + pureDept: 部门管理 + purePost: 岗位管理 + pureSysMonitor: 系统监控 + pureOnlineUser: 在线用户 + pureLoginLog: 登录日志 + pureOperationLog: 操作日志 + pureSystemLog: 系统日志 + pureEditor: 编辑器 + pureAbnormal: 异常页面 + pureFourZeroFour: "404" + pureFourZeroOne: "403" + pureFive: "500" + pureComponents: 组件 + pureDialog: 函数式弹框 + pureMessage: 消息提示 + pureVideo: 视频 + pureSegmented: 分段控制器 + pureWaterfall: 瀑布流无限滚动 + pureMap: 地图 + pureDraggable: 拖拽 + pureSplitPane: 切割面板 + pureText: 文本省略 + pureElButton: 按钮 + pureCheckButton: 可选按钮 + pureButton: 按钮动效 + pureCropping: 图片裁剪 + pureAnimatecss: animate.css选择器 + pureCountTo: 数字动画 + pureSelector: 范围选择器 + pureFlowChart: 流程图 + pureSeamless: 无缝滚动 + pureContextmenu: 右键菜单 + pureTypeit: 打字机 + pureJsonEditor: JSON编辑器 + pureColorPicker: 颜色选择器 + pureDatePicker: 日期选择器 + pureDateTimePicker: 日期时间选择器 + pureTimePicker: 时间选择器 + pureTag: 标签 + pureStatistic: 统计组件 + pureCollapse: 折叠面板 + pureGanttastic: 甘特图 + pureProgress: 进度条 + pureUpload: 文件上传 + pureCheckCard: 多选卡片 + pureMenus: 多级菜单 + pureMenu1: 菜单1 + pureMenu1-1: 菜单1-1 + pureMenu1-2: 菜单1-2 + pureMenu1-2-1: 菜单1-2-1 + pureMenu1-2-2: 菜单1-2-2 + pureMenu1-3: 菜单1-3 + pureMenu2: 菜单二 + purePermission: 权限管理 + purePermissionPage: 页面权限 + purePermissionButton: 按钮权限 + purePermissionButtonRouter: 路由返回按钮权限 + purePermissionButtonLogin: 登录接口返回按钮权限 + pureTabs: 标签页操作 + pureGuide: 引导页 + pureAble: 功能 + pureMenuTree: 菜单树结构 + pureVideoFrame: 视频帧截取-wasm版 + pureWavesurfer: 音频可视化 + pureRipple: 波纹(Ripple) + pureMqtt: MQTT客户端(mqtt) + pureOptimize: 防抖、截流、复制、长按指令 + pureVerify: 图形验证码 + pureWatermark: 水印 + purePrint: 打印 + pureDownload: 下载 + pureExternalPage: 外部页面 + pureExternalDoc: 文档外链 + pureEmbeddedDoc: 文档内嵌 + pureExternalLink: vue-pure-admin + pureUtilsLink: pure-admin-utils + pureColorHuntDoc: 调色板 + pureUiGradients: 渐变色 + pureEpDoc: element-plus + pureTailwindcssDoc: tailwindcss + pureVueDoc: vue3 + pureViteDoc: vite + purePiniaDoc: pinia + pureRouterDoc: vue-router + pureAbout: 关于 + pureResult: 结果页面 + pureSuccess: 成功页面 + pureFail: 失败页面 + pureIconSelect: 图标选择器 + pureTimeline: 时间线 + pureLineTree: 树形连接线 + pureList: 列表页面 + pureCardList: 卡片列表页 + pureDebounce: 防抖节流 + pureFormDesign: 表单设计器 + pureBarcode: 条形码 + pureQrcode: 二维码 + pureCascader: 区域级联选择器 + pureSwiper: Swiper插件 + pureVirtualList: 虚拟列表 + purePdf: PDF预览 + pureExcel: 导出Excel + pureInfiniteScroll: 表格无限滚动 + pureSensitive: 敏感词过滤 + purePinyin: 汉语拼音 + pureDanmaku: 弹幕 + pureSchemaForm: 表单 + pureTableBase: 基础用法 + pureTableHigh: 高级用法 + pureTableEdit: 可编辑用法 + pureVxeTable: 虚拟滚动 + pureBoard: 艺术画板 + pureMindMap: 思维导图 + pureMenuOverflow: 目录超出显示 Tooltip 文字提示 + pureChildMenuOverflow: 菜单超出显示 Tooltip 文字提示 +status: + pureLoad: 加载中... + pureMessage: 消息 + pureNotify: 通知 + pureTodo: 待办 + pureNoMessage: 暂无消息 + pureNoNotify: 暂无通知 + pureNoTodo: 暂无待办 +login: + pureUsername: 账号 + purePassword: 密码 + pureVerifyCode: 验证码 + pureRemember: 天内免登录 + pureRememberInfo: 勾选并登录后,规定天数内无需输入用户名和密码会自动登入系统 + pureSure: 确认密码 + pureForget: 忘记密码? + pureLogin: 登录 + pureThirdLogin: 第三方登录 + purePhoneLogin: 手机登录 + pureQRCodeLogin: 二维码登录 + pureRegister: 注册 + pureWeChatLogin: 微信登录 + pureAlipayLogin: 支付宝登录 + pureQQLogin: QQ登录 + pureWeiBoLogin: 微博登录 + purePhone: 手机号码 + pureSmsVerifyCode: 短信验证码 + pureBack: 返回 + pureTest: 模拟测试 + pureTip: 扫码后点击"确认",即可完成登录 + pureDefinite: 确定 + pureLoginSuccess: 登录成功 + pureLoginFail: 登录失败 + pureRegisterSuccess: 注册成功 + pureTickPrivacy: 请勾选隐私政策 + pureReadAccept: 我已仔细阅读并接受 + purePrivacyPolicy: 《隐私政策》 + pureGetVerifyCode: 获取验证码 + pureInfo: 秒后重新获取 + pureUsernameReg: 请输入账号 + purePassWordReg: 请输入密码 + pureVerifyCodeReg: 请输入验证码 + pureVerifyCodeCorrectReg: 请输入正确的验证码 + pureVerifyCodeSixReg: 请输入6位数字验证码 + purePhoneReg: 请输入手机号码 + purePhoneCorrectReg: 请输入正确的手机号码格式 + purePassWordRuleReg: 密码格式应为8-18位数字、字母、符号的任意两种组合 + purePassWordSureReg: 请输入确认密码 + purePassWordDifferentReg: 两次密码不一致! + purePassWordUpdateReg: 修改密码成功 diff --git a/Yi.Pure.Vue3/mock/asyncRoutes.ts b/Yi.Pure.Vue3/mock/asyncRoutes.ts new file mode 100644 index 00000000..4fffebed --- /dev/null +++ b/Yi.Pure.Vue3/mock/asyncRoutes.ts @@ -0,0 +1,346 @@ +// 模拟后端动态生成路由 +import { defineFakeRoute } from "vite-plugin-fake-server/client"; +import { system, monitor } from "@/router/enums"; + +/** + * roles:页面级别权限,这里模拟二种 "admin"、"common" + * admin:管理员角色 + * common:普通角色 + */ + +const systemManagementRouter = { + path: "/system", + meta: { + icon: "ri:settings-3-line", + title: "menus.pureSysManagement", + rank: system + }, + children: [ + { + path: "/system/user/index", + name: "SystemUser", + meta: { + icon: "ri:admin-line", + title: "menus.pureUser" + //roles: ["admin"] + } + }, + { + path: "/system/role/index", + name: "SystemRole", + meta: { + icon: "ri:admin-fill", + title: "menus.pureRole" + //roles: ["admin"] + } + }, + { + path: "/system/menu/index", + name: "SystemMenu", + meta: { + icon: "ep:menu", + title: "menus.pureSystemMenu" + //roles: ["admin"] + } + }, + { + path: "/system/dept/index", + name: "SystemDept", + meta: { + icon: "ri:git-branch-line", + title: "menus.pureDept" + //roles: ["admin"] + } + }, + { + path: "/system/post/index", + name: "SystemPost", + meta: { + icon: "ant-design:deployment-unit-outlined", + title: "menus.purePost" + //roles: ["admin"] + } + } + ] +}; + +const systemMonitorRouter = { + path: "/monitor", + meta: { + icon: "ep:monitor", + title: "menus.pureSysMonitor", + rank: monitor + }, + children: [ + { + path: "/monitor/online-user", + component: "monitor/online/index", + name: "OnlineUser", + meta: { + icon: "ri:user-voice-line", + title: "menus.pureOnlineUser" + //roles: ["admin"] + } + }, + { + path: "/monitor/login-logs", + component: "monitor/logs/login/index", + name: "LoginLog", + meta: { + icon: "ri:window-line", + title: "menus.pureLoginLog" + //roles: ["admin"] + } + }, + { + path: "/monitor/operation-logs", + component: "monitor/logs/operation/index", + name: "OperationLog", + meta: { + icon: "ri:history-fill", + title: "menus.pureOperationLog" + //roles: ["admin"] + } + } + // { + // path: "/monitor/system-logs", + // component: "monitor/logs/system/index", + // name: "SystemLog", + // meta: { + // icon: "ri:file-search-line", + // title: "menus.pureSystemLog", + // //roles: ["admin"] + // } + // } + ] +}; +// +// const permissionRouter = { +// path: "/permission", +// meta: { +// title: "menus.purePermission", +// icon: "ep:lollipop", +// rank: permission +// }, +// children: [ +// { +// path: "/permission/page/index", +// name: "PermissionPage", +// meta: { +// title: "menus.purePermissionPage" +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/permission/button", +// meta: { +// title: "menus.purePermissionButton" +// //roles: ["admin", "common"] +// }, +// children: [ +// { +// path: "/permission/button/router", +// component: "permission/button/index", +// name: "PermissionButtonRouter", +// meta: { +// title: "menus.purePermissionButtonRouter", +// auths: [ +// "permission:btn:add", +// "permission:btn:edit", +// "permission:btn:delete" +// ] +// } +// }, +// { +// path: "/permission/button/login", +// component: "permission/button/perms", +// name: "PermissionButtonLogin", +// meta: { +// title: "menus.purePermissionButtonLogin" +// } +// } +// ] +// } +// ] +// }; +// +// const frameRouter = { +// path: "/iframe", +// meta: { +// icon: "ri:links-fill", +// title: "menus.pureExternalPage", +// rank: frame +// }, +// children: [ +// { +// path: "/iframe/embedded", +// meta: { +// title: "menus.pureEmbeddedDoc" +// }, +// children: [ +// { +// path: "/iframe/colorhunt", +// name: "FrameColorHunt", +// meta: { +// title: "menus.pureColorHuntDoc", +// frameSrc: "https://colorhunt.co/", +// keepAlive: true +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/iframe/uigradients", +// name: "FrameUiGradients", +// meta: { +// title: "menus.pureUiGradients", +// frameSrc: "https://uigradients.com/", +// keepAlive: true +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/iframe/ep", +// name: "FrameEp", +// meta: { +// title: "menus.pureEpDoc", +// frameSrc: "https://element-plus.org/zh-CN/", +// keepAlive: true +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/iframe/tailwindcss", +// name: "FrameTailwindcss", +// meta: { +// title: "menus.pureTailwindcssDoc", +// frameSrc: "https://tailwindcss.com/docs/installation", +// keepAlive: true +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/iframe/vue3", +// name: "FrameVue", +// meta: { +// title: "menus.pureVueDoc", +// frameSrc: "https://cn.vuejs.org/", +// keepAlive: true +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/iframe/vite", +// name: "FrameVite", +// meta: { +// title: "menus.pureViteDoc", +// frameSrc: "https://cn.vitejs.dev/", +// keepAlive: true +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/iframe/pinia", +// name: "FramePinia", +// meta: { +// title: "menus.purePiniaDoc", +// frameSrc: "https://pinia.vuejs.org/zh/index.html", +// keepAlive: true +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/iframe/vue-router", +// name: "FrameRouter", +// meta: { +// title: "menus.pureRouterDoc", +// frameSrc: "https://router.vuejs.org/zh/", +// keepAlive: true +// //roles: ["admin", "common"] +// } +// } +// ] +// }, +// { +// path: "/iframe/external", +// meta: { +// title: "menus.pureExternalDoc" +// }, +// children: [ +// { +// path: "/external", +// name: "https://pure-admin.github.io/pure-admin-doc", +// meta: { +// title: "menus.pureExternalLink" +// //roles: ["admin", "common"] +// } +// }, +// { +// path: "/pureUtilsLink", +// name: "https://pure-admin-utils.netlify.app/", +// meta: { +// title: "menus.pureUtilsLink" +// //roles: ["admin", "common"] +// } +// } +// ] +// } +// ] +// }; +// +// const tabsRouter = { +// path: "/tabs", +// meta: { +// icon: "ri:bookmark-2-line", +// title: "menus.pureTabs", +// rank: tabs +// }, +// children: [ +// { +// path: "/tabs/index", +// name: "Tabs", +// meta: { +// title: "menus.pureTabs" +// //roles: ["admin", "common"] +// } +// }, +// // query 传参模式 +// { +// path: "/tabs/query-detail", +// name: "TabQueryDetail", +// meta: { +// // 不在menu菜单中显示 +// showLink: false, +// activePath: "/tabs/index" +// //roles: ["admin", "common"] +// } +// }, +// // params 传参模式 +// { +// path: "/tabs/params-detail/:id", +// component: "params-detail", +// name: "TabParamsDetail", +// meta: { +// // 不在menu菜单中显示 +// showLink: false, +// activePath: "/tabs/index" +// //roles: ["admin", "common"] +// } +// } +// ] +// }; + +export default defineFakeRoute([ + { + url: `/dev-api/get-async-routes`, + method: "get", + response: () => { + return [ + systemManagementRouter, + systemMonitorRouter + //permissionRouter, + // frameRouter, + // tabsRouter + ]; + } + } +]); diff --git a/Yi.Pure.Vue3/mock/list.ts b/Yi.Pure.Vue3/mock/list.ts new file mode 100644 index 00000000..2212b4ea --- /dev/null +++ b/Yi.Pure.Vue3/mock/list.ts @@ -0,0 +1,455 @@ +import { defineFakeRoute } from "vite-plugin-fake-server/client"; + +export default defineFakeRoute([ + { + url: "/get-card-list", + method: "post", + response: () => { + return { + success: true, + data: { + list: [ + { + index: 1, + isSetup: true, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "SSL证书", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 2, + isSetup: false, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "人脸识别", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 3, + isSetup: false, + type: 5, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "CVM", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 4, + isSetup: false, + type: 2, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "SSL证书", + description: + "云数据库MySQL为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。" + }, + { + index: 5, + isSetup: true, + type: 3, + banner: + "https://tdesign.gtimg.com/tdesign-pro/face-recognition.jpg", + name: "SSL证书", + description: + "云数据库MySQL为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。" + }, + { + index: 6, + isSetup: true, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "T-Sec 云防火墙", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 7, + isSetup: false, + type: 1, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "CVM", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 8, + isSetup: true, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "SSL证书", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 9, + isSetup: false, + type: 1, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "SSL证书", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 10, + isSetup: true, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "CVM", + description: + "云数据库MySQL为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。" + }, + { + index: 11, + isSetup: true, + type: 5, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "云数据库", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 12, + isSetup: true, + type: 2, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "SSL证书", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 13, + isSetup: true, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-db.jpg", + name: "云数据库", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 14, + isSetup: false, + type: 5, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "SSL证书", + description: + "基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、五官定位、人脸搜索、人脸比对、人脸" + }, + { + index: 15, + isSetup: true, + type: 2, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "云数据库", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 16, + isSetup: false, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "CVM", + description: + "基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、五官定位、人脸搜索、人脸比对、人脸" + }, + { + index: 17, + isSetup: false, + type: 5, + banner: + "https://tdesign.gtimg.com/tdesign-pro/face-recognition.jpg", + name: "云数据库", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 18, + isSetup: false, + type: 4, + banner: + "https://tdesign.gtimg.com/tdesign-pro/face-recognition.jpg", + name: "云数据库", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 19, + isSetup: true, + type: 2, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "CVM", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 20, + isSetup: true, + type: 4, + banner: + "https://tdesign.gtimg.com/tdesign-pro/face-recognition.jpg", + name: "SSL证书", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 21, + isSetup: false, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "云数据库", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 22, + isSetup: false, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-db.jpg", + name: "CVM", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 23, + isSetup: true, + type: 1, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "人脸识别", + description: + "基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、五官定位、人脸搜索、人脸比对、人脸" + }, + { + index: 24, + isSetup: true, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "人脸识别", + description: + "基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、五官定位、人脸搜索、人脸比对、人脸" + }, + { + index: 25, + isSetup: false, + type: 5, + banner: + "https://tdesign.gtimg.com/tdesign-pro/face-recognition.jpg", + name: "CVM", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 26, + isSetup: true, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "SSL证书", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 27, + isSetup: true, + type: 5, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "CVM", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 28, + isSetup: false, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "云数据库", + description: + "基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、五官定位、人脸搜索、人脸比对、人脸" + }, + { + index: 29, + isSetup: false, + type: 5, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-db.jpg", + name: "CVM", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 30, + isSetup: true, + type: 1, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "CVM", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 31, + isSetup: true, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "CVM", + description: + "基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、五官定位、人脸搜索、人脸比对、人脸" + }, + { + index: 32, + isSetup: false, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "T-Sec 云防火墙", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 33, + isSetup: true, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "CVM", + description: + "云数据库MySQL为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。" + }, + { + index: 34, + isSetup: false, + type: 2, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "SSL证书", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 35, + isSetup: false, + type: 1, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "云数据库", + description: + "基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、五官定位、人脸搜索、人脸比对、人脸" + }, + { + index: 36, + isSetup: false, + type: 4, + banner: + "https://tdesign.gtimg.com/tdesign-pro/face-recognition.jpg", + name: "SSL证书", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 37, + isSetup: true, + type: 5, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "CVM", + description: + "云数据库MySQL为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。" + }, + { + index: 38, + isSetup: false, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "云数据库", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 39, + isSetup: false, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "人脸识别", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 40, + isSetup: true, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "CVM", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 41, + isSetup: true, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "T-Sec 云防火墙", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 42, + isSetup: true, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "T-Sec 云防火墙", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 43, + isSetup: false, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-db.jpg", + name: "SSL证书", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 44, + isSetup: true, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/t-sec.jpg", + name: "SSL证书", + description: + "云硬盘为您提供用于CVM的持久性数据块级存储服务。云硬盘中的数据自动地可用区内以多副本冗" + }, + { + index: 45, + isSetup: false, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "T-Sec 云防火墙", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 46, + isSetup: true, + type: 2, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "SSL证书", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + }, + { + index: 47, + isSetup: false, + type: 4, + banner: "https://tdesign.gtimg.com/tdesign-pro/cloud-server.jpg", + name: "SSL证书", + description: + "腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的SaaS化防火墙产品,无需客无需客无需客无需客无需客无需客无需客" + }, + { + index: 48, + isSetup: false, + type: 3, + banner: "https://tdesign.gtimg.com/tdesign-pro/ssl.jpg", + name: "T-Sec 云防火墙", + description: + "SSL证书又叫服务器证书,腾讯云为您提供证书的一站式服务,包括免费、付费证书的申请、管理及部" + } + ] + } + }; + } + } +]); diff --git a/Yi.Pure.Vue3/mock/login.ts b/Yi.Pure.Vue3/mock/login.ts new file mode 100644 index 00000000..55897d8f --- /dev/null +++ b/Yi.Pure.Vue3/mock/login.ts @@ -0,0 +1,42 @@ +// 根据角色动态生成路由 +import { defineFakeRoute } from "vite-plugin-fake-server/client"; + +export default defineFakeRoute([ + { + url: "/login", + method: "post", + response: ({ body }) => { + if (body.username === "admin") { + return { + success: true, + data: { + avatar: "https://avatars.githubusercontent.com/u/44761321", + username: "admin", + nickname: "小铭", + // 一个用户可能有多个角色 + roles: ["admin"], + // 按钮级别权限 + permissions: ["*:*:*"], + accessToken: "eyJhbGciOiJIUzUxMiJ9.admin", + refreshToken: "eyJhbGciOiJIUzUxMiJ9.adminRefresh", + expires: "2030/10/30 00:00:00" + } + }; + } else { + return { + success: true, + data: { + avatar: "https://avatars.githubusercontent.com/u/52823142", + username: "common", + nickname: "小林", + roles: ["common"], + permissions: ["permission:btn:add", "permission:btn:edit"], + accessToken: "eyJhbGciOiJIUzUxMiJ9.common", + refreshToken: "eyJhbGciOiJIUzUxMiJ9.commonRefresh", + expires: "2030/10/30 00:00:00" + } + }; + } + } + } +]); diff --git a/Yi.Pure.Vue3/mock/map.ts b/Yi.Pure.Vue3/mock/map.ts new file mode 100644 index 00000000..e8bf3c16 --- /dev/null +++ b/Yi.Pure.Vue3/mock/map.ts @@ -0,0 +1,41 @@ +import { defineFakeRoute } from "vite-plugin-fake-server/client"; +import { faker } from "@faker-js/faker/locale/zh_CN"; + +type mapType = { + plateNumber: string; + driver: string; + orientation: number; + lng: number; + lat: number; +}; + +const mapList = (): Array => { + const result: Array = []; + for (let index = 0; index < 200; index++) { + result.push({ + plateNumber: `豫A${faker.string.numeric({ + length: 5 + })}${faker.string.alphanumeric({ + casing: "upper" + })}`, + driver: faker.person.firstName(), + orientation: faker.number.int({ min: 1, max: 360 }), + lng: faker.location.latitude({ max: 114.1, min: 113 }), + lat: faker.location.latitude({ max: 35.1, min: 34 }) + }); + } + return result; +}; + +export default defineFakeRoute([ + { + url: "/get-map-info", + method: "get", + response: () => { + return { + success: true, + data: mapList() + }; + } + } +]); diff --git a/Yi.Pure.Vue3/mock/mine.ts b/Yi.Pure.Vue3/mock/mine.ts new file mode 100644 index 00000000..0f896613 --- /dev/null +++ b/Yi.Pure.Vue3/mock/mine.ts @@ -0,0 +1,59 @@ +import { defineFakeRoute } from "vite-plugin-fake-server/client"; +import { faker } from "@faker-js/faker/locale/zh_CN"; + +export default defineFakeRoute([ + // 账户设置-个人信息 + { + url: "/mine", + method: "get", + response: () => { + return { + success: true, + data: { + avatar: "https://avatars.githubusercontent.com/u/44761321", + username: "admin", + nickname: "小铭", + email: "pureadmin@163.com", + phone: "15888886789", + description: "一个热爱开源的前端工程师" + } + }; + } + }, + // 账户设置-个人安全日志 + { + url: "/mine-logs", + method: "get", + response: () => { + let list = [ + { + id: 1, + ip: faker.internet.ipv4(), + address: "中国河南省信阳市", + system: "macOS", + browser: "Chrome", + summary: "账户登录", // 详情 + operatingTime: new Date() // 时间 + }, + { + id: 2, + ip: faker.internet.ipv4(), + address: "中国广东省深圳市", + system: "Windows", + browser: "Firefox", + summary: "绑定了手机号码", + operatingTime: new Date().setDate(new Date().getDate() - 1) + } + ]; + return { + success: true, + data: { + list, + total: list.length, // 总条目数 + pageSize: 10, // 每页显示条目个数 + currentPage: 1 // 当前页数 + } + }; + } + } +]); diff --git a/Yi.Pure.Vue3/mock/refreshToken.ts b/Yi.Pure.Vue3/mock/refreshToken.ts new file mode 100644 index 00000000..34d0e876 --- /dev/null +++ b/Yi.Pure.Vue3/mock/refreshToken.ts @@ -0,0 +1,27 @@ +import { defineFakeRoute } from "vite-plugin-fake-server/client"; + +// 模拟刷新token接口 +export default defineFakeRoute([ + { + url: "/refresh-token", + method: "post", + response: ({ body }) => { + if (body.refreshToken) { + return { + success: true, + data: { + accessToken: "eyJhbGciOiJIUzUxMiJ9.newAdmin", + refreshToken: "eyJhbGciOiJIUzUxMiJ9.newAdminRefresh", + // `expires`选择这种日期格式是为了方便调试,后端直接设置时间戳或许更方便(每次都应该递增)。如果后端返回的是时间戳格式,前端开发请来到这个目录`src/utils/auth.ts`,把第`38`行的代码换成expires = data.expires即可。 + expires: "2030/10/30 23:59:59" + } + }; + } else { + return { + success: false, + data: {} + }; + } + } + } +]); diff --git a/Yi.Pure.Vue3/mock/system.ts b/Yi.Pure.Vue3/mock/system.ts new file mode 100644 index 00000000..5c9172cd --- /dev/null +++ b/Yi.Pure.Vue3/mock/system.ts @@ -0,0 +1,1799 @@ +import { defineFakeRoute } from "vite-plugin-fake-server/client"; +import { faker } from "@faker-js/faker/locale/zh_CN"; + +export default defineFakeRoute([ + // 用户管理 + { + url: "/user", + method: "post", + response: ({ body }) => { + let list = [ + { + avatar: "https://avatars.githubusercontent.com/u/44761321", + username: "admin", + nickname: "小铭", + phone: "15888886789", + email: faker.internet.email(), + sex: 0, + id: 1, + status: 1, + dept: { + // 部门id + id: 103, + // 部门名称 + name: "研发部门" + }, + remark: "管理员", + createTime: 1605456000000 + }, + { + avatar: "https://avatars.githubusercontent.com/u/52823142", + username: "common", + nickname: "小林", + phone: "18288882345", + email: faker.internet.email(), + sex: 1, + id: 2, + status: 1, + dept: { + id: 105, + name: "测试部门" + }, + remark: "普通用户", + createTime: 1605456000000 + } + ]; + list = list.filter(item => item.username.includes(body?.username)); + list = list.filter(item => + String(item.status).includes(String(body?.status)) + ); + if (body.phone) list = list.filter(item => item.phone === body.phone); + if (body.deptId) list = list.filter(item => item.dept.id === body.deptId); + return { + success: true, + data: { + list, + total: list.length, // 总条目数 + pageSize: 10, // 每页显示条目个数 + currentPage: 1 // 当前页数 + } + }; + } + }, + // 用户管理-获取所有角色列表 + { + url: "/list-all-role", + method: "get", + response: () => { + return { + success: true, + data: [ + { id: 1, name: "超级管理员" }, + { id: 2, name: "普通角色" } + ] + }; + } + }, + // 用户管理-根据 userId 获取对应角色 id 列表(userId:用户id) + { + url: "/list-role-ids", + method: "post", + response: ({ body }) => { + if (body.userId) { + if (body.userId == 1) { + return { + success: true, + data: [1] + }; + } else if (body.userId == 2) { + return { + success: true, + data: [2] + }; + } + } else { + return { + success: false, + data: [] + }; + } + } + }, + // 角色管理 + { + url: "/role", + method: "post", + response: ({ body }) => { + let list = [ + { + createTime: 1605456000000, // 时间戳(毫秒ms) + updateTime: 1684512000000, + id: 1, + name: "超级管理员", + code: "admin", + status: 1, // 状态 1 启用 0 停用 + remark: "超级管理员拥有最高权限" + }, + { + createTime: 1605456000000, + updateTime: 1684512000000, + id: 2, + name: "普通角色", + code: "common", + status: 1, + remark: "普通角色拥有部分权限" + } + ]; + list = list.filter(item => item.name.includes(body?.name)); + list = list.filter(item => + String(item.status).includes(String(body?.status)) + ); + if (body.code) list = list.filter(item => item.code === body.code); + return { + success: true, + data: { + list, + total: list.length, // 总条目数 + pageSize: 10, // 每页显示条目个数 + currentPage: 1 // 当前页数 + } + }; + } + }, + // 角色管理-权限-菜单权限 + { + url: "/role-menu", + method: "post", + response: () => { + return { + success: true, + data: [ + // 外部页面 + { + parentId: 0, + id: 100, + menuType: 0, // 菜单类型(0代表菜单、1代表iframe、2代表外链、3代表按钮) + title: "menus.pureExternalPage" + }, + { + parentId: 100, + id: 101, + menuType: 0, + title: "menus.pureExternalDoc" + }, + { + parentId: 101, + id: 102, + menuType: 2, + title: "menus.pureExternalLink" + }, + { + parentId: 101, + id: 103, + menuType: 2, + title: "menus.pureUtilsLink" + }, + { + parentId: 100, + id: 104, + menuType: 1, + title: "menus.pureEmbeddedDoc" + }, + { + parentId: 104, + id: 105, + menuType: 1, + title: "menus.pureEpDoc" + }, + { + parentId: 104, + id: 106, + menuType: 1, + title: "menus.pureTailwindcssDoc" + }, + { + parentId: 104, + id: 107, + menuType: 1, + title: "menus.pureVueDoc" + }, + { + parentId: 104, + id: 108, + menuType: 1, + title: "menus.pureViteDoc" + }, + { + parentId: 104, + id: 109, + menuType: 1, + title: "menus.purePiniaDoc" + }, + { + parentId: 104, + id: 110, + menuType: 1, + title: "menus.pureRouterDoc" + }, + // 权限管理 + { + parentId: 0, + id: 200, + menuType: 0, + title: "menus.purePermission" + }, + { + parentId: 200, + id: 201, + menuType: 0, + title: "menus.purePermissionPage" + }, + { + parentId: 200, + id: 202, + menuType: 0, + title: "menus.purePermissionButton" + }, + { + parentId: 202, + id: 203, + menuType: 3, + title: "添加" + }, + { + parentId: 202, + id: 204, + menuType: 3, + title: "修改" + }, + { + parentId: 202, + id: 205, + menuType: 3, + title: "删除" + }, + // 系统管理 + { + parentId: 0, + id: 300, + menuType: 0, + title: "menus.pureSysManagement" + }, + { + parentId: 300, + id: 301, + menuType: 0, + title: "menus.pureUser" + }, + { + parentId: 300, + id: 302, + menuType: 0, + title: "menus.pureRole" + }, + { + parentId: 300, + id: 303, + menuType: 0, + title: "menus.pureSystemMenu" + }, + { + parentId: 300, + id: 304, + menuType: 0, + title: "menus.pureDept" + }, + // 系统监控 + { + parentId: 0, + id: 400, + menuType: 0, + title: "menus.pureSysMonitor" + }, + { + parentId: 400, + id: 401, + menuType: 0, + title: "menus.pureOnlineUser" + }, + { + parentId: 400, + id: 402, + menuType: 0, + title: "menus.pureLoginLog" + }, + { + parentId: 400, + id: 403, + menuType: 0, + title: "menus.pureOperationLog" + }, + { + parentId: 400, + id: 404, + menuType: 0, + title: "menus.pureSystemLog" + }, + // 标签页操作 + { + parentId: 0, + id: 500, + menuType: 0, + title: "menus.pureTabs" + }, + { + parentId: 500, + id: 501, + menuType: 0, + title: "menus.pureTabs" + }, + { + parentId: 500, + id: 502, + menuType: 0, + title: "query传参模式" + }, + { + parentId: 500, + id: 503, + menuType: 0, + title: "params传参模式" + } + ] + }; + } + }, + // 角色管理-权限-菜单权限-根据角色 id 查对应菜单 + { + url: "/role-menu-ids", + method: "post", + response: ({ body }) => { + if (body.id == 1) { + return { + success: true, + data: [ + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 200, 201, + 202, 203, 204, 205, 300, 301, 302, 303, 304, 400, 401, 402, 403, + 404, 500, 501, 502, 503 + ] + }; + } else if (body.id == 2) { + return { + success: true, + data: [ + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 404, 500, + 501, 502, 503 + ] + }; + } + } + }, + // 菜单管理 + { + url: "/menu", + method: "post", + response: () => { + return { + success: true, + data: [ + // 外部页面 + { + parentId: 0, + id: 100, + menuType: 0, // 菜单类型(0代表菜单、1代表iframe、2代表外链、3代表按钮) + title: "menus.pureExternalPage", + name: "PureIframe", + path: "/iframe", + component: "", + rank: 7, + redirect: "", + icon: "ri:links-fill", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 100, + id: 101, + menuType: 0, + title: "menus.pureExternalDoc", + name: "PureIframeExternal", + path: "/iframe/external", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 101, + id: 102, + menuType: 2, + title: "menus.pureExternalLink", + name: "https://pure-admin.github.io/pure-admin-doc", + path: "/external", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 101, + id: 103, + menuType: 2, + title: "menus.pureUtilsLink", + name: "https://pure-admin-utils.netlify.app/", + path: "/pureUtilsLink", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 100, + id: 104, + menuType: 1, + title: "menus.pureEmbeddedDoc", + name: "PureIframeEmbedded", + path: "/iframe/embedded", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 104, + id: 105, + menuType: 1, + title: "menus.pureEpDoc", + name: "FrameEp", + path: "/iframe/ep", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "https://element-plus.org/zh-CN/", + frameLoading: true, + keepAlive: true, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 104, + id: 106, + menuType: 1, + title: "menus.pureTailwindcssDoc", + name: "FrameTailwindcss", + path: "/iframe/tailwindcss", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "https://tailwindcss.com/docs/installation", + frameLoading: true, + keepAlive: true, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 104, + id: 107, + menuType: 1, + title: "menus.pureVueDoc", + name: "FrameVue", + path: "/iframe/vue3", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "https://cn.vuejs.org/", + frameLoading: true, + keepAlive: true, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 104, + id: 108, + menuType: 1, + title: "menus.pureViteDoc", + name: "FrameVite", + path: "/iframe/vite", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "https://cn.vitejs.dev/", + frameLoading: true, + keepAlive: true, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 104, + id: 109, + menuType: 1, + title: "menus.purePiniaDoc", + name: "FramePinia", + path: "/iframe/pinia", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "https://pinia.vuejs.org/zh/index.html", + frameLoading: true, + keepAlive: true, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 104, + id: 110, + menuType: 1, + title: "menus.pureRouterDoc", + name: "FrameRouter", + path: "/iframe/vue-router", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "https://router.vuejs.org/zh/", + frameLoading: true, + keepAlive: true, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + // 权限管理 + { + parentId: 0, + id: 200, + menuType: 0, + title: "menus.purePermission", + name: "PurePermission", + path: "/permission", + component: "", + rank: 9, + redirect: "", + icon: "ep:lollipop", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 200, + id: 201, + menuType: 0, + title: "menus.purePermissionPage", + name: "PermissionPage", + path: "/permission/page/index", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 200, + id: 202, + menuType: 0, + title: "menus.purePermissionButton", + name: "PermissionButton", + path: "/permission/button", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 202, + id: 203, + menuType: 0, + title: "menus.purePermissionButtonRouter", + name: "PermissionButtonRouter", + path: "/permission/button/router", + component: "permission/button/index", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 203, + id: 210, + menuType: 3, + title: "添加", + name: "", + path: "", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "permission:btn:add", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 203, + id: 211, + menuType: 3, + title: "修改", + name: "", + path: "", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "permission:btn:edit", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 203, + id: 212, + menuType: 3, + title: "删除", + name: "", + path: "", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "permission:btn:delete", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 202, + id: 204, + menuType: 0, + title: "menus.purePermissionButtonLogin", + name: "PermissionButtonLogin", + path: "/permission/button/login", + component: "permission/button/perms", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 204, + id: 220, + menuType: 3, + title: "添加", + name: "", + path: "", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "permission:btn:add", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 204, + id: 221, + menuType: 3, + title: "修改", + name: "", + path: "", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "permission:btn:edit", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 204, + id: 222, + menuType: 3, + title: "删除", + name: "", + path: "", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "permission:btn:delete", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + // 系统管理 + { + parentId: 0, + id: 300, + menuType: 0, + title: "menus.pureSysManagement", + name: "PureSystem", + path: "/system", + component: "", + rank: 10, + redirect: "", + icon: "ri:settings-3-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 300, + id: 301, + menuType: 0, + title: "menus.pureUser", + name: "SystemUser", + path: "/system/user/index", + component: "", + rank: null, + redirect: "", + icon: "ri:admin-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 300, + id: 302, + menuType: 0, + title: "menus.pureRole", + name: "SystemRole", + path: "/system/role/index", + component: "", + rank: null, + redirect: "", + icon: "ri:admin-fill", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 300, + id: 303, + menuType: 0, + title: "menus.pureSystemMenu", + name: "SystemMenu", + path: "/system/menu/index", + component: "", + rank: null, + redirect: "", + icon: "ep:menu", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 300, + id: 304, + menuType: 0, + title: "menus.pureDept", + name: "SystemDept", + path: "/system/dept/index", + component: "", + rank: null, + redirect: "", + icon: "ri:git-branch-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + // 系统监控 + { + parentId: 0, + id: 400, + menuType: 0, + title: "menus.pureSysMonitor", + name: "PureMonitor", + path: "/monitor", + component: "", + rank: 11, + redirect: "", + icon: "ep:monitor", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 400, + id: 401, + menuType: 0, + title: "menus.pureOnlineUser", + name: "OnlineUser", + path: "/monitor/online-user", + component: "monitor/online/index", + rank: null, + redirect: "", + icon: "ri:user-voice-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 400, + id: 402, + menuType: 0, + title: "menus.pureLoginLog", + name: "LoginLog", + path: "/monitor/login-logs", + component: "monitor/logs/login/index", + rank: null, + redirect: "", + icon: "ri:window-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 400, + id: 403, + menuType: 0, + title: "menus.pureOperationLog", + name: "OperationLog", + path: "/monitor/operation-logs", + component: "monitor/logs/operation/index", + rank: null, + redirect: "", + icon: "ri:history-fill", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 400, + id: 404, + menuType: 0, + title: "menus.pureSystemLog", + name: "SystemLog", + path: "/monitor/system-logs", + component: "monitor/logs/system/index", + rank: null, + redirect: "", + icon: "ri:file-search-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + // 标签页操作 + { + parentId: 0, + id: 500, + menuType: 0, + title: "menus.pureTabs", + name: "PureTabs", + path: "/tabs", + component: "", + rank: 12, + redirect: "", + icon: "ri:bookmark-2-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 500, + id: 501, + menuType: 0, + title: "menus.pureTabs", + name: "Tabs", + path: "/tabs/index", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 500, + id: 502, + menuType: 0, + title: "query传参模式", + name: "TabQueryDetail", + path: "/tabs/query-detail", + component: "", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "/tabs/index", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: false, + showParent: false + }, + { + parentId: 500, + id: 503, + menuType: 0, + title: "params传参模式", + name: "TabParamsDetail", + path: "/tabs/params-detail/:id", + component: "params-detail", + rank: null, + redirect: "", + icon: "", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "/tabs/index", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: false, + showParent: false + } + ] + }; + } + }, + // 部门管理 + { + url: "/dept", + method: "post", + response: () => { + return { + success: true, + data: [ + { + name: "杭州总公司", + parentId: 0, + id: 100, + sort: 0, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 1, // 状态 1 启用 0 停用 + type: 1, // 1 公司 2 分公司 3 部门 + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "郑州分公司", + parentId: 100, + id: 101, + sort: 1, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 1, + type: 2, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "研发部门", + parentId: 101, + id: 103, + sort: 1, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 1, + type: 3, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "市场部门", + parentId: 102, + id: 108, + sort: 1, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 1, + type: 3, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "深圳分公司", + parentId: 100, + id: 102, + sort: 2, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 1, + type: 2, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "市场部门", + parentId: 101, + id: 104, + sort: 2, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 1, + type: 3, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "财务部门", + parentId: 102, + id: 109, + sort: 2, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 1, + type: 3, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "测试部门", + parentId: 101, + id: 105, + sort: 3, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 0, + type: 3, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "财务部门", + parentId: 101, + id: 106, + sort: 4, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 1, + type: 3, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + }, + { + name: "运维部门", + parentId: 101, + id: 107, + sort: 5, + phone: "15888888888", + principal: faker.person.firstName(), + email: faker.internet.email(), + status: 0, + type: 3, + createTime: 1605456000000, + remark: "这里是备注信息这里是备注信息这里是备注信息这里是备注信息" + } + ] + }; + } + }, + // 在线用户 + { + url: "/online-logs", + method: "post", + response: ({ body }) => { + let list = [ + { + id: 1, + username: "admin", + ip: faker.internet.ipv4(), + address: "中国河南省信阳市", + system: "macOS", + browser: "Chrome", + loginTime: new Date() + }, + { + id: 2, + username: "common", + ip: faker.internet.ipv4(), + address: "中国广东省深圳市", + system: "Windows", + browser: "Firefox", + loginTime: new Date() + } + ]; + list = list.filter(item => item.username.includes(body?.username)); + return { + success: true, + data: { + list, + total: list.length, // 总条目数 + pageSize: 10, // 每页显示条目个数 + currentPage: 1 // 当前页数 + } + }; + } + }, + // 登录日志 + { + url: "/login-logs", + method: "post", + response: ({ body }) => { + let list = [ + { + id: 1, + username: "admin", + ip: faker.internet.ipv4(), + address: "中国河南省信阳市", + system: "macOS", + browser: "Chrome", + status: 1, // 登录状态 1 成功 0 失败 + behavior: "账号登录", + loginTime: new Date() + }, + { + id: 2, + username: "common", + ip: faker.internet.ipv4(), + address: "中国广东省深圳市", + system: "Windows", + browser: "Firefox", + status: 0, + behavior: "第三方登录", + loginTime: new Date() + } + ]; + list = list.filter(item => item.username.includes(body?.username)); + list = list.filter(item => + String(item.status).includes(String(body?.status)) + ); + return { + success: true, + data: { + list, + total: list.length, // 总条目数 + pageSize: 10, // 每页显示条目个数 + currentPage: 1 // 当前页数 + } + }; + } + }, + // 操作日志 + { + url: "/operation-logs", + method: "post", + response: ({ body }) => { + let list = [ + { + id: 1, + username: "admin", + ip: faker.internet.ipv4(), + address: "中国河南省信阳市", + system: "macOS", + browser: "Chrome", + status: 1, // 操作状态 1 成功 0 失败 + summary: "菜单管理-添加菜单", // 操作概要 + module: "系统管理", // 所属模块 + operatingTime: new Date() // 操作时间 + }, + { + id: 2, + username: "common", + ip: faker.internet.ipv4(), + address: "中国广东省深圳市", + system: "Windows", + browser: "Firefox", + status: 0, + summary: "列表分页查询", + module: "在线用户", + operatingTime: new Date() + } + ]; + list = list.filter(item => item.module.includes(body?.module)); + list = list.filter(item => + String(item.status).includes(String(body?.status)) + ); + return { + success: true, + data: { + list, + total: list.length, // 总条目数 + pageSize: 10, // 每页显示条目个数 + currentPage: 1 // 当前页数 + } + }; + } + }, + // 系统日志 + { + url: "/system-logs", + method: "post", + response: ({ body }) => { + let list = [ + { + id: 1, // 日志ID + /** + * 日志级别 + * 0 debug调试(最低级别的日志,用于调试和开发阶段) + * 1 info信息(默认级别,用于记录一般的信息) + * 2 warn警告(表示可能出现的问题或潜在的错误,但不会影响系统的正常运行) + * 3 error错误(表示发生了错误,但不会导致系统崩溃) + * 4 fatal致命(最高级别的日志,表示发生了严重错误,导致系统无法继续运行) + */ + level: 1, + module: "菜单管理", // 所属模块 + url: "/menu", // 请求接口 + method: "post", // 请求方法 + ip: faker.internet.ipv4(), + address: "中国河南省信阳市", + system: "macOS", + browser: "Chrome", + /** + * 请求耗时(单位:ms 毫秒) + * 正常耗时:一般认为在几百毫秒(0.1-0.5秒)范围内的请求耗时较为正常 + * 较慢耗时:在1秒以上的耗时可以被认为是较慢的请求,但具体是否较慢还需要根据具体业务场景和性能要求来判断 + */ + takesTime: 10, + requestTime: new Date() // 请求时间 + }, + { + id: 2, + level: 0, + module: "地图", + url: "/get-map-info", + method: "get", + ip: faker.internet.ipv4(), + address: "中国广东省深圳市", + system: "Windows", + browser: "Firefox", + takesTime: 1200, + requestTime: new Date() + } + ]; + list = list.filter(item => item.module.includes(body?.module)); + return { + success: true, + data: { + list, + total: list.length, // 总条目数 + pageSize: 10, // 每页显示条目个数 + currentPage: 1 // 当前页数 + } + }; + } + }, + // 系统日志-根据 id 查日志详情 + { + url: "/system-logs-detail", + method: "post", + response: ({ body }) => { + if (body.id == 1) { + return { + id: 1, + level: 1, + module: "菜单管理", + url: "/menu", + method: "post", + ip: faker.internet.ipv4(), + address: "中国河南省信阳市", + system: "macOS", + browser: "Chrome", + takesTime: 10, + responseHeaders: { + traceId: "1495502411171032", + "Content-Type": "application/json", + Connection: "keep-alive", + "Keep-Alive": "timeout=5", + "Content-Length": 17019 + }, + responseBody: { + success: true, + data: [ + { + parentId: 0, + id: 400, + menuType: 0, + title: "menus.pureSysMonitor", + name: "PureMonitor", + path: "/monitor", + component: "", + rank: 11, + redirect: "", + icon: "ep:monitor", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 400, + id: 401, + menuType: 0, + title: "menus.pureOnlineUser", + name: "OnlineUser", + path: "/monitor/online-user", + component: "monitor/online/index", + rank: null, + redirect: "", + icon: "ri:user-voice-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 400, + id: 402, + menuType: 0, + title: "menus.pureLoginLog", + name: "LoginLog", + path: "/monitor/login-logs", + component: "monitor/logs/login/index", + rank: null, + redirect: "", + icon: "ri:window-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 400, + id: 403, + menuType: 0, + title: "menus.pureOperationLog", + name: "OperationLog", + path: "/monitor/operation-logs", + component: "monitor/logs/operation/index", + rank: null, + redirect: "", + icon: "ri:history-fill", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + }, + { + parentId: 400, + id: 404, + menuType: 0, + title: "menus.pureSystemLog", + name: "SystemLog", + path: "/monitor/system-logs", + component: "monitor/logs/system/index", + rank: null, + redirect: "", + icon: "ri:file-search-line", + extraIcon: "", + enterTransition: "", + leaveTransition: "", + activePath: "", + auths: "", + frameSrc: "", + frameLoading: true, + keepAlive: false, + hiddenTag: false, + fixedTag: false, + showLink: true, + showParent: false + } + ] + }, + requestHeaders: { + Accept: "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,eo;q=0.7", + Authorization: "Bearer eyJhbGciOiJIUzUxMiJ9.admin", + Connection: "keep-alive", + "Content-Length": 0, + Cookie: + "_ga=GA1.1.231800979.1704562367; _ga_M74ZHEQ1M1=GS1.1.1709299375.7.1.1709299476.0.0.0; Hm_lvt_6a7dac00248d3b6ad8479d7249bb29c5=1709032753,1709359575; Hm_lvt_23a157b7d0d9867f7a51e42628f052f5=1708960489,1709485849,1709879672; authorized-token={%22accessToken%22:%22eyJhbGciOiJIUzUxMiJ9.admin%22%2C%22expires%22:1919520000000}; multiple-tabs=true", + Host: "192.168.2.121:8848", + Origin: "http://192.168.2.121:8848", + Referer: "http://192.168.2.121:8848/", + "User-Agent": + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", + "X-Requested-With": "XMLHttpRequest" + }, + requestBody: { + title: "系统监控" + }, + traceId: "1495502411171032", + requestTime: new Date() + }; + } else if (body.id == 2) { + return { + id: 2, + level: 0, + module: "地图", + url: "/get-map-info?plateNumber=豫A59778U", + method: "get", + ip: faker.internet.ipv4(), + address: "中国广东省深圳市", + system: "Windows", + browser: "Firefox", + takesTime: 1200, + responseHeaders: { + traceId: "2280443117103208", + "Content-Type": "application/json", + Connection: "keep-alive", + "Keep-Alive": "timeout=5", + "Content-Length": 28693 + }, + responseBody: { + plateNumber: "豫A59778U", + driver: "子骞", + orientation: 289, + lng: 113.8564, + lat: 34.373 + }, + requestHeaders: { + Accept: "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,eo;q=0.7", + Authorization: "Bearer eyJhbGciOiJIUzUxMiJ9.admin", + Connection: "keep-alive", + "Content-Length": 0, + Cookie: + "_ga=GA1.1.231800979.1704562367; _ga_M74ZHEQ1M1=GS1.1.1709299375.7.1.1709299476.0.0.0; Hm_lvt_6a7dac00248d3b6ad8479d7249bb29c5=1709032753,1709359575; Hm_lvt_23a157b7d0d9867f7a51e42628f052f5=1708960489,1709485849,1709879672; authorized-token={%22accessToken%22:%22eyJhbGciOiJIUzUxMiJ9.admin%22%2C%22expires%22:1919520000000}; multiple-tabs=true", + Host: "192.168.2.121:8848", + Origin: "http://192.168.2.121:8848", + Referer: "http://192.168.2.121:8848/", + "User-Agent": + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", + "X-Requested-With": "XMLHttpRequest" + }, + requestBody: null, + traceId: "2280443117103208", + requestTime: new Date() + }; + } + } + } +]); diff --git a/Yi.Pure.Vue3/package.json b/Yi.Pure.Vue3/package.json new file mode 100644 index 00000000..bbeedf55 --- /dev/null +++ b/Yi.Pure.Vue3/package.json @@ -0,0 +1,199 @@ +{ + "name": "vue-pure-admin", + "version": "5.8.0", + "private": true, + "type": "module", + "scripts": { + "dev": "NODE_OPTIONS=--max-old-space-size=4096 vite", + "serve": "pnpm dev", + "build": "rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build && generate-version-file", + "build:staging": "rimraf dist && vite build --mode staging", + "report": "rimraf dist && vite build", + "preview": "vite preview", + "preview:build": "pnpm build && vite preview", + "typecheck": "tsc --noEmit && vue-tsc --noEmit --skipLibCheck", + "svgo": "svgo -f . -r", + "clean:cache": "rimraf .eslintcache && rimraf pnpm-lock.yaml && rimraf node_modules && pnpm store prune && pnpm install", + "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock,build}/**/*.{vue,js,ts,tsx}\" --fix", + "lint:prettier": "prettier --write \"src/**/*.{js,ts,json,tsx,css,scss,vue,html,md}\"", + "lint:stylelint": "stylelint --cache --fix \"**/*.{html,vue,css,scss}\" --cache-location node_modules/.cache/stylelint/", + "lint": "pnpm lint:eslint && pnpm lint:prettier && pnpm lint:stylelint", + "prepare": "husky", + "preinstall": "npx only-allow pnpm" + }, + "keywords": [ + "vue-pure-admin", + "element-plus", + "tailwindcss", + "pure-admin", + "typescript", + "pinia", + "vue3", + "vite", + "esm" + ], + "homepage": "https://github.com/pure-admin/vue-pure-admin", + "repository": { + "type": "git", + "url": "git+https://github.com/pure-admin/vue-pure-admin.git" + }, + "bugs": { + "url": "https://github.com/pure-admin/vue-pure-admin/issues" + }, + "license": "MIT", + "author": { + "name": "xiaoxian521", + "email": "pureadmin@163.com", + "url": "https://github.com/xiaoxian521" + }, + "dependencies": { + "@amap/amap-jsapi-loader": "^1.0.1", + "@howdyjs/mouse-menu": "^2.1.3", + "@infectoone/vue-ganttastic": "^2.3.2", + "@logicflow/core": "^1.2.28", + "@logicflow/extension": "^1.2.28", + "@pureadmin/descriptions": "^1.2.1", + "@pureadmin/table": "^3.2.0", + "@pureadmin/utils": "^2.4.8", + "@vue-flow/background": "^1.3.0", + "@vue-flow/core": "^1.39.3", + "@vueuse/core": "^10.11.1", + "@vueuse/motion": "^2.2.3", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "@zxcvbn-ts/core": "^3.0.4", + "animate.css": "^4.1.1", + "axios": "^1.7.3", + "china-area-data": "^5.0.1", + "cropperjs": "^1.6.2", + "dayjs": "^1.11.12", + "echarts": "^5.5.1", + "el-table-infinite-scroll": "^3.0.6", + "element-plus": "^2.8.0", + "intro.js": "^7.2.0", + "js-cookie": "^3.0.5", + "jsbarcode": "^3.11.6", + "localforage": "^1.10.0", + "mint-filter": "^4.0.3", + "mitt": "^3.0.1", + "mqtt": "4.3.7", + "nprogress": "^0.2.0", + "path": "^0.12.7", + "pinia": "^2.2.1", + "pinyin-pro": "^3.24.2", + "plus-pro-components": "^0.1.14", + "qrcode": "^1.5.4", + "qs": "^6.13.0", + "responsive-storage": "^2.2.0", + "sortablejs": "^1.15.2", + "swiper": "^11.1.9", + "typeit": "^8.8.4", + "v-contextmenu": "^3.2.0", + "v3-infinite-loading": "^1.3.1", + "version-rocket": "^1.7.2", + "vue": "^3.4.37", + "vue-i18n": "^9.13.1", + "vue-json-pretty": "^2.4.0", + "vue-pdf-embed": "^2.1.0", + "vue-router": "^4.4.3", + "vue-tippy": "^6.4.4", + "vue-types": "^5.1.3", + "vue-virtual-scroller": "2.0.0-beta.8", + "vue-waterfall-plugin-next": "^2.4.3", + "vue3-danmaku": "^1.6.1", + "vue3-puzzle-vcode": "^1.1.7", + "vuedraggable": "^4.1.0", + "vxe-table": "4.6.17", + "wavesurfer.js": "^7.8.3", + "xgplayer": "^3.0.19", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@commitlint/cli": "^19.4.0", + "@commitlint/config-conventional": "^19.2.2", + "@commitlint/types": "^19.0.3", + "@eslint/js": "^9.9.0", + "@faker-js/faker": "^8.4.1", + "@iconify-icons/ep": "^1.2.12", + "@iconify-icons/ri": "^1.2.10", + "@iconify/vue": "^4.1.2", + "@intlify/unplugin-vue-i18n": "^4.0.0", + "@pureadmin/theme": "^3.2.0", + "@types/dagre": "^0.7.52", + "@types/gradient-string": "^1.1.6", + "@types/intro.js": "^5.1.5", + "@types/js-cookie": "^3.0.6", + "@types/node": "^20.14.15", + "@types/nprogress": "^0.2.3", + "@types/qrcode": "^1.5.5", + "@types/qs": "^6.9.15", + "@types/sortablejs": "^1.15.8", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", + "@vitejs/plugin-vue": "^5.1.2", + "@vitejs/plugin-vue-jsx": "^4.0.0", + "autoprefixer": "^10.4.20", + "boxen": "^7.1.1", + "cssnano": "^7.0.5", + "dagre": "^0.8.5", + "eslint": "^9.9.0", + "eslint-config-prettier": "^9.1.0", + "eslint-define-config": "^2.1.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-vue": "^9.27.0", + "gradient-string": "^2.0.2", + "husky": "^9.1.4", + "lint-staged": "^15.2.8", + "postcss": "^8.4.41", + "postcss-html": "^1.7.0", + "postcss-import": "^16.1.0", + "postcss-scss": "^4.0.9", + "prettier": "^3.3.3", + "rimraf": "^5.0.10", + "rollup-plugin-visualizer": "^5.12.0", + "sass": "^1.77.8", + "stylelint": "^16.8.1", + "stylelint-config-recess-order": "^5.0.1", + "stylelint-config-recommended-vue": "^1.5.0", + "stylelint-config-standard-scss": "^13.1.0", + "stylelint-prettier": "^5.0.2", + "svgo": "^3.3.2", + "tailwindcss": "^3.4.9", + "typescript": "^5.5.4", + "vite": "^5.4.0", + "vite-plugin-cdn-import": "^1.0.1", + "vite-plugin-checker": "^0.7.2", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-fake-server": "^2.1.1", + "vite-plugin-remove-console": "^2.2.0", + "vite-plugin-router-warn": "^1.0.0", + "vite-plugin-vue-inspector": "^5.1.3", + "vite-svg-loader": "^5.1.0", + "vue-eslint-parser": "^9.4.3", + "vue-tsc": "^2.0.29" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0", + "pnpm": ">=9" + }, + "pnpm": { + "allowedDeprecatedVersions": { + "are-we-there-yet": "*", + "sourcemap-codec": "*", + "domexception": "*", + "w3c-hr-time": "*", + "inflight": "*", + "npmlog": "*", + "rimraf": "*", + "stable": "*", + "gauge": "*", + "abab": "*", + "glob": "*" + }, + "peerDependencyRules": { + "allowedVersions": { + "eslint": "9" + } + } + } +} diff --git a/Yi.Pure.Vue3/pnpm-lock.yaml b/Yi.Pure.Vue3/pnpm-lock.yaml new file mode 100644 index 00000000..a6bef9a6 --- /dev/null +++ b/Yi.Pure.Vue3/pnpm-lock.yaml @@ -0,0 +1,11537 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@amap/amap-jsapi-loader': + specifier: ^1.0.1 + version: 1.0.1 + '@howdyjs/mouse-menu': + specifier: ^2.1.3 + version: 2.1.3(vue@3.4.37(typescript@5.5.4)) + '@infectoone/vue-ganttastic': + specifier: ^2.3.2 + version: 2.3.2(dayjs@1.11.12)(vue@3.4.37(typescript@5.5.4)) + '@logicflow/core': + specifier: ^1.2.28 + version: 1.2.28 + '@logicflow/extension': + specifier: ^1.2.28 + version: 1.2.28(canvas@2.11.2) + '@pureadmin/descriptions': + specifier: ^1.2.1 + version: 1.2.1(echarts@5.5.1)(element-plus@2.8.0(vue@3.4.37(typescript@5.5.4)))(typescript@5.5.4) + '@pureadmin/table': + specifier: ^3.2.0 + version: 3.2.0(element-plus@2.8.0(vue@3.4.37(typescript@5.5.4)))(typescript@5.5.4) + '@pureadmin/utils': + specifier: ^2.4.8 + version: 2.4.8(echarts@5.5.1)(vue@3.4.37(typescript@5.5.4)) + '@vue-flow/background': + specifier: ^1.3.0 + version: 1.3.0(@vue-flow/core@1.39.3(vue@3.4.37(typescript@5.5.4)))(vue@3.4.37(typescript@5.5.4)) + '@vue-flow/core': + specifier: ^1.39.3 + version: 1.39.3(vue@3.4.37(typescript@5.5.4)) + '@vueuse/core': + specifier: ^10.11.1 + version: 10.11.1(vue@3.4.37(typescript@5.5.4)) + '@vueuse/motion': + specifier: ^2.2.3 + version: 2.2.3(rollup@4.20.0)(vue@3.4.37(typescript@5.5.4)) + '@wangeditor/editor': + specifier: ^5.1.23 + version: 5.1.23 + '@wangeditor/editor-for-vue': + specifier: ^5.1.12 + version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.4.37(typescript@5.5.4)) + '@zxcvbn-ts/core': + specifier: ^3.0.4 + version: 3.0.4 + animate.css: + specifier: ^4.1.1 + version: 4.1.1 + axios: + specifier: ^1.7.3 + version: 1.7.3 + china-area-data: + specifier: ^5.0.1 + version: 5.0.1 + cropperjs: + specifier: ^1.6.2 + version: 1.6.2 + dayjs: + specifier: ^1.11.12 + version: 1.11.12 + echarts: + specifier: ^5.5.1 + version: 5.5.1 + el-table-infinite-scroll: + specifier: ^3.0.6 + version: 3.0.6(typescript@5.5.4) + element-plus: + specifier: ^2.8.0 + version: 2.8.0(vue@3.4.37(typescript@5.5.4)) + intro.js: + specifier: ^7.2.0 + version: 7.2.0 + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + jsbarcode: + specifier: ^3.11.6 + version: 3.11.6 + localforage: + specifier: ^1.10.0 + version: 1.10.0 + mint-filter: + specifier: ^4.0.3 + version: 4.0.3 + mitt: + specifier: ^3.0.1 + version: 3.0.1 + mqtt: + specifier: 4.3.7 + version: 4.3.7 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + path: + specifier: ^0.12.7 + version: 0.12.7 + pinia: + specifier: ^2.2.1 + version: 2.2.1(typescript@5.5.4)(vue@3.4.37(typescript@5.5.4)) + pinyin-pro: + specifier: ^3.24.2 + version: 3.24.2 + plus-pro-components: + specifier: ^0.1.14 + version: 0.1.14(element-plus@2.8.0(vue@3.4.37(typescript@5.5.4)))(vue@3.4.37(typescript@5.5.4)) + qrcode: + specifier: ^1.5.4 + version: 1.5.4 + qs: + specifier: ^6.13.0 + version: 6.13.0 + responsive-storage: + specifier: ^2.2.0 + version: 2.2.0 + sortablejs: + specifier: ^1.15.2 + version: 1.15.2 + swiper: + specifier: ^11.1.9 + version: 11.1.9 + typeit: + specifier: ^8.8.4 + version: 8.8.4 + v-contextmenu: + specifier: ^3.2.0 + version: 3.2.0(vue@3.4.37(typescript@5.5.4)) + v3-infinite-loading: + specifier: ^1.3.1 + version: 1.3.1 + version-rocket: + specifier: ^1.7.2 + version: 1.7.2 + vue: + specifier: ^3.4.37 + version: 3.4.37(typescript@5.5.4) + vue-i18n: + specifier: ^9.13.1 + version: 9.13.1(vue@3.4.37(typescript@5.5.4)) + vue-json-pretty: + specifier: ^2.4.0 + version: 2.4.0(vue@3.4.37(typescript@5.5.4)) + vue-pdf-embed: + specifier: ^2.1.0 + version: 2.1.0(vue@3.4.37(typescript@5.5.4)) + vue-router: + specifier: ^4.4.3 + version: 4.4.3(vue@3.4.37(typescript@5.5.4)) + vue-tippy: + specifier: ^6.4.4 + version: 6.4.4(vue@3.4.37(typescript@5.5.4)) + vue-types: + specifier: ^5.1.3 + version: 5.1.3(vue@3.4.37(typescript@5.5.4)) + vue-virtual-scroller: + specifier: 2.0.0-beta.8 + version: 2.0.0-beta.8(vue@3.4.37(typescript@5.5.4)) + vue-waterfall-plugin-next: + specifier: ^2.4.3 + version: 2.4.3(@types/lodash-es@4.17.12)(vue@3.4.37(typescript@5.5.4)) + vue3-danmaku: + specifier: ^1.6.1 + version: 1.6.1(vue@3.4.37(typescript@5.5.4)) + vue3-puzzle-vcode: + specifier: ^1.1.7 + version: 1.1.7 + vuedraggable: + specifier: ^4.1.0 + version: 4.1.0(vue@3.4.37(typescript@5.5.4)) + vxe-table: + specifier: 4.6.17 + version: 4.6.17(vue@3.4.37(typescript@5.5.4)) + wavesurfer.js: + specifier: ^7.8.3 + version: 7.8.3 + xgplayer: + specifier: ^3.0.19 + version: 3.0.19(core-js@3.38.0) + xlsx: + specifier: ^0.18.5 + version: 0.18.5 + devDependencies: + '@commitlint/cli': + specifier: ^19.4.0 + version: 19.4.0(@types/node@20.14.15)(typescript@5.5.4) + '@commitlint/config-conventional': + specifier: ^19.2.2 + version: 19.2.2 + '@commitlint/types': + specifier: ^19.0.3 + version: 19.0.3 + '@eslint/js': + specifier: ^9.9.0 + version: 9.9.0 + '@faker-js/faker': + specifier: ^8.4.1 + version: 8.4.1 + '@iconify-icons/ep': + specifier: ^1.2.12 + version: 1.2.12 + '@iconify-icons/ri': + specifier: ^1.2.10 + version: 1.2.10 + '@iconify/vue': + specifier: ^4.1.2 + version: 4.1.2(vue@3.4.37(typescript@5.5.4)) + '@intlify/unplugin-vue-i18n': + specifier: ^4.0.0 + version: 4.0.0(rollup@4.20.0)(vue-i18n@9.13.1(vue@3.4.37(typescript@5.5.4))) + '@pureadmin/theme': + specifier: ^3.2.0 + version: 3.2.0 + '@types/dagre': + specifier: ^0.7.52 + version: 0.7.52 + '@types/gradient-string': + specifier: ^1.1.6 + version: 1.1.6 + '@types/intro.js': + specifier: ^5.1.5 + version: 5.1.5 + '@types/js-cookie': + specifier: ^3.0.6 + version: 3.0.6 + '@types/node': + specifier: ^20.14.15 + version: 20.14.15 + '@types/nprogress': + specifier: ^0.2.3 + version: 0.2.3 + '@types/qrcode': + specifier: ^1.5.5 + version: 1.5.5 + '@types/qs': + specifier: ^6.9.15 + version: 6.9.15 + '@types/sortablejs': + specifier: ^1.15.8 + version: 1.15.8 + '@typescript-eslint/eslint-plugin': + specifier: ^7.18.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': + specifier: ^7.18.0 + version: 7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@vitejs/plugin-vue': + specifier: ^5.1.2 + version: 5.1.2(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8))(vue@3.4.37(typescript@5.5.4)) + '@vitejs/plugin-vue-jsx': + specifier: ^4.0.0 + version: 4.0.0(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8))(vue@3.4.37(typescript@5.5.4)) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.41) + boxen: + specifier: ^7.1.1 + version: 7.1.1 + cssnano: + specifier: ^7.0.5 + version: 7.0.5(postcss@8.4.41) + dagre: + specifier: ^0.8.5 + version: 0.8.5 + eslint: + specifier: ^9.9.0 + version: 9.9.0(jiti@1.21.6) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@9.9.0(jiti@1.21.6)) + eslint-define-config: + specifier: ^2.1.0 + version: 2.1.0 + eslint-plugin-prettier: + specifier: ^5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(prettier@3.3.3) + eslint-plugin-vue: + specifier: ^9.27.0 + version: 9.27.0(eslint@9.9.0(jiti@1.21.6)) + gradient-string: + specifier: ^2.0.2 + version: 2.0.2 + husky: + specifier: ^9.1.4 + version: 9.1.4 + lint-staged: + specifier: ^15.2.8 + version: 15.2.8 + postcss: + specifier: ^8.4.41 + version: 8.4.41 + postcss-html: + specifier: ^1.7.0 + version: 1.7.0 + postcss-import: + specifier: ^16.1.0 + version: 16.1.0(postcss@8.4.41) + postcss-scss: + specifier: ^4.0.9 + version: 4.0.9(postcss@8.4.41) + prettier: + specifier: ^3.3.3 + version: 3.3.3 + rimraf: + specifier: ^5.0.10 + version: 5.0.10 + rollup-plugin-visualizer: + specifier: ^5.12.0 + version: 5.12.0(rollup@4.20.0) + sass: + specifier: ^1.77.8 + version: 1.77.8 + stylelint: + specifier: ^16.8.1 + version: 16.8.1(typescript@5.5.4) + stylelint-config-recess-order: + specifier: ^5.0.1 + version: 5.0.1(stylelint@16.8.1(typescript@5.5.4)) + stylelint-config-recommended-vue: + specifier: ^1.5.0 + version: 1.5.0(postcss-html@1.7.0)(stylelint@16.8.1(typescript@5.5.4)) + stylelint-config-standard-scss: + specifier: ^13.1.0 + version: 13.1.0(postcss@8.4.41)(stylelint@16.8.1(typescript@5.5.4)) + stylelint-prettier: + specifier: ^5.0.2 + version: 5.0.2(prettier@3.3.3)(stylelint@16.8.1(typescript@5.5.4)) + svgo: + specifier: ^3.3.2 + version: 3.3.2 + tailwindcss: + specifier: ^3.4.9 + version: 3.4.9 + typescript: + specifier: ^5.5.4 + version: 5.5.4 + vite: + specifier: ^5.4.0 + version: 5.4.0(@types/node@20.14.15)(sass@1.77.8) + vite-plugin-cdn-import: + specifier: ^1.0.1 + version: 1.0.1(rollup@4.20.0)(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8)) + vite-plugin-checker: + specifier: ^0.7.2 + version: 0.7.2(eslint@9.9.0(jiti@1.21.6))(optionator@0.9.4)(stylelint@16.8.1(typescript@5.5.4))(typescript@5.5.4)(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8))(vue-tsc@2.0.29(typescript@5.5.4)) + vite-plugin-compression: + specifier: ^0.5.1 + version: 0.5.1(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8)) + vite-plugin-fake-server: + specifier: ^2.1.1 + version: 2.1.1 + vite-plugin-remove-console: + specifier: ^2.2.0 + version: 2.2.0 + vite-plugin-router-warn: + specifier: ^1.0.0 + version: 1.0.0 + vite-plugin-vue-inspector: + specifier: ^5.1.3 + version: 5.1.3(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8)) + vite-svg-loader: + specifier: ^5.1.0 + version: 5.1.0(vue@3.4.37(typescript@5.5.4)) + vue-eslint-parser: + specifier: ^9.4.3 + version: 9.4.3(eslint@9.9.0(jiti@1.21.6)) + vue-tsc: + specifier: ^2.0.29 + version: 2.0.29(typescript@5.5.4) + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@amap/amap-jsapi-loader@1.0.1': + resolution: {integrity: sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.25.2': + resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.0': + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.0': + resolution: {integrity: sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.15': + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.25.0': + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.3': + resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-decorators@7.24.7': + resolution: {integrity: sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.24.7': + resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.24.7': + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.24.7': + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.24.7': + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.25.2': + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.25.0': + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + engines: {node: '>=6.9.0'} + + '@babel/standalone@7.25.3': + resolution: {integrity: sha512-uR+EoBqIIIvKGCG7fOj7HKupu3zVObiMfdEwoPZfVCPpcWJaZ1PkshaP5/6cl6BKAm1Zcv25O1rf+uoQ7V8nqA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.3': + resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@commitlint/cli@19.4.0': + resolution: {integrity: sha512-sJX4J9UioVwZHq7JWM9tjT5bgWYaIN3rC4FP7YwfEwBYiIO+wMyRttRvQLNkow0vCdM0D67r9NEWU0Ui03I4Eg==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-conventional@19.2.2': + resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@19.0.3': + resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} + engines: {node: '>=v18'} + + '@commitlint/ensure@19.0.3': + resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@19.0.0': + resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} + engines: {node: '>=v18'} + + '@commitlint/format@19.3.0': + resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@19.2.2': + resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} + engines: {node: '>=v18'} + + '@commitlint/lint@19.2.2': + resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + engines: {node: '>=v18'} + + '@commitlint/load@19.4.0': + resolution: {integrity: sha512-I4lCWaEZYQJ1y+Y+gdvbGAx9pYPavqZAZ3/7/8BpWh+QjscAn8AjsUpLV2PycBsEx7gupq5gM4BViV9xwTIJuw==} + engines: {node: '>=v18'} + + '@commitlint/message@19.0.0': + resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} + engines: {node: '>=v18'} + + '@commitlint/parse@19.0.3': + resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} + engines: {node: '>=v18'} + + '@commitlint/read@19.4.0': + resolution: {integrity: sha512-r95jLOEZzKDakXtnQub+zR3xjdnrl2XzerPwm7ch1/cc5JGq04tyaNpa6ty0CRCWdVrk4CZHhqHozb8yZwy2+g==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@19.1.0': + resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} + engines: {node: '>=v18'} + + '@commitlint/rules@19.0.3': + resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@19.0.0': + resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} + engines: {node: '>=v18'} + + '@commitlint/top-level@19.0.0': + resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} + engines: {node: '>=v18'} + + '@commitlint/types@19.0.3': + resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} + engines: {node: '>=v18'} + + '@csstools/css-parser-algorithms@2.7.1': + resolution: {integrity: sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.4.1 + + '@csstools/css-tokenizer@2.4.1': + resolution: {integrity: sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==} + engines: {node: ^14 || ^16 || >=18} + + '@csstools/media-query-list-parser@2.1.13': + resolution: {integrity: sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.7.1 + '@csstools/css-tokenizer': ^2.4.1 + + '@csstools/selector-specificity@3.1.1': + resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@dual-bundle/import-meta-resolve@4.1.0': + resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + + '@element-plus/icons-vue@1.1.4': + resolution: {integrity: sha512-Iz/nHqdp1sFPmdzRwHkEQQA3lKvoObk8azgABZ81QUOpW9s/lUyQVUSh0tNtEPZXQlKwlSh7SPgoVxzrE0uuVQ==} + peerDependencies: + vue: ^3.2.0 + + '@element-plus/icons-vue@2.3.1': + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.17.1': + resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.9.0': + resolution: {integrity: sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@faker-js/faker@8.4.1': + resolution: {integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} + + '@floating-ui/core@1.6.7': + resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==} + + '@floating-ui/dom@1.6.10': + resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==} + + '@floating-ui/utils@0.2.7': + resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} + + '@howdyjs/mouse-menu@2.1.3': + resolution: {integrity: sha512-oGTwDSs4ZlqYJ+o76/Ye8pePgTMcliEjUkIusZY4ueosCrKXylSuBFIbCZpH6BZDuZQkzKwV5vSgHyG67KyF0w==} + peerDependencies: + vue: '>=3.0.0' + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} + + '@iconify-icons/ep@1.2.12': + resolution: {integrity: sha512-8EJULn048sQq3fvytpQ5j40omnVOdBKpo+sXdYM35NRrqCe1BihxBesMcCOLWaocqkWia6uTQ3cnRHff4ZA11w==} + + '@iconify-icons/ri@1.2.10': + resolution: {integrity: sha512-wNaXsQYK55WDUWCbcjvnwnODV4Jtsp+VC0duPanibEVu876TUYf6kdgTGtH7/GErBCNdJuJJbncG7vbOaeQi7w==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/vue@4.1.2': + resolution: {integrity: sha512-CQnYqLiQD5LOAaXhBrmj1mdL2/NCJvwcC4jtW2Z8ukhThiFkLDkutarTOV2trfc9EXqUqRs0KqXOL9pZ/IyysA==} + peerDependencies: + vue: '>=3' + + '@infectoone/vue-ganttastic@2.3.2': + resolution: {integrity: sha512-krxHdlZvo4cdS4axQ99qb756RzwieI7LcyY2vAIehJ5Sxd/jz5Pu/vTplTC0Rxqj8T4v1knYPK9uvTMkQYWYng==} + peerDependencies: + dayjs: ^1.11.5 + vue: ^3.2.40 + + '@intlify/bundle-utils@8.0.0': + resolution: {integrity: sha512-1B++zykRnMwQ+20SpsZI1JCnV/YJt9Oq7AGlEurzkWJOFtFAVqaGc/oV36PBRYeiKnTbY9VYfjBimr2Vt42wLQ==} + engines: {node: '>= 14.16'} + peerDependencies: + petite-vue-i18n: '*' + vue-i18n: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + + '@intlify/core-base@9.13.1': + resolution: {integrity: sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@9.13.1': + resolution: {integrity: sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==} + engines: {node: '>= 16'} + + '@intlify/shared@9.13.1': + resolution: {integrity: sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==} + engines: {node: '>= 16'} + + '@intlify/unplugin-vue-i18n@4.0.0': + resolution: {integrity: sha512-q2Mhqa/mLi0tulfLFO4fMXXvEbkSZpI5yGhNNsLTNJJ41icEGUuyDe+j5zRZIKSkOJRgX6YbCyibTDJdRsukmw==} + engines: {node: '>= 14.16'} + peerDependencies: + petite-vue-i18n: '*' + vue-i18n: '*' + vue-i18n-bridge: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + vue-i18n-bridge: + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@27.5.1': + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/core@27.5.1': + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@27.5.1': + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/fake-timers@27.5.1': + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/globals@27.5.1': + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/reporters@27.5.1': + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/source-map@27.5.1': + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/test-result@27.5.1': + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/test-sequencer@27.5.1': + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/transform@27.5.1': + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jest/types@27.5.1': + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@logicflow/core@1.2.28': + resolution: {integrity: sha512-xj9zxYsudK9YLI2UrUa9mXWd4tp8z56Rx4il9Fc/baUWEDwogjqCgblSKepGxEgTX2XX2fQIfUrzqEUoWu2VYQ==} + + '@logicflow/extension@1.2.28': + resolution: {integrity: sha512-OHaO57SxjNwDDYVAqrJp/fq9g0NDc4elHmZnWGIqLbkbOMJhiU9IUT2WWK6DctUoYzxhGzTR4Ai5S/TFZ9JjGA==} + + '@mapbox/node-pre-gyp@1.0.11': + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nuxt/kit@3.12.4': + resolution: {integrity: sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==} + engines: {node: ^14.18.0 || >=16.10.0} + + '@nuxt/schema@3.12.4': + resolution: {integrity: sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==} + engines: {node: ^14.18.0 || >=16.10.0} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@pureadmin/descriptions@1.2.1': + resolution: {integrity: sha512-7jDJuqz8xnhcmwXdWQnBzOYeX2WK27TRFaVgs9AdiRr+DnKb9W+krHByJwQtxo5lg4qyRh4/IWQGEMfhC2ljeQ==} + peerDependencies: + element-plus: ^2.0.0 + + '@pureadmin/table@3.2.0': + resolution: {integrity: sha512-5H09KrQDeGpxVxOKCISi65WcT7mSuyhGTHiDcHUcaZFXMkB874ZikDBuNFMUp4ccqyztoD6AAo9Tk/cqCMhbuQ==} + peerDependencies: + element-plus: ^2.0.0 + + '@pureadmin/theme@3.2.0': + resolution: {integrity: sha512-SBlTvEl0rmfqTW/mOJUPftvZe4yF+38CJdlBOvVITpehzCytqlG5i8XKpcs8aAR9SVfhcrLVS5Q6xh7xDVQcJQ==} + + '@pureadmin/utils@2.4.8': + resolution: {integrity: sha512-7baOiunmno3mlvk7oKIrEvIEVAbJgIrvvMw9EJMOvTmebfn31F5ps9JyIeDzsnVRABZLSEg0iIVVfYe+DGAeqg==} + peerDependencies: + echarts: '*' + vue: '*' + peerDependenciesMeta: + echarts: + optional: true + vue: + optional: true + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.20.0': + resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.20.0': + resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.20.0': + resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.20.0': + resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.20.0': + resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.20.0': + resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-s390x-gnu@4.20.0': + resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.20.0': + resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.20.0': + resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.20.0': + resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.20.0': + resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.20.0': + resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} + cpu: [x64] + os: [win32] + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sinonjs/commons@1.8.6': + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + + '@sinonjs/fake-timers@8.1.0': + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + '@transloadit/prettier-bytes@0.0.7': + resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/conventional-commits-parser@5.0.0': + resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + + '@types/dagre@0.7.52': + resolution: {integrity: sha512-XKJdy+OClLk3hketHi9Qg6gTfe1F3y+UFnHxKA2rn9Dw+oXa4Gb378Ztz9HlMgZKSxpPmn4BNVh9wgkpvrK1uw==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/event-emitter@0.3.5': + resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/gradient-string@1.1.6': + resolution: {integrity: sha512-LkaYxluY4G5wR1M4AKQUal2q61Di1yVVCw42ImFTuaIoQVgmV0WP1xUaLB8zwb47mp82vWTpePI9JmrjEnJ7nQ==} + + '@types/intro.js@5.1.5': + resolution: {integrity: sha512-TT1d8ayz07svlBcoqh26sNpQaU6bBpdFcCC+IMZHp46NNX2mYAHAVefM3wCmQSd4UWhhObeMjFByw2IaPKOXlw==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/js-cookie@3.0.6': + resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.7': + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} + + '@types/mousetrap@1.6.15': + resolution: {integrity: sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw==} + + '@types/node@20.14.15': + resolution: {integrity: sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==} + + '@types/nprogress@0.2.3': + resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} + + '@types/prettier@2.7.3': + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + + '@types/qrcode@1.5.5': + resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} + + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + + '@types/sortablejs@1.15.8': + resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/tinycolor2@1.4.6': + resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + + '@types/web-animations-js@2.2.16': + resolution: {integrity: sha512-ATELeWMFwj8eQiH0KmvsCl1V2lu/qx/CjOBmv4ADSZS5u8r4reMyjCXtxG7khqyiwH3IOMNdrON/Ugn94OUcRA==} + + '@types/web-bluetooth@0.0.14': + resolution: {integrity: sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@16.0.9': + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@uppy/companion-client@2.2.2': + resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==} + + '@uppy/core@2.3.4': + resolution: {integrity: sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==} + + '@uppy/store-default@2.1.1': + resolution: {integrity: sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==} + + '@uppy/utils@4.1.3': + resolution: {integrity: sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==} + + '@uppy/xhr-upload@2.1.3': + resolution: {integrity: sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==} + peerDependencies: + '@uppy/core': ^2.3.3 + + '@vitejs/plugin-vue-jsx@4.0.0': + resolution: {integrity: sha512-A+6wL2AdQhDsLsDnY+2v4rRDI1HLJGIMc97a8FURO9tqKsH5QvjWrzsa5DH3NlZsM742W2wODl2fF+bfcTWtXw==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@5.1.2': + resolution: {integrity: sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.0-alpha.18': + resolution: {integrity: sha512-JAYeJvYQQROmVRtSBIczaPjP3DX4QW1fOqW1Ebs0d3Y3EwSNRglz03dSv0Dm61dzd0Yx3WgTW3hndDnTQqgmyg==} + + '@volar/source-map@2.4.0-alpha.18': + resolution: {integrity: sha512-MTeCV9MUwwsH0sNFiZwKtFrrVZUK6p8ioZs3xFzHc2cvDXHWlYN3bChdQtwKX+FY2HG6H3CfAu1pKijolzIQ8g==} + + '@volar/typescript@2.4.0-alpha.18': + resolution: {integrity: sha512-sXh5Y8sqGUkgxpMWUGvRXggxYHAVxg0Pa1C42lQZuPDrW6vHJPR0VCK8Sr7WJsAW530HuNQT/ZIskmXtxjybMQ==} + + '@vue-flow/background@1.3.0': + resolution: {integrity: sha512-fu/8s9wzSOQIitnSTI10XT3bzTtagh4h8EF2SWwtlDklOZjAaKy75lqv4htHa3wigy/r4LGCOGwLw3Pk88/AxA==} + peerDependencies: + '@vue-flow/core': ^1.23.0 + vue: ^3.3.0 + + '@vue-flow/core@1.39.3': + resolution: {integrity: sha512-+BUfHshiPubZCa0nhGUpdAsb8kQViHaDx9k3aQWhaOZXG3ZcHe3ZjVAset+uukfog5f64y+tpjbnUaHG7c40yQ==} + peerDependencies: + vue: ^3.3.0 + + '@vue/babel-helper-vue-transform-on@1.2.2': + resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==} + + '@vue/babel-plugin-jsx@1.2.2': + resolution: {integrity: sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.2.2': + resolution: {integrity: sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.4.37': + resolution: {integrity: sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==} + + '@vue/compiler-dom@3.4.37': + resolution: {integrity: sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==} + + '@vue/compiler-sfc@3.4.37': + resolution: {integrity: sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==} + + '@vue/compiler-ssr@3.4.37': + resolution: {integrity: sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==} + + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/devtools-api@6.6.3': + resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} + + '@vue/language-core@2.0.29': + resolution: {integrity: sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.4.37': + resolution: {integrity: sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==} + + '@vue/runtime-core@3.4.37': + resolution: {integrity: sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==} + + '@vue/runtime-dom@3.4.37': + resolution: {integrity: sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==} + + '@vue/server-renderer@3.4.37': + resolution: {integrity: sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==} + peerDependencies: + vue: 3.4.37 + + '@vue/shared@3.4.37': + resolution: {integrity: sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==} + + '@vueuse/core@10.11.1': + resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + + '@vueuse/core@8.9.4': + resolution: {integrity: sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==} + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@10.11.1': + resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + + '@vueuse/metadata@8.9.4': + resolution: {integrity: sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/motion@2.2.3': + resolution: {integrity: sha512-QsS9P7MDKFF2j4eDPuo6lezUDPE7MQp4+unBeR2Ym8RkhtMEw/oVbnHPHL986rsmnnlUZkHVSv5kKoHJzjbtmQ==} + peerDependencies: + vue: '>=3.0.0' + + '@vueuse/shared@10.11.1': + resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + + '@vueuse/shared@8.9.4': + resolution: {integrity: sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==} + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + + '@wangeditor/basic-modules@1.1.7': + resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.throttle: ^4.1.1 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/code-highlight@1.0.3': + resolution: {integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/core@1.1.19': + resolution: {integrity: sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==} + peerDependencies: + '@uppy/core': ^2.1.1 + '@uppy/xhr-upload': ^2.0.3 + dom7: ^3.0.0 + is-hotkey: ^0.2.0 + lodash.camelcase: ^4.3.0 + lodash.clonedeep: ^4.5.0 + lodash.debounce: ^4.0.8 + lodash.foreach: ^4.5.0 + lodash.isequal: ^4.5.0 + lodash.throttle: ^4.1.1 + lodash.toarray: ^4.4.0 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/editor-for-vue@5.1.12': + resolution: {integrity: sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==} + peerDependencies: + '@wangeditor/editor': '>=5.1.0' + vue: ^3.0.5 + + '@wangeditor/editor@5.1.23': + resolution: {integrity: sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==} + + '@wangeditor/list-module@1.0.5': + resolution: {integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/table-module@1.1.4': + resolution: {integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.isequal: ^4.5.0 + lodash.throttle: ^4.1.1 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/upload-image-module@1.0.2': + resolution: {integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==} + peerDependencies: + '@uppy/core': ^2.0.3 + '@uppy/xhr-upload': ^2.0.3 + '@wangeditor/basic-modules': 1.x + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.foreach: ^4.5.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/video-module@1.1.4': + resolution: {integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==} + peerDependencies: + '@uppy/core': ^2.1.4 + '@uppy/xhr-upload': ^2.0.7 + '@wangeditor/core': 1.x + dom7: ^3.0.0 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@zougt/some-loader-utils@1.4.3': + resolution: {integrity: sha512-0FsoqSTQ+qOyp6x5Q6LZQ7xVwquEgLYiIStG3L8p0Q2GsGGYKDkOZ0mIpMt67aNdr8XLsbxXjzTl/iHtTz5zcA==} + engines: {node: '>= 10.13.0'} + hasBin: true + + '@zxcvbn-ts/core@3.0.4': + resolution: {integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + adler-32@1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + animate.css@4.1.1: + resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.7.3: + resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} + + babel-jest@27.5.1: + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@27.5.1: + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@7.1.1: + resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-import@0.0.1: + resolution: {integrity: sha512-L0z0iPX7t7ff5eZsK7oMEH+Ly2lzJczFKPHwrta6X8SF64a20R3wOrAOYK1MzHZVaWWugg9qlSTVfVwqvQJ2dw==} + + c12@1.11.1: + resolution: {integrity: sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==} + peerDependencies: + magicast: ^0.3.4 + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001651: + resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + + canvas@2.11.2: + resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} + engines: {node: '>=6'} + + cfb@1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + china-area-data@5.0.1: + resolution: {integrity: sha512-BQDPpiv5Nn+018ekcJK2oSD9PAD+E1bvXB0wgabc//dFVS/KvRqCgg0QOEUt3vBkx9XzB5a9BmkJCEZDBxVjVw==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + codepage@1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + commist@1.1.0: + resolution: {integrity: sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + compatx@0.1.8: + resolution: {integrity: sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==} + + compute-scroll-into-view@1.0.20: + resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} + + computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js@3.38.0: + resolution: {integrity: sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==} + + cosmiconfig-typescript-loader@5.0.0: + resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} + engines: {node: '>=v16'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=8.2' + typescript: '>=4' + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + cropperjs@1.6.2: + resolution: {integrity: sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + css-declaration-sorter@6.4.1: + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + + css-declaration-sorter@7.2.0: + resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + + css-functions-list@3.2.2: + resolution: {integrity: sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==} + engines: {node: '>=12 || >=16'} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@5.2.14: + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-preset-default@7.0.5: + resolution: {integrity: sha512-Jbzja0xaKwc5JzxPQoc+fotKpYtWEu4wQLMQe29CM0FjjdRjA4omvbGHl2DTGgARKxSTpPssBsok+ixv8uTBqw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano-preset-lite@2.1.3: + resolution: {integrity: sha512-samvnCll/DUVZu0Qc+JH36nt7dlaOT7WjOgg8SbLJ78sp51JZ12s2hyerxrarjPBG4O53rErUtOY2IYLYgBGEQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@3.1.0: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@5.0.0: + resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano@5.1.15: + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano@7.0.5: + resolution: {integrity: sha512-Aq0vqBLtpTT5Yxj+hLlLfNPFuRQCDIjx5JQAhhaedQKLNDvDGeVziF24PS+S1f0Z5KCxWvw0QVI3VNHNBITxVQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + dagre@0.8.5: + resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} + + danmu.js@1.1.13: + resolution: {integrity: sha512-knFd0/cB2HA4FFWiA7eB2suc5vCvoHdqio33FyyCSfP7C+1A+zQcTvnvwfxaZhrxsGj4qaQI2I8XiTqedRaVmg==} + + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + + data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + + dayjs@1.11.12: + resolution: {integrity: sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + decompress-response@4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegate@3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + dom-zindex@1.0.4: + resolution: {integrity: sha512-PNk7u71TJ1C9Lwjjp5nNuQcVWuECFMmr9kZAwi2UbgWUM7jXdTCe4O4x5bhLUa07jpcZUVA5Du3ho7/FXzS9Ng==} + + dom7@3.0.0: + resolution: {integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + downloadjs@1.4.7: + resolution: {integrity: sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + echarts@5.5.1: + resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==} + + el-table-infinite-scroll@3.0.6: + resolution: {integrity: sha512-rdrEBcSMYpkD0s0jl28KcGZpiIbWzVR2OAf7hBB+c+c08G89jb9d6rOn+y2DuhE1iI1C0pEOlC5/lrP3QceOXg==} + + electron-to-chromium@1.5.6: + resolution: {integrity: sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==} + + element-plus@2.1.4: + resolution: {integrity: sha512-pcwgDbKUrzyWbixYB/zIbLPLBQ/NPGPJnGXJ+jYozUSthPW4SuriaUGJKgbAE6PDBAtw3IodiT2E2GbiaZLxww==} + peerDependencies: + vue: ^3.2.0 + + element-plus@2.8.0: + resolution: {integrity: sha512-7ngapVlVlQAjocVqD4MUKvKXlBneT9DSDk2mmBOSLRFWNm/HLDT15ozmsvUBfy18sajnyUeSIHTtINE8gfrGMg==} + peerDependencies: + vue: ^3.2.0 + + emittery@0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + + emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@5.0.0: + resolution: {integrity: sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@0.4.1: + resolution: {integrity: sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==} + + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-define-config@2.1.0: + resolution: {integrity: sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==} + engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-vue@9.27.0: + resolution: {integrity: sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.9.0: + resolution: {integrity: sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-entry-cache@9.0.0: + resolution: {integrity: sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==} + engines: {node: '>=18'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat-cache@5.0.0: + resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==} + engines: {node: '>=18'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + frac@1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + framesync@6.1.2: + resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} + + giget@1.2.3: + resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true + + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + engines: {node: '>=18'} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gradient-string@2.0.2: + resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} + engines: {node: '>=10'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + hash-sum@2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + help-me@3.0.0: + resolution: {integrity: sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==} + + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + husky@9.1.4: + resolution: {integrity: sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==} + engines: {node: '>=18'} + hasBin: true + + i18next@20.6.1: + resolution: {integrity: sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-from-string@0.0.4: + resolution: {integrity: sha512-ZmtWHOGv55OEFb3HxfQH4L4vAR7g3HUm82N5LmvXugiXlaZ1j/epItoUDjQ+gJ+MjNl+apczmCnqGFq8q2CM6w==} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + import-meta-resolve@3.1.1: + resolution: {integrity: sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw==} + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + intro.js@7.2.0: + resolution: {integrity: sha512-qbMfaB70rOXVBceIWNYnYTpVTiZsvQh/MIkfdQbpA9di9VBfj1GigUPfcCv3aOfsbrtPcri8vTLTA4FcEDcHSQ==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hotkey@0.2.0: + resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jest-changed-files@27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-circus@27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-cli@27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + + jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-docblock@27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-each@27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-environment-jsdom@27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-environment-node@27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-haste-map@27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-jasmine2@27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-leak-detector@27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-message-util@27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-resolve-dependencies@27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-resolve@27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-runner@27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-runtime@27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-serializer@27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-snapshot@27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-validate@27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-watcher@27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest@27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + + js-sdsl@4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbarcode@3.11.6: + resolution: {integrity: sha512-G5TKGyKY1zJo0ZQKFM1IIMfy0nF2rs92BLlCz+cU4/TazIc4ZH+X1GYeDRt7TKjrYqmPfTjwTBkU/QnQlsYiuA==} + + jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + + knitwork@1.1.0: + resolution: {integrity: sha512-oHnmiBUVHz1V+URE77PNot2lv3QiYU2zQf1JjOVkMt3YDKGbu8NAFr+c4mcNOhdsGrB/VpVbRwPwhiXrPhxQbw==} + + known-css-properties@0.34.0: + resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + leven@2.1.0: + resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} + engines: {node: '>=0.10.0'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@15.2.8: + resolution: {integrity: sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.2.4: + resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} + engines: {node: '>=18.0.0'} + + local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.foreach@4.5.0: + resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + + lodash.toarray@4.4.0: + resolution: {integrity: sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-match@1.0.2: + resolution: {integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mint-filter@4.0.3: + resolution: {integrity: sha512-CKh2zKv9oFHEmYCXFk5REG2480FBNYixK+hw0mlRd/TgDJVhPpRhHPNhWa3Q6zF1tpE2q7w7y+Ylu1YJusXDpA==} + + mitt@2.1.0: + resolution: {integrity: sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + + mousetrap@1.6.5: + resolution: {integrity: sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==} + + mqtt-packet@6.10.0: + resolution: {integrity: sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==} + + mqtt@4.3.7: + resolution: {integrity: sha512-ew3qwG/TJRorTz47eW46vZ5oBw5MEYbQZVaEji44j5lAUSQSqIEoul7Kua/BatBW0H0kKQcC9kwUHa1qzaWHSw==} + engines: {node: '>=10.0.0'} + hasBin: true + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + namespace-emitter@2.0.1: + resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==} + + nan@2.20.0: + resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + + nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + number-allocator@1.0.14: + resolution: {integrity: sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==} + + nwsapi@2.2.12: + resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + + nypm@0.3.9: + resolution: {integrity: sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + + path2d@0.2.1: + resolution: {integrity: sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==} + engines: {node: '>=6'} + + path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pdfjs-dist@4.5.136: + resolution: {integrity: sha512-V1BALcAN/FmxBEShLxoP73PlQZAZtzlaNfRbRhJrKvXzjLC5VaIlBAQUJuWP8iaYUmIdmdLHmt3E2TBglxOm3w==} + engines: {node: '>=18'} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pinia@2.2.1: + resolution: {integrity: sha512-ltEU3xwiz5ojVMizdP93AHi84Rtfz0+yKd8ud75hr9LVyWX2alxp7vLbY1kFm7MXFmHHr/9B08Xf8Jj6IHTEiQ==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.3.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + + pinyin-pro@3.24.2: + resolution: {integrity: sha512-5tPyLhxT4CZ9dWqQRqm3X5ADdS18Sb2w0ranNBgr6jCrqO4O8gtfuyqG7Y6+1Mre+0n2VlhKDz+3P5oqSLrkOw==} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-types@1.1.3: + resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} + + plus-pro-components@0.1.14: + resolution: {integrity: sha512-+SPOFiY488sEXW6gzj22BKjwEkTWDo3DLyuokLg061PJHdKSMIlLBjYwsi6WAB/tS2bAl0RfjeJiPWCkbMhZCg==} + peerDependencies: + element-plus: ^2.3.4 + vue: ^3.2.0 + + pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + + popmotion@11.0.5: + resolution: {integrity: sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==} + + postcss-calc@10.0.1: + resolution: {integrity: sha512-pp1Z3FxtxA+xHAoWXcOXgnBN1WPu4ZiJ5LWGjKyf9MMreagAsaTUtnqFK1y1sHhyJddAkYTPu6XSuLgb3oYCjw==} + engines: {node: ^18.12 || ^20.9 || >=22.0} + peerDependencies: + postcss: ^8.4.38 + + postcss-calc@8.2.4: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + + postcss-colormin@5.3.1: + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-colormin@7.0.2: + resolution: {integrity: sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-convert-values@5.1.3: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-convert-values@7.0.3: + resolution: {integrity: sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-comments@5.1.2: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-comments@7.0.2: + resolution: {integrity: sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-duplicates@5.1.0: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-duplicates@7.0.1: + resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-empty@5.1.1: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-empty@7.0.0: + resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-overridden@5.1.0: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-overridden@7.0.0: + resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-html@1.7.0: + resolution: {integrity: sha512-MfcMpSUIaR/nNgeVS8AyvyDugXlADjN9AcV7e5rDfrF1wduIAGSkL4q2+wgrZgA3sHVAHLDO9FuauHhZYW2nBw==} + engines: {node: ^12 || >=14} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-import@16.1.0: + resolution: {integrity: sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==} + engines: {node: '>=18.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-merge-longhand@5.1.7: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-longhand@7.0.3: + resolution: {integrity: sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-merge-rules@5.1.4: + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-rules@7.0.3: + resolution: {integrity: sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-font-values@5.1.0: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-font-values@7.0.0: + resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-gradients@5.1.1: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-gradients@7.0.0: + resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-params@5.1.4: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-params@7.0.2: + resolution: {integrity: sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-selectors@5.2.1: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-selectors@7.0.3: + resolution: {integrity: sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-normalize-charset@5.1.0: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-charset@7.0.0: + resolution: {integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-display-values@5.1.0: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-display-values@7.0.0: + resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-positions@5.1.1: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-positions@7.0.0: + resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-repeat-style@5.1.1: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-repeat-style@7.0.0: + resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-string@5.1.0: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-string@7.0.0: + resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-timing-functions@5.1.0: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-timing-functions@7.0.0: + resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-unicode@5.1.1: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-unicode@7.0.2: + resolution: {integrity: sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-url@5.1.0: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-url@7.0.0: + resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-whitespace@5.1.1: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-whitespace@7.0.0: + resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-ordered-values@5.1.3: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-ordered-values@7.0.1: + resolution: {integrity: sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-initial@5.1.2: + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-initial@7.0.2: + resolution: {integrity: sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-transforms@5.1.0: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-transforms@7.0.0: + resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-resolve-nested-selector@0.1.5: + resolution: {integrity: sha512-tum2m18S22ZSNjXatMG0FSk5ZL83pTttymeJx5Gzxg7RU0s1jNDU9rXltro4osQrukjyNormcb07IEjqEyPNaA==} + + postcss-safe-parser@6.0.0: + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + + postcss-safe-parser@7.0.0: + resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@6.1.1: + resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} + engines: {node: '>=4'} + + postcss-sorting@8.0.2: + resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} + peerDependencies: + postcss: ^8.4.20 + + postcss-svgo@5.1.0: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-svgo@7.0.1: + resolution: {integrity: sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==} + engines: {node: ^18.12.0 || ^20.9.0 || >= 18} + peerDependencies: + postcss: ^8.4.31 + + postcss-unique-selectors@5.1.1: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-unique-selectors@7.0.2: + resolution: {integrity: sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.41: + resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.23.1: + resolution: {integrity: sha512-O5UdRsNh4vdZaTieWe3XOgSpdMAmkIYBCT3VhQDlKrzyCm8lUYsk0fmVEvoQQifoOjFRTaHZO69ylrzTW2BH+A==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qrcode@1.5.4: + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} + hasBin: true + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + reinterval@1.1.0: + resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + engines: {node: '>=10'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + responsive-storage@2.2.0: + resolution: {integrity: sha512-94W5Chr2F5kDBT6J+OCOeJguEkSTDc3jPOUQXYmzNG64DCNl5p7hoBDF7bx7u6EXAEcpUKF64OZR4b7Nn8h/Gg==} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + + rollup-plugin-external-globals@0.10.0: + resolution: {integrity: sha512-RXlupZrmn97AaaS5dWnktkjM+Iy+od0E+8L0mUkMIs3iuoUXNJebueQocQKV7Ircd54fSGGmkBaXwNzY05J1yQ==} + peerDependencies: + rollup: ^2.25.0 || ^3.3.0 || ^4.1.4 + + rollup-plugin-visualizer@5.12.0: + resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + + rollup@4.20.0: + resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass@1.77.8: + resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} + engines: {node: '>=14.0.0'} + hasBin: true + + saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + + scroll-into-view-if-needed@2.2.31: + resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@3.1.1: + resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slate-history@0.66.0: + resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==} + peerDependencies: + slate: '>=0.65.3' + + slate@0.72.8: + resolution: {integrity: sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + snabbdom@3.6.2: + resolution: {integrity: sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==} + engines: {node: '>=12.17.0'} + + sortablejs@1.14.0: + resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==} + + sortablejs@1.15.2: + resolution: {integrity: sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + ssf@0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + + ssr-window@3.0.0: + resolution: {integrity: sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + + style-value-types@5.1.2: + resolution: {integrity: sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==} + + stylehacks@5.1.1: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + stylehacks@7.0.3: + resolution: {integrity: sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + stylelint-config-html@1.1.0: + resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recess-order@5.0.1: + resolution: {integrity: sha512-rKbGkoa3h0rINrGln9TFVowvSCLgPJC5O0EuPiqlqWcJMb1lImEtXktcjFCVz+hwtSUiHD3ijJc3vP9muFOgJg==} + peerDependencies: + stylelint: '>=16' + + stylelint-config-recommended-scss@14.1.0: + resolution: {integrity: sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==} + engines: {node: '>=18.12.0'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.6.1 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended-vue@1.5.0: + resolution: {integrity: sha512-65TAK/clUqkNtkZLcuytoxU0URQYlml+30Nhop7sRkCZ/mtWdXt7T+spPSB3KMKlb+82aEVJ4OrcstyDBdbosg==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recommended@14.0.1: + resolution: {integrity: sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.1.0 + + stylelint-config-standard-scss@13.1.0: + resolution: {integrity: sha512-Eo5w7/XvwGHWkeGLtdm2FZLOMYoZl1omP2/jgFCXyl2x5yNz7/8vv4Tj6slHvMSSUNTaGoam/GAZ0ZhukvalfA==} + engines: {node: '>=18.12.0'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.3.1 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-standard@36.0.1: + resolution: {integrity: sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.1.0 + + stylelint-order@6.0.4: + resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==} + peerDependencies: + stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 + + stylelint-prettier@5.0.2: + resolution: {integrity: sha512-qJ+BN+1T2ZcKz9WIrv0x+eFGHzSUnXfXd5gL///T6XoJvr3D8/ztzz2fhtmXef7Vb8P33zBXmLTTveByr0nwBw==} + engines: {node: '>=18.12.0'} + peerDependencies: + prettier: '>=3.0.0' + stylelint: '>=16.0.0' + + stylelint-scss@6.5.0: + resolution: {integrity: sha512-yOnYlr71wrTPT3rYyUurgTj6Rw7JUtzsZQsiPEjvs+k/yqoYHdweqpw6XN/ARpxjAuvJpddoMUvV8aAIpvUwTg==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.0.2 + + stylelint@16.8.1: + resolution: {integrity: sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA==} + engines: {node: '>=18.12.0'} + hasBin: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + + supports-hyperlinks@3.0.0: + resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + engines: {node: '>=14.18'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + swiper@11.1.9: + resolution: {integrity: sha512-rflu8zvfGa3x1v/aeSufk4zRJffhOQowyvtJlp46sUBnOqAuk1Rdv5Ldj0AWWBV595iZ+ZMk7VB35ZRtRUomtA==} + engines: {node: '>= 4.7.0'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + + table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} + engines: {node: '>=10.0.0'} + + tailwindcss@3.4.9: + resolution: {integrity: sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + throat@6.0.2: + resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tinygradient@1.1.5: + resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + + tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typeit@8.8.4: + resolution: {integrity: sha512-bD4/PNthsYj5ObPKqkARnYA7NStbYzZDe8g5odXACmFw2HKEDWSUPv275lblz6E8REr+Ji6oll/AHKmD2ONMYA==} + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + unctx@2.3.1: + resolution: {integrity: sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unimport@3.10.0: + resolution: {integrity: sha512-/UvKRfWx3mNDWwWQhR62HsoM3wxHwYdTq8ellZzMOHnnw4Dp8tovgthyW7DjTrbjDL+i4idOp06voz2VKlvrLw==} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin@1.12.1: + resolution: {integrity: sha512-aXEH9c5qi3uYZHo0niUtxDlT9ylG/luMW/dZslSCkbtC31wCyFkmM0kyoBBh+Grhn7CL+/kvKLfN61/EdxPxMQ==} + engines: {node: '>=14.0.0'} + + untyped@1.4.2: + resolution: {integrity: sha512-nC5q0DnPEPVURPhfPQLahhSTnemVtPzdx7ofiRxXpOB2SYnb3MfdU3DVGyJdS8Lx+tBWeAePO8BfU/3EgksM7Q==} + hasBin: true + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v-contextmenu@3.2.0: + resolution: {integrity: sha512-6UemjAZkm6IXDH1XwIJrZj/uqSKnwnGDR+hfJnUvh66LRL5hk5bxgkgwto1lP3xFyjC8hzpQxnbzC6d1x1vXNg==} + engines: {node: '>=10.16.0'} + peerDependencies: + vue: ^3.0.0 + + v3-infinite-loading@1.3.1: + resolution: {integrity: sha512-Yi/STWDo+jasQSd8sBCta2u5/C75eLWdTyqkUPOcCEWYFzzw0DddYrDfvjB2IEbcvFxNiA4ljBpNLcRLVe2adA==} + + v8-to-istanbul@8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + + version-rocket@1.7.2: + resolution: {integrity: sha512-6R/cy6SpIF1HL4YfCQ7vaA9WMrobN6HUIyh94noWmXe6PIjDeEShuTYZ+kRGY9CEQXJGha2xS5vBFNK7OZk6cA==} + hasBin: true + + vite-plugin-cdn-import@1.0.1: + resolution: {integrity: sha512-lgjLxgwFSKvJLbqjVBirUZ0rQo00GpUGJzRpgQu8RyBw9LA7jaqG6fUMQzBC9qWmTGabPC3iOzwCcoi7PseRAQ==} + + vite-plugin-checker@0.7.2: + resolution: {integrity: sha512-xeYeJbG0gaCaT0QcUC4B2Zo4y5NR8ZhYenc5gPbttrZvraRFwkEADCYwq+BfEHl9zYz7yf85TxsiGoYwyyIjhw==} + engines: {node: '>=14.16'} + peerDependencies: + '@biomejs/biome': '>=1.7' + eslint: '>=7' + meow: ^9.0.0 + optionator: ^0.9.1 + stylelint: '>=13' + typescript: '*' + vite: '>=2.0.0' + vls: '*' + vti: '*' + vue-tsc: '>=2.0.0' + peerDependenciesMeta: + '@biomejs/biome': + optional: true + eslint: + optional: true + meow: + optional: true + optionator: + optional: true + stylelint: + optional: true + typescript: + optional: true + vls: + optional: true + vti: + optional: true + vue-tsc: + optional: true + + vite-plugin-compression@0.5.1: + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-externals@0.6.2: + resolution: {integrity: sha512-R5oVY8xDJjLXLTs2XDYzvYbc/RTZuIwOx2xcFbYf+/VXB6eJuatDgt8jzQ7kZ+IrgwQhe6tU8U2fTyy72C25CQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-fake-server@2.1.1: + resolution: {integrity: sha512-QUgssvE7jI9XU1WuDZ3gkzzi9GzVeapELIlFNMvmE2swDKL7O2y2nV0kRZ9VYOsD+hV312uSJyzHBJvcmBw7UQ==} + + vite-plugin-remove-console@2.2.0: + resolution: {integrity: sha512-qgjh5pz75MdE9Kzs8J0kBwaCfifHV0ezRbB9rpGsIOxam+ilcGV7WOk91vFJXquzRmiKrFh3Hxlh0JJWAmXTbQ==} + + vite-plugin-router-warn@1.0.0: + resolution: {integrity: sha512-jnr7faHJPkKxukBXVpg7Ui1UDqhmxD7xU6JGidq8ivSHTsNAPqzSpPpwW8O1PBP/0+Owq4bLfNNk11drOkz4xA==} + + vite-plugin-vue-inspector@5.1.3: + resolution: {integrity: sha512-pMrseXIDP1Gb38mOevY+BvtNGNqiqmqa2pKB99lnLsADQww9w9xMbAfT4GB6RUoaOkSPrtlXqpq2Fq+Dj2AgFg==} + peerDependencies: + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 + + vite-svg-loader@5.1.0: + resolution: {integrity: sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==} + peerDependencies: + vue: '>=3.2.13' + + vite@5.4.0: + resolution: {integrity: sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + + vscode-languageclient@7.0.0: + resolution: {integrity: sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==} + engines: {vscode: ^1.52.0} + + vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + + vscode-languageserver@7.0.0: + resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==} + hasBin: true + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue-i18n@9.13.1: + resolution: {integrity: sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-json-pretty@2.4.0: + resolution: {integrity: sha512-e9bP41DYYIc2tWaB6KuwqFJq5odZ8/GkE6vHQuGcbPn37kGk4a3n1RNw3ZYeDrl66NWXgTlOfS+M6NKkowmkWw==} + engines: {node: '>= 10.0.0', npm: '>= 5.0.0'} + peerDependencies: + vue: '>=3.0.0' + + vue-observe-visibility@2.0.0-alpha.1: + resolution: {integrity: sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==} + peerDependencies: + vue: ^3.0.0 + + vue-pdf-embed@2.1.0: + resolution: {integrity: sha512-yEtitm2q1jY2pmgnbwDILhm8cEby01WhfZJCMKvhKwdorwc92FDefIDZ5yf0ixu4t+WHMfc1+Zz4OGsoW/PRag==} + peerDependencies: + vue: ^3.3.0 + + vue-resize@2.0.0-alpha.1: + resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} + peerDependencies: + vue: ^3.0.0 + + vue-router@4.4.3: + resolution: {integrity: sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==} + peerDependencies: + vue: ^3.2.0 + + vue-tippy@6.4.4: + resolution: {integrity: sha512-0C5TSU482FvjhEeKrPkz08tzyC/KJC0CiEbm3yW9oS+n3fa03ajEzU2QcxI9oR6Hwlg8NOP0U6T4EsGuccq6YQ==} + peerDependencies: + vue: ^3.2.0 + + vue-tsc@2.0.29: + resolution: {integrity: sha512-MHhsfyxO3mYShZCGYNziSbc63x7cQ5g9kvijV7dRe1TTXBRLxXyL0FnXWpUF1xII2mJ86mwYpYsUmMwkmerq7Q==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue-types@5.1.3: + resolution: {integrity: sha512-3Wy6QcZl0VusCCHX3vYrWSILFlrOB2EQDoySnuYmASM5cUp1FivJGfkS5lp1CutDgyRb41g32r/1QCmiBj5i1Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + vue: ^2.0.0 || ^3.0.0 + peerDependenciesMeta: + vue: + optional: true + + vue-virtual-scroller@2.0.0-beta.8: + resolution: {integrity: sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==} + peerDependencies: + vue: ^3.2.0 + + vue-waterfall-plugin-next@2.4.3: + resolution: {integrity: sha512-L2mH8wOn+ZuddPhaYHKljfukNM0iQd3vhjesvBK4ck+D5swS8c34VdlOED2w53QZvUrXQpEg9ASDHzLlLkzztg==} + + vue3-danmaku@1.6.1: + resolution: {integrity: sha512-v7KqMV5WK3mqRSotSuJfnJldsIpilh72nLKKebWGCO7HM4k330QV1f4oje410GfwSx+SrJ+YLeTG8QLJYuKwYg==} + peerDependencies: + vue: ^3.0.0 + + vue3-puzzle-vcode@1.1.7: + resolution: {integrity: sha512-mW780dz7HKjrElnE60CeYSeHGidKBKHoMjTDYfqF21330rTkFOsfDK1FQKZ22MktgMtTEoS/imfpEDlM1cxY/g==} + + vue@3.4.37: + resolution: {integrity: sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vuedraggable@4.1.0: + resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==} + peerDependencies: + vue: ^3.0.1 + + vxe-table@4.6.17: + resolution: {integrity: sha512-K9A0qJuV33Xh2NK6L1tXXEXueGyOoRVz7eFvFFpTbLVtm3oCoYl6+BOqD6YTw70R8NKdZZNH+ylmEJug+Qjrrg==} + peerDependencies: + vue: ^3.2.28 + + w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + + w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + wavesurfer.js@7.8.3: + resolution: {integrity: sha512-aYOmoBqEwjlqiqcKBYCzmWQxssOnEUd2VlVxfQkWfQD1pH3VJ5Prqn4kfIGxYyokgYiEj/G5Qwrh48ot/pRCuA==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + + webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + + whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + wildcard@1.1.2: + resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==} + + wmf@1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + word@0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xe-utils@3.5.30: + resolution: {integrity: sha512-5Ez6JUANpMakduiTLxrNObzqMebnM4697KvHW5okedkUjXvYgGvkbg0tABTkvwDW/Pb09v7vT68dzBOeAuOu0g==} + + xgplayer-subtitles@3.0.19: + resolution: {integrity: sha512-e2k1oFq1HSbnnHaK694FREqkFyq65ze4vETTIy8ABkOXItcr9/ugyNIJ4zCjD+jExSAVppM9FAF761X4+wRCeA==} + peerDependencies: + core-js: '>=3.12.1' + + xgplayer@3.0.19: + resolution: {integrity: sha512-yw4yinU5EtxS5YxOpctCVnHS/WW3tLTYjT+ZHivUYihlaAdudrmBmoOCcRYykGg7xz6PVIi6B79Gn1RBnGAnpg==} + peerDependencies: + core-js: '>=3.12.1' + + xlsx@0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + + xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-eslint-parser@1.2.3: + resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + + zrender@5.6.0: + resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@amap/amap-jsapi-loader@1.0.1': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/compat-data@7.25.2': {} + + '@babel/core@7.25.2': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + convert-source-map: 2.0.0 + debug: 4.3.6 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.25.0': + dependencies: + '@babel/types': 7.25.2 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.25.2 + + '@babel/helper-compilation-targets@7.25.2': + dependencies: + '@babel/compat-data': 7.25.2 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.22.15': + dependencies: + '@babel/types': 7.25.2 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.24.7': + dependencies: + '@babel/types': 7.25.2 + + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helpers@7.25.0': + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.25.3': + dependencies: + '@babel/types': 7.25.2 + + '@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.25.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/standalone@7.25.3': + optional: true + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + + '@babel/traverse@7.25.3': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.2': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@bcoe/v8-coverage@0.2.3': {} + + '@commitlint/cli@19.4.0(@types/node@20.14.15)(typescript@5.5.4)': + dependencies: + '@commitlint/format': 19.3.0 + '@commitlint/lint': 19.2.2 + '@commitlint/load': 19.4.0(@types/node@20.14.15)(typescript@5.5.4) + '@commitlint/read': 19.4.0 + '@commitlint/types': 19.0.3 + execa: 8.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.2.2': + dependencies: + '@commitlint/types': 19.0.3 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.0.3': + dependencies: + '@commitlint/types': 19.0.3 + ajv: 8.17.1 + + '@commitlint/ensure@19.0.3': + dependencies: + '@commitlint/types': 19.0.3 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.0.0': {} + + '@commitlint/format@19.3.0': + dependencies: + '@commitlint/types': 19.0.3 + chalk: 5.3.0 + + '@commitlint/is-ignored@19.2.2': + dependencies: + '@commitlint/types': 19.0.3 + semver: 7.6.3 + + '@commitlint/lint@19.2.2': + dependencies: + '@commitlint/is-ignored': 19.2.2 + '@commitlint/parse': 19.0.3 + '@commitlint/rules': 19.0.3 + '@commitlint/types': 19.0.3 + + '@commitlint/load@19.4.0(@types/node@20.14.15)(typescript@5.5.4)': + dependencies: + '@commitlint/config-validator': 19.0.3 + '@commitlint/execute-rule': 19.0.0 + '@commitlint/resolve-extends': 19.1.0 + '@commitlint/types': 19.0.3 + chalk: 5.3.0 + cosmiconfig: 9.0.0(typescript@5.5.4) + cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.15)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.0.0': {} + + '@commitlint/parse@19.0.3': + dependencies: + '@commitlint/types': 19.0.3 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.4.0': + dependencies: + '@commitlint/top-level': 19.0.0 + '@commitlint/types': 19.0.3 + execa: 8.0.1 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + + '@commitlint/resolve-extends@19.1.0': + dependencies: + '@commitlint/config-validator': 19.0.3 + '@commitlint/types': 19.0.3 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.0.3': + dependencies: + '@commitlint/ensure': 19.0.3 + '@commitlint/message': 19.0.0 + '@commitlint/to-lines': 19.0.0 + '@commitlint/types': 19.0.3 + execa: 8.0.1 + + '@commitlint/to-lines@19.0.0': {} + + '@commitlint/top-level@19.0.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.0.3': + dependencies: + '@types/conventional-commits-parser': 5.0.0 + chalk: 5.3.0 + + '@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1)': + dependencies: + '@csstools/css-tokenizer': 2.4.1 + + '@csstools/css-tokenizer@2.4.1': {} + + '@csstools/media-query-list-parser@2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)': + dependencies: + '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1) + '@csstools/css-tokenizer': 2.4.1 + + '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.1)': + dependencies: + postcss-selector-parser: 6.1.1 + + '@ctrl/tinycolor@3.6.1': {} + + '@dual-bundle/import-meta-resolve@4.1.0': {} + + '@element-plus/icons-vue@1.1.4(vue@3.4.37(typescript@5.5.4))': + dependencies: + vue: 3.4.37(typescript@5.5.4) + + '@element-plus/icons-vue@2.3.1(vue@3.4.37(typescript@5.5.4))': + dependencies: + vue: 3.4.37(typescript@5.5.4) + + '@esbuild/aix-ppc64@0.19.12': + optional: true + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.19.12': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.19.12': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.19.12': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.19.12': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.19.12': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.19.12': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.19.12': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.19.12': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.19.12': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.19.12': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.19.12': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.19.12': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.19.12': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.19.12': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.19.12': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.19.12': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.19.12': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.19.12': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.19.12': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.19.12': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.19.12': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.19.12': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.9.0(jiti@1.21.6))': + dependencies: + eslint: 9.9.0(jiti@1.21.6) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/config-array@0.17.1': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.6 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.6 + espree: 10.1.0 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.9.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@faker-js/faker@8.4.1': {} + + '@floating-ui/core@1.6.7': + dependencies: + '@floating-ui/utils': 0.2.7 + + '@floating-ui/dom@1.6.10': + dependencies: + '@floating-ui/core': 1.6.7 + '@floating-ui/utils': 0.2.7 + + '@floating-ui/utils@0.2.7': {} + + '@howdyjs/mouse-menu@2.1.3(vue@3.4.37(typescript@5.5.4))': + dependencies: + vue: 3.4.37(typescript@5.5.4) + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.0': {} + + '@iconify-icons/ep@1.2.12': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-icons/ri@1.2.10': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/vue@4.1.2(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@iconify/types': 2.0.0 + vue: 3.4.37(typescript@5.5.4) + + '@infectoone/vue-ganttastic@2.3.2(dayjs@1.11.12)(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@vueuse/core': 9.13.0(vue@3.4.37(typescript@5.5.4)) + dayjs: 1.11.12 + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - '@vue/composition-api' + + '@intlify/bundle-utils@8.0.0(vue-i18n@9.13.1(vue@3.4.37(typescript@5.5.4)))': + dependencies: + '@intlify/message-compiler': 9.13.1 + '@intlify/shared': 9.13.1 + acorn: 8.12.1 + escodegen: 2.1.0 + estree-walker: 2.0.2 + jsonc-eslint-parser: 2.4.0 + mlly: 1.7.1 + source-map-js: 1.2.0 + yaml-eslint-parser: 1.2.3 + optionalDependencies: + vue-i18n: 9.13.1(vue@3.4.37(typescript@5.5.4)) + + '@intlify/core-base@9.13.1': + dependencies: + '@intlify/message-compiler': 9.13.1 + '@intlify/shared': 9.13.1 + + '@intlify/message-compiler@9.13.1': + dependencies: + '@intlify/shared': 9.13.1 + source-map-js: 1.2.0 + + '@intlify/shared@9.13.1': {} + + '@intlify/unplugin-vue-i18n@4.0.0(rollup@4.20.0)(vue-i18n@9.13.1(vue@3.4.37(typescript@5.5.4)))': + dependencies: + '@intlify/bundle-utils': 8.0.0(vue-i18n@9.13.1(vue@3.4.37(typescript@5.5.4))) + '@intlify/shared': 9.13.1 + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + '@vue/compiler-sfc': 3.4.37 + debug: 4.3.6 + fast-glob: 3.3.2 + js-yaml: 4.1.0 + json5: 2.2.3 + pathe: 1.1.2 + picocolors: 1.0.1 + source-map-js: 1.2.0 + unplugin: 1.12.1 + optionalDependencies: + vue-i18n: 9.13.1(vue@3.4.37(typescript@5.5.4)) + transitivePeerDependencies: + - rollup + - supports-color + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@27.5.1': + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + + '@jest/core@27.5.1(canvas@2.11.2)': + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 27.5.1 + jest-config: 27.5.1(canvas@2.11.2) + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1(canvas@2.11.2) + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.7 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + + '@jest/environment@27.5.1': + dependencies: + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + jest-mock: 27.5.1 + + '@jest/fake-timers@27.5.1': + dependencies: + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 20.14.15 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 + + '@jest/globals@27.5.1': + dependencies: + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 + + '@jest/reporters@27.5.1': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color + + '@jest/source-map@27.5.1': + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.11 + source-map: 0.6.1 + + '@jest/test-result@27.5.1': + dependencies: + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@27.5.1': + dependencies: + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color + + '@jest/transform@27.5.1': + dependencies: + '@babel/core': 7.25.2 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.7 + pirates: 4.0.6 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + + '@jest/types@27.5.1': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.14.15 + '@types/yargs': 16.0.9 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@logicflow/core@1.2.28': + dependencies: + '@types/mousetrap': 1.6.15 + mousetrap: 1.6.5 + preact: 10.23.1 + + '@logicflow/extension@1.2.28(canvas@2.11.2)': + dependencies: + '@logicflow/core': 1.2.28 + jest: 27.5.1(canvas@2.11.2) + lodash-es: 4.17.21 + preact: 10.23.1 + transitivePeerDependencies: + - bufferutil + - canvas + - node-notifier + - supports-color + - ts-node + - utf-8-validate + + '@mapbox/node-pre-gyp@1.0.11': + dependencies: + detect-libc: 2.0.3 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.6.3 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nuxt/kit@3.12.4(rollup@4.20.0)': + dependencies: + '@nuxt/schema': 3.12.4(rollup@4.20.0) + c12: 1.11.1 + consola: 3.2.3 + defu: 6.1.4 + destr: 2.0.3 + globby: 14.0.2 + hash-sum: 2.0.0 + ignore: 5.3.1 + jiti: 1.21.6 + klona: 2.0.6 + knitwork: 1.1.0 + mlly: 1.7.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + scule: 1.3.0 + semver: 7.6.3 + ufo: 1.5.4 + unctx: 2.3.1 + unimport: 3.10.0(rollup@4.20.0) + untyped: 1.4.2 + transitivePeerDependencies: + - magicast + - rollup + - supports-color + optional: true + + '@nuxt/schema@3.12.4(rollup@4.20.0)': + dependencies: + compatx: 0.1.8 + consola: 3.2.3 + defu: 6.1.4 + hookable: 5.5.3 + pathe: 1.1.2 + pkg-types: 1.1.3 + scule: 1.3.0 + std-env: 3.7.0 + ufo: 1.5.4 + uncrypto: 0.1.3 + unimport: 3.10.0(rollup@4.20.0) + untyped: 1.4.2 + transitivePeerDependencies: + - rollup + - supports-color + optional: true + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@popperjs/core@2.11.8': {} + + '@pureadmin/descriptions@1.2.1(echarts@5.5.1)(element-plus@2.8.0(vue@3.4.37(typescript@5.5.4)))(typescript@5.5.4)': + dependencies: + '@element-plus/icons-vue': 2.3.1(vue@3.4.37(typescript@5.5.4)) + '@pureadmin/utils': 2.4.8(echarts@5.5.1)(vue@3.4.37(typescript@5.5.4)) + element-plus: 2.8.0(vue@3.4.37(typescript@5.5.4)) + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - echarts + - typescript + + '@pureadmin/table@3.2.0(element-plus@2.8.0(vue@3.4.37(typescript@5.5.4)))(typescript@5.5.4)': + dependencies: + element-plus: 2.8.0(vue@3.4.37(typescript@5.5.4)) + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - typescript + + '@pureadmin/theme@3.2.0': + dependencies: + '@zougt/some-loader-utils': 1.4.3 + fs-extra: 11.2.0 + string-hash: 1.1.3 + + '@pureadmin/utils@2.4.8(echarts@5.5.1)(vue@3.4.37(typescript@5.5.4))': + optionalDependencies: + echarts: 5.5.1 + vue: 3.4.37(typescript@5.5.4) + + '@rollup/pluginutils@5.1.0(rollup@4.20.0)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.20.0 + + '@rollup/rollup-android-arm-eabi@4.20.0': + optional: true + + '@rollup/rollup-android-arm64@4.20.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.20.0': + optional: true + + '@rollup/rollup-darwin-x64@4.20.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.20.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.20.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.20.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.20.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.20.0': + optional: true + + '@sindresorhus/merge-streams@2.3.0': + optional: true + + '@sinonjs/commons@1.8.6': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@8.1.0': + dependencies: + '@sinonjs/commons': 1.8.6 + + '@sxzz/popperjs-es@2.11.7': {} + + '@tootallnate/once@1.1.2': {} + + '@transloadit/prettier-bytes@0.0.7': {} + + '@trysound/sax@0.2.0': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.25.2 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.25.2 + + '@types/conventional-commits-parser@5.0.0': + dependencies: + '@types/node': 20.14.15 + + '@types/dagre@0.7.52': {} + + '@types/estree@1.0.5': {} + + '@types/event-emitter@0.3.5': {} + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 20.14.15 + + '@types/gradient-string@1.1.6': + dependencies: + '@types/tinycolor2': 1.4.6 + + '@types/intro.js@5.1.5': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/js-cookie@3.0.6': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.7 + + '@types/lodash@4.17.7': {} + + '@types/mousetrap@1.6.15': {} + + '@types/node@20.14.15': + dependencies: + undici-types: 5.26.5 + + '@types/nprogress@0.2.3': {} + + '@types/prettier@2.7.3': {} + + '@types/qrcode@1.5.5': + dependencies: + '@types/node': 20.14.15 + + '@types/qs@6.9.15': {} + + '@types/sortablejs@1.15.8': {} + + '@types/stack-utils@2.0.3': {} + + '@types/tinycolor2@1.4.6': {} + + '@types/web-animations-js@2.2.16': {} + + '@types/web-bluetooth@0.0.14': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.20': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@16.0.9': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 9.9.0(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 + eslint: 9.9.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + + '@typescript-eslint/type-utils@7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + debug: 4.3.6 + eslint: 9.9.0(jiti@1.21.6) + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@7.18.0': {} + + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + eslint: 9.9.0(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + + '@uppy/companion-client@2.2.2': + dependencies: + '@uppy/utils': 4.1.3 + namespace-emitter: 2.0.1 + + '@uppy/core@2.3.4': + dependencies: + '@transloadit/prettier-bytes': 0.0.7 + '@uppy/store-default': 2.1.1 + '@uppy/utils': 4.1.3 + lodash.throttle: 4.1.1 + mime-match: 1.0.2 + namespace-emitter: 2.0.1 + nanoid: 3.3.7 + preact: 10.23.1 + + '@uppy/store-default@2.1.1': {} + + '@uppy/utils@4.1.3': + dependencies: + lodash.throttle: 4.1.1 + + '@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4)': + dependencies: + '@uppy/companion-client': 2.2.2 + '@uppy/core': 2.3.4 + '@uppy/utils': 4.1.3 + nanoid: 3.3.7 + + '@vitejs/plugin-vue-jsx@4.0.0(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8))(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.25.2) + vite: 5.4.0(@types/node@20.14.15)(sass@1.77.8) + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@5.1.2(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8))(vue@3.4.37(typescript@5.5.4))': + dependencies: + vite: 5.4.0(@types/node@20.14.15)(sass@1.77.8) + vue: 3.4.37(typescript@5.5.4) + + '@volar/language-core@2.4.0-alpha.18': + dependencies: + '@volar/source-map': 2.4.0-alpha.18 + + '@volar/source-map@2.4.0-alpha.18': {} + + '@volar/typescript@2.4.0-alpha.18': + dependencies: + '@volar/language-core': 2.4.0-alpha.18 + path-browserify: 1.0.1 + vscode-uri: 3.0.8 + + '@vue-flow/background@1.3.0(@vue-flow/core@1.39.3(vue@3.4.37(typescript@5.5.4)))(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@vue-flow/core': 1.39.3(vue@3.4.37(typescript@5.5.4)) + vue: 3.4.37(typescript@5.5.4) + + '@vue-flow/core@1.39.3(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@vueuse/core': 10.11.1(vue@3.4.37(typescript@5.5.4)) + d3-drag: 3.0.0 + d3-selection: 3.0.0 + d3-zoom: 3.0.0 + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - '@vue/composition-api' + + '@vue/babel-helper-vue-transform-on@1.2.2': {} + + '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.25.2)': + dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + '@vue/babel-helper-vue-transform-on': 1.2.2 + '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.25.2) + camelcase: 6.3.0 + html-tags: 3.3.1 + svg-tags: 1.0.0 + optionalDependencies: + '@babel/core': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.25.2)': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/parser': 7.25.3 + '@vue/compiler-sfc': 3.4.37 + + '@vue/compiler-core@3.4.37': + dependencies: + '@babel/parser': 7.25.3 + '@vue/shared': 3.4.37 + entities: 5.0.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + + '@vue/compiler-dom@3.4.37': + dependencies: + '@vue/compiler-core': 3.4.37 + '@vue/shared': 3.4.37 + + '@vue/compiler-sfc@3.4.37': + dependencies: + '@babel/parser': 7.25.3 + '@vue/compiler-core': 3.4.37 + '@vue/compiler-dom': 3.4.37 + '@vue/compiler-ssr': 3.4.37 + '@vue/shared': 3.4.37 + estree-walker: 2.0.2 + magic-string: 0.30.11 + postcss: 8.4.41 + source-map-js: 1.2.0 + + '@vue/compiler-ssr@3.4.37': + dependencies: + '@vue/compiler-dom': 3.4.37 + '@vue/shared': 3.4.37 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/devtools-api@6.6.3': {} + + '@vue/language-core@2.0.29(typescript@5.5.4)': + dependencies: + '@volar/language-core': 2.4.0-alpha.18 + '@vue/compiler-dom': 3.4.37 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.4.37 + computeds: 0.0.1 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.5.4 + + '@vue/reactivity@3.4.37': + dependencies: + '@vue/shared': 3.4.37 + + '@vue/runtime-core@3.4.37': + dependencies: + '@vue/reactivity': 3.4.37 + '@vue/shared': 3.4.37 + + '@vue/runtime-dom@3.4.37': + dependencies: + '@vue/reactivity': 3.4.37 + '@vue/runtime-core': 3.4.37 + '@vue/shared': 3.4.37 + csstype: 3.1.3 + + '@vue/server-renderer@3.4.37(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@vue/compiler-ssr': 3.4.37 + '@vue/shared': 3.4.37 + vue: 3.4.37(typescript@5.5.4) + + '@vue/shared@3.4.37': {} + + '@vueuse/core@10.11.1(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.1 + '@vueuse/shared': 10.11.1(vue@3.4.37(typescript@5.5.4)) + vue-demi: 0.14.10(vue@3.4.37(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@8.9.4(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@types/web-bluetooth': 0.0.14 + '@vueuse/metadata': 8.9.4 + '@vueuse/shared': 8.9.4(vue@3.4.37(typescript@5.5.4)) + vue-demi: 0.14.10(vue@3.4.37(typescript@5.5.4)) + optionalDependencies: + vue: 3.4.37(typescript@5.5.4) + + '@vueuse/core@9.13.0(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.4.37(typescript@5.5.4)) + vue-demi: 0.14.10(vue@3.4.37(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.11.1': {} + + '@vueuse/metadata@8.9.4': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/motion@2.2.3(rollup@4.20.0)(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@vueuse/core': 10.11.1(vue@3.4.37(typescript@5.5.4)) + '@vueuse/shared': 10.11.1(vue@3.4.37(typescript@5.5.4)) + csstype: 3.1.3 + framesync: 6.1.2 + popmotion: 11.0.5 + style-value-types: 5.1.2 + vue: 3.4.37(typescript@5.5.4) + optionalDependencies: + '@nuxt/kit': 3.12.4(rollup@4.20.0) + transitivePeerDependencies: + - '@vue/composition-api' + - magicast + - rollup + - supports-color + + '@vueuse/shared@10.11.1(vue@3.4.37(typescript@5.5.4))': + dependencies: + vue-demi: 0.14.10(vue@3.4.37(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@8.9.4(vue@3.4.37(typescript@5.5.4))': + dependencies: + vue-demi: 0.14.10(vue@3.4.37(typescript@5.5.4)) + optionalDependencies: + vue: 3.4.37(typescript@5.5.4) + + '@vueuse/shared@9.13.0(vue@3.4.37(typescript@5.5.4))': + dependencies: + vue-demi: 0.14.10(vue@3.4.37(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + is-url: 1.2.4 + lodash.throttle: 4.1.1 + nanoid: 3.3.7 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + prismjs: 1.29.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@types/event-emitter': 0.3.5 + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + dom7: 3.0.0 + event-emitter: 0.3.5 + html-void-elements: 2.0.1 + i18next: 20.6.1 + is-hotkey: 0.2.0 + lodash.camelcase: 4.3.0 + lodash.clonedeep: 4.5.0 + lodash.debounce: 4.0.8 + lodash.foreach: 4.5.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + lodash.toarray: 4.4.0 + nanoid: 3.3.7 + scroll-into-view-if-needed: 2.2.31 + slate: 0.72.8 + slate-history: 0.66.0(slate@0.72.8) + snabbdom: 3.6.2 + + '@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.4.37(typescript@5.5.4))': + dependencies: + '@wangeditor/editor': 5.1.23 + vue: 3.4.37(typescript@5.5.4) + + '@wangeditor/editor@5.1.23': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + is-hotkey: 0.2.0 + lodash.camelcase: 4.3.0 + lodash.clonedeep: 4.5.0 + lodash.debounce: 4.0.8 + lodash.foreach: 4.5.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + lodash.toarray: 4.4.0 + nanoid: 3.3.7 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + nanoid: 3.3.7 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + lodash.foreach: 4.5.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + nanoid: 3.3.7 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@zougt/some-loader-utils@1.4.3': + dependencies: + cac: 6.7.14 + color: 4.2.3 + cssnano: 5.1.15(postcss@8.4.41) + cssnano-preset-lite: 2.1.3(postcss@8.4.41) + fs-extra: 10.1.0 + postcss: 8.4.41 + prettier: 2.8.8 + uuid: 8.3.2 + + '@zxcvbn-ts/core@3.0.4': + dependencies: + fastest-levenshtein: 1.0.16 + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + abab@2.0.6: {} + + abbrev@1.1.1: + optional: true + + acorn-globals@6.0.0: + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn-walk@7.2.0: {} + + acorn@7.4.1: {} + + acorn@8.12.1: {} + + adler-32@1.3.1: {} + + agent-base@6.0.2: + dependencies: + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + animate.css@4.1.1: {} + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + aproba@2.0.0: + optional: true + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + optional: true + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-ify@1.0.0: {} + + array-union@2.1.0: {} + + astral-regex@2.0.0: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + autoprefixer@10.4.20(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + caniuse-lite: 1.0.30001651 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.1 + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + axios@1.7.3: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + babel-jest@27.5.1(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1(@babel/core@7.25.2) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.24.8 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@27.5.1: + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + + babel-preset-jest@27.5.1(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) + + balanced-match@1.0.2: {} + + balanced-match@2.0.0: {} + + base64-js@1.5.1: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + boolbase@1.0.0: {} + + boxen@7.1.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.3.0 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-process-hrtime@1.0.0: {} + + browserslist@4.23.3: + dependencies: + caniuse-lite: 1.0.30001651 + electron-to-chromium: 1.5.6 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-import@0.0.1: + dependencies: + get-tsconfig: 4.7.6 + import-from-string: 0.0.4 + + c12@1.11.1: + dependencies: + chokidar: 3.6.0 + confbox: 0.1.7 + defu: 6.1.4 + dotenv: 16.4.5 + giget: 1.2.3 + jiti: 1.21.6 + mlly: 1.7.1 + ohash: 1.1.3 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.1.3 + rc9: 2.1.2 + optional: true + + cac@6.7.14: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + camelcase@7.0.1: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.23.3 + caniuse-lite: 1.0.30001651 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001651: {} + + canvas@2.11.2: + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + nan: 2.20.0 + simple-get: 3.1.1 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + cfb@1.2.2: + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + char-regex@1.0.2: {} + + china-area-data@5.0.1: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@2.0.0: + optional: true + + ci-info@3.9.0: {} + + citty@0.1.6: + dependencies: + consola: 3.2.3 + optional: true + + cjs-module-lexer@1.3.1: {} + + cli-boxes@3.0.0: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + co@4.6.0: {} + + codepage@1.15.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color-support@1.1.3: + optional: true + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + colord@2.9.3: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + commander@4.1.1: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + commist@1.1.0: + dependencies: + leven: 2.1.0 + minimist: 1.2.8 + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + compatx@0.1.8: + optional: true + + compute-scroll-into-view@1.0.20: {} + + computeds@0.0.1: {} + + concat-map@0.0.1: {} + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + confbox@0.1.7: {} + + consola@3.2.3: + optional: true + + console-control-strings@1.1.0: + optional: true + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + core-js@3.38.0: {} + + cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.15)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): + dependencies: + '@types/node': 20.14.15 + cosmiconfig: 9.0.0(typescript@5.5.4) + jiti: 1.21.6 + typescript: 5.5.4 + + cosmiconfig@9.0.0(typescript@5.5.4): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.5.4 + + crc-32@1.2.2: {} + + cropperjs@1.6.2: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-declaration-sorter@6.4.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + css-declaration-sorter@7.2.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + css-functions-list@3.2.2: {} + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.0 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.0 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@5.2.14(postcss@8.4.41): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.41) + cssnano-utils: 3.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-calc: 8.2.4(postcss@8.4.41) + postcss-colormin: 5.3.1(postcss@8.4.41) + postcss-convert-values: 5.1.3(postcss@8.4.41) + postcss-discard-comments: 5.1.2(postcss@8.4.41) + postcss-discard-duplicates: 5.1.0(postcss@8.4.41) + postcss-discard-empty: 5.1.1(postcss@8.4.41) + postcss-discard-overridden: 5.1.0(postcss@8.4.41) + postcss-merge-longhand: 5.1.7(postcss@8.4.41) + postcss-merge-rules: 5.1.4(postcss@8.4.41) + postcss-minify-font-values: 5.1.0(postcss@8.4.41) + postcss-minify-gradients: 5.1.1(postcss@8.4.41) + postcss-minify-params: 5.1.4(postcss@8.4.41) + postcss-minify-selectors: 5.2.1(postcss@8.4.41) + postcss-normalize-charset: 5.1.0(postcss@8.4.41) + postcss-normalize-display-values: 5.1.0(postcss@8.4.41) + postcss-normalize-positions: 5.1.1(postcss@8.4.41) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.41) + postcss-normalize-string: 5.1.0(postcss@8.4.41) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.41) + postcss-normalize-unicode: 5.1.1(postcss@8.4.41) + postcss-normalize-url: 5.1.0(postcss@8.4.41) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.41) + postcss-ordered-values: 5.1.3(postcss@8.4.41) + postcss-reduce-initial: 5.1.2(postcss@8.4.41) + postcss-reduce-transforms: 5.1.0(postcss@8.4.41) + postcss-svgo: 5.1.0(postcss@8.4.41) + postcss-unique-selectors: 5.1.1(postcss@8.4.41) + + cssnano-preset-default@7.0.5(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + css-declaration-sorter: 7.2.0(postcss@8.4.41) + cssnano-utils: 5.0.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-calc: 10.0.1(postcss@8.4.41) + postcss-colormin: 7.0.2(postcss@8.4.41) + postcss-convert-values: 7.0.3(postcss@8.4.41) + postcss-discard-comments: 7.0.2(postcss@8.4.41) + postcss-discard-duplicates: 7.0.1(postcss@8.4.41) + postcss-discard-empty: 7.0.0(postcss@8.4.41) + postcss-discard-overridden: 7.0.0(postcss@8.4.41) + postcss-merge-longhand: 7.0.3(postcss@8.4.41) + postcss-merge-rules: 7.0.3(postcss@8.4.41) + postcss-minify-font-values: 7.0.0(postcss@8.4.41) + postcss-minify-gradients: 7.0.0(postcss@8.4.41) + postcss-minify-params: 7.0.2(postcss@8.4.41) + postcss-minify-selectors: 7.0.3(postcss@8.4.41) + postcss-normalize-charset: 7.0.0(postcss@8.4.41) + postcss-normalize-display-values: 7.0.0(postcss@8.4.41) + postcss-normalize-positions: 7.0.0(postcss@8.4.41) + postcss-normalize-repeat-style: 7.0.0(postcss@8.4.41) + postcss-normalize-string: 7.0.0(postcss@8.4.41) + postcss-normalize-timing-functions: 7.0.0(postcss@8.4.41) + postcss-normalize-unicode: 7.0.2(postcss@8.4.41) + postcss-normalize-url: 7.0.0(postcss@8.4.41) + postcss-normalize-whitespace: 7.0.0(postcss@8.4.41) + postcss-ordered-values: 7.0.1(postcss@8.4.41) + postcss-reduce-initial: 7.0.2(postcss@8.4.41) + postcss-reduce-transforms: 7.0.0(postcss@8.4.41) + postcss-svgo: 7.0.1(postcss@8.4.41) + postcss-unique-selectors: 7.0.2(postcss@8.4.41) + + cssnano-preset-lite@2.1.3(postcss@8.4.41): + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-discard-comments: 5.1.2(postcss@8.4.41) + postcss-discard-empty: 5.1.1(postcss@8.4.41) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.41) + + cssnano-utils@3.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + cssnano-utils@5.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + cssnano@5.1.15(postcss@8.4.41): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.41) + lilconfig: 2.1.0 + postcss: 8.4.41 + yaml: 1.10.2 + + cssnano@7.0.5(postcss@8.4.41): + dependencies: + cssnano-preset-default: 7.0.5(postcss@8.4.41) + lilconfig: 3.1.2 + postcss: 8.4.41 + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + cssom@0.3.8: {} + + cssom@0.4.4: {} + + cssstyle@2.3.0: + dependencies: + cssom: 0.3.8 + + csstype@3.1.3: {} + + d3-color@3.1.0: {} + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-ease@3.0.1: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-selection@3.0.0: {} + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + dagre@0.8.5: + dependencies: + graphlib: 2.1.8 + lodash: 4.17.21 + + danmu.js@1.1.13: + dependencies: + event-emitter: 0.3.5 + + dargs@8.1.0: {} + + data-urls@2.0.0: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + + dayjs@1.11.12: {} + + de-indent@1.0.2: {} + + debug@4.3.6: + dependencies: + ms: 2.1.2 + + decamelize@1.2.0: {} + + decimal.js@10.4.3: {} + + decompress-response@4.2.1: + dependencies: + mimic-response: 2.1.0 + optional: true + + dedent@0.7.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-lazy-prop@2.0.0: {} + + defu@6.1.4: + optional: true + + delayed-stream@1.0.0: {} + + delegate@3.2.0: {} + + delegates@1.0.0: + optional: true + + destr@2.0.3: + optional: true + + detect-libc@2.0.3: + optional: true + + detect-newline@3.1.0: {} + + didyoumean@1.2.2: {} + + diff-sequences@27.5.1: {} + + dijkstrajs@1.0.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + dom-zindex@1.0.4: {} + + dom7@3.0.0: + dependencies: + ssr-window: 3.0.0 + + domelementtype@2.3.0: {} + + domexception@2.0.1: + dependencies: + webidl-conversions: 5.0.0 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dotenv@16.4.5: + optional: true + + downloadjs@1.4.7: {} + + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + + eastasianwidth@0.2.0: {} + + echarts@5.5.1: + dependencies: + tslib: 2.3.0 + zrender: 5.6.0 + + el-table-infinite-scroll@3.0.6(typescript@5.5.4): + dependencies: + core-js: 3.38.0 + element-plus: 2.8.0(vue@3.4.37(typescript@5.5.4)) + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - '@vue/composition-api' + - typescript + + electron-to-chromium@1.5.6: {} + + element-plus@2.1.4(@types/lodash-es@4.17.12)(vue@3.4.37(typescript@5.5.4)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 1.1.4(vue@3.4.37(typescript@5.5.4)) + '@popperjs/core': 2.11.8 + '@vueuse/core': 8.9.4(vue@3.4.37(typescript@5.5.4)) + async-validator: 4.2.5 + dayjs: 1.11.12 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - '@types/lodash-es' + - '@vue/composition-api' + + element-plus@2.8.0(vue@3.4.37(typescript@5.5.4)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.1(vue@3.4.37(typescript@5.5.4)) + '@floating-ui/dom': 1.6.10 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.7 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.4.37(typescript@5.5.4)) + async-validator: 4.2.5 + dayjs: 1.11.12 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - '@vue/composition-api' + + emittery@0.8.1: {} + + emoji-regex@10.3.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@2.2.0: {} + + entities@4.5.0: {} + + entities@5.0.0: {} + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-module-lexer@0.4.1: {} + + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + + esbuild@0.19.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.1.2: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: + optional: true + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)): + dependencies: + eslint: 9.9.0(jiti@1.21.6) + + eslint-define-config@2.1.0: {} + + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(prettier@3.3.3): + dependencies: + eslint: 9.9.0(jiti@1.21.6) + prettier: 3.3.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.1 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@9.9.0(jiti@1.21.6)) + + eslint-plugin-vue@9.27.0(eslint@9.9.0(jiti@1.21.6)): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6)) + eslint: 9.9.0(jiti@1.21.6) + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.1 + semver: 7.6.3 + vue-eslint-parser: 9.4.3(eslint@9.9.0(jiti@1.21.6)) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@8.0.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint@9.9.0(jiti@1.21.6): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.0 + '@eslint/config-array': 0.17.1 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.9.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6 + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.6 + transitivePeerDependencies: + - supports-color + + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + + espree@10.1.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 + + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.5 + + esutils@2.0.3: {} + + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + exit@0.1.2: {} + + expect@27.5.1: + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + + ext@1.7.0: + dependencies: + type: 2.7.3 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.1: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + file-entry-cache@9.0.0: + dependencies: + flat-cache: 5.0.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flat-cache@5.0.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flatted@3.3.1: {} + + follow-redirects@1.15.6: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@3.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + frac@1.1.2: {} + + fraction.js@4.3.7: {} + + framesync@6.1.2: + dependencies: + tslib: 2.4.0 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + optional: true + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gauge@3.0.2: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + optional: true + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.2.0: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-package-type@0.1.0: {} + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + get-tsconfig@4.7.6: + dependencies: + resolve-pkg-maps: 1.0.0 + + giget@1.2.3: + dependencies: + citty: 0.1.6 + consola: 3.2.3 + defu: 6.1.4 + node-fetch-native: 1.6.4 + nypm: 0.3.9 + ohash: 1.1.3 + pathe: 1.1.2 + tar: 6.2.1 + optional: true + + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globals@14.0.0: {} + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + + globby@14.0.2: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.2 + ignore: 5.3.1 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + optional: true + + globjoin@0.1.4: {} + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + gradient-string@2.0.2: + dependencies: + chalk: 4.1.2 + tinygradient: 1.1.5 + + graphemer@1.4.0: {} + + graphlib@2.1.8: + dependencies: + lodash: 4.17.21 + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-unicode@2.0.1: + optional: true + + hash-sum@2.0.0: + optional: true + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + help-me@3.0.0: + dependencies: + glob: 7.2.3 + readable-stream: 3.6.2 + + hey-listen@1.0.8: {} + + hookable@5.5.3: + optional: true + + html-encoding-sniffer@2.0.1: + dependencies: + whatwg-encoding: 1.0.5 + + html-escaper@2.0.2: {} + + html-tags@3.3.1: {} + + html-void-elements@2.0.1: {} + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + + http-proxy-agent@4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + human-signals@5.0.0: {} + + husky@9.1.4: {} + + i18next@20.6.1: + dependencies: + '@babel/runtime': 7.25.0 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.1: {} + + immediate@3.0.6: {} + + immer@9.0.21: {} + + immutable@4.3.7: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-from-string@0.0.4: + dependencies: + esbuild: 0.19.12 + import-meta-resolve: 3.1.1 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + import-meta-resolve@3.1.1: {} + + import-meta-resolve@4.1.0: {} + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.3: {} + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + intro.js@7.2.0: {} + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.15.0: + dependencies: + hasown: 2.0.2 + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.2.0 + + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hotkey@0.2.0: {} + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-object@5.0.0: {} + + is-potential-custom-element-name@1.0.1: {} + + is-reference@3.0.2: + dependencies: + '@types/estree': 1.0.5 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + + is-typedarray@1.0.0: {} + + is-url@1.2.4: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.25.2 + '@babel/parser': 7.25.3 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.3.6 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-changed-files@27.5.1: + dependencies: + '@jest/types': 27.5.1 + execa: 5.1.1 + throat: 6.0.2 + + jest-circus@27.5.1: + dependencies: + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + + jest-cli@27.5.1(canvas@2.11.2): + dependencies: + '@jest/core': 27.5.1(canvas@2.11.2) + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.2.0 + jest-config: 27.5.1(canvas@2.11.2) + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + + jest-config@27.5.1(canvas@2.11.2): + dependencies: + '@babel/core': 7.25.2 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1(@babel/core@7.25.2) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1(canvas@2.11.2) + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1(canvas@2.11.2) + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.7 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + + jest-diff@27.5.1: + dependencies: + chalk: 4.1.2 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + + jest-docblock@27.5.1: + dependencies: + detect-newline: 3.1.0 + + jest-each@27.5.1: + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + + jest-environment-jsdom@27.5.1(canvas@2.11.2): + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + jest-mock: 27.5.1 + jest-util: 27.5.1 + jsdom: 16.7.0(canvas@2.11.2) + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + + jest-environment-node@27.5.1: + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + jest-mock: 27.5.1 + jest-util: 27.5.1 + + jest-get-type@27.5.1: {} + + jest-haste-map@27.5.1: + dependencies: + '@jest/types': 27.5.1 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.14.15 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.7 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-jasmine2@27.5.1: + dependencies: + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + + jest-leak-detector@27.5.1: + dependencies: + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + + jest-matcher-utils@27.5.1: + dependencies: + chalk: 4.1.2 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + + jest-message-util@27.5.1: + dependencies: + '@babel/code-frame': 7.24.7 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.7 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@27.5.1: + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + + jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + optionalDependencies: + jest-resolve: 27.5.1 + + jest-regex-util@27.5.1: {} + + jest-resolve-dependencies@27.5.1: + dependencies: + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 + transitivePeerDependencies: + - supports-color + + jest-resolve@27.5.1: + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) + jest-util: 27.5.1 + jest-validate: 27.5.1 + resolve: 1.22.8 + resolve.exports: 1.1.1 + slash: 3.0.0 + + jest-runner@27.5.1(canvas@2.11.2): + dependencies: + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + chalk: 4.1.2 + emittery: 0.8.1 + graceful-fs: 4.2.11 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1(canvas@2.11.2) + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + source-map-support: 0.5.21 + throat: 6.0.2 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + + jest-runtime@27.5.1: + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + cjs-module-lexer: 1.3.1 + collect-v8-coverage: 1.0.2 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-serializer@27.5.1: + dependencies: + '@types/node': 20.14.15 + graceful-fs: 4.2.11 + + jest-snapshot@27.5.1: + dependencies: + '@babel/core': 7.25.2 + '@babel/generator': 7.25.0 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__traverse': 7.20.6 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) + chalk: 4.1.2 + expect: 27.5.1 + graceful-fs: 4.2.11 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + natural-compare: 1.4.0 + pretty-format: 27.5.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jest-util@27.5.1: + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@27.5.1: + dependencies: + '@jest/types': 27.5.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 27.5.1 + leven: 3.1.0 + pretty-format: 27.5.1 + + jest-watcher@27.5.1: + dependencies: + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.15 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.5.1 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.14.15 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@27.5.1(canvas@2.11.2): + dependencies: + '@jest/core': 27.5.1(canvas@2.11.2) + import-local: 3.2.0 + jest-cli: 27.5.1(canvas@2.11.2) + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + + jiti@1.21.6: {} + + js-cookie@3.0.5: {} + + js-sdsl@4.3.0: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbarcode@3.11.6: {} + + jsdom@16.7.0(canvas@2.11.2): + dependencies: + abab: 2.0.6 + acorn: 8.12.1 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.1.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.12 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.10 + xml-name-validator: 3.0.0 + optionalDependencies: + canvas: 2.11.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-eslint-parser@2.4.0: + dependencies: + acorn: 8.12.1 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.6.3 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + klona@2.0.6: + optional: true + + knitwork@1.1.0: + optional: true + + known-css-properties@0.34.0: {} + + kolorist@1.8.0: {} + + leven@2.1.0: {} + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lie@3.1.1: + dependencies: + immediate: 3.0.6 + + lilconfig@2.1.0: {} + + lilconfig@3.1.2: {} + + lines-and-columns@1.2.4: {} + + lint-staged@15.2.8: + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + debug: 4.3.6 + execa: 8.0.1 + lilconfig: 3.1.2 + listr2: 8.2.4 + micromatch: 4.0.7 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.5.0 + transitivePeerDependencies: + - supports-color + + listr2@8.2.4: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + local-pkg@0.5.0: + dependencies: + mlly: 1.7.1 + pkg-types: 1.1.3 + optional: true + + localforage@1.10.0: + dependencies: + lie: 3.1.1 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + + lodash.camelcase@4.3.0: {} + + lodash.clonedeep@4.5.0: {} + + lodash.debounce@4.0.8: {} + + lodash.foreach@4.5.0: {} + + lodash.isequal@4.5.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.startcase@4.4.0: {} + + lodash.throttle@4.1.1: {} + + lodash.toarray@4.4.0: {} + + lodash.truncate@4.4.2: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + + lodash@4.17.21: {} + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + optional: true + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + mathml-tag-names@2.1.3: {} + + mdn-data@2.0.14: {} + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + memoize-one@6.0.0: {} + + meow@12.1.1: {} + + meow@13.2.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-match@1.0.2: + dependencies: + wildcard: 1.1.2 + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@2.1.0: + optional: true + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + optional: true + + minipass@5.0.0: + optional: true + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + optional: true + + mint-filter@4.0.3: {} + + mitt@2.1.0: {} + + mitt@3.0.1: {} + + mkdirp@1.0.4: + optional: true + + mlly@1.7.1: + dependencies: + acorn: 8.12.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + ufo: 1.5.4 + + mousetrap@1.6.5: {} + + mqtt-packet@6.10.0: + dependencies: + bl: 4.1.0 + debug: 4.3.6 + process-nextick-args: 2.0.1 + transitivePeerDependencies: + - supports-color + + mqtt@4.3.7: + dependencies: + commist: 1.1.0 + concat-stream: 2.0.0 + debug: 4.3.6 + duplexify: 4.1.3 + help-me: 3.0.0 + inherits: 2.0.4 + lru-cache: 6.0.0 + minimist: 1.2.8 + mqtt-packet: 6.10.0 + number-allocator: 1.0.14 + pump: 3.0.0 + readable-stream: 3.6.2 + reinterval: 1.1.0 + rfdc: 1.4.1 + split2: 3.2.2 + ws: 7.5.10 + xtend: 4.0.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + mri@1.2.0: + optional: true + + ms@2.1.2: {} + + muggle-string@0.4.1: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + namespace-emitter@2.0.1: {} + + nan@2.20.0: + optional: true + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + next-tick@1.1.0: {} + + node-fetch-native@1.6.4: + optional: true + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + optional: true + + node-int64@0.4.0: {} + + node-releases@2.0.18: {} + + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + optional: true + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + normalize-wheel-es@1.2.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npmlog@5.0.1: + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + optional: true + + nprogress@0.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + number-allocator@1.0.14: + dependencies: + debug: 4.3.6 + js-sdsl: 4.3.0 + transitivePeerDependencies: + - supports-color + + nwsapi@2.2.12: {} + + nypm@0.3.9: + dependencies: + citty: 0.1.6 + consola: 3.2.3 + execa: 8.0.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + ufo: 1.5.4 + optional: true + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.2: {} + + ohash@1.1.3: + optional: true + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.1.1 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse5@6.0.1: {} + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.2.2: {} + + path-type@4.0.0: {} + + path-type@5.0.0: + optional: true + + path2d@0.2.1: + optional: true + + path@0.12.7: + dependencies: + process: 0.11.10 + util: 0.10.4 + + pathe@1.1.2: {} + + pdfjs-dist@4.5.136: + optionalDependencies: + canvas: 2.11.2 + path2d: 0.2.1 + transitivePeerDependencies: + - encoding + - supports-color + + perfect-debounce@1.0.0: + optional: true + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pinia@2.2.1(typescript@5.5.4)(vue@3.4.37(typescript@5.5.4)): + dependencies: + '@vue/devtools-api': 6.6.3 + vue: 3.4.37(typescript@5.5.4) + vue-demi: 0.14.10(vue@3.4.37(typescript@5.5.4)) + optionalDependencies: + typescript: 5.5.4 + + pinyin-pro@3.24.2: {} + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-types@1.1.3: + dependencies: + confbox: 0.1.7 + mlly: 1.7.1 + pathe: 1.1.2 + + plus-pro-components@0.1.14(element-plus@2.8.0(vue@3.4.37(typescript@5.5.4)))(vue@3.4.37(typescript@5.5.4)): + dependencies: + '@element-plus/icons-vue': 2.3.1(vue@3.4.37(typescript@5.5.4)) + element-plus: 2.8.0(vue@3.4.37(typescript@5.5.4)) + lodash-es: 4.17.21 + sortablejs: 1.15.2 + vue: 3.4.37(typescript@5.5.4) + + pngjs@5.0.0: {} + + popmotion@11.0.5: + dependencies: + framesync: 6.1.2 + hey-listen: 1.0.8 + style-value-types: 5.1.2 + tslib: 2.4.0 + + postcss-calc@10.0.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + + postcss-calc@8.2.4(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + + postcss-colormin@5.3.1(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-colormin@7.0.2(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-convert-values@5.1.3(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-convert-values@7.0.3(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@5.1.2(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-discard-comments@7.0.2(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + postcss-discard-duplicates@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-discard-duplicates@7.0.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-discard-empty@5.1.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-discard-empty@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-discard-overridden@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-discard-overridden@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-html@1.7.0: + dependencies: + htmlparser2: 8.0.2 + js-tokens: 9.0.0 + postcss: 8.4.41 + postcss-safe-parser: 6.0.0(postcss@8.4.41) + + postcss-import@15.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-import@16.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.41): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.41 + + postcss-load-config@4.0.2(postcss@8.4.41): + dependencies: + lilconfig: 3.1.2 + yaml: 2.5.0 + optionalDependencies: + postcss: 8.4.41 + + postcss-media-query-parser@0.2.3: {} + + postcss-merge-longhand@5.1.7(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.41) + + postcss-merge-longhand@7.0.3(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + stylehacks: 7.0.3(postcss@8.4.41) + + postcss-merge-rules@5.1.4(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + postcss-merge-rules@7.0.3(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + caniuse-api: 3.0.0 + cssnano-utils: 5.0.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + postcss-minify-font-values@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-minify-font-values@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@5.1.1(postcss@8.4.41): + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@7.0.0(postcss@8.4.41): + dependencies: + colord: 2.9.3 + cssnano-utils: 5.0.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-minify-params@5.1.4(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + cssnano-utils: 3.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-minify-params@7.0.2(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + cssnano-utils: 5.0.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@5.2.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + postcss-minify-selectors@7.0.3(postcss@8.4.41): + dependencies: + cssesc: 3.0.0 + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + postcss-nested@6.2.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + postcss-normalize-charset@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-normalize-charset@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-normalize-display-values@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-display-values@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@5.1.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@5.1.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@5.1.1(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@7.0.2(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@5.1.0(postcss@8.4.41): + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@5.1.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@5.1.3(postcss@8.4.41): + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@7.0.1(postcss@8.4.41): + dependencies: + cssnano-utils: 5.0.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@5.1.2(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + caniuse-api: 3.0.0 + postcss: 8.4.41 + + postcss-reduce-initial@7.0.2(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + caniuse-api: 3.0.0 + postcss: 8.4.41 + + postcss-reduce-transforms@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-reduce-transforms@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + + postcss-resolve-nested-selector@0.1.5: {} + + postcss-safe-parser@6.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-safe-parser@7.0.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-scss@4.0.9(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-selector-parser@6.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-sorting@8.0.2(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + + postcss-svgo@5.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + + postcss-svgo@7.0.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + svgo: 3.3.2 + + postcss-unique-selectors@5.1.1(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + postcss-unique-selectors@7.0.2(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.41: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + preact@10.23.1: {} + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@2.8.8: {} + + prettier@3.3.3: {} + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + prismjs@1.29.0: {} + + process-nextick-args@2.0.1: {} + + process@0.11.10: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-from-env@1.1.0: {} + + psl@1.9.0: {} + + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + qrcode@1.5.4: + dependencies: + dijkstrajs: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.3 + optional: true + + react-is@17.0.2: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + reinterval@1.1.0: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-main-filename@2.0.0: {} + + requires-port@1.0.0: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@1.1.1: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responsive-storage@2.2.0: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.0.4: {} + + rfdc@1.4.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + + rollup-plugin-external-globals@0.10.0(rollup@4.20.0): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + estree-walker: 3.0.3 + is-reference: 3.0.2 + magic-string: 0.30.11 + rollup: 4.20.0 + + rollup-plugin-visualizer@5.12.0(rollup@4.20.0): + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.4 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.20.0 + + rollup@4.20.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.20.0 + '@rollup/rollup-android-arm64': 4.20.0 + '@rollup/rollup-darwin-arm64': 4.20.0 + '@rollup/rollup-darwin-x64': 4.20.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 + '@rollup/rollup-linux-arm-musleabihf': 4.20.0 + '@rollup/rollup-linux-arm64-gnu': 4.20.0 + '@rollup/rollup-linux-arm64-musl': 4.20.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 + '@rollup/rollup-linux-riscv64-gnu': 4.20.0 + '@rollup/rollup-linux-s390x-gnu': 4.20.0 + '@rollup/rollup-linux-x64-gnu': 4.20.0 + '@rollup/rollup-linux-x64-musl': 4.20.0 + '@rollup/rollup-win32-arm64-msvc': 4.20.0 + '@rollup/rollup-win32-ia32-msvc': 4.20.0 + '@rollup/rollup-win32-x64-msvc': 4.20.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sass@1.77.8: + dependencies: + chokidar: 3.6.0 + immutable: 4.3.7 + source-map-js: 1.2.0 + + saxes@5.0.1: + dependencies: + xmlchars: 2.2.0 + + scroll-into-view-if-needed@2.2.31: + dependencies: + compute-scroll-into-view: 1.0.20 + + scule@1.3.0: + optional: true + + semver@6.3.1: {} + + semver@7.6.3: {} + + set-blocking@2.0.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-concat@1.0.1: + optional: true + + simple-get@3.1.1: + dependencies: + decompress-response: 4.2.1 + once: 1.4.0 + simple-concat: 1.0.1 + optional: true + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slash@5.1.0: + optional: true + + slate-history@0.66.0(slate@0.72.8): + dependencies: + is-plain-object: 5.0.0 + slate: 0.72.8 + + slate@0.72.8: + dependencies: + immer: 9.0.21 + is-plain-object: 5.0.0 + tiny-warning: 1.0.3 + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + snabbdom@3.6.2: {} + + sortablejs@1.14.0: {} + + sortablejs@1.15.2: {} + + source-map-js@1.2.0: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + sourcemap-codec@1.4.8: {} + + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + + split2@4.2.0: {} + + sprintf-js@1.0.3: {} + + ssf@0.11.2: + dependencies: + frac: 1.1.2 + + ssr-window@3.0.0: {} + + stable@0.1.8: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + std-env@3.7.0: + optional: true + + stream-shift@1.0.3: {} + + string-argv@0.3.2: {} + + string-hash@1.1.3: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@3.1.1: {} + + strip-literal@2.1.0: + dependencies: + js-tokens: 9.0.0 + optional: true + + style-value-types@5.1.2: + dependencies: + hey-listen: 1.0.8 + tslib: 2.4.0 + + stylehacks@5.1.1(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + stylehacks@7.0.3(postcss@8.4.41): + dependencies: + browserslist: 4.23.3 + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + postcss-html: 1.7.0 + stylelint: 16.8.1(typescript@5.5.4) + + stylelint-config-recess-order@5.0.1(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + stylelint: 16.8.1(typescript@5.5.4) + stylelint-order: 6.0.4(stylelint@16.8.1(typescript@5.5.4)) + + stylelint-config-recommended-scss@14.1.0(postcss@8.4.41)(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + postcss-scss: 4.0.9(postcss@8.4.41) + stylelint: 16.8.1(typescript@5.5.4) + stylelint-config-recommended: 14.0.1(stylelint@16.8.1(typescript@5.5.4)) + stylelint-scss: 6.5.0(stylelint@16.8.1(typescript@5.5.4)) + optionalDependencies: + postcss: 8.4.41 + + stylelint-config-recommended-vue@1.5.0(postcss-html@1.7.0)(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + postcss-html: 1.7.0 + semver: 7.6.3 + stylelint: 16.8.1(typescript@5.5.4) + stylelint-config-html: 1.1.0(postcss-html@1.7.0)(stylelint@16.8.1(typescript@5.5.4)) + stylelint-config-recommended: 14.0.1(stylelint@16.8.1(typescript@5.5.4)) + + stylelint-config-recommended@14.0.1(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + stylelint: 16.8.1(typescript@5.5.4) + + stylelint-config-standard-scss@13.1.0(postcss@8.4.41)(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + stylelint: 16.8.1(typescript@5.5.4) + stylelint-config-recommended-scss: 14.1.0(postcss@8.4.41)(stylelint@16.8.1(typescript@5.5.4)) + stylelint-config-standard: 36.0.1(stylelint@16.8.1(typescript@5.5.4)) + optionalDependencies: + postcss: 8.4.41 + + stylelint-config-standard@36.0.1(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + stylelint: 16.8.1(typescript@5.5.4) + stylelint-config-recommended: 14.0.1(stylelint@16.8.1(typescript@5.5.4)) + + stylelint-order@6.0.4(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + postcss: 8.4.41 + postcss-sorting: 8.0.2(postcss@8.4.41) + stylelint: 16.8.1(typescript@5.5.4) + + stylelint-prettier@5.0.2(prettier@3.3.3)(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + prettier: 3.3.3 + prettier-linter-helpers: 1.0.0 + stylelint: 16.8.1(typescript@5.5.4) + + stylelint-scss@6.5.0(stylelint@16.8.1(typescript@5.5.4)): + dependencies: + css-tree: 2.3.1 + is-plain-object: 5.0.0 + known-css-properties: 0.34.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.5 + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + stylelint: 16.8.1(typescript@5.5.4) + + stylelint@16.8.1(typescript@5.5.4): + dependencies: + '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1) + '@csstools/css-tokenizer': 2.4.1 + '@csstools/media-query-list-parser': 2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.1) + '@dual-bundle/import-meta-resolve': 4.1.0 + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 9.0.0(typescript@5.5.4) + css-functions-list: 3.2.2 + css-tree: 2.3.1 + debug: 4.3.6 + fast-glob: 3.3.2 + fastest-levenshtein: 1.0.16 + file-entry-cache: 9.0.0 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.34.0 + mathml-tag-names: 2.1.3 + meow: 13.2.0 + micromatch: 4.0.7 + normalize-path: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.41 + postcss-resolve-nested-selector: 0.1.5 + postcss-safe-parser: 7.0.0(postcss@8.4.41) + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 7.1.0 + supports-hyperlinks: 3.0.0 + svg-tags: 1.0.0 + table: 6.8.2 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@2.3.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-hyperlinks@3.0.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-tags@1.0.0: {} + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.1 + stable: 0.1.8 + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.0.1 + + swiper@11.1.9: {} + + symbol-tree@3.2.4: {} + + synckit@0.9.1: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.3 + + table@6.8.2: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + tailwindcss@3.4.9: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.7 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.41 + postcss-import: 15.1.0(postcss@8.4.41) + postcss-js: 4.0.1(postcss@8.4.41) + postcss-load-config: 4.0.2(postcss@8.4.41) + postcss-nested: 6.2.0(postcss@8.4.41) + postcss-selector-parser: 6.1.1 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + optional: true + + terminal-link@2.1.1: + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-extensions@2.4.0: {} + + text-table@0.2.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + throat@6.0.2: {} + + through@2.3.8: {} + + tiny-invariant@1.3.3: {} + + tiny-warning@1.0.3: {} + + tinycolor2@1.6.0: {} + + tinygradient@1.1.5: + dependencies: + '@types/tinycolor2': 1.4.6 + tinycolor2: 1.6.0 + + tippy.js@6.3.7: + dependencies: + '@popperjs/core': 2.11.8 + + tmpl@1.0.5: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tough-cookie@4.1.4: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tr46@0.0.3: + optional: true + + tr46@2.1.0: + dependencies: + punycode: 2.3.1 + + ts-api-utils@1.3.0(typescript@5.5.4): + dependencies: + typescript: 5.5.4 + + ts-interface-checker@0.1.13: {} + + tslib@2.3.0: {} + + tslib@2.4.0: {} + + tslib@2.6.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@2.19.0: {} + + type@2.7.3: {} + + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + typedarray@0.0.6: {} + + typeit@8.8.4: + dependencies: + '@types/web-animations-js': 2.2.16 + + typescript@5.5.4: {} + + ufo@1.5.4: {} + + uncrypto@0.1.3: + optional: true + + unctx@2.3.1: + dependencies: + acorn: 8.12.1 + estree-walker: 3.0.3 + magic-string: 0.30.11 + unplugin: 1.12.1 + optional: true + + undici-types@5.26.5: {} + + unicorn-magic@0.1.0: {} + + unimport@3.10.0(rollup@4.20.0): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + acorn: 8.12.1 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.2 + local-pkg: 0.5.0 + magic-string: 0.30.11 + mlly: 1.7.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + scule: 1.3.0 + strip-literal: 2.1.0 + unplugin: 1.12.1 + transitivePeerDependencies: + - rollup + optional: true + + universalify@0.2.0: {} + + universalify@2.0.1: {} + + unplugin@1.12.1: + dependencies: + acorn: 8.12.1 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.2 + + untyped@1.4.2: + dependencies: + '@babel/core': 7.25.2 + '@babel/standalone': 7.25.3 + '@babel/types': 7.25.2 + defu: 6.1.4 + jiti: 1.21.6 + mri: 1.2.0 + scule: 1.3.0 + transitivePeerDependencies: + - supports-color + optional: true + + update-browserslist-db@1.1.0(browserslist@4.23.3): + dependencies: + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + util-deprecate@1.0.2: {} + + util@0.10.4: + dependencies: + inherits: 2.0.3 + + uuid@8.3.2: {} + + v-contextmenu@3.2.0(vue@3.4.37(typescript@5.5.4)): + dependencies: + vue: 3.4.37(typescript@5.5.4) + + v3-infinite-loading@1.3.1: {} + + v8-to-istanbul@8.1.1: + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 1.9.0 + source-map: 0.7.4 + + version-rocket@1.7.2: + dependencies: + axios: 1.7.3 + dayjs: 1.11.12 + transitivePeerDependencies: + - debug + + vite-plugin-cdn-import@1.0.1(rollup@4.20.0)(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8)): + dependencies: + rollup-plugin-external-globals: 0.10.0(rollup@4.20.0) + vite-plugin-externals: 0.6.2(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8)) + transitivePeerDependencies: + - rollup + - vite + + vite-plugin-checker@0.7.2(eslint@9.9.0(jiti@1.21.6))(optionator@0.9.4)(stylelint@16.8.1(typescript@5.5.4))(typescript@5.5.4)(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8))(vue-tsc@2.0.29(typescript@5.5.4)): + dependencies: + '@babel/code-frame': 7.24.7 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + chokidar: 3.6.0 + commander: 8.3.0 + fast-glob: 3.3.2 + fs-extra: 11.2.0 + npm-run-path: 4.0.1 + strip-ansi: 6.0.1 + tiny-invariant: 1.3.3 + vite: 5.4.0(@types/node@20.14.15)(sass@1.77.8) + vscode-languageclient: 7.0.0 + vscode-languageserver: 7.0.0 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + optionalDependencies: + eslint: 9.9.0(jiti@1.21.6) + optionator: 0.9.4 + stylelint: 16.8.1(typescript@5.5.4) + typescript: 5.5.4 + vue-tsc: 2.0.29(typescript@5.5.4) + + vite-plugin-compression@0.5.1(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8)): + dependencies: + chalk: 4.1.2 + debug: 4.3.6 + fs-extra: 10.1.0 + vite: 5.4.0(@types/node@20.14.15)(sass@1.77.8) + transitivePeerDependencies: + - supports-color + + vite-plugin-externals@0.6.2(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8)): + dependencies: + acorn: 8.12.1 + es-module-lexer: 0.4.1 + fs-extra: 10.1.0 + magic-string: 0.25.9 + vite: 5.4.0(@types/node@20.14.15)(sass@1.77.8) + + vite-plugin-fake-server@2.1.1: + dependencies: + bundle-import: 0.0.1 + chokidar: 3.6.0 + fast-glob: 3.3.2 + path-to-regexp: 6.2.2 + picocolors: 1.0.1 + + vite-plugin-remove-console@2.2.0: {} + + vite-plugin-router-warn@1.0.0: {} + + vite-plugin-vue-inspector@5.1.3(vite@5.4.0(@types/node@20.14.15)(sass@1.77.8)): + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.25.2) + '@vue/compiler-dom': 3.4.37 + kolorist: 1.8.0 + magic-string: 0.30.11 + vite: 5.4.0(@types/node@20.14.15)(sass@1.77.8) + transitivePeerDependencies: + - supports-color + + vite-svg-loader@5.1.0(vue@3.4.37(typescript@5.5.4)): + dependencies: + svgo: 3.3.2 + vue: 3.4.37(typescript@5.5.4) + + vite@5.4.0(@types/node@20.14.15)(sass@1.77.8): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.41 + rollup: 4.20.0 + optionalDependencies: + '@types/node': 20.14.15 + fsevents: 2.3.3 + sass: 1.77.8 + + vscode-jsonrpc@6.0.0: {} + + vscode-languageclient@7.0.0: + dependencies: + minimatch: 3.1.2 + semver: 7.6.3 + vscode-languageserver-protocol: 3.16.0 + + vscode-languageserver-protocol@3.16.0: + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.16.0: {} + + vscode-languageserver@7.0.0: + dependencies: + vscode-languageserver-protocol: 3.16.0 + + vscode-uri@3.0.8: {} + + vue-demi@0.14.10(vue@3.4.37(typescript@5.5.4)): + dependencies: + vue: 3.4.37(typescript@5.5.4) + + vue-eslint-parser@9.4.3(eslint@9.9.0(jiti@1.21.6)): + dependencies: + debug: 4.3.6 + eslint: 9.9.0(jiti@1.21.6) + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + vue-i18n@9.13.1(vue@3.4.37(typescript@5.5.4)): + dependencies: + '@intlify/core-base': 9.13.1 + '@intlify/shared': 9.13.1 + '@vue/devtools-api': 6.6.3 + vue: 3.4.37(typescript@5.5.4) + + vue-json-pretty@2.4.0(vue@3.4.37(typescript@5.5.4)): + dependencies: + vue: 3.4.37(typescript@5.5.4) + + vue-observe-visibility@2.0.0-alpha.1(vue@3.4.37(typescript@5.5.4)): + dependencies: + vue: 3.4.37(typescript@5.5.4) + + vue-pdf-embed@2.1.0(vue@3.4.37(typescript@5.5.4)): + dependencies: + pdfjs-dist: 4.5.136 + vue: 3.4.37(typescript@5.5.4) + transitivePeerDependencies: + - encoding + - supports-color + + vue-resize@2.0.0-alpha.1(vue@3.4.37(typescript@5.5.4)): + dependencies: + vue: 3.4.37(typescript@5.5.4) + + vue-router@4.4.3(vue@3.4.37(typescript@5.5.4)): + dependencies: + '@vue/devtools-api': 6.6.3 + vue: 3.4.37(typescript@5.5.4) + + vue-tippy@6.4.4(vue@3.4.37(typescript@5.5.4)): + dependencies: + tippy.js: 6.3.7 + vue: 3.4.37(typescript@5.5.4) + + vue-tsc@2.0.29(typescript@5.5.4): + dependencies: + '@volar/typescript': 2.4.0-alpha.18 + '@vue/language-core': 2.0.29(typescript@5.5.4) + semver: 7.6.3 + typescript: 5.5.4 + + vue-types@5.1.3(vue@3.4.37(typescript@5.5.4)): + dependencies: + is-plain-object: 5.0.0 + optionalDependencies: + vue: 3.4.37(typescript@5.5.4) + + vue-virtual-scroller@2.0.0-beta.8(vue@3.4.37(typescript@5.5.4)): + dependencies: + mitt: 2.1.0 + vue: 3.4.37(typescript@5.5.4) + vue-observe-visibility: 2.0.0-alpha.1(vue@3.4.37(typescript@5.5.4)) + vue-resize: 2.0.0-alpha.1(vue@3.4.37(typescript@5.5.4)) + + vue-waterfall-plugin-next@2.4.3(@types/lodash-es@4.17.12)(vue@3.4.37(typescript@5.5.4)): + dependencies: + animate.css: 4.1.1 + element-plus: 2.1.4(@types/lodash-es@4.17.12)(vue@3.4.37(typescript@5.5.4)) + vue-router: 4.4.3(vue@3.4.37(typescript@5.5.4)) + transitivePeerDependencies: + - '@types/lodash-es' + - '@vue/composition-api' + - vue + + vue3-danmaku@1.6.1(vue@3.4.37(typescript@5.5.4)): + dependencies: + vue: 3.4.37(typescript@5.5.4) + + vue3-puzzle-vcode@1.1.7: {} + + vue@3.4.37(typescript@5.5.4): + dependencies: + '@vue/compiler-dom': 3.4.37 + '@vue/compiler-sfc': 3.4.37 + '@vue/runtime-dom': 3.4.37 + '@vue/server-renderer': 3.4.37(vue@3.4.37(typescript@5.5.4)) + '@vue/shared': 3.4.37 + optionalDependencies: + typescript: 5.5.4 + + vuedraggable@4.1.0(vue@3.4.37(typescript@5.5.4)): + dependencies: + sortablejs: 1.14.0 + vue: 3.4.37(typescript@5.5.4) + + vxe-table@4.6.17(vue@3.4.37(typescript@5.5.4)): + dependencies: + dom-zindex: 1.0.4 + vue: 3.4.37(typescript@5.5.4) + xe-utils: 3.5.30 + + w3c-hr-time@1.0.2: + dependencies: + browser-process-hrtime: 1.0.0 + + w3c-xmlserializer@2.0.0: + dependencies: + xml-name-validator: 3.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + wavesurfer.js@7.8.3: {} + + webidl-conversions@3.0.1: + optional: true + + webidl-conversions@5.0.0: {} + + webidl-conversions@6.1.0: {} + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.2: {} + + whatwg-encoding@1.0.5: + dependencies: + iconv-lite: 0.4.24 + + whatwg-mimetype@2.3.0: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + optional: true + + whatwg-url@8.7.0: + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + + which-module@2.0.1: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + optional: true + + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + + wildcard@1.1.2: {} + + wmf@1.0.2: {} + + word-wrap@1.2.5: {} + + word@0.3.0: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + ws@7.5.10: {} + + xe-utils@3.5.30: {} + + xgplayer-subtitles@3.0.19(core-js@3.38.0): + dependencies: + core-js: 3.38.0 + eventemitter3: 4.0.7 + + xgplayer@3.0.19(core-js@3.38.0): + dependencies: + core-js: 3.38.0 + danmu.js: 1.1.13 + delegate: 3.2.0 + downloadjs: 1.4.7 + eventemitter3: 4.0.7 + xgplayer-subtitles: 3.0.19(core-js@3.38.0) + + xlsx@0.18.5: + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + + xml-name-validator@3.0.0: {} + + xml-name-validator@4.0.0: {} + + xmlchars@2.2.0: {} + + xtend@4.0.2: {} + + y18n@4.0.3: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml-eslint-parser@1.2.3: + dependencies: + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.5.0 + + yaml@1.10.2: {} + + yaml@2.5.0: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + yocto-queue@1.1.1: {} + + zrender@5.6.0: + dependencies: + tslib: 2.3.0 diff --git a/Yi.Pure.Vue3/postcss.config.js b/Yi.Pure.Vue3/postcss.config.js new file mode 100644 index 00000000..86239486 --- /dev/null +++ b/Yi.Pure.Vue3/postcss.config.js @@ -0,0 +1,12 @@ +// @ts-check + +/** @type {import('postcss-load-config').Config} */ +export default { + plugins: { + "postcss-import": {}, + "tailwindcss/nesting": {}, + tailwindcss: {}, + autoprefixer: {}, + ...(process.env.NODE_ENV === "production" ? { cssnano: {} } : {}) + } +}; diff --git a/Yi.Pure.Vue3/public/audio/海阔天空.mp3 b/Yi.Pure.Vue3/public/audio/海阔天空.mp3 new file mode 100644 index 00000000..39bcbe34 Binary files /dev/null and b/Yi.Pure.Vue3/public/audio/海阔天空.mp3 differ diff --git a/Yi.Pure.Vue3/public/favicon.ico b/Yi.Pure.Vue3/public/favicon.ico new file mode 100644 index 00000000..bef93d4b Binary files /dev/null and b/Yi.Pure.Vue3/public/favicon.ico differ diff --git a/Yi.Pure.Vue3/public/html/button.html b/Yi.Pure.Vue3/public/html/button.html new file mode 100644 index 00000000..b64e3296 --- /dev/null +++ b/Yi.Pure.Vue3/public/html/button.html @@ -0,0 +1,721 @@ + + + + + + + +
+
JAVA攻城狮
+
Golang工程师!
+
js攻城狮
+
+
+ Ruby攻城狮 +
+ +
+ VB攻城狮 +
+
+
python攻城狮
+
python攻城狮
+
python攻城狮
+
python攻城狮
+
python攻城狮
+ +
php攻城狮
+
php攻城狮
+
php攻城狮
+
php攻城狮
+
php攻城狮
+ +
kotlin攻城狮
+
kotlin攻城狮
+
kotlin攻城狮
+
kotlin攻城狮
+
kotlin攻城狮
+
C语言攻城狮
+
+ + + diff --git a/Yi.Pure.Vue3/public/logo.svg b/Yi.Pure.Vue3/public/logo.svg new file mode 100644 index 00000000..a63d2b1a --- /dev/null +++ b/Yi.Pure.Vue3/public/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/public/platform-config.json b/Yi.Pure.Vue3/public/platform-config.json new file mode 100644 index 00000000..085249b1 --- /dev/null +++ b/Yi.Pure.Vue3/public/platform-config.json @@ -0,0 +1,35 @@ +{ + "Version": "5.8.0", + "Title": "Yi-PureAdmin", + "FixedHeader": true, + "HiddenSideBar": false, + "MultiTagsCache": false, + "KeepAlive": true, + "Locale": "zh", + "Layout": "vertical", + "Theme": "light", + "DarkMode": false, + "OverallStyle": "light", + "Grey": false, + "Weak": false, + "HideTabs": false, + "HideFooter": false, + "Stretch": false, + "SidebarStatus": true, + "EpThemeColor": "#409EFF", + "ShowLogo": true, + "ShowModel": "smart", + "MenuArrowIconNoTransition": false, + "CachingAsyncRoutes": false, + "TooltipEffect": "light", + "ResponsiveStorageNameSpace": "responsive-", + "MenuSearchHistory": 6, + "MapConfigure": { + "amapKey": "adc139d56406f3844c8f1cf1c6b65c41", + "options": { + "resizeEnable": true, + "center": [113.6401, 34.72468], + "zoom": 12 + } + } +} diff --git a/Yi.Pure.Vue3/public/wasm/capture.worker.js b/Yi.Pure.Vue3/public/wasm/capture.worker.js new file mode 100644 index 00000000..8e34c4fe --- /dev/null +++ b/Yi.Pure.Vue3/public/wasm/capture.worker.js @@ -0,0 +1,11349 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(Module) { ..generated code.. } +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != "undefined" ? Module : {}; + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) +/******/ (function () { + // webpackBootstrap + /******/ var __webpack_modules__ = { + /***/ 3099: /***/ function (module) { + module.exports = function (it) { + if (typeof it != "function") { + throw TypeError(String(it) + " is not a function"); + } + return it; + }; + + /***/ + }, + + /***/ 6077: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + + module.exports = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + " as a prototype"); + } + return it; + }; + + /***/ + }, + + /***/ 1223: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + var create = __webpack_require__(30); + var definePropertyModule = __webpack_require__(3070); + + var UNSCOPABLES = wellKnownSymbol("unscopables"); + var ArrayPrototype = Array.prototype; + + // Array.prototype[@@unscopables] + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + if (ArrayPrototype[UNSCOPABLES] == undefined) { + definePropertyModule.f(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + + // add a key to Array.prototype[@@unscopables] + module.exports = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + + /***/ + }, + + /***/ 5787: /***/ function (module) { + module.exports = function (it, Constructor, name) { + if (!(it instanceof Constructor)) { + throw TypeError( + "Incorrect " + (name ? name + " " : "") + "invocation" + ); + } + return it; + }; + + /***/ + }, + + /***/ 9670: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + + module.exports = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + " is not an object"); + } + return it; + }; + + /***/ + }, + + /***/ 4019: /***/ function (module) { + module.exports = + typeof ArrayBuffer !== "undefined" && typeof DataView !== "undefined"; + + /***/ + }, + + /***/ 260: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var NATIVE_ARRAY_BUFFER = __webpack_require__(4019); + var DESCRIPTORS = __webpack_require__(9781); + var global = __webpack_require__(7854); + var isObject = __webpack_require__(111); + var has = __webpack_require__(6656); + var classof = __webpack_require__(648); + var createNonEnumerableProperty = __webpack_require__(8880); + var redefine = __webpack_require__(1320); + var defineProperty = __webpack_require__(3070).f; + var getPrototypeOf = __webpack_require__(9518); + var setPrototypeOf = __webpack_require__(7674); + var wellKnownSymbol = __webpack_require__(5112); + var uid = __webpack_require__(9711); + + var Int8Array = global.Int8Array; + var Int8ArrayPrototype = Int8Array && Int8Array.prototype; + var Uint8ClampedArray = global.Uint8ClampedArray; + var Uint8ClampedArrayPrototype = + Uint8ClampedArray && Uint8ClampedArray.prototype; + var TypedArray = Int8Array && getPrototypeOf(Int8Array); + var TypedArrayPrototype = + Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype); + var ObjectPrototype = Object.prototype; + var isPrototypeOf = ObjectPrototype.isPrototypeOf; + + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var TYPED_ARRAY_TAG = uid("TYPED_ARRAY_TAG"); + // Fixing native typed arrays in Opera Presto crashes the browser, see #595 + var NATIVE_ARRAY_BUFFER_VIEWS = + NATIVE_ARRAY_BUFFER && + !!setPrototypeOf && + classof(global.opera) !== "Opera"; + var TYPED_ARRAY_TAG_REQIRED = false; + var NAME; + + var TypedArrayConstructorsList = { + Int8Array: 1, + Uint8Array: 1, + Uint8ClampedArray: 1, + Int16Array: 2, + Uint16Array: 2, + Int32Array: 4, + Uint32Array: 4, + Float32Array: 4, + Float64Array: 8 + }; + + var isView = function isView(it) { + var klass = classof(it); + return klass === "DataView" || has(TypedArrayConstructorsList, klass); + }; + + var isTypedArray = function (it) { + return isObject(it) && has(TypedArrayConstructorsList, classof(it)); + }; + + var aTypedArray = function (it) { + if (isTypedArray(it)) return it; + throw TypeError("Target is not a typed array"); + }; + + var aTypedArrayConstructor = function (C) { + if (setPrototypeOf) { + if (isPrototypeOf.call(TypedArray, C)) return C; + } else + for (var ARRAY in TypedArrayConstructorsList) + if (has(TypedArrayConstructorsList, NAME)) { + var TypedArrayConstructor = global[ARRAY]; + if ( + TypedArrayConstructor && + (C === TypedArrayConstructor || + isPrototypeOf.call(TypedArrayConstructor, C)) + ) { + return C; + } + } + throw TypeError("Target is not a typed array constructor"); + }; + + var exportTypedArrayMethod = function (KEY, property, forced) { + if (!DESCRIPTORS) return; + if (forced) + for (var ARRAY in TypedArrayConstructorsList) { + var TypedArrayConstructor = global[ARRAY]; + if ( + TypedArrayConstructor && + has(TypedArrayConstructor.prototype, KEY) + ) { + delete TypedArrayConstructor.prototype[KEY]; + } + } + if (!TypedArrayPrototype[KEY] || forced) { + redefine( + TypedArrayPrototype, + KEY, + forced + ? property + : (NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY]) || + property + ); + } + }; + + var exportTypedArrayStaticMethod = function (KEY, property, forced) { + var ARRAY, TypedArrayConstructor; + if (!DESCRIPTORS) return; + if (setPrototypeOf) { + if (forced) + for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global[ARRAY]; + if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) { + delete TypedArrayConstructor[KEY]; + } + } + if (!TypedArray[KEY] || forced) { + // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable + try { + return redefine( + TypedArray, + KEY, + forced + ? property + : (NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY]) || property + ); + } catch (error) { + /* empty */ + } + } else return; + } + for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global[ARRAY]; + if ( + TypedArrayConstructor && + (!TypedArrayConstructor[KEY] || forced) + ) { + redefine(TypedArrayConstructor, KEY, property); + } + } + }; + + for (NAME in TypedArrayConstructorsList) { + if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false; + } + + // WebKit bug - typed arrays constructors prototype is Object.prototype + if ( + !NATIVE_ARRAY_BUFFER_VIEWS || + typeof TypedArray != "function" || + TypedArray === Function.prototype + ) { + // eslint-disable-next-line no-shadow + TypedArray = function TypedArray() { + throw TypeError("Incorrect invocation"); + }; + if (NATIVE_ARRAY_BUFFER_VIEWS) + for (NAME in TypedArrayConstructorsList) { + if (global[NAME]) setPrototypeOf(global[NAME], TypedArray); + } + } + + if ( + !NATIVE_ARRAY_BUFFER_VIEWS || + !TypedArrayPrototype || + TypedArrayPrototype === ObjectPrototype + ) { + TypedArrayPrototype = TypedArray.prototype; + if (NATIVE_ARRAY_BUFFER_VIEWS) + for (NAME in TypedArrayConstructorsList) { + if (global[NAME]) + setPrototypeOf(global[NAME].prototype, TypedArrayPrototype); + } + } + + // WebKit bug - one more object in Uint8ClampedArray prototype chain + if ( + NATIVE_ARRAY_BUFFER_VIEWS && + getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype + ) { + setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype); + } + + if (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) { + TYPED_ARRAY_TAG_REQIRED = true; + defineProperty(TypedArrayPrototype, TO_STRING_TAG, { + get: function () { + return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined; + } + }); + for (NAME in TypedArrayConstructorsList) + if (global[NAME]) { + createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME); + } + } + + module.exports = { + NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS, + TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG, + aTypedArray: aTypedArray, + aTypedArrayConstructor: aTypedArrayConstructor, + exportTypedArrayMethod: exportTypedArrayMethod, + exportTypedArrayStaticMethod: exportTypedArrayStaticMethod, + isView: isView, + isTypedArray: isTypedArray, + TypedArray: TypedArray, + TypedArrayPrototype: TypedArrayPrototype + }; + + /***/ + }, + + /***/ 3331: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var global = __webpack_require__(7854); + var DESCRIPTORS = __webpack_require__(9781); + var NATIVE_ARRAY_BUFFER = __webpack_require__(4019); + var createNonEnumerableProperty = __webpack_require__(8880); + var redefineAll = __webpack_require__(2248); + var fails = __webpack_require__(7293); + var anInstance = __webpack_require__(5787); + var toInteger = __webpack_require__(9958); + var toLength = __webpack_require__(7466); + var toIndex = __webpack_require__(7067); + var IEEE754 = __webpack_require__(1179); + var getPrototypeOf = __webpack_require__(9518); + var setPrototypeOf = __webpack_require__(7674); + var getOwnPropertyNames = __webpack_require__(8006).f; + var defineProperty = __webpack_require__(3070).f; + var arrayFill = __webpack_require__(1285); + var setToStringTag = __webpack_require__(8003); + var InternalStateModule = __webpack_require__(9909); + + var getInternalState = InternalStateModule.get; + var setInternalState = InternalStateModule.set; + var ARRAY_BUFFER = "ArrayBuffer"; + var DATA_VIEW = "DataView"; + var PROTOTYPE = "prototype"; + var WRONG_LENGTH = "Wrong length"; + var WRONG_INDEX = "Wrong index"; + var NativeArrayBuffer = global[ARRAY_BUFFER]; + var $ArrayBuffer = NativeArrayBuffer; + var $DataView = global[DATA_VIEW]; + var $DataViewPrototype = $DataView && $DataView[PROTOTYPE]; + var ObjectPrototype = Object.prototype; + var RangeError = global.RangeError; + + var packIEEE754 = IEEE754.pack; + var unpackIEEE754 = IEEE754.unpack; + + var packInt8 = function (number) { + return [number & 0xff]; + }; + + var packInt16 = function (number) { + return [number & 0xff, (number >> 8) & 0xff]; + }; + + var packInt32 = function (number) { + return [ + number & 0xff, + (number >> 8) & 0xff, + (number >> 16) & 0xff, + (number >> 24) & 0xff + ]; + }; + + var unpackInt32 = function (buffer) { + return ( + (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0] + ); + }; + + var packFloat32 = function (number) { + return packIEEE754(number, 23, 4); + }; + + var packFloat64 = function (number) { + return packIEEE754(number, 52, 8); + }; + + var addGetter = function (Constructor, key) { + defineProperty(Constructor[PROTOTYPE], key, { + get: function () { + return getInternalState(this)[key]; + } + }); + }; + + var get = function (view, count, index, isLittleEndian) { + var intIndex = toIndex(index); + var store = getInternalState(view); + if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX); + var bytes = getInternalState(store.buffer).bytes; + var start = intIndex + store.byteOffset; + var pack = bytes.slice(start, start + count); + return isLittleEndian ? pack : pack.reverse(); + }; + + var set = function ( + view, + count, + index, + conversion, + value, + isLittleEndian + ) { + var intIndex = toIndex(index); + var store = getInternalState(view); + if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX); + var bytes = getInternalState(store.buffer).bytes; + var start = intIndex + store.byteOffset; + var pack = conversion(+value); + for (var i = 0; i < count; i++) + bytes[start + i] = pack[isLittleEndian ? i : count - i - 1]; + }; + + if (!NATIVE_ARRAY_BUFFER) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance(this, $ArrayBuffer, ARRAY_BUFFER); + var byteLength = toIndex(length); + setInternalState(this, { + bytes: arrayFill.call(new Array(byteLength), 0), + byteLength: byteLength + }); + if (!DESCRIPTORS) this.byteLength = byteLength; + }; + + $DataView = function DataView(buffer, byteOffset, byteLength) { + anInstance(this, $DataView, DATA_VIEW); + anInstance(buffer, $ArrayBuffer, DATA_VIEW); + var bufferLength = getInternalState(buffer).byteLength; + var offset = toInteger(byteOffset); + if (offset < 0 || offset > bufferLength) + throw RangeError("Wrong offset"); + byteLength = + byteLength === undefined + ? bufferLength - offset + : toLength(byteLength); + if (offset + byteLength > bufferLength) + throw RangeError(WRONG_LENGTH); + setInternalState(this, { + buffer: buffer, + byteLength: byteLength, + byteOffset: offset + }); + if (!DESCRIPTORS) { + this.buffer = buffer; + this.byteLength = byteLength; + this.byteOffset = offset; + } + }; + + if (DESCRIPTORS) { + addGetter($ArrayBuffer, "byteLength"); + addGetter($DataView, "buffer"); + addGetter($DataView, "byteLength"); + addGetter($DataView, "byteOffset"); + } + + redefineAll($DataView[PROTOTYPE], { + getInt8: function getInt8(byteOffset) { + return (get(this, 1, byteOffset)[0] << 24) >> 24; + }, + getUint8: function getUint8(byteOffset) { + return get(this, 1, byteOffset)[0]; + }, + getInt16: function getInt16(byteOffset /* , littleEndian */) { + var bytes = get( + this, + 2, + byteOffset, + arguments.length > 1 ? arguments[1] : undefined + ); + return (((bytes[1] << 8) | bytes[0]) << 16) >> 16; + }, + getUint16: function getUint16(byteOffset /* , littleEndian */) { + var bytes = get( + this, + 2, + byteOffset, + arguments.length > 1 ? arguments[1] : undefined + ); + return (bytes[1] << 8) | bytes[0]; + }, + getInt32: function getInt32(byteOffset /* , littleEndian */) { + return unpackInt32( + get( + this, + 4, + byteOffset, + arguments.length > 1 ? arguments[1] : undefined + ) + ); + }, + getUint32: function getUint32(byteOffset /* , littleEndian */) { + return ( + unpackInt32( + get( + this, + 4, + byteOffset, + arguments.length > 1 ? arguments[1] : undefined + ) + ) >>> 0 + ); + }, + getFloat32: function getFloat32(byteOffset /* , littleEndian */) { + return unpackIEEE754( + get( + this, + 4, + byteOffset, + arguments.length > 1 ? arguments[1] : undefined + ), + 23 + ); + }, + getFloat64: function getFloat64(byteOffset /* , littleEndian */) { + return unpackIEEE754( + get( + this, + 8, + byteOffset, + arguments.length > 1 ? arguments[1] : undefined + ), + 52 + ); + }, + setInt8: function setInt8(byteOffset, value) { + set(this, 1, byteOffset, packInt8, value); + }, + setUint8: function setUint8(byteOffset, value) { + set(this, 1, byteOffset, packInt8, value); + }, + setInt16: function setInt16(byteOffset, value /* , littleEndian */) { + set( + this, + 2, + byteOffset, + packInt16, + value, + arguments.length > 2 ? arguments[2] : undefined + ); + }, + setUint16: function setUint16( + byteOffset, + value /* , littleEndian */ + ) { + set( + this, + 2, + byteOffset, + packInt16, + value, + arguments.length > 2 ? arguments[2] : undefined + ); + }, + setInt32: function setInt32(byteOffset, value /* , littleEndian */) { + set( + this, + 4, + byteOffset, + packInt32, + value, + arguments.length > 2 ? arguments[2] : undefined + ); + }, + setUint32: function setUint32( + byteOffset, + value /* , littleEndian */ + ) { + set( + this, + 4, + byteOffset, + packInt32, + value, + arguments.length > 2 ? arguments[2] : undefined + ); + }, + setFloat32: function setFloat32( + byteOffset, + value /* , littleEndian */ + ) { + set( + this, + 4, + byteOffset, + packFloat32, + value, + arguments.length > 2 ? arguments[2] : undefined + ); + }, + setFloat64: function setFloat64( + byteOffset, + value /* , littleEndian */ + ) { + set( + this, + 8, + byteOffset, + packFloat64, + value, + arguments.length > 2 ? arguments[2] : undefined + ); + } + }); + } else { + if ( + !fails(function () { + NativeArrayBuffer(1); + }) || + !fails(function () { + new NativeArrayBuffer(-1); // eslint-disable-line no-new + }) || + fails(function () { + new NativeArrayBuffer(); // eslint-disable-line no-new + new NativeArrayBuffer(1.5); // eslint-disable-line no-new + new NativeArrayBuffer(NaN); // eslint-disable-line no-new + return NativeArrayBuffer.name != ARRAY_BUFFER; + }) + ) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance(this, $ArrayBuffer); + return new NativeArrayBuffer(toIndex(length)); + }; + var ArrayBufferPrototype = ($ArrayBuffer[PROTOTYPE] = + NativeArrayBuffer[PROTOTYPE]); + for ( + var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; + keys.length > j; + + ) { + if (!((key = keys[j++]) in $ArrayBuffer)) { + createNonEnumerableProperty( + $ArrayBuffer, + key, + NativeArrayBuffer[key] + ); + } + } + ArrayBufferPrototype.constructor = $ArrayBuffer; + } + + // WebKit bug - the same parent prototype for typed arrays and data view + if ( + setPrototypeOf && + getPrototypeOf($DataViewPrototype) !== ObjectPrototype + ) { + setPrototypeOf($DataViewPrototype, ObjectPrototype); + } + + // iOS Safari 7.x bug + var testView = new $DataView(new $ArrayBuffer(2)); + var nativeSetInt8 = $DataViewPrototype.setInt8; + testView.setInt8(0, 2147483648); + testView.setInt8(1, 2147483649); + if (testView.getInt8(0) || !testView.getInt8(1)) + redefineAll( + $DataViewPrototype, + { + setInt8: function setInt8(byteOffset, value) { + nativeSetInt8.call(this, byteOffset, (value << 24) >> 24); + }, + setUint8: function setUint8(byteOffset, value) { + nativeSetInt8.call(this, byteOffset, (value << 24) >> 24); + } + }, + { unsafe: true } + ); + } + + setToStringTag($ArrayBuffer, ARRAY_BUFFER); + setToStringTag($DataView, DATA_VIEW); + + module.exports = { + ArrayBuffer: $ArrayBuffer, + DataView: $DataView + }; + + /***/ + }, + + /***/ 1285: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var toObject = __webpack_require__(7908); + var toAbsoluteIndex = __webpack_require__(1400); + var toLength = __webpack_require__(7466); + + // `Array.prototype.fill` method implementation + // https://tc39.github.io/ecma262/#sec-array.prototype.fill + module.exports = function fill(value /* , start = 0, end = @length */) { + var O = toObject(this); + var length = toLength(O.length); + var argumentsLength = arguments.length; + var index = toAbsoluteIndex( + argumentsLength > 1 ? arguments[1] : undefined, + length + ); + var end = argumentsLength > 2 ? arguments[2] : undefined; + var endPos = end === undefined ? length : toAbsoluteIndex(end, length); + while (endPos > index) O[index++] = value; + return O; + }; + + /***/ + }, + + /***/ 8533: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $forEach = __webpack_require__(2092).forEach; + var arrayMethodIsStrict = __webpack_require__(9341); + var arrayMethodUsesToLength = __webpack_require__(9207); + + var STRICT_METHOD = arrayMethodIsStrict("forEach"); + var USES_TO_LENGTH = arrayMethodUsesToLength("forEach"); + + // `Array.prototype.forEach` method implementation + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + module.exports = + !STRICT_METHOD || !USES_TO_LENGTH + ? function forEach(callbackfn /* , thisArg */) { + return $forEach( + this, + callbackfn, + arguments.length > 1 ? arguments[1] : undefined + ); + } + : [].forEach; + + /***/ + }, + + /***/ 1318: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toIndexedObject = __webpack_require__(5656); + var toLength = __webpack_require__(7466); + var toAbsoluteIndex = __webpack_require__(1400); + + // `Array.prototype.{ indexOf, includes }` methods implementation + var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) + while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + + module.exports = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + + /***/ + }, + + /***/ 2092: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var bind = __webpack_require__(9974); + var IndexedObject = __webpack_require__(8361); + var toObject = __webpack_require__(7908); + var toLength = __webpack_require__(7466); + var arraySpeciesCreate = __webpack_require__(5417); + + var push = [].push; + + // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation + var createMethod = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP + ? create($this, length) + : IS_FILTER + ? create($this, 0) + : undefined; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) + switch (TYPE) { + case 3: + return true; // some + case 5: + return value; // find + case 6: + return index; // findIndex + case 2: + push.call(target, value); // filter + } + else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + + module.exports = { + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6) + }; + + /***/ + }, + + /***/ 1194: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + var wellKnownSymbol = __webpack_require__(5112); + var V8_VERSION = __webpack_require__(7392); + + var SPECIES = wellKnownSymbol("species"); + + module.exports = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return ( + V8_VERSION >= 51 || + !fails(function () { + var array = []; + var constructor = (array.constructor = {}); + constructor[SPECIES] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }) + ); + }; + + /***/ + }, + + /***/ 9341: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var fails = __webpack_require__(7293); + + module.exports = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return ( + !!method && + fails(function () { + // eslint-disable-next-line no-useless-call,no-throw-literal + method.call( + null, + argument || + function () { + throw 1; + }, + 1 + ); + }) + ); + }; + + /***/ + }, + + /***/ 9207: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var fails = __webpack_require__(7293); + var has = __webpack_require__(6656); + + var defineProperty = Object.defineProperty; + var cache = {}; + + var thrower = function (it) { + throw it; + }; + + module.exports = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, "ACCESSORS") ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + + return (cache[METHOD_NAME] = + !!method && + !fails(function () { + if (ACCESSORS && !DESCRIPTORS) return true; + var O = { length: -1 }; + + if (ACCESSORS) + defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + })); + }; + + /***/ + }, + + /***/ 5417: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + var isArray = __webpack_require__(3157); + var wellKnownSymbol = __webpack_require__(5112); + + var SPECIES = wellKnownSymbol("species"); + + // `ArraySpeciesCreate` abstract operation + // https://tc39.github.io/ecma262/#sec-arrayspeciescreate + module.exports = function (originalArray, length) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (typeof C == "function" && (C === Array || isArray(C.prototype))) + C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } + return new (C === undefined ? Array : C)(length === 0 ? 0 : length); + }; + + /***/ + }, + + /***/ 3411: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + + // call something on iterator step with safe closing on error + module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (error) { + var returnMethod = iterator["return"]; + if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); + throw error; + } + }; + + /***/ + }, + + /***/ 7072: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + + try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + return: function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line no-throw-literal + Array.from(iteratorWithReturn, function () { + throw 2; + }); + } catch (error) { + /* empty */ + } + + module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: (ITERATION_SUPPORT = true) }; + } + }; + }; + exec(object); + } catch (error) { + /* empty */ + } + return ITERATION_SUPPORT; + }; + + /***/ + }, + + /***/ 4326: /***/ function (module) { + var toString = {}.toString; + + module.exports = function (it) { + return toString.call(it).slice(8, -1); + }; + + /***/ + }, + + /***/ 648: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var TO_STRING_TAG_SUPPORT = __webpack_require__(1694); + var classofRaw = __webpack_require__(4326); + var wellKnownSymbol = __webpack_require__(5112); + + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + // ES3 wrong here + var CORRECT_ARGUMENTS = + classofRaw( + (function () { + return arguments; + })() + ) == "Arguments"; + + // fallback for IE11 Script Access Denied error + var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { + /* empty */ + } + }; + + // getting tag from ES6+ `Object.prototype.toString` + module.exports = TO_STRING_TAG_SUPPORT + ? classofRaw + : function (it) { + var O, tag, result; + return it === undefined + ? "Undefined" + : it === null + ? "Null" + : // @@toStringTag case + typeof (tag = tryGet((O = Object(it)), TO_STRING_TAG)) == "string" + ? tag + : // builtinTag case + CORRECT_ARGUMENTS + ? classofRaw(O) + : // ES3 arguments fallback + (result = classofRaw(O)) == "Object" && + typeof O.callee == "function" + ? "Arguments" + : result; + }; + + /***/ + }, + + /***/ 9920: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var has = __webpack_require__(6656); + var ownKeys = __webpack_require__(3887); + var getOwnPropertyDescriptorModule = __webpack_require__(1236); + var definePropertyModule = __webpack_require__(3070); + + module.exports = function (target, source) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!has(target, key)) + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + }; + + /***/ + }, + + /***/ 8544: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + module.exports = !fails(function () { + function F() { + /* empty */ + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + + /***/ + }, + + /***/ 4994: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var IteratorPrototype = __webpack_require__(3383).IteratorPrototype; + var create = __webpack_require__(30); + var createPropertyDescriptor = __webpack_require__(9114); + var setToStringTag = __webpack_require__(8003); + var Iterators = __webpack_require__(7497); + + var returnThis = function () { + return this; + }; + + module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { + next: createPropertyDescriptor(1, next) + }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + + /***/ + }, + + /***/ 8880: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var definePropertyModule = __webpack_require__(3070); + var createPropertyDescriptor = __webpack_require__(9114); + + module.exports = DESCRIPTORS + ? function (object, key, value) { + return definePropertyModule.f( + object, + key, + createPropertyDescriptor(1, value) + ); + } + : function (object, key, value) { + object[key] = value; + return object; + }; + + /***/ + }, + + /***/ 9114: /***/ function (module) { + module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + /***/ + }, + + /***/ 6135: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var toPrimitive = __webpack_require__(7593); + var definePropertyModule = __webpack_require__(3070); + var createPropertyDescriptor = __webpack_require__(9114); + + module.exports = function (object, key, value) { + var propertyKey = toPrimitive(key); + if (propertyKey in object) + definePropertyModule.f( + object, + propertyKey, + createPropertyDescriptor(0, value) + ); + else object[propertyKey] = value; + }; + + /***/ + }, + + /***/ 654: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var createIteratorConstructor = __webpack_require__(4994); + var getPrototypeOf = __webpack_require__(9518); + var setPrototypeOf = __webpack_require__(7674); + var setToStringTag = __webpack_require__(8003); + var createNonEnumerableProperty = __webpack_require__(8880); + var redefine = __webpack_require__(1320); + var wellKnownSymbol = __webpack_require__(5112); + var IS_PURE = __webpack_require__(1913); + var Iterators = __webpack_require__(7497); + var IteratorsCore = __webpack_require__(3383); + + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + + var returnThis = function () { + return this; + }; + + module.exports = function ( + Iterable, + NAME, + IteratorConstructor, + next, + DEFAULT, + IS_SET, + FORCED + ) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function () { + return new IteratorConstructor(this); + }; + }; + + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = + IterablePrototype[ITERATOR] || + IterablePrototype["@@iterator"] || + (DEFAULT && IterablePrototype[DEFAULT]); + var defaultIterator = + (!BUGGY_SAFARI_ITERATORS && nativeIterator) || + getIterationMethod(DEFAULT); + var anyNativeIterator = + NAME == "Array" + ? IterablePrototype.entries || nativeIterator + : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf( + anyNativeIterator.call(new Iterable()) + ); + if ( + IteratorPrototype !== Object.prototype && + CurrentIteratorPrototype.next + ) { + if ( + !IS_PURE && + getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype + ) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if ( + typeof CurrentIteratorPrototype[ITERATOR] != "function" + ) { + createNonEnumerableProperty( + CurrentIteratorPrototype, + ITERATOR, + returnThis + ); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array#{values, @@iterator}.name in V8 / FF + if ( + DEFAULT == VALUES && + nativeIterator && + nativeIterator.name !== VALUES + ) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return nativeIterator.call(this); + }; + } + + // define iterator + if ( + (!IS_PURE || FORCED) && + IterablePrototype[ITERATOR] !== defaultIterator + ) { + createNonEnumerableProperty( + IterablePrototype, + ITERATOR, + defaultIterator + ); + } + Iterators[NAME] = defaultIterator; + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if ( + BUGGY_SAFARI_ITERATORS || + INCORRECT_VALUES_NAME || + !(KEY in IterablePrototype) + ) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } + else + $( + { + target: NAME, + proto: true, + forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME + }, + methods + ); + } + + return methods; + }; + + /***/ + }, + + /***/ 7235: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var path = __webpack_require__(857); + var has = __webpack_require__(6656); + var wrappedWellKnownSymbolModule = __webpack_require__(6061); + var defineProperty = __webpack_require__(3070).f; + + module.exports = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!has(Symbol, NAME)) + defineProperty(Symbol, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + + /***/ + }, + + /***/ 9781: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + // Thank's IE8 for his funny defineProperty + module.exports = !fails(function () { + return ( + Object.defineProperty({}, 1, { + get: function () { + return 7; + } + })[1] != 7 + ); + }); + + /***/ + }, + + /***/ 317: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var isObject = __webpack_require__(111); + + var document = global.document; + // typeof document.createElement is 'object' in old IE + var EXISTS = isObject(document) && isObject(document.createElement); + + module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; + }; + + /***/ + }, + + /***/ 8324: /***/ function (module) { + // iterable DOM collections + // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods + module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + /***/ + }, + + /***/ 6833: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var userAgent = __webpack_require__(8113); + + module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); + + /***/ + }, + + /***/ 8113: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var getBuiltIn = __webpack_require__(5005); + + module.exports = getBuiltIn("navigator", "userAgent") || ""; + + /***/ + }, + + /***/ 7392: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var userAgent = __webpack_require__(8113); + + var process = global.process; + var versions = process && process.versions; + var v8 = versions && versions.v8; + var match, version; + + if (v8) { + match = v8.split("."); + version = match[0] + match[1]; + } else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } + } + + module.exports = version && +version; + + /***/ + }, + + /***/ 748: /***/ function (module) { + // IE8- don't enum bug keys + module.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + + /***/ + }, + + /***/ 2109: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var getOwnPropertyDescriptor = __webpack_require__(1236).f; + var createNonEnumerableProperty = __webpack_require__(8880); + var redefine = __webpack_require__(1320); + var setGlobal = __webpack_require__(3505); + var copyConstructorProperties = __webpack_require__(9920); + var isForced = __webpack_require__(4705); + + /* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target +*/ + module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced( + GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, + options.forced + ); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + // extend global + redefine(target, key, sourceProperty, options); + } + }; + + /***/ + }, + + /***/ 7293: /***/ function (module) { + module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + + /***/ + }, + + /***/ 9974: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var aFunction = __webpack_require__(3099); + + // optional / simple context binding + module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 0: + return function () { + return fn.call(that); + }; + case 1: + return function (a) { + return fn.call(that, a); + }; + case 2: + return function (a, b) { + return fn.call(that, a, b); + }; + case 3: + return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + /***/ + }, + + /***/ 5005: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var path = __webpack_require__(857); + var global = __webpack_require__(7854); + + var aFunction = function (variable) { + return typeof variable == "function" ? variable : undefined; + }; + + module.exports = function (namespace, method) { + return arguments.length < 2 + ? aFunction(path[namespace]) || aFunction(global[namespace]) + : (path[namespace] && path[namespace][method]) || + (global[namespace] && global[namespace][method]); + }; + + /***/ + }, + + /***/ 1246: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var classof = __webpack_require__(648); + var Iterators = __webpack_require__(7497); + var wellKnownSymbol = __webpack_require__(5112); + + var ITERATOR = wellKnownSymbol("iterator"); + + module.exports = function (it) { + if (it != undefined) + return it[ITERATOR] || it["@@iterator"] || Iterators[classof(it)]; + }; + + /***/ + }, + + /***/ 7854: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var check = function (it) { + return it && it.Math == Math && it; + }; + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == "object" && globalThis) || + check(typeof window == "object" && window) || + check(typeof self == "object" && self) || + check( + typeof __webpack_require__.g == "object" && __webpack_require__.g + ) || + // eslint-disable-next-line no-new-func + Function("return this")(); + + /***/ + }, + + /***/ 6656: /***/ function (module) { + var hasOwnProperty = {}.hasOwnProperty; + + module.exports = function (it, key) { + return hasOwnProperty.call(it, key); + }; + + /***/ + }, + + /***/ 3501: /***/ function (module) { + module.exports = {}; + + /***/ + }, + + /***/ 842: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + + module.exports = function (a, b) { + var console = global.console; + if (console && console.error) { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } + }; + + /***/ + }, + + /***/ 490: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var getBuiltIn = __webpack_require__(5005); + + module.exports = getBuiltIn("document", "documentElement"); + + /***/ + }, + + /***/ 4664: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var fails = __webpack_require__(7293); + var createElement = __webpack_require__(317); + + // Thank's IE8 for his funny defineProperty + module.exports = + !DESCRIPTORS && + !fails(function () { + return ( + Object.defineProperty(createElement("div"), "a", { + get: function () { + return 7; + } + }).a != 7 + ); + }); + + /***/ + }, + + /***/ 1179: /***/ function (module) { + // IEEE754 conversions based on https://github.com/feross/ieee754 + // eslint-disable-next-line no-shadow-restricted-names + var Infinity = 1 / 0; + var abs = Math.abs; + var pow = Math.pow; + var floor = Math.floor; + var log = Math.log; + var LN2 = Math.LN2; + + var pack = function (number, mantissaLength, bytes) { + var buffer = new Array(bytes); + var exponentLength = bytes * 8 - mantissaLength - 1; + var eMax = (1 << exponentLength) - 1; + var eBias = eMax >> 1; + var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0; + var sign = number < 0 || (number === 0 && 1 / number < 0) ? 1 : 0; + var index = 0; + var exponent, mantissa, c; + number = abs(number); + // eslint-disable-next-line no-self-compare + if (number != number || number === Infinity) { + // eslint-disable-next-line no-self-compare + mantissa = number != number ? 1 : 0; + exponent = eMax; + } else { + exponent = floor(log(number) / LN2); + if (number * (c = pow(2, -exponent)) < 1) { + exponent--; + c *= 2; + } + if (exponent + eBias >= 1) { + number += rt / c; + } else { + number += rt * pow(2, 1 - eBias); + } + if (number * c >= 2) { + exponent++; + c /= 2; + } + if (exponent + eBias >= eMax) { + mantissa = 0; + exponent = eMax; + } else if (exponent + eBias >= 1) { + mantissa = (number * c - 1) * pow(2, mantissaLength); + exponent = exponent + eBias; + } else { + mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength); + exponent = 0; + } + } + for ( + ; + mantissaLength >= 8; + buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8 + ); + exponent = (exponent << mantissaLength) | mantissa; + exponentLength += mantissaLength; + for ( + ; + exponentLength > 0; + buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8 + ); + buffer[--index] |= sign * 128; + return buffer; + }; + + var unpack = function (buffer, mantissaLength) { + var bytes = buffer.length; + var exponentLength = bytes * 8 - mantissaLength - 1; + var eMax = (1 << exponentLength) - 1; + var eBias = eMax >> 1; + var nBits = exponentLength - 7; + var index = bytes - 1; + var sign = buffer[index--]; + var exponent = sign & 127; + var mantissa; + sign >>= 7; + for ( + ; + nBits > 0; + exponent = exponent * 256 + buffer[index], index--, nBits -= 8 + ); + mantissa = exponent & ((1 << -nBits) - 1); + exponent >>= -nBits; + nBits += mantissaLength; + for ( + ; + nBits > 0; + mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8 + ); + if (exponent === 0) { + exponent = 1 - eBias; + } else if (exponent === eMax) { + return mantissa ? NaN : sign ? -Infinity : Infinity; + } else { + mantissa = mantissa + pow(2, mantissaLength); + exponent = exponent - eBias; + } + return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength); + }; + + module.exports = { + pack: pack, + unpack: unpack + }; + + /***/ + }, + + /***/ 8361: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + var classof = __webpack_require__(4326); + + var split = "".split; + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins + return !Object("z").propertyIsEnumerable(0); + }) + ? function (it) { + return classof(it) == "String" ? split.call(it, "") : Object(it); + } + : Object; + + /***/ + }, + + /***/ 9587: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + var setPrototypeOf = __webpack_require__(7674); + + // makes subclassing work correct for wrapped built-ins + module.exports = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + typeof (NewTarget = dummy.constructor) == "function" && + NewTarget !== Wrapper && + isObject((NewTargetPrototype = NewTarget.prototype)) && + NewTargetPrototype !== Wrapper.prototype + ) + setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + + /***/ + }, + + /***/ 2788: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var store = __webpack_require__(5465); + + var functionToString = Function.toString; + + // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper + if (typeof store.inspectSource != "function") { + store.inspectSource = function (it) { + return functionToString.call(it); + }; + } + + module.exports = store.inspectSource; + + /***/ + }, + + /***/ 9909: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var NATIVE_WEAK_MAP = __webpack_require__(8536); + var global = __webpack_require__(7854); + var isObject = __webpack_require__(111); + var createNonEnumerableProperty = __webpack_require__(8880); + var objectHas = __webpack_require__(6656); + var sharedKey = __webpack_require__(6200); + var hiddenKeys = __webpack_require__(3501); + + var WeakMap = global.WeakMap; + var set, get, has; + + var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); + }; + + var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + + if (NATIVE_WEAK_MAP) { + var store = new WeakMap(); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function (it, metadata) { + wmset.call(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store, it) || {}; + }; + has = function (it) { + return wmhas.call(store, it); + }; + } else { + var STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return objectHas(it, STATE); + }; + } + + module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + + /***/ + }, + + /***/ 7659: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + var Iterators = __webpack_require__(7497); + + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + + // check on default Array iterator + module.exports = function (it) { + return ( + it !== undefined && + (Iterators.Array === it || ArrayPrototype[ITERATOR] === it) + ); + }; + + /***/ + }, + + /***/ 3157: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var classof = __webpack_require__(4326); + + // `IsArray` abstract operation + // https://tc39.github.io/ecma262/#sec-isarray + module.exports = + Array.isArray || + function isArray(arg) { + return classof(arg) == "Array"; + }; + + /***/ + }, + + /***/ 4705: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + var replacement = /#|\.prototype\./; + + var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL + ? true + : value == NATIVE + ? false + : typeof detection == "function" + ? fails(detection) + : !!detection; + }; + + var normalize = (isForced.normalize = function (string) { + return String(string).replace(replacement, ".").toLowerCase(); + }); + + var data = (isForced.data = {}); + var NATIVE = (isForced.NATIVE = "N"); + var POLYFILL = (isForced.POLYFILL = "P"); + + module.exports = isForced; + + /***/ + }, + + /***/ 111: /***/ function (module) { + module.exports = function (it) { + return typeof it === "object" ? it !== null : typeof it === "function"; + }; + + /***/ + }, + + /***/ 1913: /***/ function (module) { + module.exports = false; + + /***/ + }, + + /***/ 408: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var isArrayIteratorMethod = __webpack_require__(7659); + var toLength = __webpack_require__(7466); + var bind = __webpack_require__(9974); + var getIteratorMethod = __webpack_require__(1246); + var callWithSafeIterationClosing = __webpack_require__(3411); + + var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; + }; + + var iterate = (module.exports = function ( + iterable, + fn, + that, + AS_ENTRIES, + IS_ITERATOR + ) { + var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); + var iterator, iterFn, index, length, result, next, step; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (typeof iterFn != "function") + throw TypeError("Target is not iterable"); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for ( + index = 0, length = toLength(iterable.length); + length > index; + index++ + ) { + result = AS_ENTRIES + ? boundFunction(anObject((step = iterable[index]))[0], step[1]) + : boundFunction(iterable[index]); + if (result && result instanceof Result) return result; + } + return new Result(false); + } + iterator = iterFn.call(iterable); + } + + next = iterator.next; + while (!(step = next.call(iterator)).done) { + result = callWithSafeIterationClosing( + iterator, + boundFunction, + step.value, + AS_ENTRIES + ); + if (typeof result == "object" && result && result instanceof Result) + return result; + } + return new Result(false); + }); + + iterate.stop = function (result) { + return new Result(true, result); + }; + + /***/ + }, + + /***/ 3383: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var getPrototypeOf = __webpack_require__(9518); + var createNonEnumerableProperty = __webpack_require__(8880); + var has = __webpack_require__(6656); + var wellKnownSymbol = __webpack_require__(5112); + var IS_PURE = __webpack_require__(1913); + + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + + var returnThis = function () { + return this; + }; + + // `%IteratorPrototype%` object + // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object + var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + + if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!("next" in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf( + getPrototypeOf(arrayIterator) + ); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + + if (IteratorPrototype == undefined) IteratorPrototype = {}; + + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() + if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); + } + + module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + + /***/ + }, + + /***/ 7497: /***/ function (module) { + module.exports = {}; + + /***/ + }, + + /***/ 5948: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var getOwnPropertyDescriptor = __webpack_require__(1236).f; + var classof = __webpack_require__(4326); + var macrotask = __webpack_require__(261).set; + var IS_IOS = __webpack_require__(6833); + + var MutationObserver = + global.MutationObserver || global.WebKitMutationObserver; + var process = global.process; + var Promise = global.Promise; + var IS_NODE = classof(process) == "process"; + // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` + var queueMicrotaskDescriptor = getOwnPropertyDescriptor( + global, + "queueMicrotask" + ); + var queueMicrotask = + queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + + var flush, head, last, notify, toggle, node, promise, then; + + // modern engines have queueMicrotask method + if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (IS_NODE && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (error) { + if (head) notify(); + else last = undefined; + throw error; + } + } + last = undefined; + if (parent) parent.enter(); + }; + + // Node.js + if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + } else if (MutationObserver && !IS_IOS) { + toggle = true; + node = document.createTextNode(""); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise.resolve(undefined); + then = promise.then; + notify = function () { + then.call(promise, flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } + } + + module.exports = + queueMicrotask || + function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } + last = task; + }; + + /***/ + }, + + /***/ 3366: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + + module.exports = global.Promise; + + /***/ + }, + + /***/ 133: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + module.exports = + !!Object.getOwnPropertySymbols && + !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); + }); + + /***/ + }, + + /***/ 8536: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var inspectSource = __webpack_require__(2788); + + var WeakMap = global.WeakMap; + + module.exports = + typeof WeakMap === "function" && + /native code/.test(inspectSource(WeakMap)); + + /***/ + }, + + /***/ 8523: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var aFunction = __webpack_require__(3099); + + var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) + throw TypeError("Bad Promise constructor"); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); + }; + + // 25.4.1.5 NewPromiseCapability(C) + module.exports.f = function (C) { + return new PromiseCapability(C); + }; + + /***/ + }, + + /***/ 30: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var defineProperties = __webpack_require__(6048); + var enumBugKeys = __webpack_require__(748); + var hiddenKeys = __webpack_require__(3501); + var html = __webpack_require__(490); + var documentCreateElement = __webpack_require__(317); + var sharedKey = __webpack_require__(6200); + + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + + var EmptyConstructor = function () { + /* empty */ + }; + + var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT; + }; + + // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag("")); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; + }; + + // Create object with fake `null` prototype: use iframe Object with cleared prototype + var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + + // Check for document.domain and active x support + // No need to use active x approach when document.domain is not set + // see https://github.com/es-shims/es5-shim/issues/150 + // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 + // avoid IE GC bug + var activeXDocument; + var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject("htmlfile"); + } catch (error) { + /* ignore */ + } + NullProtoObject = activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) + : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + + hiddenKeys[IE_PROTO] = true; + + // `Object.create` method + // https://tc39.github.io/ecma262/#sec-object.create + module.exports = + Object.create || + function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined + ? result + : defineProperties(result, Properties); + }; + + /***/ + }, + + /***/ 6048: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var definePropertyModule = __webpack_require__(3070); + var anObject = __webpack_require__(9670); + var objectKeys = __webpack_require__(1956); + + // `Object.defineProperties` method + // https://tc39.github.io/ecma262/#sec-object.defineproperties + module.exports = DESCRIPTORS + ? Object.defineProperties + : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, (key = keys[index++]), Properties[key]); + return O; + }; + + /***/ + }, + + /***/ 3070: /***/ function ( + __unused_webpack_module, + exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var IE8_DOM_DEFINE = __webpack_require__(4664); + var anObject = __webpack_require__(9670); + var toPrimitive = __webpack_require__(7593); + + var nativeDefineProperty = Object.defineProperty; + + // `Object.defineProperty` method + // https://tc39.github.io/ecma262/#sec-object.defineproperty + exports.f = DESCRIPTORS + ? nativeDefineProperty + : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { + /* empty */ + } + if ("get" in Attributes || "set" in Attributes) + throw TypeError("Accessors not supported"); + if ("value" in Attributes) O[P] = Attributes.value; + return O; + }; + + /***/ + }, + + /***/ 1236: /***/ function ( + __unused_webpack_module, + exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var propertyIsEnumerableModule = __webpack_require__(5296); + var createPropertyDescriptor = __webpack_require__(9114); + var toIndexedObject = __webpack_require__(5656); + var toPrimitive = __webpack_require__(7593); + var has = __webpack_require__(6656); + var IE8_DOM_DEFINE = __webpack_require__(4664); + + var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor + exports.f = DESCRIPTORS + ? nativeGetOwnPropertyDescriptor + : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) + try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { + /* empty */ + } + if (has(O, P)) + return createPropertyDescriptor( + !propertyIsEnumerableModule.f.call(O, P), + O[P] + ); + }; + + /***/ + }, + + /***/ 8006: /***/ function ( + __unused_webpack_module, + exports, + __webpack_require__ + ) { + var internalObjectKeys = __webpack_require__(6324); + var enumBugKeys = __webpack_require__(748); + + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + + // `Object.getOwnPropertyNames` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertynames + exports.f = + Object.getOwnPropertyNames || + function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + + /***/ + }, + + /***/ 5181: /***/ function (__unused_webpack_module, exports) { + exports.f = Object.getOwnPropertySymbols; + + /***/ + }, + + /***/ 9518: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var has = __webpack_require__(6656); + var toObject = __webpack_require__(7908); + var sharedKey = __webpack_require__(6200); + var CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544); + + var IE_PROTO = sharedKey("IE_PROTO"); + var ObjectPrototype = Object.prototype; + + // `Object.getPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.getprototypeof + module.exports = CORRECT_PROTOTYPE_GETTER + ? Object.getPrototypeOf + : function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if ( + typeof O.constructor == "function" && + O instanceof O.constructor + ) { + return O.constructor.prototype; + } + return O instanceof Object ? ObjectPrototype : null; + }; + + /***/ + }, + + /***/ 6324: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var has = __webpack_require__(6656); + var toIndexedObject = __webpack_require__(5656); + var indexOf = __webpack_require__(1318).indexOf; + var hiddenKeys = __webpack_require__(3501); + + module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) + if (has(O, (key = names[i++]))) { + ~indexOf(result, key) || result.push(key); + } + return result; + }; + + /***/ + }, + + /***/ 1956: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var internalObjectKeys = __webpack_require__(6324); + var enumBugKeys = __webpack_require__(748); + + // `Object.keys` method + // https://tc39.github.io/ecma262/#sec-object.keys + module.exports = + Object.keys || + function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + + /***/ + }, + + /***/ 5296: /***/ function (__unused_webpack_module, exports) { + "use strict"; + + var nativePropertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // Nashorn ~ JDK8 bug + var NASHORN_BUG = + getOwnPropertyDescriptor && + !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + + // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable + exports.f = NASHORN_BUG + ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } + : nativePropertyIsEnumerable; + + /***/ + }, + + /***/ 7674: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var aPossiblePrototype = __webpack_require__(6077); + + // `Object.setPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.setprototypeof + // Works with __proto__ only. Old v8 can't work with null proto objects. + /* eslint-disable no-proto */ + module.exports = + Object.setPrototypeOf || + ("__proto__" in {} + ? (function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor( + Object.prototype, + "__proto__" + ).set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + /* empty */ + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; + })() + : undefined); + + /***/ + }, + + /***/ 3887: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var getBuiltIn = __webpack_require__(5005); + var getOwnPropertyNamesModule = __webpack_require__(8006); + var getOwnPropertySymbolsModule = __webpack_require__(5181); + var anObject = __webpack_require__(9670); + + // all object keys, includes non-enumerable and symbols + module.exports = + getBuiltIn("Reflect", "ownKeys") || + function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols + ? keys.concat(getOwnPropertySymbols(it)) + : keys; + }; + + /***/ + }, + + /***/ 857: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + + module.exports = global; + + /***/ + }, + + /***/ 2534: /***/ function (module) { + module.exports = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } + }; + + /***/ + }, + + /***/ 9478: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var isObject = __webpack_require__(111); + var newPromiseCapability = __webpack_require__(8523); + + module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; + }; + + /***/ + }, + + /***/ 2248: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var redefine = __webpack_require__(1320); + + module.exports = function (target, src, options) { + for (var key in src) redefine(target, key, src[key], options); + return target; + }; + + /***/ + }, + + /***/ 1320: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var createNonEnumerableProperty = __webpack_require__(8880); + var has = __webpack_require__(6656); + var setGlobal = __webpack_require__(3505); + var inspectSource = __webpack_require__(2788); + var InternalStateModule = __webpack_require__(9909); + + var getInternalState = InternalStateModule.get; + var enforceInternalState = InternalStateModule.enforce; + var TEMPLATE = String(String).split("String"); + + (module.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + if (typeof value == "function") { + if (typeof key == "string" && !has(value, "name")) + createNonEnumerableProperty(value, "name", key); + enforceInternalState(value).source = TEMPLATE.join( + typeof key == "string" ? key : "" + ); + } + if (O === global) { + if (simple) O[key] = value; + else setGlobal(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + if (simple) O[key] = value; + else createNonEnumerableProperty(O, key, value); + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, "toString", function toString() { + return ( + (typeof this == "function" && getInternalState(this).source) || + inspectSource(this) + ); + }); + + /***/ + }, + + /***/ 7066: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var anObject = __webpack_require__(9670); + + // `RegExp.prototype.flags` getter implementation + // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags + module.exports = function () { + var that = anObject(this); + var result = ""; + if (that.global) result += "g"; + if (that.ignoreCase) result += "i"; + if (that.multiline) result += "m"; + if (that.dotAll) result += "s"; + if (that.unicode) result += "u"; + if (that.sticky) result += "y"; + return result; + }; + + /***/ + }, + + /***/ 4488: /***/ function (module) { + // `RequireObjectCoercible` abstract operation + // https://tc39.github.io/ecma262/#sec-requireobjectcoercible + module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; + }; + + /***/ + }, + + /***/ 3505: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var createNonEnumerableProperty = __webpack_require__(8880); + + module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } + return value; + }; + + /***/ + }, + + /***/ 6340: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var getBuiltIn = __webpack_require__(5005); + var definePropertyModule = __webpack_require__(3070); + var wellKnownSymbol = __webpack_require__(5112); + var DESCRIPTORS = __webpack_require__(9781); + + var SPECIES = wellKnownSymbol("species"); + + module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule.f; + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineProperty(Constructor, SPECIES, { + configurable: true, + get: function () { + return this; + } + }); + } + }; + + /***/ + }, + + /***/ 8003: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var defineProperty = __webpack_require__(3070).f; + var has = __webpack_require__(6656); + var wellKnownSymbol = __webpack_require__(5112); + + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + + module.exports = function (it, TAG, STATIC) { + if (it && !has((it = STATIC ? it : it.prototype), TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); + } + }; + + /***/ + }, + + /***/ 6200: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var shared = __webpack_require__(2309); + var uid = __webpack_require__(9711); + + var keys = shared("keys"); + + module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); + }; + + /***/ + }, + + /***/ 5465: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var setGlobal = __webpack_require__(3505); + + var SHARED = "__core-js_shared__"; + var store = global[SHARED] || setGlobal(SHARED, {}); + + module.exports = store; + + /***/ + }, + + /***/ 2309: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var IS_PURE = __webpack_require__(1913); + var store = __webpack_require__(5465); + + (module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); + })("versions", []).push({ + version: "3.6.5", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2020 Denis Pushkarev (zloirock.ru)" + }); + + /***/ + }, + + /***/ 6707: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var aFunction = __webpack_require__(3099); + var wellKnownSymbol = __webpack_require__(5112); + + var SPECIES = wellKnownSymbol("species"); + + // `SpeciesConstructor` abstract operation + // https://tc39.github.io/ecma262/#sec-speciesconstructor + module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined + ? defaultConstructor + : aFunction(S); + }; + + /***/ + }, + + /***/ 261: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var fails = __webpack_require__(7293); + var classof = __webpack_require__(4326); + var bind = __webpack_require__(9974); + var html = __webpack_require__(490); + var createElement = __webpack_require__(317); + var IS_IOS = __webpack_require__(6833); + + var location = global.location; + var set = global.setImmediate; + var clear = global.clearImmediate; + var process = global.process; + var MessageChannel = global.MessageChannel; + var Dispatch = global.Dispatch; + var counter = 0; + var queue = {}; + var ONREADYSTATECHANGE = "onreadystatechange"; + var defer, channel, port; + + var run = function (id) { + // eslint-disable-next-line no-prototype-builtins + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } + }; + + var runner = function (id) { + return function () { + run(id); + }; + }; + + var listener = function (event) { + run(event.data); + }; + + var post = function (id) { + // old engines have not location.origin + global.postMessage(id + "", location.protocol + "//" + location.host); + }; + + // Node.js 0.9+ & IE10+ has setImmediate, otherwise: + if (!set || !clear) { + set = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) args.push(arguments[i++]); + queue[++counter] = function () { + // eslint-disable-next-line no-new-func + (typeof fn == "function" ? fn : Function(fn)).apply( + undefined, + args + ); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (classof(process) == "process") { + defer = function (id) { + process.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = bind(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + global.addEventListener && + typeof postMessage == "function" && + !global.importScripts && + !fails(post) && + location.protocol !== "file:" + ) { + defer = post; + global.addEventListener("message", listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in createElement("script")) { + defer = function (id) { + html.appendChild(createElement("script"))[ONREADYSTATECHANGE] = + function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } + } + + module.exports = { + set: set, + clear: clear + }; + + /***/ + }, + + /***/ 1400: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toInteger = __webpack_require__(9958); + + var max = Math.max; + var min = Math.min; + + // Helper for a popular repeating case of the spec: + // Let integer be ? ToInteger(index). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + module.exports = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + + /***/ + }, + + /***/ 7067: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toInteger = __webpack_require__(9958); + var toLength = __webpack_require__(7466); + + // `ToIndex` abstract operation + // https://tc39.github.io/ecma262/#sec-toindex + module.exports = function (it) { + if (it === undefined) return 0; + var number = toInteger(it); + var length = toLength(number); + if (number !== length) throw RangeError("Wrong length or index"); + return length; + }; + + /***/ + }, + + /***/ 5656: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + // toObject with fallback for non-array-like ES3 strings + var IndexedObject = __webpack_require__(8361); + var requireObjectCoercible = __webpack_require__(4488); + + module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); + }; + + /***/ + }, + + /***/ 9958: /***/ function (module) { + var ceil = Math.ceil; + var floor = Math.floor; + + // `ToInteger` abstract operation + // https://tc39.github.io/ecma262/#sec-tointeger + module.exports = function (argument) { + return isNaN((argument = +argument)) + ? 0 + : (argument > 0 ? floor : ceil)(argument); + }; + + /***/ + }, + + /***/ 7466: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toInteger = __webpack_require__(9958); + + var min = Math.min; + + // `ToLength` abstract operation + // https://tc39.github.io/ecma262/#sec-tolength + module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1fffffffffffff) : 0; // 2 ** 53 - 1 == 9007199254740991 + }; + + /***/ + }, + + /***/ 7908: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var requireObjectCoercible = __webpack_require__(4488); + + // `ToObject` abstract operation + // https://tc39.github.io/ecma262/#sec-toobject + module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); + }; + + /***/ + }, + + /***/ 4590: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toPositiveInteger = __webpack_require__(3002); + + module.exports = function (it, BYTES) { + var offset = toPositiveInteger(it); + if (offset % BYTES) throw RangeError("Wrong offset"); + return offset; + }; + + /***/ + }, + + /***/ 3002: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toInteger = __webpack_require__(9958); + + module.exports = function (it) { + var result = toInteger(it); + if (result < 0) throw RangeError("The argument can't be less than 0"); + return result; + }; + + /***/ + }, + + /***/ 7593: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + + // `ToPrimitive` abstract operation + // https://tc39.github.io/ecma262/#sec-toprimitive + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + module.exports = function (input, PREFERRED_STRING) { + if (!isObject(input)) return input; + var fn, val; + if ( + PREFERRED_STRING && + typeof (fn = input.toString) == "function" && + !isObject((val = fn.call(input))) + ) + return val; + if ( + typeof (fn = input.valueOf) == "function" && + !isObject((val = fn.call(input))) + ) + return val; + if ( + !PREFERRED_STRING && + typeof (fn = input.toString) == "function" && + !isObject((val = fn.call(input))) + ) + return val; + throw TypeError("Can't convert object to primitive value"); + }; + + /***/ + }, + + /***/ 1694: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + + test[TO_STRING_TAG] = "z"; + + module.exports = String(test) === "[object z]"; + + /***/ + }, + + /***/ 9843: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var global = __webpack_require__(7854); + var DESCRIPTORS = __webpack_require__(9781); + var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = + __webpack_require__(3832); + var ArrayBufferViewCore = __webpack_require__(260); + var ArrayBufferModule = __webpack_require__(3331); + var anInstance = __webpack_require__(5787); + var createPropertyDescriptor = __webpack_require__(9114); + var createNonEnumerableProperty = __webpack_require__(8880); + var toLength = __webpack_require__(7466); + var toIndex = __webpack_require__(7067); + var toOffset = __webpack_require__(4590); + var toPrimitive = __webpack_require__(7593); + var has = __webpack_require__(6656); + var classof = __webpack_require__(648); + var isObject = __webpack_require__(111); + var create = __webpack_require__(30); + var setPrototypeOf = __webpack_require__(7674); + var getOwnPropertyNames = __webpack_require__(8006).f; + var typedArrayFrom = __webpack_require__(7321); + var forEach = __webpack_require__(2092).forEach; + var setSpecies = __webpack_require__(6340); + var definePropertyModule = __webpack_require__(3070); + var getOwnPropertyDescriptorModule = __webpack_require__(1236); + var InternalStateModule = __webpack_require__(9909); + var inheritIfRequired = __webpack_require__(9587); + + var getInternalState = InternalStateModule.get; + var setInternalState = InternalStateModule.set; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var round = Math.round; + var RangeError = global.RangeError; + var ArrayBuffer = ArrayBufferModule.ArrayBuffer; + var DataView = ArrayBufferModule.DataView; + var NATIVE_ARRAY_BUFFER_VIEWS = + ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS; + var TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG; + var TypedArray = ArrayBufferViewCore.TypedArray; + var TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype; + var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor; + var isTypedArray = ArrayBufferViewCore.isTypedArray; + var BYTES_PER_ELEMENT = "BYTES_PER_ELEMENT"; + var WRONG_LENGTH = "Wrong length"; + + var fromList = function (C, list) { + var index = 0; + var length = list.length; + var result = new (aTypedArrayConstructor(C))(length); + while (length > index) result[index] = list[index++]; + return result; + }; + + var addGetter = function (it, key) { + nativeDefineProperty(it, key, { + get: function () { + return getInternalState(this)[key]; + } + }); + }; + + var isArrayBuffer = function (it) { + var klass; + return ( + it instanceof ArrayBuffer || + (klass = classof(it)) == "ArrayBuffer" || + klass == "SharedArrayBuffer" + ); + }; + + var isTypedArrayIndex = function (target, key) { + return ( + isTypedArray(target) && + typeof key != "symbol" && + key in target && + String(+key) == String(key) + ); + }; + + var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor( + target, + key + ) { + return isTypedArrayIndex(target, (key = toPrimitive(key, true))) + ? createPropertyDescriptor(2, target[key]) + : nativeGetOwnPropertyDescriptor(target, key); + }; + + var wrappedDefineProperty = function defineProperty( + target, + key, + descriptor + ) { + if ( + isTypedArrayIndex(target, (key = toPrimitive(key, true))) && + isObject(descriptor) && + has(descriptor, "value") && + !has(descriptor, "get") && + !has(descriptor, "set") && + // TODO: add validation descriptor w/o calling accessors + !descriptor.configurable && + (!has(descriptor, "writable") || descriptor.writable) && + (!has(descriptor, "enumerable") || descriptor.enumerable) + ) { + target[key] = descriptor.value; + return target; + } + return nativeDefineProperty(target, key, descriptor); + }; + + if (DESCRIPTORS) { + if (!NATIVE_ARRAY_BUFFER_VIEWS) { + getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor; + definePropertyModule.f = wrappedDefineProperty; + addGetter(TypedArrayPrototype, "buffer"); + addGetter(TypedArrayPrototype, "byteOffset"); + addGetter(TypedArrayPrototype, "byteLength"); + addGetter(TypedArrayPrototype, "length"); + } + + $( + { target: "Object", stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, + { + getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor, + defineProperty: wrappedDefineProperty + } + ); + + module.exports = function (TYPE, wrapper, CLAMPED) { + var BYTES = TYPE.match(/\d+$/)[0] / 8; + var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? "Clamped" : "") + "Array"; + var GETTER = "get" + TYPE; + var SETTER = "set" + TYPE; + var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME]; + var TypedArrayConstructor = NativeTypedArrayConstructor; + var TypedArrayConstructorPrototype = + TypedArrayConstructor && TypedArrayConstructor.prototype; + var exported = {}; + + var getter = function (that, index) { + var data = getInternalState(that); + return data.view[GETTER](index * BYTES + data.byteOffset, true); + }; + + var setter = function (that, index, value) { + var data = getInternalState(that); + if (CLAMPED) + value = + (value = round(value)) < 0 + ? 0 + : value > 0xff + ? 0xff + : value & 0xff; + data.view[SETTER](index * BYTES + data.byteOffset, value, true); + }; + + var addElement = function (that, index) { + nativeDefineProperty(that, index, { + get: function () { + return getter(this, index); + }, + set: function (value) { + return setter(this, index, value); + }, + enumerable: true + }); + }; + + if (!NATIVE_ARRAY_BUFFER_VIEWS) { + TypedArrayConstructor = wrapper(function ( + that, + data, + offset, + $length + ) { + anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME); + var index = 0; + var byteOffset = 0; + var buffer, byteLength, length; + if (!isObject(data)) { + length = toIndex(data); + byteLength = length * BYTES; + buffer = new ArrayBuffer(byteLength); + } else if (isArrayBuffer(data)) { + buffer = data; + byteOffset = toOffset(offset, BYTES); + var $len = data.byteLength; + if ($length === undefined) { + if ($len % BYTES) throw RangeError(WRONG_LENGTH); + byteLength = $len - byteOffset; + if (byteLength < 0) throw RangeError(WRONG_LENGTH); + } else { + byteLength = toLength($length) * BYTES; + if (byteLength + byteOffset > $len) + throw RangeError(WRONG_LENGTH); + } + length = byteLength / BYTES; + } else if (isTypedArray(data)) { + return fromList(TypedArrayConstructor, data); + } else { + return typedArrayFrom.call(TypedArrayConstructor, data); + } + setInternalState(that, { + buffer: buffer, + byteOffset: byteOffset, + byteLength: byteLength, + length: length, + view: new DataView(buffer) + }); + while (index < length) addElement(that, index++); + }); + + if (setPrototypeOf) + setPrototypeOf(TypedArrayConstructor, TypedArray); + TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = + create(TypedArrayPrototype); + } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) { + TypedArrayConstructor = wrapper(function ( + dummy, + data, + typedArrayOffset, + $length + ) { + anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME); + return inheritIfRequired( + (function () { + if (!isObject(data)) + return new NativeTypedArrayConstructor(toIndex(data)); + if (isArrayBuffer(data)) + return $length !== undefined + ? new NativeTypedArrayConstructor( + data, + toOffset(typedArrayOffset, BYTES), + $length + ) + : typedArrayOffset !== undefined + ? new NativeTypedArrayConstructor( + data, + toOffset(typedArrayOffset, BYTES) + ) + : new NativeTypedArrayConstructor(data); + if (isTypedArray(data)) + return fromList(TypedArrayConstructor, data); + return typedArrayFrom.call(TypedArrayConstructor, data); + })(), + dummy, + TypedArrayConstructor + ); + }); + + if (setPrototypeOf) + setPrototypeOf(TypedArrayConstructor, TypedArray); + forEach( + getOwnPropertyNames(NativeTypedArrayConstructor), + function (key) { + if (!(key in TypedArrayConstructor)) { + createNonEnumerableProperty( + TypedArrayConstructor, + key, + NativeTypedArrayConstructor[key] + ); + } + } + ); + TypedArrayConstructor.prototype = TypedArrayConstructorPrototype; + } + + if ( + TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor + ) { + createNonEnumerableProperty( + TypedArrayConstructorPrototype, + "constructor", + TypedArrayConstructor + ); + } + + if (TYPED_ARRAY_TAG) { + createNonEnumerableProperty( + TypedArrayConstructorPrototype, + TYPED_ARRAY_TAG, + CONSTRUCTOR_NAME + ); + } + + exported[CONSTRUCTOR_NAME] = TypedArrayConstructor; + + $( + { + global: true, + forced: TypedArrayConstructor != NativeTypedArrayConstructor, + sham: !NATIVE_ARRAY_BUFFER_VIEWS + }, + exported + ); + + if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) { + createNonEnumerableProperty( + TypedArrayConstructor, + BYTES_PER_ELEMENT, + BYTES + ); + } + + if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) { + createNonEnumerableProperty( + TypedArrayConstructorPrototype, + BYTES_PER_ELEMENT, + BYTES + ); + } + + setSpecies(CONSTRUCTOR_NAME); + }; + } else + module.exports = function () { + /* empty */ + }; + + /***/ + }, + + /***/ 3832: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + /* eslint-disable no-new */ + var global = __webpack_require__(7854); + var fails = __webpack_require__(7293); + var checkCorrectnessOfIteration = __webpack_require__(7072); + var NATIVE_ARRAY_BUFFER_VIEWS = + __webpack_require__(260).NATIVE_ARRAY_BUFFER_VIEWS; + + var ArrayBuffer = global.ArrayBuffer; + var Int8Array = global.Int8Array; + + module.exports = + !NATIVE_ARRAY_BUFFER_VIEWS || + !fails(function () { + Int8Array(1); + }) || + !fails(function () { + new Int8Array(-1); + }) || + !checkCorrectnessOfIteration(function (iterable) { + new Int8Array(); + new Int8Array(null); + new Int8Array(1.5); + new Int8Array(iterable); + }, true) || + fails(function () { + // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill + return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1; + }); + + /***/ + }, + + /***/ 7321: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toObject = __webpack_require__(7908); + var toLength = __webpack_require__(7466); + var getIteratorMethod = __webpack_require__(1246); + var isArrayIteratorMethod = __webpack_require__(7659); + var bind = __webpack_require__(9974); + var aTypedArrayConstructor = + __webpack_require__(260).aTypedArrayConstructor; + + module.exports = function from(source /* , mapfn, thisArg */) { + var O = toObject(source); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod(O); + var i, length, result, step, iterator, next; + if ( + iteratorMethod != undefined && + !isArrayIteratorMethod(iteratorMethod) + ) { + iterator = iteratorMethod.call(O); + next = iterator.next; + O = []; + while (!(step = next.call(iterator)).done) { + O.push(step.value); + } + } + if (mapping && argumentsLength > 2) { + mapfn = bind(mapfn, arguments[2], 2); + } + length = toLength(O.length); + result = new (aTypedArrayConstructor(this))(length); + for (i = 0; length > i; i++) { + result[i] = mapping ? mapfn(O[i], i) : O[i]; + } + return result; + }; + + /***/ + }, + + /***/ 9711: /***/ function (module) { + var id = 0; + var postfix = Math.random(); + + module.exports = function (key) { + return ( + "Symbol(" + + String(key === undefined ? "" : key) + + ")_" + + (++id + postfix).toString(36) + ); + }; + + /***/ + }, + + /***/ 3307: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var NATIVE_SYMBOL = __webpack_require__(133); + + module.exports = + NATIVE_SYMBOL && + // eslint-disable-next-line no-undef + !Symbol.sham && + // eslint-disable-next-line no-undef + typeof Symbol.iterator == "symbol"; + + /***/ + }, + + /***/ 6061: /***/ function ( + __unused_webpack_module, + exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + + exports.f = wellKnownSymbol; + + /***/ + }, + + /***/ 5112: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var shared = __webpack_require__(2309); + var has = __webpack_require__(6656); + var uid = __webpack_require__(9711); + var NATIVE_SYMBOL = __webpack_require__(133); + var USE_SYMBOL_AS_UID = __webpack_require__(3307); + + var WellKnownSymbolsStore = shared("wks"); + var Symbol = global.Symbol; + var createWellKnownSymbol = USE_SYMBOL_AS_UID + ? Symbol + : (Symbol && Symbol.withoutSetter) || uid; + + module.exports = function (name) { + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) + WellKnownSymbolsStore[name] = Symbol[name]; + else + WellKnownSymbolsStore[name] = createWellKnownSymbol( + "Symbol." + name + ); + } + return WellKnownSymbolsStore[name]; + }; + + /***/ + }, + + /***/ 7327: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var $filter = __webpack_require__(2092).filter; + var arrayMethodHasSpeciesSupport = __webpack_require__(1194); + var arrayMethodUsesToLength = __webpack_require__(9207); + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("filter"); + // Edge 14- issue + var USES_TO_LENGTH = arrayMethodUsesToLength("filter"); + + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + // with adding support of @@species + $( + { + target: "Array", + proto: true, + forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH + }, + { + filter: function filter(callbackfn /* , thisArg */) { + return $filter( + this, + callbackfn, + arguments.length > 1 ? arguments[1] : undefined + ); + } + } + ); + + /***/ + }, + + /***/ 6992: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var toIndexedObject = __webpack_require__(5656); + var addToUnscopables = __webpack_require__(1223); + var Iterators = __webpack_require__(7497); + var InternalStateModule = __webpack_require__(9909); + var defineIterator = __webpack_require__(654); + + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + + // `Array.prototype.entries` method + // https://tc39.github.io/ecma262/#sec-array.prototype.entries + // `Array.prototype.keys` method + // https://tc39.github.io/ecma262/#sec-array.prototype.keys + // `Array.prototype.values` method + // https://tc39.github.io/ecma262/#sec-array.prototype.values + // `Array.prototype[@@iterator]` method + // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator + // `CreateArrayIterator` internal method + // https://tc39.github.io/ecma262/#sec-createarrayiterator + module.exports = defineIterator( + Array, + "Array", + function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); + // `%ArrayIteratorPrototype%.next` method + // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next + }, + function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == "keys") return { value: index, done: false }; + if (kind == "values") return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; + }, + "values" + ); + + // argumentsList[@@iterator] is %ArrayProto_values% + // https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject + // https://tc39.github.io/ecma262/#sec-createmappedargumentsobject + Iterators.Arguments = Iterators.Array; + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + + /***/ + }, + + /***/ 7042: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var isObject = __webpack_require__(111); + var isArray = __webpack_require__(3157); + var toAbsoluteIndex = __webpack_require__(1400); + var toLength = __webpack_require__(7466); + var toIndexedObject = __webpack_require__(5656); + var createProperty = __webpack_require__(6135); + var wellKnownSymbol = __webpack_require__(5112); + var arrayMethodHasSpeciesSupport = __webpack_require__(1194); + var arrayMethodUsesToLength = __webpack_require__(9207); + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var USES_TO_LENGTH = arrayMethodUsesToLength("slice", { + ACCESSORS: true, + 0: 0, + 1: 2 + }); + + var SPECIES = wellKnownSymbol("species"); + var nativeSlice = [].slice; + var max = Math.max; + + // `Array.prototype.slice` method + // https://tc39.github.io/ecma262/#sec-array.prototype.slice + // fallback for not array-like ES3 strings and DOM objects + $( + { + target: "Array", + proto: true, + forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH + }, + { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = toLength(O.length); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === undefined ? length : end, length); + // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + // cross-realm fallback + if ( + typeof Constructor == "function" && + (Constructor === Array || isArray(Constructor.prototype)) + ) { + Constructor = undefined; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) Constructor = undefined; + } + if (Constructor === Array || Constructor === undefined) { + return nativeSlice.call(O, k, fin); + } + } + result = new (Constructor === undefined ? Array : Constructor)( + max(fin - k, 0) + ); + for (n = 0; k < fin; k++, n++) + if (k in O) createProperty(result, n, O[k]); + result.length = n; + return result; + } + } + ); + + /***/ + }, + + /***/ 3706: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var setToStringTag = __webpack_require__(8003); + + // JSON[@@toStringTag] property + // https://tc39.github.io/ecma262/#sec-json-@@tostringtag + setToStringTag(global.JSON, "JSON", true); + + /***/ + }, + + /***/ 2703: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var setToStringTag = __webpack_require__(8003); + + // Math[@@toStringTag] property + // https://tc39.github.io/ecma262/#sec-math-@@tostringtag + setToStringTag(Math, "Math", true); + + /***/ + }, + + /***/ 9337: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var $ = __webpack_require__(2109); + var DESCRIPTORS = __webpack_require__(9781); + var ownKeys = __webpack_require__(3887); + var toIndexedObject = __webpack_require__(5656); + var getOwnPropertyDescriptorModule = __webpack_require__(1236); + var createProperty = __webpack_require__(6135); + + // `Object.getOwnPropertyDescriptors` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors + $( + { target: "Object", stat: true, sham: !DESCRIPTORS }, + { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors( + object + ) { + var O = toIndexedObject(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var keys = ownKeys(O); + var result = {}; + var index = 0; + var key, descriptor; + while (keys.length > index) { + descriptor = getOwnPropertyDescriptor(O, (key = keys[index++])); + if (descriptor !== undefined) + createProperty(result, key, descriptor); + } + return result; + } + } + ); + + /***/ + }, + + /***/ 8674: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var IS_PURE = __webpack_require__(1913); + var global = __webpack_require__(7854); + var getBuiltIn = __webpack_require__(5005); + var NativePromise = __webpack_require__(3366); + var redefine = __webpack_require__(1320); + var redefineAll = __webpack_require__(2248); + var setToStringTag = __webpack_require__(8003); + var setSpecies = __webpack_require__(6340); + var isObject = __webpack_require__(111); + var aFunction = __webpack_require__(3099); + var anInstance = __webpack_require__(5787); + var classof = __webpack_require__(4326); + var inspectSource = __webpack_require__(2788); + var iterate = __webpack_require__(408); + var checkCorrectnessOfIteration = __webpack_require__(7072); + var speciesConstructor = __webpack_require__(6707); + var task = __webpack_require__(261).set; + var microtask = __webpack_require__(5948); + var promiseResolve = __webpack_require__(9478); + var hostReportErrors = __webpack_require__(842); + var newPromiseCapabilityModule = __webpack_require__(8523); + var perform = __webpack_require__(2534); + var InternalStateModule = __webpack_require__(9909); + var isForced = __webpack_require__(4705); + var wellKnownSymbol = __webpack_require__(5112); + var V8_VERSION = __webpack_require__(7392); + + var SPECIES = wellKnownSymbol("species"); + var PROMISE = "Promise"; + var getInternalState = InternalStateModule.get; + var setInternalState = InternalStateModule.set; + var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); + var PromiseConstructor = NativePromise; + var TypeError = global.TypeError; + var document = global.document; + var process = global.process; + var $fetch = getBuiltIn("fetch"); + var newPromiseCapability = newPromiseCapabilityModule.f; + var newGenericPromiseCapability = newPromiseCapability; + var IS_NODE = classof(process) == "process"; + var DISPATCH_EVENT = !!( + document && + document.createEvent && + global.dispatchEvent + ); + var UNHANDLED_REJECTION = "unhandledrejection"; + var REJECTION_HANDLED = "rejectionhandled"; + var PENDING = 0; + var FULFILLED = 1; + var REJECTED = 2; + var HANDLED = 1; + var UNHANDLED = 2; + var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + + var FORCED = isForced(PROMISE, function () { + var GLOBAL_CORE_JS_PROMISE = + inspectSource(PromiseConstructor) !== String(PromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE) { + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (V8_VERSION === 66) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + if (!IS_NODE && typeof PromiseRejectionEvent != "function") + return true; + } + // We need Promise#finally in the pure version for preventing prototype pollution + if (IS_PURE && !PromiseConstructor.prototype["finally"]) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) + return false; + // Detect correctness of subclassing with @@species support + var promise = PromiseConstructor.resolve(1); + var FakePromise = function (exec) { + exec( + function () { + /* empty */ + }, + function () { + /* empty */ + } + ); + }; + var constructor = (promise.constructor = {}); + constructor[SPECIES] = FakePromise; + return !( + promise.then(function () { + /* empty */ + }) instanceof FakePromise + ); + }); + + var INCORRECT_ITERATION = + FORCED || + !checkCorrectnessOfIteration(function (iterable) { + PromiseConstructor.all(iterable)["catch"](function () { + /* empty */ + }); + }); + + // helpers + var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == "function" + ? then + : false; + }; + + var notify = function (promise, state, isReject) { + if (state.notified) return; + state.notified = true; + var chain = state.reactions; + microtask(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; + // variable length - can't use forEach + while (chain.length > index) { + var reaction = chain[index++]; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) + onHandleUnhandled(promise, state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError("Promise-chain cycle")); + } else if ((then = isThenable(result))) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + } + state.reactions = []; + state.notified = false; + if (isReject && !state.rejection) onUnhandled(promise, state); + }); + }; + + var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document.createEvent("Event"); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if ((handler = global["on" + name])) handler(event); + else if (name === UNHANDLED_REJECTION) + hostReportErrors("Unhandled promise rejection", reason); + }; + + var onUnhandled = function (promise, state) { + task.call(global, function () { + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE) { + process.emit("unhandledRejection", value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = + IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); + }; + + var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; + }; + + var onHandleUnhandled = function (promise, state) { + task.call(global, function () { + if (IS_NODE) { + process.emit("rejectionHandled", promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); + }; + + var bind = function (fn, promise, state, unwrap) { + return function (value) { + fn(promise, state, value, unwrap); + }; + }; + + var internalReject = function (promise, state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(promise, state, true); + }; + + var internalResolve = function (promise, state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (promise === value) + throw TypeError("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + then.call( + value, + bind(internalResolve, promise, wrapper, state), + bind(internalReject, promise, wrapper, state) + ); + } catch (error) { + internalReject(promise, wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(promise, state, false); + } + } catch (error) { + internalReject(promise, { done: false }, error, state); + } + }; + + // constructor polyfill + if (FORCED) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromiseConstructor, PROMISE); + aFunction(executor); + Internal.call(this); + var state = getInternalState(this); + try { + executor( + bind(internalResolve, this, state), + bind(internalReject, this, state) + ); + } catch (error) { + internalReject(this, state, error); + } + }; + // eslint-disable-next-line no-unused-vars + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + Internal.prototype = redefineAll(PromiseConstructor.prototype, { + // `Promise.prototype.then` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.then + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability( + speciesConstructor(this, PromiseConstructor) + ); + reaction.ok = typeof onFulfilled == "function" ? onFulfilled : true; + reaction.fail = typeof onRejected == "function" && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + state.parent = true; + state.reactions.push(reaction); + if (state.state != PENDING) notify(this, state, false); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.catch + catch: function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, promise, state); + this.reject = bind(internalReject, promise, state); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (!IS_PURE && typeof NativePromise == "function") { + nativeThen = NativePromise.prototype.then; + + // wrap native Promise#then for native async functions + redefine( + NativePromise.prototype, + "then", + function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, + { unsafe: true } + ); + + // wrap fetch result + if (typeof $fetch == "function") + $( + { global: true, enumerable: true, forced: true }, + { + // eslint-disable-next-line no-unused-vars + fetch: function fetch(input /* , init */) { + return promiseResolve( + PromiseConstructor, + $fetch.apply(global, arguments) + ); + } + } + ); + } + } + + $( + { global: true, wrap: true, forced: FORCED }, + { + Promise: PromiseConstructor + } + ); + + setToStringTag(PromiseConstructor, PROMISE, false, true); + setSpecies(PROMISE); + + PromiseWrapper = getBuiltIn(PROMISE); + + // statics + $( + { target: PROMISE, stat: true, forced: FORCED }, + { + // `Promise.reject` method + // https://tc39.github.io/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability(this); + capability.reject.call(undefined, r); + return capability.promise; + } + } + ); + + $( + { target: PROMISE, stat: true, forced: IS_PURE || FORCED }, + { + // `Promise.resolve` method + // https://tc39.github.io/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve( + IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, + x + ); + } + } + ); + + $( + { target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, + { + // `Promise.all` method + // https://tc39.github.io/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aFunction(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + $promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.github.io/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aFunction(C.resolve); + iterate(iterable, function (promise) { + $promiseResolve + .call(C, promise) + .then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } + } + ); + + /***/ + }, + + /***/ 9714: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var redefine = __webpack_require__(1320); + var anObject = __webpack_require__(9670); + var fails = __webpack_require__(7293); + var flags = __webpack_require__(7066); + + var TO_STRING = "toString"; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + + var NOT_GENERIC = fails(function () { + return nativeToString.call({ source: "a", flags: "b" }) != "/a/b"; + }); + // FF44- RegExp#toString has a wrong name + var INCORRECT_NAME = nativeToString.name != TO_STRING; + + // `RegExp.prototype.toString` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring + if (NOT_GENERIC || INCORRECT_NAME) { + redefine( + RegExp.prototype, + TO_STRING, + function toString() { + var R = anObject(this); + var p = String(R.source); + var rf = R.flags; + var f = String( + rf === undefined && + R instanceof RegExp && + !("flags" in RegExpPrototype) + ? flags.call(R) + : rf + ); + return "/" + p + "/" + f; + }, + { unsafe: true } + ); + } + + /***/ + }, + + /***/ 2443: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var defineWellKnownSymbol = __webpack_require__(7235); + + // `Symbol.asyncIterator` well-known symbol + // https://tc39.github.io/ecma262/#sec-symbol.asynciterator + defineWellKnownSymbol("asyncIterator"); + + /***/ + }, + + /***/ 1817: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + // `Symbol.prototype.description` getter + // https://tc39.github.io/ecma262/#sec-symbol.prototype.description + + var $ = __webpack_require__(2109); + var DESCRIPTORS = __webpack_require__(9781); + var global = __webpack_require__(7854); + var has = __webpack_require__(6656); + var isObject = __webpack_require__(111); + var defineProperty = __webpack_require__(3070).f; + var copyConstructorProperties = __webpack_require__(9920); + + var NativeSymbol = global.Symbol; + + if ( + DESCRIPTORS && + typeof NativeSymbol == "function" && + (!("description" in NativeSymbol.prototype) || + // Safari 12 bug + NativeSymbol().description !== undefined) + ) { + var EmptyStringDescriptionStore = {}; + // wrap Symbol constructor for correct work with undefined description + var SymbolWrapper = function Symbol() { + var description = + arguments.length < 1 || arguments[0] === undefined + ? undefined + : String(arguments[0]); + var result = + this instanceof SymbolWrapper + ? new NativeSymbol(description) + : // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' + description === undefined + ? NativeSymbol() + : NativeSymbol(description); + if (description === "") EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + var symbolPrototype = (SymbolWrapper.prototype = + NativeSymbol.prototype); + symbolPrototype.constructor = SymbolWrapper; + + var symbolToString = symbolPrototype.toString; + var native = String(NativeSymbol("test")) == "Symbol(test)"; + var regexp = /^Symbol\((.*)\)[^)]+$/; + defineProperty(symbolPrototype, "description", { + configurable: true, + get: function description() { + var symbol = isObject(this) ? this.valueOf() : this; + var string = symbolToString.call(symbol); + if (has(EmptyStringDescriptionStore, symbol)) return ""; + var desc = native + ? string.slice(7, -1) + : string.replace(regexp, "$1"); + return desc === "" ? undefined : desc; + } + }); + + $( + { global: true, forced: true }, + { + Symbol: SymbolWrapper + } + ); + } + + /***/ + }, + + /***/ 3105: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var ArrayBufferViewCore = __webpack_require__(260); + var $fill = __webpack_require__(1285); + + var aTypedArray = ArrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.fill` method + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.fill + // eslint-disable-next-line no-unused-vars + exportTypedArrayMethod("fill", function fill(value /* , start, end */) { + return $fill.apply(aTypedArray(this), arguments); + }); + + /***/ + }, + + /***/ 6319: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var global = __webpack_require__(7854); + var ArrayBufferViewCore = __webpack_require__(260); + var ArrayIterators = __webpack_require__(6992); + var wellKnownSymbol = __webpack_require__(5112); + + var ITERATOR = wellKnownSymbol("iterator"); + var Uint8Array = global.Uint8Array; + var arrayValues = ArrayIterators.values; + var arrayKeys = ArrayIterators.keys; + var arrayEntries = ArrayIterators.entries; + var aTypedArray = ArrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; + var nativeTypedArrayIterator = + Uint8Array && Uint8Array.prototype[ITERATOR]; + + var CORRECT_ITER_NAME = + !!nativeTypedArrayIterator && + (nativeTypedArrayIterator.name == "values" || + nativeTypedArrayIterator.name == undefined); + + var typedArrayValues = function values() { + return arrayValues.call(aTypedArray(this)); + }; + + // `%TypedArray%.prototype.entries` method + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.entries + exportTypedArrayMethod("entries", function entries() { + return arrayEntries.call(aTypedArray(this)); + }); + // `%TypedArray%.prototype.keys` method + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.keys + exportTypedArrayMethod("keys", function keys() { + return arrayKeys.call(aTypedArray(this)); + }); + // `%TypedArray%.prototype.values` method + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.values + exportTypedArrayMethod("values", typedArrayValues, !CORRECT_ITER_NAME); + // `%TypedArray%.prototype[@@iterator]` method + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype-@@iterator + exportTypedArrayMethod(ITERATOR, typedArrayValues, !CORRECT_ITER_NAME); + + /***/ + }, + + /***/ 3462: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var ArrayBufferViewCore = __webpack_require__(260); + var toLength = __webpack_require__(7466); + var toOffset = __webpack_require__(4590); + var toObject = __webpack_require__(7908); + var fails = __webpack_require__(7293); + + var aTypedArray = ArrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; + + var FORCED = fails(function () { + // eslint-disable-next-line no-undef + new Int8Array(1).set({}); + }); + + // `%TypedArray%.prototype.set` method + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.set + exportTypedArrayMethod( + "set", + function set(arrayLike /* , offset */) { + aTypedArray(this); + var offset = toOffset( + arguments.length > 1 ? arguments[1] : undefined, + 1 + ); + var length = this.length; + var src = toObject(arrayLike); + var len = toLength(src.length); + var index = 0; + if (len + offset > length) throw RangeError("Wrong length"); + while (index < len) this[offset + index] = src[index++]; + }, + FORCED + ); + + /***/ + }, + + /***/ 3824: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var ArrayBufferViewCore = __webpack_require__(260); + + var aTypedArray = ArrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; + var $sort = [].sort; + + // `%TypedArray%.prototype.sort` method + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.sort + exportTypedArrayMethod("sort", function sort(comparefn) { + return $sort.call(aTypedArray(this), comparefn); + }); + + /***/ + }, + + /***/ 5016: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var exportTypedArrayMethod = + __webpack_require__(260).exportTypedArrayMethod; + var fails = __webpack_require__(7293); + var global = __webpack_require__(7854); + + var Uint8Array = global.Uint8Array; + var Uint8ArrayPrototype = (Uint8Array && Uint8Array.prototype) || {}; + var arrayToString = [].toString; + var arrayJoin = [].join; + + if ( + fails(function () { + arrayToString.call({}); + }) + ) { + arrayToString = function toString() { + return arrayJoin.call(this); + }; + } + + var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString; + + // `%TypedArray%.prototype.toString` method + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.tostring + exportTypedArrayMethod("toString", arrayToString, IS_NOT_ARRAY_METHOD); + + /***/ + }, + + /***/ 9743: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var createTypedArrayConstructor = __webpack_require__(9843); + + // `Uint8ClampedArray` constructor + // https://tc39.github.io/ecma262/#sec-typedarray-objects + createTypedArrayConstructor( + "Uint8", + function (init) { + return function Uint8ClampedArray(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }, + true + ); + + /***/ + }, + + /***/ 4747: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var DOMIterables = __webpack_require__(8324); + var forEach = __webpack_require__(8533); + var createNonEnumerableProperty = __webpack_require__(8880); + + for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== forEach) + try { + createNonEnumerableProperty( + CollectionPrototype, + "forEach", + forEach + ); + } catch (error) { + CollectionPrototype.forEach = forEach; + } + } + + /***/ + }, + + /***/ 3948: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var DOMIterables = __webpack_require__(8324); + var ArrayIteratorMethods = __webpack_require__(6992); + var createNonEnumerableProperty = __webpack_require__(8880); + var wellKnownSymbol = __webpack_require__(5112); + + var ITERATOR = wellKnownSymbol("iterator"); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var ArrayValues = ArrayIteratorMethods.values; + + for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + if (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[ITERATOR] !== ArrayValues) + try { + createNonEnumerableProperty( + CollectionPrototype, + ITERATOR, + ArrayValues + ); + } catch (error) { + CollectionPrototype[ITERATOR] = ArrayValues; + } + if (!CollectionPrototype[TO_STRING_TAG]) { + createNonEnumerableProperty( + CollectionPrototype, + TO_STRING_TAG, + COLLECTION_NAME + ); + } + if (DOMIterables[COLLECTION_NAME]) + for (var METHOD_NAME in ArrayIteratorMethods) { + // some Chrome versions have non-configurable methods on DOMTokenList + if ( + CollectionPrototype[METHOD_NAME] !== + ArrayIteratorMethods[METHOD_NAME] + ) + try { + createNonEnumerableProperty( + CollectionPrototype, + METHOD_NAME, + ArrayIteratorMethods[METHOD_NAME] + ); + } catch (error) { + CollectionPrototype[METHOD_NAME] = + ArrayIteratorMethods[METHOD_NAME]; + } + } + } + } + + /***/ + } + + /******/ + }; + /************************************************************************/ + /******/ // The module cache + /******/ var __webpack_module_cache__ = {}; + /******/ + /******/ // The require function + /******/ function __webpack_require__(moduleId) { + /******/ // Check if module is in cache + /******/ var cachedModule = __webpack_module_cache__[moduleId]; + /******/ if (cachedModule !== undefined) { + /******/ return cachedModule.exports; + /******/ + } + /******/ // Create a new module (and put it into the cache) + /******/ var module = (__webpack_module_cache__[moduleId] = { + /******/ // no module.id needed + /******/ // no module.loaded needed + /******/ exports: {} + /******/ + }); + /******/ + /******/ // Execute the module function + /******/ __webpack_modules__[moduleId]( + module, + module.exports, + __webpack_require__ + ); + /******/ + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ + } + /******/ + /************************************************************************/ + /******/ /* webpack/runtime/compat get default export */ + /******/ !(function () { + /******/ // getDefaultExport function for compatibility with non-harmony modules + /******/ __webpack_require__.n = function (module) { + /******/ var getter = + module && module.__esModule + ? /******/ function () { + return module["default"]; + } + : /******/ function () { + return module; + }; + /******/ __webpack_require__.d(getter, { a: getter }); + /******/ return getter; + /******/ + }; + /******/ + })(); + /******/ + /******/ /* webpack/runtime/define property getters */ + /******/ !(function () { + /******/ // define getter functions for harmony exports + /******/ __webpack_require__.d = function (exports, definition) { + /******/ for (var key in definition) { + /******/ if ( + __webpack_require__.o(definition, key) && + !__webpack_require__.o(exports, key) + ) { + /******/ Object.defineProperty(exports, key, { + enumerable: true, + get: definition[key] + }); + /******/ + } + /******/ + } + /******/ + }; + /******/ + })(); + /******/ + /******/ /* webpack/runtime/global */ + /******/ !(function () { + /******/ __webpack_require__.g = (function () { + /******/ if (typeof globalThis === "object") return globalThis; + /******/ try { + /******/ return this || new Function("return this")(); + /******/ + } catch (e) { + /******/ if (typeof window === "object") return window; + /******/ + } + /******/ + })(); + /******/ + })(); + /******/ + /******/ /* webpack/runtime/hasOwnProperty shorthand */ + /******/ !(function () { + /******/ __webpack_require__.o = function (obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + }; + /******/ + })(); + /******/ + /************************************************************************/ + var __webpack_exports__ = {}; + // This entry need to be wrapped in an IIFE because it need to be in strict mode. + !(function () { + "use strict"; + /* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__ = + __webpack_require__(7042); + /* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__ + ); + /* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_1__ = + __webpack_require__(6992); + /* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_1___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_1__ + ); + /* harmony import */ var core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_2__ = + __webpack_require__(9743); + /* harmony import */ var core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_2___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_2__ + ); + /* harmony import */ var core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_3__ = + __webpack_require__(3105); + /* harmony import */ var core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_3___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_3__ + ); + /* harmony import */ var core_js_modules_es_typed_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = + __webpack_require__(6319); + /* harmony import */ var core_js_modules_es_typed_array_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_typed_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__ + ); + /* harmony import */ var core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_5__ = + __webpack_require__(3462); + /* harmony import */ var core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_5___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_5__ + ); + /* harmony import */ var core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_6__ = + __webpack_require__(3824); + /* harmony import */ var core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_6___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_6__ + ); + /* harmony import */ var core_js_modules_es_typed_array_to_string_js__WEBPACK_IMPORTED_MODULE_7__ = + __webpack_require__(5016); + /* harmony import */ var core_js_modules_es_typed_array_to_string_js__WEBPACK_IMPORTED_MODULE_7___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_typed_array_to_string_js__WEBPACK_IMPORTED_MODULE_7__ + ); + /* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_8__ = + __webpack_require__(4747); + /* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_8___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_8__ + ); + /* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_9__ = + __webpack_require__(9714); + /* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_9___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_9__ + ); + /* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_10__ = + __webpack_require__(1817); + /* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_10___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_10__ + ); + /* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_11__ = + __webpack_require__(8674); + /* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_11___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_11__ + ); + /* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_12__ = + __webpack_require__(7327); + /* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_12___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_12__ + ); + /* harmony import */ var core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_13__ = + __webpack_require__(9337); + /* harmony import */ var core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_13___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_13__ + ); + /* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_14__ = + __webpack_require__(3948); + /* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_14___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_14__ + ); + /* harmony import */ var core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_15__ = + __webpack_require__(2443); + /* harmony import */ var core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_15___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_15__ + ); + /* harmony import */ var core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_16__ = + __webpack_require__(3706); + /* harmony import */ var core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_16___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_16__ + ); + /* harmony import */ var core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_17__ = + __webpack_require__(2703); + /* harmony import */ var core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_17___default = + /*#__PURE__*/ __webpack_require__.n( + core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_17__ + ); + function _regeneratorRuntime() { + "use strict"; + /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = + function _regeneratorRuntime() { + return exports; + }; + var exports = {}, + Op = Object.prototype, + hasOwn = Op.hasOwnProperty, + defineProperty = + Object.defineProperty || + function (obj, key, desc) { + obj[key] = desc.value; + }, + $Symbol = "function" == typeof Symbol ? Symbol : {}, + iteratorSymbol = $Symbol.iterator || "@@iterator", + asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", + toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + function define(obj, key, value) { + return ( + Object.defineProperty(obj, key, { + value: value, + enumerable: !0, + configurable: !0, + writable: !0 + }), + obj[key] + ); + } + try { + define({}, ""); + } catch (err) { + define = function define(obj, key, value) { + return (obj[key] = value); + }; + } + function wrap(innerFn, outerFn, self, tryLocsList) { + var protoGenerator = + outerFn && outerFn.prototype instanceof Generator + ? outerFn + : Generator, + generator = Object.create(protoGenerator.prototype), + context = new Context(tryLocsList || []); + return ( + defineProperty(generator, "_invoke", { + value: makeInvokeMethod(innerFn, self, context) + }), + generator + ); + } + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + exports.wrap = wrap; + var ContinueSentinel = {}; + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + var IteratorPrototype = {}; + define(IteratorPrototype, iteratorSymbol, function () { + return this; + }); + var getProto = Object.getPrototypeOf, + NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && + (IteratorPrototype = NativeIteratorPrototype); + var Gp = + (GeneratorFunctionPrototype.prototype = + Generator.prototype = + Object.create(IteratorPrototype)); + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function (method) { + define(prototype, method, function (arg) { + return this._invoke(method, arg); + }); + }); + } + function AsyncIterator(generator, PromiseImpl) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if ("throw" !== record.type) { + var result = record.arg, + value = result.value; + return value && + "object" == typeof value && + hasOwn.call(value, "__await") + ? PromiseImpl.resolve(value.__await).then( + function (value) { + invoke("next", value, resolve, reject); + }, + function (err) { + invoke("throw", err, resolve, reject); + } + ) + : PromiseImpl.resolve(value).then( + function (unwrapped) { + (result.value = unwrapped), resolve(result); + }, + function (error) { + return invoke("throw", error, resolve, reject); + } + ); + } + reject(record.arg); + } + var previousPromise; + defineProperty(this, "_invoke", { + value: function value(method, arg) { + function callInvokeWithMethodAndArg() { + return new PromiseImpl(function (resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + return (previousPromise = previousPromise + ? previousPromise.then( + callInvokeWithMethodAndArg, + callInvokeWithMethodAndArg + ) + : callInvokeWithMethodAndArg()); + } + }); + } + function makeInvokeMethod(innerFn, self, context) { + var state = "suspendedStart"; + return function (method, arg) { + if ("executing" === state) + throw new Error("Generator is already running"); + if ("completed" === state) { + if ("throw" === method) throw arg; + return doneResult(); + } + for (context.method = method, context.arg = arg; ; ) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + if ("next" === context.method) + context.sent = context._sent = context.arg; + else if ("throw" === context.method) { + if ("suspendedStart" === state) + throw ((state = "completed"), context.arg); + context.dispatchException(context.arg); + } else + "return" === context.method && + context.abrupt("return", context.arg); + state = "executing"; + var record = tryCatch(innerFn, self, context); + if ("normal" === record.type) { + if ( + ((state = context.done ? "completed" : "suspendedYield"), + record.arg === ContinueSentinel) + ) + continue; + return { value: record.arg, done: context.done }; + } + "throw" === record.type && + ((state = "completed"), + (context.method = "throw"), + (context.arg = record.arg)); + } + }; + } + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (undefined === method) { + if (((context.delegate = null), "throw" === context.method)) { + if ( + delegate.iterator.return && + ((context.method = "return"), + (context.arg = undefined), + maybeInvokeDelegate(delegate, context), + "throw" === context.method) + ) + return ContinueSentinel; + (context.method = "throw"), + (context.arg = new TypeError( + "The iterator does not provide a 'throw' method" + )); + } + return ContinueSentinel; + } + var record = tryCatch(method, delegate.iterator, context.arg); + if ("throw" === record.type) + return ( + (context.method = "throw"), + (context.arg = record.arg), + (context.delegate = null), + ContinueSentinel + ); + var info = record.arg; + return info + ? info.done + ? ((context[delegate.resultName] = info.value), + (context.next = delegate.nextLoc), + "return" !== context.method && + ((context.method = "next"), (context.arg = undefined)), + (context.delegate = null), + ContinueSentinel) + : info + : ((context.method = "throw"), + (context.arg = new TypeError("iterator result is not an object")), + (context.delegate = null), + ContinueSentinel); + } + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + 1 in locs && (entry.catchLoc = locs[1]), + 2 in locs && + ((entry.finallyLoc = locs[2]), (entry.afterLoc = locs[3])), + this.tryEntries.push(entry); + } + function resetTryEntry(entry) { + var record = entry.completion || {}; + (record.type = "normal"), + delete record.arg, + (entry.completion = record); + } + function Context(tryLocsList) { + (this.tryEntries = [{ tryLoc: "root" }]), + tryLocsList.forEach(pushTryEntry, this), + this.reset(!0); + } + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) return iteratorMethod.call(iterable); + if ("function" == typeof iterable.next) return iterable; + if (!isNaN(iterable.length)) { + var i = -1, + next = function next() { + for (; ++i < iterable.length; ) + if (hasOwn.call(iterable, i)) + return (next.value = iterable[i]), (next.done = !1), next; + return (next.value = undefined), (next.done = !0), next; + }; + return (next.next = next); + } + } + return { next: doneResult }; + } + function doneResult() { + return { value: undefined, done: !0 }; + } + return ( + (GeneratorFunction.prototype = GeneratorFunctionPrototype), + defineProperty(Gp, "constructor", { + value: GeneratorFunctionPrototype, + configurable: !0 + }), + defineProperty(GeneratorFunctionPrototype, "constructor", { + value: GeneratorFunction, + configurable: !0 + }), + (GeneratorFunction.displayName = define( + GeneratorFunctionPrototype, + toStringTagSymbol, + "GeneratorFunction" + )), + (exports.isGeneratorFunction = function (genFun) { + var ctor = "function" == typeof genFun && genFun.constructor; + return ( + !!ctor && + (ctor === GeneratorFunction || + "GeneratorFunction" === (ctor.displayName || ctor.name)) + ); + }), + (exports.mark = function (genFun) { + return ( + Object.setPrototypeOf + ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) + : ((genFun.__proto__ = GeneratorFunctionPrototype), + define(genFun, toStringTagSymbol, "GeneratorFunction")), + (genFun.prototype = Object.create(Gp)), + genFun + ); + }), + (exports.awrap = function (arg) { + return { __await: arg }; + }), + defineIteratorMethods(AsyncIterator.prototype), + define(AsyncIterator.prototype, asyncIteratorSymbol, function () { + return this; + }), + (exports.AsyncIterator = AsyncIterator), + (exports.async = function ( + innerFn, + outerFn, + self, + tryLocsList, + PromiseImpl + ) { + void 0 === PromiseImpl && (PromiseImpl = Promise); + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList), + PromiseImpl + ); + return exports.isGeneratorFunction(outerFn) + ? iter + : iter.next().then(function (result) { + return result.done ? result.value : iter.next(); + }); + }), + defineIteratorMethods(Gp), + define(Gp, toStringTagSymbol, "Generator"), + define(Gp, iteratorSymbol, function () { + return this; + }), + define(Gp, "toString", function () { + return "[object Generator]"; + }), + (exports.keys = function (val) { + var object = Object(val), + keys = []; + for (var key in object) keys.push(key); + return ( + keys.reverse(), + function next() { + for (; keys.length; ) { + var key = keys.pop(); + if (key in object) + return (next.value = key), (next.done = !1), next; + } + return (next.done = !0), next; + } + ); + }), + (exports.values = values), + (Context.prototype = { + constructor: Context, + reset: function reset(skipTempReset) { + if ( + ((this.prev = 0), + (this.next = 0), + (this.sent = this._sent = undefined), + (this.done = !1), + (this.delegate = null), + (this.method = "next"), + (this.arg = undefined), + this.tryEntries.forEach(resetTryEntry), + !skipTempReset) + ) + for (var name in this) + "t" === name.charAt(0) && + hasOwn.call(this, name) && + !isNaN(+name.slice(1)) && + (this[name] = undefined); + }, + stop: function stop() { + this.done = !0; + var rootRecord = this.tryEntries[0].completion; + if ("throw" === rootRecord.type) throw rootRecord.arg; + return this.rval; + }, + dispatchException: function dispatchException(exception) { + if (this.done) throw exception; + var context = this; + function handle(loc, caught) { + return ( + (record.type = "throw"), + (record.arg = exception), + (context.next = loc), + caught && + ((context.method = "next"), (context.arg = undefined)), + !!caught + ); + } + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i], + record = entry.completion; + if ("root" === entry.tryLoc) return handle("end"); + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"), + hasFinally = hasOwn.call(entry, "finallyLoc"); + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) + return handle(entry.catchLoc, !0); + if (this.prev < entry.finallyLoc) + return handle(entry.finallyLoc); + } else if (hasCatch) { + if (this.prev < entry.catchLoc) + return handle(entry.catchLoc, !0); + } else { + if (!hasFinally) + throw new Error("try statement without catch or finally"); + if (this.prev < entry.finallyLoc) + return handle(entry.finallyLoc); + } + } + } + }, + abrupt: function abrupt(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if ( + entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc + ) { + var finallyEntry = entry; + break; + } + } + finallyEntry && + ("break" === type || "continue" === type) && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc && + (finallyEntry = null); + var record = finallyEntry ? finallyEntry.completion : {}; + return ( + (record.type = type), + (record.arg = arg), + finallyEntry + ? ((this.method = "next"), + (this.next = finallyEntry.finallyLoc), + ContinueSentinel) + : this.complete(record) + ); + }, + complete: function complete(record, afterLoc) { + if ("throw" === record.type) throw record.arg; + return ( + "break" === record.type || "continue" === record.type + ? (this.next = record.arg) + : "return" === record.type + ? ((this.rval = this.arg = record.arg), + (this.method = "return"), + (this.next = "end")) + : "normal" === record.type && + afterLoc && + (this.next = afterLoc), + ContinueSentinel + ); + }, + finish: function finish(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) + return ( + this.complete(entry.completion, entry.afterLoc), + resetTryEntry(entry), + ContinueSentinel + ); + } + }, + catch: function _catch(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if ("throw" === record.type) { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + throw new Error("illegal catch attempt"); + }, + delegateYield: function delegateYield(iterable, resultName, nextLoc) { + return ( + (this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }), + "next" === this.method && (this.arg = undefined), + ContinueSentinel + ); + } + }), + exports + ); + } + function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } + if (info.done) { + resolve(value); + } else { + Promise.resolve(value).then(_next, _throw); + } + } + function _asyncToGenerator(fn) { + return function () { + var self = this, + args = arguments; + return new Promise(function (resolve, reject) { + var gen = fn.apply(self, args); + function _next(value) { + asyncGeneratorStep( + gen, + resolve, + reject, + _next, + _throw, + "next", + value + ); + } + function _throw(err) { + asyncGeneratorStep( + gen, + resolve, + reject, + _next, + _throw, + "throw", + err + ); + } + _next(undefined); + }); + }; + } + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && + (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), + keys.push.apply(keys, symbols); + } + return keys; + } + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 + ? ownKeys(Object(source), !0).forEach(function (key) { + _defineProperty(target, key, source[key]); + }) + : Object.getOwnPropertyDescriptors + ? Object.defineProperties( + target, + Object.getOwnPropertyDescriptors(source) + ) + : ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty( + target, + key, + Object.getOwnPropertyDescriptor(source, key) + ); + }); + } + return target; + } + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; + } + + class ImageCapture { + constructor() { + this.isMKDIR = false; + this.cCaptureByCount = null; + this.cCaptureByMs = null; // c的方法 + this.imageList = {}; + this.captureInfo = {}; + this.imgDataPtrList = []; + this.imgBufferPtrList = []; + } + getImageInfo(imgDataPtr) { + const width = Module.HEAPU32[imgDataPtr]; + const height = Module.HEAPU32[imgDataPtr + 1]; + const duration = Module.HEAPU32[imgDataPtr + 2]; + const imageBufferPtr = Module.HEAPU32[imgDataPtr + 3]; + const imageBuffer = Module.HEAPU8.slice( + imageBufferPtr, + imageBufferPtr + width * height * 3 + ); + // Module._free(imgDataPtr); + // Module._free(imageBufferPtr); + this.imgDataPtrList.push(imgDataPtr); + this.imgBufferPtrList.push(imageBufferPtr); + const imageDataBuffer = new Uint8ClampedArray(width * height * 4); + let j = 0; + for (let i = 0; i < imageBuffer.length; i++) { + if (i && i % 3 === 0) { + imageDataBuffer[j] = 255; + j += 1; + } + imageDataBuffer[j] = imageBuffer[i]; + j += 1; + } + return { + width, + height, + duration, + imageDataBuffer + }; + } + _singleImage(imgDataPtr) { + const width = Module.HEAPU32[imgDataPtr]; + const height = Module.HEAPU32[imgDataPtr + 1]; + const duration = Module.HEAPU32[imgDataPtr + 2]; + const imageBufferPtr = Module.HEAPU32[imgDataPtr + 3]; + const imageBuffer = Module.HEAPU8.slice( + imageBufferPtr, + imageBufferPtr + width * height * 3 + ); + Module._free(imgDataPtr); + Module._free(imageBufferPtr); + const imageDataBuffer = new Uint8ClampedArray(width * height * 4); + let j = 0; + for (let i = 0; i < imageBuffer.length; i++) { + if (i && i % 3 === 0) { + imageDataBuffer[j] = 255; + j += 1; + } + imageDataBuffer[j] = imageBuffer[i]; + j += 1; + } + return { + width, + height, + duration, + imageDataBuffer + }; + } + getImgList(imgDataPtr, count) { + const dataArr = []; + for (let i = 0; i < count; i++) { + dataArr.push(this._singleImage(imgDataPtr / 4 + i * 4)); + } + return dataArr; + } + // 加载文件 + mountFile(file, MOUNT_DIR, id) { + if (!this.isMKDIR) { + FS.mkdir(MOUNT_DIR); + this.isMKDIR = true; + } + const data = {}; + let name = ""; + // 判断类型 如果是blob转file + if (file instanceof File) { + data.files = [file]; + name = file.name; + } else { + name = `${id}.mp4`; + data.blobs = [ + { + name, + data: file + } + ]; + } + // @ts-ignore + FS.mount(WORKERFS, data, MOUNT_DIR); + return name; + } + free() { + // 释放指针内存 + this.imgDataPtrList.forEach(ptr => { + Module._free(ptr); + }); + this.imgDataPtrList = []; + this.imgBufferPtrList.forEach(ptr => { + Module._free(ptr); + }); + this.imgBufferPtrList = []; + } + capture(_ref) { + let id = _ref.id, + info = _ref.info, + _ref$path = _ref.path, + path = _ref$path === void 0 ? "/working" : _ref$path, + file = _ref.file; + try { + const name = this.mountFile(file, path, id); + let retData = 0; + this.imageList[id] = []; + if (info instanceof Array) { + // 说明是按照时间抽 + this.captureInfo[id] = info.length; + if (!this.cCaptureByMs) { + this.cCaptureByMs = Module.cwrap("captureByMs", "number", [ + "string", + "string", + "number" + ]); + } + // const imgDataPtr = + retData = this.cCaptureByMs(info.join(","), `${path}/${name}`, id); + this.free(); + } else { + this.captureInfo[id] = info; + if (!this.cCaptureByCount) { + this.cCaptureByCount = Module.cwrap("captureByCount", "number", [ + "number", + "string", + "number" + ]); + } + retData = this.cCaptureByCount(info, `${path}/${name}`, id); + this.free(); + FS.unmount(path); + // 完善信息 这里需要一种模式 是否只一次性postmsg 不一张张读取 + if (retData === 0) { + throw new Error("Frame draw exception!"); + } + } + } catch (e) { + console.log("Error occurred", e); + // 如果发生错误 通知 + self.postMessage({ + type: "receiveError", + errmsg: e.toString(), + id + }); + } + } + } + + // importScripts('./capture.js'); + const imageCapture = new ImageCapture(); + let isInit = false; + const metaDataMap = {}; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + function transpostFrame(ptr, id) { + const data = imageCapture.getImageInfo(ptr / 4); + // push到数组列表 + imageCapture.imageList[id].push(_objectSpread({}, data)); + self.postMessage( + _objectSpread( + _objectSpread( + { + type: "receiveImageOnchange" + }, + data + ), + {}, + { + id, + meta: metaDataMap[id] || {} + } + ) + ); + // console.log('transpostFrame==>', id, imageCapture.captureInfo); + if (imageCapture.imageList[id].length >= imageCapture.captureInfo[id]) { + // 说明已经到了数目 可以postonfinish事件 + self.postMessage({ + type: "receiveImageOnSuccess", + id, + meta: metaDataMap[id] || {} + // ...imageCapture.imageList[id], //TODO: 这个是否post未确定 + }); + } + } + + function setAngle(a, id) { + metaDataMap[id].angle = +a; + } + function setDescription(a, id) { + metaDataMap[id].description = a; + } + self.transpostFrame = transpostFrame; + self.setAngle = setAngle; + self.setDescription = setDescription; + const initPromise = new Promise(res => { + self.goOnInit = res; + }); + self.addEventListener("message", e => { + // console.log('receivemessage', e.data); + const _e$data = e.data, + type = _e$data.type, + id = _e$data.id, + info = _e$data.info, + path = _e$data.path, + file = _e$data.file; + if (type === "initPath") { + self.goOnInit(info); + } + if (isInit && type === "startCapture") { + metaDataMap[id] = {}; + imageCapture.capture({ + id, + info, + path, + file + }); + } + }); + self.Module = { + instantiateWasm: (function () { + var _instantiateWasm = _asyncToGenerator( + /*#__PURE__*/ _regeneratorRuntime().mark(function _callee( + info, + receiveInstance + ) { + var url; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) + switch ((_context.prev = _context.next)) { + case 0: + _context.next = 2; + return initPromise; + case 2: + url = _context.sent; + fetch(url || "./capture.worker.wasm") + .then(response => response.arrayBuffer()) + .then(bytes => WebAssembly.instantiate(bytes, info)) + .then(instance => receiveInstance(instance.instance)); + // WebAssembly.instantiate(bytes, info).then(result => { + // receiveInstance(result.instance); + // }); + case 4: + case "end": + return _context.stop(); + } + }, _callee); + }) + ); + function instantiateWasm(_x, _x2) { + return _instantiateWasm.apply(this, arguments); + } + return instantiateWasm; + })(), + onRuntimeInitialized: () => { + isInit = true; + self.postMessage({ + type: "init", + data: {} + }); + } + }; + })(); + /******/ +})(); + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = Object.assign({}, Module); + +var arguments_ = []; +var thisProgram = "./this.program"; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == "object"; +var ENVIRONMENT_IS_WORKER = typeof importScripts == "function"; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = + typeof process == "object" && + typeof process.versions == "object" && + typeof process.versions.node == "string"; +var ENVIRONMENT_IS_SHELL = + !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ""; +function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var read_, readAsync, readBinary, setWindowTitle; + +if (ENVIRONMENT_IS_NODE) { + // `require()` is no-op in an ESM module, use `createRequire()` to construct + // the require()` function. This is only necessary for multi-environment + // builds, `-sENVIRONMENT=node` emits a static import declaration instead. + // TODO: Swap all `require()`'s with `import()`'s? + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require("fs"); + var nodePath = require("path"); + + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = nodePath.dirname(scriptDirectory) + "/"; + } else { + scriptDirectory = __dirname + "/"; + } + + // include: node_shell_read.js + read_ = (filename, binary) => { + // We need to re-wrap `file://` strings to URLs. Normalizing isn't + // necessary in that case, the path should already be absolute. + filename = isFileURI(filename) + ? new URL(filename) + : nodePath.normalize(filename); + return fs.readFileSync(filename, binary ? undefined : "utf8"); + }; + + readBinary = filename => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + return ret; + }; + + readAsync = (filename, onload, onerror, binary = true) => { + // See the comment in the `read_` function. + filename = isFileURI(filename) + ? new URL(filename) + : nodePath.normalize(filename); + fs.readFile(filename, binary ? undefined : "utf8", (err, data) => { + if (err) onerror(err); + else onload(binary ? data.buffer : data); + }); + }; + // end include: node_shell_read.js + if (!Module["thisProgram"] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, "/"); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != "undefined") { + module["exports"] = Module; + } + + process.on("uncaughtException", ex => { + // suppress ExitStatus exceptions from showing an error + if ( + ex !== "unwind" && + !(ex instanceof ExitStatus) && + !(ex.context instanceof ExitStatus) + ) { + throw ex; + } + }); + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + + Module["inspect"] = () => "[Emscripten Module object]"; +} + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != "undefined" && document.currentScript) { + // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr( + 0, + scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1 + ); + } else { + scriptDirectory = ""; + } + + // Differentiate the Web Worker from the Node Worker case, as reading must + // be done differently. + { + // include: web_or_worker_shell_read.js + read_ = url => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText; + }; + + if (ENVIRONMENT_IS_WORKER) { + readBinary = url => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */ (xhr.response)); + }; + } + + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { + // file URLs can return 0 + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + }; + + // end include: web_or_worker_shell_read.js + } + + setWindowTitle = title => (document.title = title); +} else { +} + +var out = Module["print"] || (() => {}); +var err = Module["printErr"] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. +moduleOverrides = null; + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module["arguments"]) arguments_ = Module["arguments"]; + +if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; + +if (Module["quit"]) quit_ = Module["quit"]; + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message + +// end include: shell.js +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary; +if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; +var noExitRuntime = Module["noExitRuntime"] || true; + +if (typeof WebAssembly != "object") { + abort("no native wasm support detected"); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + // This build was created without ASSERTIONS defined. `assert()` should not + // ever be called in this configuration but in case there are callers in + // the wild leave this simple abort() implemenation here for now. + abort(text); + } +} + +// Memory management + +var HEAP, + /** @type {!Int8Array} */ + HEAP8, + /** @type {!Uint8Array} */ + HEAPU8, + /** @type {!Int16Array} */ + HEAP16, + /** @type {!Uint16Array} */ + HEAPU16, + /** @type {!Int32Array} */ + HEAP32, + /** @type {!Uint32Array} */ + HEAPU32, + /** @type {!Float32Array} */ + HEAPF32, + /** @type {!Float64Array} */ + HEAPF64; + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module["HEAP8"] = HEAP8 = new Int8Array(b); + Module["HEAP16"] = HEAP16 = new Int16Array(b); + Module["HEAP32"] = HEAP32 = new Int32Array(b); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(b); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(b); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(b); + Module["HEAPF32"] = HEAPF32 = new Float32Array(b); + Module["HEAPF64"] = HEAPF64 = new Float64Array(b); +} + +// include: runtime_init_table.js +// In regular non-RELOCATABLE mode the table is exported +// from the wasm module and this will be assigned once +// the exports are available. +var wasmTable; +// end include: runtime_init_table.js +// include: runtime_stack_check.js +// end include: runtime_stack_check.js +// include: runtime_assertions.js +// end include: runtime_assertions.js +var __ATPRERUN__ = []; // functions called before the runtime is initialized +var __ATINIT__ = []; // functions called during startup +var __ATMAIN__ = []; // functions called when main() is to be run +var __ATEXIT__ = []; // functions called during shutdown +var __ATPOSTRUN__ = []; // functions called after the main() is called + +var runtimeInitialized = false; + +var runtimeKeepaliveCounter = 0; + +function keepRuntimeAlive() { + return noExitRuntime || runtimeKeepaliveCounter > 0; +} + +function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); +} + +function initRuntime() { + runtimeInitialized = true; + + if (!Module["noFSInit"] && !FS.init.initialized) FS.init(); + FS.ignorePermissions = false; + + TTY.init(); + callRuntimeCallbacks(__ATINIT__); +} + +function preMain() { + callRuntimeCallbacks(__ATMAIN__); +} + +function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} + +function addOnPreMain(cb) { + __ATMAIN__.unshift(cb); +} + +function addOnExit(cb) {} + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} + +// include: runtime_math.js +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc + +// end include: runtime_math.js +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled + +function getUniqueRunDependency(id) { + return id; +} + +function addRunDependency(id) { + runDependencies++; + + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } +} + +function removeRunDependency(id) { + runDependencies--; + + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + + what = "Aborted(" + what + ")"; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + EXITSTATUS = 1; + + what += ". Build with -sASSERTIONS for more info."; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // defintion for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// include: memoryprofiler.js +// end include: memoryprofiler.js +// include: URIUtils.js +// Prefix of data URIs emitted by SINGLE_FILE and related options. +var dataURIPrefix = "data:application/octet-stream;base64,"; + +// Indicates whether filename is a base64 data URI. +function isDataURI(filename) { + // Prefix of data URIs emitted by SINGLE_FILE and related options. + return filename.startsWith(dataURIPrefix); +} + +// Indicates whether filename is delivered via file protocol (as opposed to http/https) +function isFileURI(filename) { + return filename.startsWith("file://"); +} +// end include: URIUtils.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +var wasmBinaryFile; +wasmBinaryFile = "capture.worker.wasm"; +if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw "both async and sync fetching of the wasm failed"; +} + +function getBinaryPromise(binaryFile) { + // If we don't have the binary yet, try to load it asynchronously. + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use fetch if it is available and the url is not a file, otherwise fall back to XHR. + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch == "function" && !isFileURI(binaryFile)) { + return fetch(binaryFile, { credentials: "same-origin" }) + .then(response => { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + binaryFile + "'"; + } + return response["arrayBuffer"](); + }) + .catch(() => getBinarySync(binaryFile)); + } else if (readAsync) { + // fetch is not available or url is file => try XHR (readAsync uses XHR internally) + return new Promise((resolve, reject) => { + readAsync( + binaryFile, + response => + resolve(new Uint8Array(/** @type{!ArrayBuffer} */ (response))), + reject + ); + }); + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return Promise.resolve().then(() => getBinarySync(binaryFile)); +} + +function instantiateArrayBuffer(binaryFile, imports, receiver) { + return getBinaryPromise(binaryFile) + .then(binary => { + return WebAssembly.instantiate(binary, imports); + }) + .then(instance => { + return instance; + }) + .then(receiver, reason => { + err("failed to asynchronously prepare wasm: " + reason); + + abort(reason); + }); +} + +function instantiateAsync(binary, binaryFile, imports, callback) { + if ( + !binary && + typeof WebAssembly.instantiateStreaming == "function" && + !isDataURI(binaryFile) && + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + !isFileURI(binaryFile) && + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + !ENVIRONMENT_IS_NODE && + typeof fetch == "function" + ) { + return fetch(binaryFile, { credentials: "same-origin" }).then(response => { + // Suppress closure warning here since the upstream definition for + // instantiateStreaming only allows Promise rather than + // an actual Response. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed. + /** @suppress {checkTypes} */ + var result = WebAssembly.instantiateStreaming(response, imports); + + return result.then(callback, function (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(binaryFile, imports, callback); + }); + }); + } + return instantiateArrayBuffer(binaryFile, imports, callback); +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +function createWasm() { + // prepare imports + var info = { + env: wasmImports, + wasi_snapshot_preview1: wasmImports + }; + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + var exports = instance.exports; + + Module["asm"] = exports; + + wasmMemory = Module["asm"]["memory"]; + updateMemoryViews(); + + wasmTable = Module["asm"]["__indirect_function_table"]; + + addOnInit(Module["asm"]["__wasm_call_ctors"]); + + removeRunDependency("wasm-instantiate"); + return exports; + } + // wait for the pthread pool (if any) + addRunDependency("wasm-instantiate"); + + // Prefer streaming instantiation if available. + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + receiveInstance(result["instance"]); + } + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module["instantiateWasm"]) { + try { + return Module["instantiateWasm"](info, receiveInstance); + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + + instantiateAsync( + wasmBinary, + wasmBinaryFile, + info, + receiveInstantiationResult + ); + return {}; // no exports yet; we'll fill them in later +} + +// Globals used by JS i64 conversions (see makeSetValue) +var tempDouble; +var tempI64; + +// include: runtime_debug.js +// end include: runtime_debug.js +// === Body === + +// end include: preamble.js + +/** @constructor */ +function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = `Program terminated with exit(${status})`; + this.status = status; +} + +var callRuntimeCallbacks = callbacks => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } +}; + +/** + * @param {number} ptr + * @param {string} type + */ +function getValue(ptr, type = "i8") { + if (type.endsWith("*")) type = "*"; + switch (type) { + case "i1": + return HEAP8[ptr >> 0]; + case "i8": + return HEAP8[ptr >> 0]; + case "i16": + return HEAP16[ptr >> 1]; + case "i32": + return HEAP32[ptr >> 2]; + case "i64": + abort("to do getValue(i64) use WASM_BIGINT"); + case "float": + return HEAPF32[ptr >> 2]; + case "double": + return HEAPF64[ptr >> 3]; + case "*": + return HEAPU32[ptr >> 2]; + default: + abort(`invalid type for getValue: ${type}`); + } +} + +/** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ +function setValue(ptr, value, type = "i8") { + if (type.endsWith("*")) type = "*"; + switch (type) { + case "i1": + HEAP8[ptr >> 0] = value; + break; + case "i8": + HEAP8[ptr >> 0] = value; + break; + case "i16": + HEAP16[ptr >> 1] = value; + break; + case "i32": + HEAP32[ptr >> 2] = value; + break; + case "i64": + abort("to do setValue(i64) use WASM_BIGINT"); + case "float": + HEAPF32[ptr >> 2] = value; + break; + case "double": + HEAPF64[ptr >> 3] = value; + break; + case "*": + HEAPU32[ptr >> 2] = value; + break; + default: + abort(`invalid type for setValue: ${type}`); + } +} + +var PATH = { + isAbs: path => path.charAt(0) === "/", + splitPath: filename => { + var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray: (parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === ".") { + parts.splice(i, 1); + } else if (last === "..") { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift(".."); + } + } + return parts; + }, + normalize: path => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.substr(-1) === "/"; + // Normalize the path + path = PATH.normalizeArray( + path.split("/").filter(p => !!p), + !isAbsolute + ).join("/"); + if (!path && !isAbsolute) { + path = "."; + } + if (path && trailingSlash) { + path += "/"; + } + return (isAbsolute ? "/" : "") + path; + }, + dirname: path => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return "."; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + return root + dir; + }, + basename: path => { + // EMSCRIPTEN return '/'' for '/', not an empty string + if (path === "/") return "/"; + path = PATH.normalize(path); + path = path.replace(/\/$/, ""); + var lastSlash = path.lastIndexOf("/"); + if (lastSlash === -1) return path; + return path.substr(lastSlash + 1); + }, + join: function () { + var paths = Array.prototype.slice.call(arguments); + return PATH.normalize(paths.join("/")); + }, + join2: (l, r) => { + return PATH.normalize(l + "/" + r); + } +}; + +var initRandomFill = () => { + if ( + typeof crypto == "object" && + typeof crypto["getRandomValues"] == "function" + ) { + // for modern web browsers + return view => crypto.getRandomValues(view); + } else if (ENVIRONMENT_IS_NODE) { + // for nodejs with or without crypto support included + try { + var crypto_module = require("crypto"); + var randomFillSync = crypto_module["randomFillSync"]; + if (randomFillSync) { + // nodejs with LTS crypto support + return view => crypto_module["randomFillSync"](view); + } + // very old nodejs with the original crypto API + var randomBytes = crypto_module["randomBytes"]; + return view => ( + view.set(randomBytes(view.byteLength)), + // Return the original view to match modern native implementations. + view + ); + } catch (e) { + // nodejs doesn't have crypto support + } + } + // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096 + abort("initRandomDevice"); +}; +var randomFill = view => { + // Lazily init on the first invocation. + return (randomFill = initRandomFill())(view); +}; + +var PATH_FS = { + resolve: function () { + var resolvedPath = "", + resolvedAbsolute = false; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = i >= 0 ? arguments[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != "string") { + throw new TypeError("Arguments to path.resolve must be strings"); + } else if (!path) { + return ""; // an invalid portion invalidates the whole thing + } + resolvedPath = path + "/" + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray( + resolvedPath.split("/").filter(p => !!p), + !resolvedAbsolute + ).join("/"); + return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; + }, + relative: (from, to) => { + from = PATH_FS.resolve(from).substr(1); + to = PATH_FS.resolve(to).substr(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== "") break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== "") break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split("/")); + var toParts = trim(to.split("/")); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push(".."); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join("/"); + } +}; + +var UTF8Decoder = + typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined; + +/** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number} idx + * @param {number=} maxBytesToRead + * @return {string} + */ +var UTF8ArrayToString = (heapOrArray, idx, maxBytesToRead) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ""; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xe0) == 0xc0) { + str += String.fromCharCode(((u0 & 31) << 6) | u1); + continue; + } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xf0) == 0xe0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + u0 = + ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xd800 | (ch >> 10), 0xdc00 | (ch & 0x3ff)); + } + } + return str; +}; + +var FS_stdin_getChar_buffer = []; + +var lengthBytesUTF8 = str => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7f) { + len++; + } else if (c <= 0x7ff) { + len += 2; + } else if (c >= 0xd800 && c <= 0xdfff) { + len += 4; + ++i; + } else { + len += 3; + } + } + return len; +}; + +var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xd800 && u <= 0xdfff) { + var u1 = str.charCodeAt(++i); + u = (0x10000 + ((u & 0x3ff) << 10)) | (u1 & 0x3ff); + } + if (u <= 0x7f) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7ff) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xc0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xffff) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xe0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + heap[outIdx++] = 0xf0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; +}; +/** @type {function(string, boolean=, number=)} */ +function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; +} +var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE, -1); + } catch (e) { + // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes, + // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0. + if (e.toString().includes("EOF")) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString("utf-8"); + } else { + result = null; + } + } else if ( + typeof window != "undefined" && + typeof window.prompt == "function" + ) { + // Browser. + result = window.prompt("Input: "); // returns null on cancel + if (result !== null) { + result += "\n"; + } + } else if (typeof readline == "function") { + // Command line. + result = readline(); + if (result !== null) { + result += "\n"; + } + } + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); +}; +var TTY = { + ttys: [], + init: function () { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown: function () { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register: function (dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops: { + open: function (stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close: function (stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync: function (stream) { + stream.tty.ops.fsync(stream.tty); + }, + read: function (stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset + i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write: function (stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset + i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }, + default_tty_ops: { + get_char: function (tty) { + return FS_stdin_getChar(); + }, + put_char: function (tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync: function (tty) { + if (tty.output && tty.output.length > 0) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }, + ioctl_tcgets: function (tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, + 0x00, 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ] + }; + }, + ioctl_tcsets: function (tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz: function (tty) { + return [24, 80]; + } + }, + default_tty1_ops: { + put_char: function (tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync: function (tty) { + if (tty.output && tty.output.length > 0) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + } + } +}; + +var zeroMemory = (address, size) => { + HEAPU8.fill(0, address, address + size); + return address; +}; + +var alignMemory = (size, alignment) => { + return Math.ceil(size / alignment) * alignment; +}; +var mmapAlloc = size => { + abort(); +}; +var MEMFS = { + ops_table: null, + mount(mount) { + return MEMFS.createNode(null, "/", 16384 | 511 /* 0777 */, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + } + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.timestamp = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.timestamp = node.timestamp; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) + return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max( + newCapacity, + (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> + 0 + ); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) + node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set( + oldContents.subarray(0, Math.min(newSize, node.usedBytes)) + ); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops: { + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw FS.genericErrors[44]; + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + // if we're overwriting a directory at new_name, make sure it's empty. + if (FS.isDir(old_node.mode)) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + old_node.parent.timestamp = Date.now(); + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + new_dir.timestamp = old_node.parent.timestamp; + old_node.parent = new_dir; + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.timestamp = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.timestamp = Date.now(); + }, + readdir(node) { + var entries = [".", ".."]; + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue; + } + entries.push(key); + } + return entries; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + } + }, + stream_ops: { + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + if (size > 8 && contents.subarray) { + // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) + buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // If the buffer is located in main memory (HEAP), and if + // memory can grow, we can't hold on to references of the + // memory buffer, as they may get invalidated. That means we + // need to do copy its contents. + if (buffer.buffer === HEAP8.buffer) { + canOwn = false; + } + + if (!length) return 0; + var node = stream.node; + node.timestamp = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { + // This write is from a typed array to a typed array? + if (canOwn) { + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { + // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { + // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position + length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + allocate(stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call( + contents, + position, + position + length + ); + } + } + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + HEAP8.set(contents, ptr); + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + } + } +}; + +/** @param {boolean=} noRunDep */ +var asyncLoad = (url, onload, onerror, noRunDep) => { + var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : ""; + readAsync( + url, + arrayBuffer => { + assert( + arrayBuffer, + `Loading data file "${url}" failed (no arrayBuffer).` + ); + onload(new Uint8Array(arrayBuffer)); + if (dep) removeRunDependency(dep); + }, + event => { + if (onerror) { + onerror(); + } else { + throw `Loading data file "${url}" failed.`; + } + } + ); + if (dep) addRunDependency(dep); +}; + +var preloadPlugins = Module["preloadPlugins"] || []; +function FS_handledByPreloadPlugin(byteArray, fullname, finish, onerror) { + // Ensure plugins are ready. + if (typeof Browser != "undefined") Browser.init(); + + var handled = false; + preloadPlugins.forEach(function (plugin) { + if (handled) return; + if (plugin["canHandle"](fullname)) { + plugin["handle"](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; +} +function FS_createPreloadedFile( + parent, + name, + url, + canRead, + canWrite, + onload, + onerror, + dontCreateFile, + canOwn, + preFinish +) { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + if (preFinish) preFinish(); + if (!dontCreateFile) { + FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + if (onload) onload(); + removeRunDependency(dep); + } + if ( + FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + if (onerror) onerror(); + removeRunDependency(dep); + }) + ) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == "string") { + asyncLoad(url, byteArray => processData(byteArray), onerror); + } else { + processData(url); + } +} + +function FS_modeStringToFlags(str) { + var flagModes = { + r: 0, + "r+": 2, + w: 512 | 64 | 1, + "w+": 512 | 64 | 2, + a: 1024 | 64 | 1, + "a+": 1024 | 64 | 2 + }; + var flags = flagModes[str]; + if (typeof flags == "undefined") { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; +} + +function FS_getMode(canRead, canWrite) { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; +} + +var WORKERFS = { + DIR_MODE: 16895, + FILE_MODE: 33279, + reader: null, + mount(mount) { + assert(ENVIRONMENT_IS_WORKER); + if (!WORKERFS.reader) WORKERFS.reader = new FileReaderSync(); + var root = WORKERFS.createNode(null, "/", WORKERFS.DIR_MODE, 0); + var createdParents = {}; + function ensureParent(path) { + // return the parent node, creating subdirs as necessary + var parts = path.split("/"); + var parent = root; + for (var i = 0; i < parts.length - 1; i++) { + var curr = parts.slice(0, i + 1).join("/"); + // Issue 4254: Using curr as a node name will prevent the node + // from being found in FS.nameTable when FS.open is called on + // a path which holds a child of this node, + // given that all FS functions assume node names + // are just their corresponding parts within their given path, + // rather than incremental aggregates which include their parent's + // directories. + if (!createdParents[curr]) { + createdParents[curr] = WORKERFS.createNode( + parent, + parts[i], + WORKERFS.DIR_MODE, + 0 + ); + } + parent = createdParents[curr]; + } + return parent; + } + function base(path) { + var parts = path.split("/"); + return parts[parts.length - 1]; + } + // We also accept FileList here, by using Array.prototype + Array.prototype.forEach.call(mount.opts["files"] || [], function (file) { + WORKERFS.createNode( + ensureParent(file.name), + base(file.name), + WORKERFS.FILE_MODE, + 0, + file, + file.lastModifiedDate + ); + }); + (mount.opts["blobs"] || []).forEach(function (obj) { + WORKERFS.createNode( + ensureParent(obj["name"]), + base(obj["name"]), + WORKERFS.FILE_MODE, + 0, + obj["data"] + ); + }); + (mount.opts["packages"] || []).forEach(function (pack) { + pack["metadata"].files.forEach(function (file) { + var name = file.filename.substr(1); // remove initial slash + WORKERFS.createNode( + ensureParent(name), + base(name), + WORKERFS.FILE_MODE, + 0, + pack["blob"].slice(file.start, file.end) + ); + }); + }); + return root; + }, + createNode(parent, name, mode, dev, contents, mtime) { + var node = FS.createNode(parent, name, mode); + node.mode = mode; + node.node_ops = WORKERFS.node_ops; + node.stream_ops = WORKERFS.stream_ops; + node.timestamp = (mtime || new Date()).getTime(); + assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE); + if (mode === WORKERFS.FILE_MODE) { + node.size = contents.size; + node.contents = contents; + } else { + node.size = 4096; + node.contents = {}; + } + if (parent) { + parent.contents[name] = node; + } + return node; + }, + node_ops: { + getattr(node) { + return { + dev: 1, + ino: node.id, + mode: node.mode, + nlink: 1, + uid: 0, + gid: 0, + rdev: 0, + size: node.size, + atime: new Date(node.timestamp), + mtime: new Date(node.timestamp), + ctime: new Date(node.timestamp), + blksize: 4096, + blocks: Math.ceil(node.size / 4096) + }; + }, + setattr(node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + throw new FS.ErrnoError(63); + }, + rename(oldNode, newDir, newName) { + throw new FS.ErrnoError(63); + }, + unlink(parent, name) { + throw new FS.ErrnoError(63); + }, + rmdir(parent, name) { + throw new FS.ErrnoError(63); + }, + readdir(node) { + var entries = [".", ".."]; + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue; + } + entries.push(key); + } + return entries; + }, + symlink(parent, newName, oldPath) { + throw new FS.ErrnoError(63); + } + }, + stream_ops: { + read(stream, buffer, offset, length, position) { + if (position >= stream.node.size) return 0; + var chunk = stream.node.contents.slice(position, position + length); + var ab = WORKERFS.reader.readAsArrayBuffer(chunk); + buffer.set(new Uint8Array(ab), offset); + return chunk.size; + }, + write(stream, buffer, offset, length, position) { + throw new FS.ErrnoError(29); + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.size; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + } + } +}; +var FS = { + root: null, + mounts: [], + devices: {}, + streams: [], + nextInode: 1, + nameTable: null, + currentPath: "/", + initialized: false, + ignorePermissions: true, + ErrnoError: null, + genericErrors: {}, + filesystems: null, + syncFSRequests: 0, + lookupPath: (path, opts = {}) => { + path = PATH_FS.resolve(path); + + if (!path) return { path: "", node: null }; + + var defaults = { + follow_mount: true, + recurse_count: 0 + }; + opts = Object.assign(defaults, opts); + + if (opts.recurse_count > 8) { + // max recursive lookup of 8 + throw new FS.ErrnoError(32); + } + + // split the absolute path + var parts = path.split("/").filter(p => !!p); + + // start at the root + var current = FS.root; + var current_path = "/"; + + for (var i = 0; i < parts.length; i++) { + var islast = i === parts.length - 1; + if (islast && opts.parent) { + // stop resolving + break; + } + + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current)) { + if (!islast || (islast && opts.follow_mount)) { + current = current.mounted.root; + } + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (!islast || opts.follow) { + var count = 0; + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH_FS.resolve(PATH.dirname(current_path), link); + + var lookup = FS.lookupPath(current_path, { + recurse_count: opts.recurse_count + 1 + }); + current = lookup.node; + + if (count++ > 40) { + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + throw new FS.ErrnoError(32); + } + } + } + } + + return { path: current_path, node: current }; + }, + getPath: node => { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length - 1] !== "/" + ? `${mount}/${path}` + : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName: (parentid, name) => { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode: node => { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode: node => { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode: (parent, name) => { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode, parent); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode: (parent, name, mode, rdev) => { + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode: node => { + FS.hashRemoveNode(node); + }, + isRoot: node => { + return node === node.parent; + }, + isMountpoint: node => { + return !!node.mounted; + }, + isFile: mode => { + return (mode & 61440) === 32768; + }, + isDir: mode => { + return (mode & 61440) === 16384; + }, + isLink: mode => { + return (mode & 61440) === 40960; + }, + isChrdev: mode => { + return (mode & 61440) === 8192; + }, + isBlkdev: mode => { + return (mode & 61440) === 24576; + }, + isFIFO: mode => { + return (mode & 61440) === 4096; + }, + isSocket: mode => { + return (mode & 49152) === 49152; + }, + flagsToPermissionString: flag => { + var perms = ["r", "w", "rw"][flag & 3]; + if (flag & 512) { + perms += "w"; + } + return perms; + }, + nodePermissions: (node, perms) => { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes("r") && !(node.mode & 292)) { + return 2; + } else if (perms.includes("w") && !(node.mode & 146)) { + return 2; + } else if (perms.includes("x") && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup: dir => { + var errCode = FS.nodePermissions(dir, "x"); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate: (dir, name) => { + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) {} + return FS.nodePermissions(dir, "wx"); + }, + mayDelete: (dir, name, isdir) => { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, "wx"); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen: (node, flags) => { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if ( + FS.flagsToPermissionString(flags) !== "r" || // opening for write + flags & 512 + ) { + // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + MAX_OPEN_FDS: 4096, + nextfd: () => { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked: fd => { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream: fd => FS.streams[fd], + createStream: (stream, fd = -1) => { + if (!FS.FSStream) { + FS.FSStream = /** @constructor */ function () { + this.shared = {}; + }; + FS.FSStream.prototype = {}; + Object.defineProperties(FS.FSStream.prototype, { + object: { + /** @this {FS.FSStream} */ + get() { + return this.node; + }, + /** @this {FS.FSStream} */ + set(val) { + this.node = val; + } + }, + isRead: { + /** @this {FS.FSStream} */ + get() { + return (this.flags & 2097155) !== 1; + } + }, + isWrite: { + /** @this {FS.FSStream} */ + get() { + return (this.flags & 2097155) !== 0; + } + }, + isAppend: { + /** @this {FS.FSStream} */ + get() { + return this.flags & 1024; + } + }, + flags: { + /** @this {FS.FSStream} */ + get() { + return this.shared.flags; + }, + /** @this {FS.FSStream} */ + set(val) { + this.shared.flags = val; + } + }, + position: { + /** @this {FS.FSStream} */ + get() { + return this.shared.position; + }, + /** @this {FS.FSStream} */ + set(val) { + this.shared.position = val; + } + } + }); + } + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream: fd => { + FS.streams[fd] = null; + }, + chrdev_stream_ops: { + open: stream => { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + }, + llseek: () => { + throw new FS.ErrnoError(70); + } + }, + major: dev => dev >> 8, + minor: dev => dev & 0xff, + makedev: (ma, mi) => (ma << 8) | mi, + registerDevice: (dev, ops) => { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice: dev => FS.devices[dev], + getMounts: mount => { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push.apply(check, m.mounts); + } + + return mounts; + }, + syncfs: (populate, callback) => { + if (typeof populate == "function") { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err( + `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work` + ); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + } + + // sync all mounts + mounts.forEach(mount => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount: (type, opts, mountpoint) => { + var root = mountpoint === "/"; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount: mountpoint => { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach(hash => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + node.mount.mounts.splice(idx, 1); + }, + lookup: (parent, name) => { + return parent.node_ops.lookup(parent, name); + }, + mknod: (path, mode, dev) => { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name || name === "." || name === "..") { + throw new FS.ErrnoError(28); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + create: (path, mode) => { + mode = mode !== undefined ? mode : 438 /* 0666 */; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir: (path, mode) => { + mode = mode !== undefined ? mode : 511 /* 0777 */; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree: (path, mode) => { + var dirs = path.split("/"); + var d = ""; + for (var i = 0; i < dirs.length; ++i) { + if (!dirs[i]) continue; + d += "/" + dirs[i]; + try { + FS.mkdir(d, mode); + } catch (e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev: (path, mode, dev) => { + if (typeof dev == "undefined") { + dev = mode; + mode = 438 /* 0666 */; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink: (oldpath, newpath) => { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename: (old_path, new_path) => { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existant directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== ".") { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== ".") { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node + ? FS.mayDelete(new_dir, new_name, isdir) + : FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, "w"); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir: path => { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir: path => { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(54); + } + return node.node_ops.readdir(node); + }, + unlink: path => { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink: path => { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return PATH_FS.resolve( + FS.getPath(link.parent), + link.node_ops.readlink(link) + ); + }, + stat: (path, dontFollow) => { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + if (!node) { + throw new FS.ErrnoError(44); + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(63); + } + return node.node_ops.getattr(node); + }, + lstat: path => { + return FS.stat(path, true); + }, + chmod: (path, mode, dontFollow) => { + var node; + if (typeof path == "string") { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + mode: (mode & 4095) | (node.mode & ~4095), + timestamp: Date.now() + }); + }, + lchmod: (path, mode) => { + FS.chmod(path, mode, true); + }, + fchmod: (fd, mode) => { + var stream = FS.getStreamChecked(fd); + FS.chmod(stream.node, mode); + }, + chown: (path, uid, gid, dontFollow) => { + var node; + if (typeof path == "string") { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + timestamp: Date.now() + // we ignore the uid / gid for now + }); + }, + lchown: (path, uid, gid) => { + FS.chown(path, uid, gid, true); + }, + fchown: (fd, uid, gid) => { + var stream = FS.getStreamChecked(fd); + FS.chown(stream.node, uid, gid); + }, + truncate: (path, len) => { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == "string") { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, "w"); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + node.node_ops.setattr(node, { + size: len, + timestamp: Date.now() + }); + }, + ftruncate: (fd, len) => { + var stream = FS.getStreamChecked(fd); + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.truncate(stream.node, len); + }, + utime: (path, atime, mtime) => { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + node.node_ops.setattr(node, { + timestamp: Math.max(atime, mtime) + }); + }, + open: (path, flags, mode) => { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == "string" ? FS_modeStringToFlags(flags) : flags; + mode = typeof mode == "undefined" ? 438 /* 0666 */ : mode; + if (flags & 64) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + if (typeof path == "object") { + node = path; + } else { + path = PATH.normalize(path); + try { + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072) + }); + node = lookup.node; + } catch (e) { + // ignore + } + } + // perhaps we need to create the node + var created = false; + if (flags & 64) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if (flags & 128) { + throw new FS.ErrnoError(20); + } + } else { + // node doesn't exist, try to create it + node = FS.mknod(path, mode, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if (flags & 65536 && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if (flags & 512 && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (Module["logReadFiles"] && !(flags & 1)) { + if (!FS.readFiles) FS.readFiles = {}; + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close: stream => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed: stream => { + return stream.fd === null; + }, + llseek: (stream, offset, whence) => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read: (stream, buffer, offset, length, position) => { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != "undefined"; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read( + stream, + buffer, + offset, + length, + position + ); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write: (stream, buffer, offset, length, position, canOwn) => { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != "undefined"; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write( + stream, + buffer, + offset, + length, + position, + canOwn + ); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + allocate: (stream, offset, length) => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(28); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(138); + } + stream.stream_ops.allocate(stream, offset, length); + }, + mmap: (stream, length, position, prot, flags) => { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ( + (prot & 2) !== 0 && + (flags & 2) === 0 && + (stream.flags & 2097155) !== 2 + ) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync: (stream, buffer, offset, length, mmapFlags) => { + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + munmap: stream => 0, + ioctl: (stream, cmd, arg) => { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile: (path, opts = {}) => { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || "binary"; + if (opts.encoding !== "utf8" && opts.encoding !== "binary") { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === "utf8") { + ret = UTF8ArrayToString(buf, 0); + } else if (opts.encoding === "binary") { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile: (path, data, opts = {}) => { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == "string") { + var buf = new Uint8Array(lengthBytesUTF8(data) + 1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error("Unsupported data type"); + } + FS.close(stream); + }, + cwd: () => FS.currentPath, + chdir: path => { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, "x"); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories: () => { + FS.mkdir("/tmp"); + FS.mkdir("/home"); + FS.mkdir("/home/web_user"); + }, + createDefaultDevices: () => { + // create /dev + FS.mkdir("/dev"); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length + }); + FS.mkdev("/dev/null", FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev("/dev/tty", FS.makedev(5, 0)); + FS.mkdev("/dev/tty1", FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), + randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomLeft = randomFill(randomBuffer).byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice("/dev", "random", randomByte); + FS.createDevice("/dev", "urandom", randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir("/dev/shm"); + FS.mkdir("/dev/shm/tmp"); + }, + createSpecialDirectories: () => { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir("/proc"); + var proc_self = FS.mkdir("/proc/self"); + FS.mkdir("/proc/self/fd"); + FS.mount( + { + mount: () => { + var node = FS.createNode(proc_self, "fd", 16384 | 511 /* 0777 */, 73); + node.node_ops = { + lookup: (parent, name) => { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: "fake" }, + node_ops: { readlink: () => stream.path } + }; + ret.parent = ret; // make it look like a simple root node + return ret; + } + }; + return node; + } + }, + {}, + "/proc/self/fd" + ); + }, + createStandardStreams: () => { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (Module["stdin"]) { + FS.createDevice("/dev", "stdin", Module["stdin"]); + } else { + FS.symlink("/dev/tty", "/dev/stdin"); + } + if (Module["stdout"]) { + FS.createDevice("/dev", "stdout", null, Module["stdout"]); + } else { + FS.symlink("/dev/tty", "/dev/stdout"); + } + if (Module["stderr"]) { + FS.createDevice("/dev", "stderr", null, Module["stderr"]); + } else { + FS.symlink("/dev/tty1", "/dev/stderr"); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open("/dev/stdin", 0); + var stdout = FS.open("/dev/stdout", 1); + var stderr = FS.open("/dev/stderr", 1); + }, + ensureErrnoError: () => { + if (FS.ErrnoError) return; + FS.ErrnoError = /** @this{Object} */ function ErrnoError(errno, node) { + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + this.name = "ErrnoError"; + this.node = node; + this.setErrno = /** @this{Object} */ function (errno) { + this.errno = errno; + }; + this.setErrno(errno); + this.message = "FS error"; + }; + FS.ErrnoError.prototype = new Error(); + FS.ErrnoError.prototype.constructor = FS.ErrnoError; + // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) + [44].forEach(code => { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = ""; + }); + }, + staticInit: () => { + FS.ensureErrnoError(); + + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, "/"); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + MEMFS: MEMFS, + WORKERFS: WORKERFS + }; + }, + init: (input, output, error) => { + FS.init.initialized = true; + + FS.ensureErrnoError(); + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + Module["stdin"] = input || Module["stdin"]; + Module["stdout"] = output || Module["stdout"]; + Module["stderr"] = error || Module["stderr"]; + + FS.createStandardStreams(); + }, + quit: () => { + FS.init.initialized = false; + // force-flush all streams, so we get musl std streams printed out + // close all of our streams + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + if (!stream) { + continue; + } + FS.close(stream); + } + }, + findObject: (path, dontResolveLastLink) => { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath: (path, dontResolveLastLink) => { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) {} + var ret = { + isRoot: false, + exists: false, + error: 0, + name: null, + path: null, + object: null, + parentExists: false, + parentPath: null, + parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === "/"; + } catch (e) { + ret.error = e.errno; + } + return ret; + }, + createPath: (parent, path, canRead, canWrite) => { + parent = typeof parent == "string" ? parent : FS.getPath(parent); + var parts = path.split("/").reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + // ignore EEXIST + } + parent = current; + } + return current; + }, + createFile: (parent, name, properties, canRead, canWrite) => { + var path = PATH.join2( + typeof parent == "string" ? parent : FS.getPath(parent), + name + ); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile: (parent, name, data, canRead, canWrite, canOwn) => { + var path = name; + if (parent) { + parent = typeof parent == "string" ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == "string") { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) + arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + return node; + }, + createDevice: (parent, name, input, output) => { + var path = PATH.join2( + typeof parent == "string" ? parent : FS.getPath(parent), + name + ); + var mode = FS_getMode(!!input, !!output); + if (!FS.createDevice.major) FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open: stream => { + stream.seekable = false; + }, + close: stream => { + // flush any pending line data + if (output && output.buffer && output.buffer.length) { + output(10); + } + }, + read: (stream, buffer, offset, length, pos /* ignored */) => { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset + i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write: (stream, buffer, offset, length, pos) => { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset + i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile: obj => { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != "undefined") { + throw new Error( + "Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread." + ); + } else if (read_) { + // Command-line. + try { + // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as + // read() will try to parse UTF8. + obj.contents = intArrayFromString(read_(obj.url), true); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } else { + throw new Error("Cannot load without read() or XMLHttpRequest."); + } + }, + createLazyFile: (parent, name, url, canRead, canWrite) => { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. + /** @constructor */ + function LazyUint8Array() { + this.lengthKnown = false; + this.chunks = []; // Loaded chunks. Index is the chunk number + } + LazyUint8Array.prototype.get = + /** @this{Object} */ function LazyUint8Array_get(idx) { + if (idx > this.length - 1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize) | 0; + return this.getter(chunkNum)[chunkOffset]; + }; + LazyUint8Array.prototype.setDataGetter = + function LazyUint8Array_setDataGetter(getter) { + this.getter = getter; + }; + LazyUint8Array.prototype.cacheLength = + function LazyUint8Array_cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open("HEAD", url, false); + xhr.send(null); + if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304)) + throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = + (header = xhr.getResponseHeader("Accept-Ranges")) && + header === "bytes"; + var usesGzip = + (header = xhr.getResponseHeader("Content-Encoding")) && + header === "gzip"; + + var chunkSize = 1024 * 1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) + throw new Error( + "invalid range (" + from + ", " + to + ") or no bytes requested!" + ); + if (to > datalength - 1) + throw new Error( + "only " + datalength + " bytes available! programmer error!" + ); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + if (datalength !== chunkSize) + xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = "arraybuffer"; + if (xhr.overrideMimeType) { + xhr.overrideMimeType("text/plain; charset=x-user-defined"); + } + + xhr.send(null); + if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304)) + throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array( + /** @type{Array} */ (xhr.response || []) + ); + } + return intArrayFromString(xhr.responseText || "", true); + }; + var lazyArray = this; + lazyArray.setDataGetter(chunkNum => { + var start = chunkNum * chunkSize; + var end = (chunkNum + 1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength - 1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == "undefined") { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == "undefined") + throw new Error("doXHR failed!"); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out( + "LazyFiles on gzip forces download of the whole file when length is accessed" + ); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + }; + if (typeof XMLHttpRequest != "undefined") { + if (!ENVIRONMENT_IS_WORKER) + throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; + var lazyArray = new LazyUint8Array(); + Object.defineProperties(lazyArray, { + length: { + get: /** @this{Object} */ function () { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + }, + chunkSize: { + get: /** @this{Object} */ function () { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + }); + + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: /** @this {FSNode} */ function () { + return this.contents.length; + } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach(key => { + var fn = node.stream_ops[key]; + stream_ops[key] = function forceLoadLazyFile() { + FS.forceLoadFile(node); + return fn.apply(null, arguments); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) return 0; + var size = Math.min(contents.length - position, length); + if (contents.slice) { + // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { + // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position); + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + } +}; + +/** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ +var UTF8ToString = (ptr, maxBytesToRead) => { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; +}; +var SYSCALLS = { + DEFAULT_POLLMASK: 5, + calculateAt: function (dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44); + } + return dir; + } + return PATH.join2(dir, path); + }, + doStat: function (func, path, buf) { + try { + var stat = func(path); + } catch (e) { + if ( + e && + e.node && + PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node)) + ) { + // an error occurred while trying to look up the path; we should just report ENOTDIR + return -54; + } + throw e; + } + HEAP32[buf >> 2] = stat.dev; + HEAP32[(buf + 4) >> 2] = stat.mode; + HEAPU32[(buf + 8) >> 2] = stat.nlink; + HEAP32[(buf + 12) >> 2] = stat.uid; + HEAP32[(buf + 16) >> 2] = stat.gid; + HEAP32[(buf + 20) >> 2] = stat.rdev; + (tempI64 = [ + stat.size >>> 0, + ((tempDouble = stat.size), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(buf + 24) >> 2] = tempI64[0]), + (HEAP32[(buf + 28) >> 2] = tempI64[1]); + HEAP32[(buf + 32) >> 2] = 4096; + HEAP32[(buf + 36) >> 2] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + (tempI64 = [ + Math.floor(atime / 1000) >>> 0, + ((tempDouble = Math.floor(atime / 1000)), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(buf + 40) >> 2] = tempI64[0]), + (HEAP32[(buf + 44) >> 2] = tempI64[1]); + HEAPU32[(buf + 48) >> 2] = (atime % 1000) * 1000; + (tempI64 = [ + Math.floor(mtime / 1000) >>> 0, + ((tempDouble = Math.floor(mtime / 1000)), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(buf + 56) >> 2] = tempI64[0]), + (HEAP32[(buf + 60) >> 2] = tempI64[1]); + HEAPU32[(buf + 64) >> 2] = (mtime % 1000) * 1000; + (tempI64 = [ + Math.floor(ctime / 1000) >>> 0, + ((tempDouble = Math.floor(ctime / 1000)), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(buf + 72) >> 2] = tempI64[0]), + (HEAP32[(buf + 76) >> 2] = tempI64[1]); + HEAPU32[(buf + 80) >> 2] = (ctime % 1000) * 1000; + (tempI64 = [ + stat.ino >>> 0, + ((tempDouble = stat.ino), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(buf + 88) >> 2] = tempI64[0]), + (HEAP32[(buf + 92) >> 2] = tempI64[1]); + return 0; + }, + doMsync: function (addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + varargs: undefined, + get() { + SYSCALLS.varargs += 4; + var ret = HEAP32[(SYSCALLS.varargs - 4) >> 2]; + return ret; + }, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + getStreamFromFD: function (fd) { + var stream = FS.getStreamChecked(fd); + return stream; + } +}; +function ___syscall_faccessat(dirfd, path, amode, flags) { + try { + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (amode & ~7) { + // need a valid mode + return -28; + } + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node) { + return -44; + } + var perms = ""; + if (amode & 4) perms += "r"; + if (amode & 2) perms += "w"; + if (amode & 1) perms += "x"; + if ( + perms /* otherwise, they've just passed F_OK */ && + FS.nodePermissions(node, perms) + ) { + return -2; + } + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +var setErrNo = value => { + HEAP32[___errno_location() >> 2] = value; + return value; +}; + +function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = SYSCALLS.get(); + if (arg < 0) { + return -28; + } + var newStream; + newStream = FS.createStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = SYSCALLS.get(); + stream.flags |= arg; + return 0; + } + case 5: /* case 5: Currently in musl F_GETLK64 has same value as F_GETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ { + var arg = SYSCALLS.get(); + var offset = 0; + // We're always unlocked. + HEAP16[(arg + offset) >> 1] = 2; + return 0; + } + case 6: + case 7: + /* case 6: Currently in musl F_SETLK64 has same value as F_SETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ + /* case 7: Currently in musl F_SETLKW64 has same value as F_SETLKW, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ + + return 0; // Pretend that the locking is successful. + case 16: + case 8: + return -28; // These are for sockets. We don't have them fully implemented yet. + case 9: + // musl trusts getown return values, due to a bug where they must be, as they overlap with errors. just return -1 here, so fcntl() returns that, and we set errno ourselves. + setErrNo(28); + return -1; + default: { + return -28; + } + } + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +function ___syscall_fstat64(fd, buf) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + return SYSCALLS.doStat(FS.stat, stream.path, buf); + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); +}; + +function ___syscall_getdents64(fd, dirp, count) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + if (!stream.getdents) { + stream.getdents = FS.readdir(stream.path); + } + + var struct_size = 280; + var pos = 0; + var off = FS.llseek(stream, 0, 1); + + var idx = Math.floor(off / struct_size); + + while (idx < stream.getdents.length && pos + struct_size <= count) { + var id; + var type; + var name = stream.getdents[idx]; + if (name === ".") { + id = stream.node.id; + type = 4; // DT_DIR + } else if (name === "..") { + var lookup = FS.lookupPath(stream.path, { parent: true }); + id = lookup.node.id; + type = 4; // DT_DIR + } else { + var child = FS.lookupNode(stream.node, name); + id = child.id; + type = FS.isChrdev(child.mode) + ? 2 // DT_CHR, character device. + : FS.isDir(child.mode) + ? 4 // DT_DIR, directory. + : FS.isLink(child.mode) + ? 10 // DT_LNK, symbolic link. + : 8; // DT_REG, regular file. + } + (tempI64 = [ + id >>> 0, + ((tempDouble = id), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(dirp + pos) >> 2] = tempI64[0]), + (HEAP32[(dirp + pos + 4) >> 2] = tempI64[1]); + (tempI64 = [ + ((idx + 1) * struct_size) >>> 0, + ((tempDouble = (idx + 1) * struct_size), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(dirp + pos + 8) >> 2] = tempI64[0]), + (HEAP32[(dirp + pos + 12) >> 2] = tempI64[1]); + HEAP16[(dirp + pos + 16) >> 1] = 280; + HEAP8[(dirp + pos + 18) >> 0] = type; + stringToUTF8(name, dirp + pos + 19, 256); + pos += struct_size; + idx += 1; + } + FS.llseek(stream, idx * struct_size, 0); + return pos; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +function ___syscall_lstat64(path, buf) { + try { + path = SYSCALLS.getStr(path); + return SYSCALLS.doStat(FS.lstat, path, buf); + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & ~6400; + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf); + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? SYSCALLS.get() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +function ___syscall_rmdir(path) { + try { + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +function ___syscall_stat64(path, buf) { + try { + path = SYSCALLS.getStr(path); + return SYSCALLS.doStat(FS.stat, path, buf); + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +function ___syscall_unlinkat(dirfd, path, flags) { + try { + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort("Invalid flags passed to unlinkat"); + } + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return -e.errno; + } +} + +var nowIsMonotonic = true; +var __emscripten_get_now_is_monotonic = () => nowIsMonotonic; + +function convertI32PairToI53Checked(lo, hi) { + return (hi + 0x200000) >>> 0 < 0x400001 - !!lo + ? (lo >>> 0) + hi * 4294967296 + : NaN; +} +function __gmtime_js(time_low, time_high, tmPtr) { + var time = convertI32PairToI53Checked(time_low, time_high); + + var date = new Date(time * 1000); + HEAP32[tmPtr >> 2] = date.getUTCSeconds(); + HEAP32[(tmPtr + 4) >> 2] = date.getUTCMinutes(); + HEAP32[(tmPtr + 8) >> 2] = date.getUTCHours(); + HEAP32[(tmPtr + 12) >> 2] = date.getUTCDate(); + HEAP32[(tmPtr + 16) >> 2] = date.getUTCMonth(); + HEAP32[(tmPtr + 20) >> 2] = date.getUTCFullYear() - 1900; + HEAP32[(tmPtr + 24) >> 2] = date.getUTCDay(); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = ((date.getTime() - start) / (1000 * 60 * 60 * 24)) | 0; + HEAP32[(tmPtr + 28) >> 2] = yday; +} + +var isLeapYear = year => { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +}; + +var MONTH_DAYS_LEAP_CUMULATIVE = [ + 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 +]; + +var MONTH_DAYS_REGULAR_CUMULATIVE = [ + 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 +]; +var ydayFromDate = date => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = leap + ? MONTH_DAYS_LEAP_CUMULATIVE + : MONTH_DAYS_REGULAR_CUMULATIVE; + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; +}; + +function __localtime_js(time_low, time_high, tmPtr) { + var time = convertI32PairToI53Checked(time_low, time_high); + + var date = new Date(time * 1000); + HEAP32[tmPtr >> 2] = date.getSeconds(); + HEAP32[(tmPtr + 4) >> 2] = date.getMinutes(); + HEAP32[(tmPtr + 8) >> 2] = date.getHours(); + HEAP32[(tmPtr + 12) >> 2] = date.getDate(); + HEAP32[(tmPtr + 16) >> 2] = date.getMonth(); + HEAP32[(tmPtr + 20) >> 2] = date.getFullYear() - 1900; + HEAP32[(tmPtr + 24) >> 2] = date.getDay(); + + var yday = ydayFromDate(date) | 0; + HEAP32[(tmPtr + 28) >> 2] = yday; + HEAP32[(tmPtr + 36) >> 2] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = + (summerOffset != winterOffset && + date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0; + HEAP32[(tmPtr + 32) >> 2] = dst; +} + +var __mktime_js = function (tmPtr) { + var ret = (() => { + var date = new Date( + HEAP32[(tmPtr + 20) >> 2] + 1900, + HEAP32[(tmPtr + 16) >> 2], + HEAP32[(tmPtr + 12) >> 2], + HEAP32[(tmPtr + 8) >> 2], + HEAP32[(tmPtr + 4) >> 2], + HEAP32[tmPtr >> 2], + 0 + ); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(tmPtr + 32) >> 2]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(tmPtr + 32) >> 2] = Number( + summerOffset != winterOffset && dstOffset == guessedOffset + ); + } else if (dst > 0 != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset) * 60000); + } + + HEAP32[(tmPtr + 24) >> 2] = date.getDay(); + var yday = ydayFromDate(date) | 0; + HEAP32[(tmPtr + 28) >> 2] = yday; + // To match expected behavior, update fields from date + HEAP32[tmPtr >> 2] = date.getSeconds(); + HEAP32[(tmPtr + 4) >> 2] = date.getMinutes(); + HEAP32[(tmPtr + 8) >> 2] = date.getHours(); + HEAP32[(tmPtr + 12) >> 2] = date.getDate(); + HEAP32[(tmPtr + 16) >> 2] = date.getMonth(); + HEAP32[(tmPtr + 20) >> 2] = date.getYear(); + + return date.getTime() / 1000; + })(); + return ( + setTempRet0( + ((tempDouble = ret), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ), + ret >>> 0 + ); +}; + +var stringToNewUTF8 = str => { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) stringToUTF8(str, ret, size); + return ret; +}; +var __tzset_js = (timezone, daylight, tzname) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for daylight savings. + // This code uses the fact that getTimezoneOffset returns a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it compares whether the output of the given date the same (Standard) or less (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[timezone >> 2] = stdTimezoneOffset * 60; + + HEAP32[daylight >> 2] = Number(winterOffset != summerOffset); + + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return match ? match[1] : "GMT"; + } + var winterName = extractZone(winter); + var summerName = extractZone(summer); + var winterNamePtr = stringToNewUTF8(winterName); + var summerNamePtr = stringToNewUTF8(summerName); + if (summerOffset < winterOffset) { + // Northern hemisphere + HEAPU32[tzname >> 2] = winterNamePtr; + HEAPU32[(tzname + 4) >> 2] = summerNamePtr; + } else { + HEAPU32[tzname >> 2] = summerNamePtr; + HEAPU32[(tzname + 4) >> 2] = winterNamePtr; + } +}; + +var _abort = () => { + abort(""); +}; + +function _emscripten_date_now() { + return Date.now(); +} + +var _emscripten_get_now; +// Modern environment where performance.now() is supported: +// N.B. a shorter form "_emscripten_get_now = performance.now;" is +// unfortunately not allowed even in current browsers (e.g. FF Nightly 75). +_emscripten_get_now = () => performance.now(); +var _emscripten_memcpy_big = (dest, src, num) => + HEAPU8.copyWithin(dest, src, src + num); + +var getHeapMax = () => + // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate + // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side + // for any code that deals with heap sizes, which would require special + // casing all heap size related code to treat 0 specially. + 2147483648; + +var growMemory = size => { + var b = wasmMemory.buffer; + var pages = (size - b.byteLength + 65535) >>> 16; + try { + // round size grow request up to wasm page size (fixed 64KB per spec) + wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size + updateMemoryViews(); + return 1 /*success*/; + } catch (e) {} + // implicit 0 return to save code size (caller will cast "undefined" into 0 + // anyhow) +}; +var _emscripten_resize_heap = requestedSize => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + // With multithreaded builds, races can happen (another thread might increase the size + // in between), so return a failure, and let the caller retry. + + // Memory resize rules: + // 1. Always increase heap size to at least the requested size, rounded up + // to next page multiple. + // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap + // geometrically: increase the heap size according to + // MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most + // overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB). + // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap + // linearly: increase the heap size by at least + // MEMORY_GROWTH_LINEAR_STEP bytes. + // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by + // MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest + // 4. If we were unable to allocate as much memory, it may be due to + // over-eager decision to excessively reserve due to (3) above. + // Hence if an allocation fails, cut down on the amount of excess + // growth, in an attempt to succeed to perform a smaller allocation. + + // A limit is set for how much we can grow. We should not exceed that + // (the wasm binary specifies it, so if we tried, we'd fail anyhow). + var maxHeapSize = getHeapMax(); + if (requestedSize > maxHeapSize) { + return false; + } + + var alignUp = (x, multiple) => x + ((multiple - (x % multiple)) % multiple); + + // Loop through potential heap size increases. If we attempt a too eager + // reservation that fails, cut down on the attempted size and reserve a + // smaller bump instead. (max 3 times, chosen somewhat arbitrarily) + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth + // but limit overreserving (default to capping at +96MB overgrowth at most) + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + + var newSize = Math.min( + maxHeapSize, + alignUp(Math.max(requestedSize, overGrownHeapSize), 65536) + ); + + var replacement = growMemory(newSize); + if (replacement) { + return true; + } + } + return false; +}; + +var _emscripten_run_script = ptr => { + eval(UTF8ToString(ptr)); +}; + +var ENV = {}; + +var getExecutableName = () => { + return thisProgram || "./this.program"; +}; +var getEnvStrings = () => { + if (!getEnvStrings.strings) { + // Default values. + // Browser language detection #8751 + var lang = + ( + (typeof navigator == "object" && + navigator.languages && + navigator.languages[0]) || + "C" + ).replace("-", "_") + ".UTF-8"; + var env = { + USER: "web_user", + LOGNAME: "web_user", + PATH: "/", + PWD: "/", + HOME: "/home/web_user", + LANG: lang, + _: getExecutableName() + }; + // Apply the user-provided values, if any. + for (var x in ENV) { + // x is a key in ENV; if ENV[x] is undefined, that means it was + // explicitly set to be so. We allow user code to do that to + // force variables with default values to remain unset. + if (ENV[x] === undefined) delete env[x]; + else env[x] = ENV[x]; + } + var strings = []; + for (var x in env) { + strings.push(`${x}=${env[x]}`); + } + getEnvStrings.strings = strings; + } + return getEnvStrings.strings; +}; + +var stringToAscii = (str, buffer) => { + for (var i = 0; i < str.length; ++i) { + HEAP8[buffer++ >> 0] = str.charCodeAt(i); + } + // Null-terminate the string + HEAP8[buffer >> 0] = 0; +}; + +var _environ_get = (__environ, environ_buf) => { + var bufSize = 0; + getEnvStrings().forEach(function (string, i) { + var ptr = environ_buf + bufSize; + HEAPU32[(__environ + i * 4) >> 2] = ptr; + stringToAscii(string, ptr); + bufSize += string.length + 1; + }); + return 0; +}; + +var _environ_sizes_get = (penviron_count, penviron_buf_size) => { + var strings = getEnvStrings(); + HEAPU32[penviron_count >> 2] = strings.length; + var bufSize = 0; + strings.forEach(function (string) { + bufSize += string.length + 1; + }); + HEAPU32[penviron_buf_size >> 2] = bufSize; + return 0; +}; + +function _fd_close(fd) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return e.errno; + } +} + +function _fd_fdstat_get(fd, pbuf) { + try { + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty + ? 2 + : FS.isDir(stream.mode) + ? 3 + : FS.isLink(stream.mode) + ? 7 + : 4; + } + HEAP8[pbuf >> 0] = type; + HEAP16[(pbuf + 2) >> 1] = flags; + (tempI64 = [ + rightsBase >>> 0, + ((tempDouble = rightsBase), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(pbuf + 8) >> 2] = tempI64[0]), + (HEAP32[(pbuf + 12) >> 2] = tempI64[1]); + (tempI64 = [ + rightsInheriting >>> 0, + ((tempDouble = rightsInheriting), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[(pbuf + 16) >> 2] = tempI64[0]), + (HEAP32[(pbuf + 20) >> 2] = tempI64[1]); + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return e.errno; + } +} + +/** @param {number=} offset */ +var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[iov >> 2]; + var len = HEAPU32[(iov + 4) >> 2]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset !== "undefined") { + offset += curr; + } + } + return ret; +}; + +function _fd_read(fd, iov, iovcnt, pnum) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[pnum >> 2] = num; + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return e.errno; + } +} + +function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + var offset = convertI32PairToI53Checked(offset_low, offset_high); + + try { + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + (tempI64 = [ + stream.position >>> 0, + ((tempDouble = stream.position), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? +Math.floor(tempDouble / 4294967296.0) >>> 0 + : ~~+Math.ceil( + (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0 + ) >>> 0 + : 0) + ]), + (HEAP32[newOffset >> 2] = tempI64[0]), + (HEAP32[(newOffset + 4) >> 2] = tempI64[1]); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return e.errno; + } +} + +/** @param {number=} offset */ +var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[iov >> 2]; + var len = HEAPU32[(iov + 4) >> 2]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (typeof offset !== "undefined") { + offset += curr; + } + } + return ret; +}; + +function _fd_write(fd, iov, iovcnt, pnum) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[pnum >> 2] = num; + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e.name === "ErrnoError")) throw e; + return e.errno; + } +} + +var arraySum = (array, index) => { + var sum = 0; + for (var i = 0; i <= index; sum += array[i++]) { + // no-op + } + return sum; +}; + +var MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + +var MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +var addDays = (date, days) => { + var newDate = new Date(date.getTime()); + while (days > 0) { + var leap = isLeapYear(newDate.getFullYear()); + var currentMonth = newDate.getMonth(); + var daysInCurrentMonth = (leap ? MONTH_DAYS_LEAP : MONTH_DAYS_REGULAR)[ + currentMonth + ]; + + if (days > daysInCurrentMonth - newDate.getDate()) { + // we spill over to next month + days -= daysInCurrentMonth - newDate.getDate() + 1; + newDate.setDate(1); + if (currentMonth < 11) { + newDate.setMonth(currentMonth + 1); + } else { + newDate.setMonth(0); + newDate.setFullYear(newDate.getFullYear() + 1); + } + } else { + // we stay in current month + newDate.setDate(newDate.getDate() + days); + return newDate; + } + } + + return newDate; +}; + +var writeArrayToMemory = (array, buffer) => { + HEAP8.set(array, buffer); +}; + +var _strftime = (s, maxsize, format, tm) => { + // size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr); + // http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html + + var tm_zone = HEAP32[(tm + 40) >> 2]; + + var date = { + tm_sec: HEAP32[tm >> 2], + tm_min: HEAP32[(tm + 4) >> 2], + tm_hour: HEAP32[(tm + 8) >> 2], + tm_mday: HEAP32[(tm + 12) >> 2], + tm_mon: HEAP32[(tm + 16) >> 2], + tm_year: HEAP32[(tm + 20) >> 2], + tm_wday: HEAP32[(tm + 24) >> 2], + tm_yday: HEAP32[(tm + 28) >> 2], + tm_isdst: HEAP32[(tm + 32) >> 2], + tm_gmtoff: HEAP32[(tm + 36) >> 2], + tm_zone: tm_zone ? UTF8ToString(tm_zone) : "" + }; + + var pattern = UTF8ToString(format); + + // expand format + var EXPANSION_RULES_1 = { + "%c": "%a %b %d %H:%M:%S %Y", // Replaced by the locale's appropriate date and time representation - e.g., Mon Aug 3 14:02:01 2013 + "%D": "%m/%d/%y", // Equivalent to %m / %d / %y + "%F": "%Y-%m-%d", // Equivalent to %Y - %m - %d + "%h": "%b", // Equivalent to %b + "%r": "%I:%M:%S %p", // Replaced by the time in a.m. and p.m. notation + "%R": "%H:%M", // Replaced by the time in 24-hour notation + "%T": "%H:%M:%S", // Replaced by the time + "%x": "%m/%d/%y", // Replaced by the locale's appropriate date representation + "%X": "%H:%M:%S", // Replaced by the locale's appropriate time representation + // Modified Conversion Specifiers + "%Ec": "%c", // Replaced by the locale's alternative appropriate date and time representation. + "%EC": "%C", // Replaced by the name of the base year (period) in the locale's alternative representation. + "%Ex": "%m/%d/%y", // Replaced by the locale's alternative date representation. + "%EX": "%H:%M:%S", // Replaced by the locale's alternative time representation. + "%Ey": "%y", // Replaced by the offset from %EC (year only) in the locale's alternative representation. + "%EY": "%Y", // Replaced by the full alternative year representation. + "%Od": "%d", // Replaced by the day of the month, using the locale's alternative numeric symbols, filled as needed with leading zeros if there is any alternative symbol for zero; otherwise, with leading characters. + "%Oe": "%e", // Replaced by the day of the month, using the locale's alternative numeric symbols, filled as needed with leading characters. + "%OH": "%H", // Replaced by the hour (24-hour clock) using the locale's alternative numeric symbols. + "%OI": "%I", // Replaced by the hour (12-hour clock) using the locale's alternative numeric symbols. + "%Om": "%m", // Replaced by the month using the locale's alternative numeric symbols. + "%OM": "%M", // Replaced by the minutes using the locale's alternative numeric symbols. + "%OS": "%S", // Replaced by the seconds using the locale's alternative numeric symbols. + "%Ou": "%u", // Replaced by the weekday as a number in the locale's alternative representation (Monday=1). + "%OU": "%U", // Replaced by the week number of the year (Sunday as the first day of the week, rules corresponding to %U ) using the locale's alternative numeric symbols. + "%OV": "%V", // Replaced by the week number of the year (Monday as the first day of the week, rules corresponding to %V ) using the locale's alternative numeric symbols. + "%Ow": "%w", // Replaced by the number of the weekday (Sunday=0) using the locale's alternative numeric symbols. + "%OW": "%W", // Replaced by the week number of the year (Monday as the first day of the week) using the locale's alternative numeric symbols. + "%Oy": "%y" // Replaced by the year (offset from %C ) using the locale's alternative numeric symbols. + }; + for (var rule in EXPANSION_RULES_1) { + pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_1[rule]); + } + + var WEEKDAYS = [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ]; + var MONTHS = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ]; + + function leadingSomething(value, digits, character) { + var str = typeof value == "number" ? value.toString() : value || ""; + while (str.length < digits) { + str = character[0] + str; + } + return str; + } + + function leadingNulls(value, digits) { + return leadingSomething(value, digits, "0"); + } + + function compareByDay(date1, date2) { + function sgn(value) { + return value < 0 ? -1 : value > 0 ? 1 : 0; + } + + var compare; + if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) { + if ((compare = sgn(date1.getMonth() - date2.getMonth())) === 0) { + compare = sgn(date1.getDate() - date2.getDate()); + } + } + return compare; + } + + function getFirstWeekStartDate(janFourth) { + switch (janFourth.getDay()) { + case 0: // Sunday + return new Date(janFourth.getFullYear() - 1, 11, 29); + case 1: // Monday + return janFourth; + case 2: // Tuesday + return new Date(janFourth.getFullYear(), 0, 3); + case 3: // Wednesday + return new Date(janFourth.getFullYear(), 0, 2); + case 4: // Thursday + return new Date(janFourth.getFullYear(), 0, 1); + case 5: // Friday + return new Date(janFourth.getFullYear() - 1, 11, 31); + case 6: // Saturday + return new Date(janFourth.getFullYear() - 1, 11, 30); + } + } + + function getWeekBasedYear(date) { + var thisDate = addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); + + var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4); + var janFourthNextYear = new Date(thisDate.getFullYear() + 1, 0, 4); + + var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); + var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); + + if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) { + // this date is after the start of the first week of this year + if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) { + return thisDate.getFullYear() + 1; + } + return thisDate.getFullYear(); + } + return thisDate.getFullYear() - 1; + } + + var EXPANSION_RULES_2 = { + "%a": date => WEEKDAYS[date.tm_wday].substring(0, 3), + "%A": date => WEEKDAYS[date.tm_wday], + "%b": date => MONTHS[date.tm_mon].substring(0, 3), + "%B": date => MONTHS[date.tm_mon], + "%C": date => { + var year = date.tm_year + 1900; + return leadingNulls((year / 100) | 0, 2); + }, + "%d": date => leadingNulls(date.tm_mday, 2), + "%e": date => leadingSomething(date.tm_mday, 2, " "), + "%g": date => { + // %g, %G, and %V give values according to the ISO 8601:2000 standard week-based year. + // In this system, weeks begin on a Monday and week 1 of the year is the week that includes + // January 4th, which is also the week that includes the first Thursday of the year, and + // is also the first week that contains at least four days in the year. + // If the first Monday of January is the 2nd, 3rd, or 4th, the preceding days are part of + // the last week of the preceding year; thus, for Saturday 2nd January 1999, + // %G is replaced by 1998 and %V is replaced by 53. If December 29th, 30th, + // or 31st is a Monday, it and any following days are part of week 1 of the following year. + // Thus, for Tuesday 30th December 1997, %G is replaced by 1998 and %V is replaced by 01. + + return getWeekBasedYear(date).toString().substring(2); + }, + "%G": date => getWeekBasedYear(date), + "%H": date => leadingNulls(date.tm_hour, 2), + "%I": date => { + var twelveHour = date.tm_hour; + if (twelveHour == 0) twelveHour = 12; + else if (twelveHour > 12) twelveHour -= 12; + return leadingNulls(twelveHour, 2); + }, + "%j": date => { + // Day of the year (001-366) + return leadingNulls( + date.tm_mday + + arraySum( + isLeapYear(date.tm_year + 1900) + ? MONTH_DAYS_LEAP + : MONTH_DAYS_REGULAR, + date.tm_mon - 1 + ), + 3 + ); + }, + "%m": date => leadingNulls(date.tm_mon + 1, 2), + "%M": date => leadingNulls(date.tm_min, 2), + "%n": () => "\n", + "%p": date => { + if (date.tm_hour >= 0 && date.tm_hour < 12) { + return "AM"; + } + return "PM"; + }, + "%S": date => leadingNulls(date.tm_sec, 2), + "%t": () => "\t", + "%u": date => date.tm_wday || 7, + "%U": date => { + var days = date.tm_yday + 7 - date.tm_wday; + return leadingNulls(Math.floor(days / 7), 2); + }, + "%V": date => { + // Replaced by the week number of the year (Monday as the first day of the week) + // as a decimal number [01,53]. If the week containing 1 January has four + // or more days in the new year, then it is considered week 1. + // Otherwise, it is the last week of the previous year, and the next week is week 1. + // Both January 4th and the first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday] + var val = Math.floor((date.tm_yday + 7 - ((date.tm_wday + 6) % 7)) / 7); + // If 1 Jan is just 1-3 days past Monday, the previous week + // is also in this year. + if ((date.tm_wday + 371 - date.tm_yday - 2) % 7 <= 2) { + val++; + } + if (!val) { + val = 52; + // If 31 December of prev year a Thursday, or Friday of a + // leap year, then the prev year has 53 weeks. + var dec31 = (date.tm_wday + 7 - date.tm_yday - 1) % 7; + if ( + dec31 == 4 || + (dec31 == 5 && isLeapYear((date.tm_year % 400) - 1)) + ) { + val++; + } + } else if (val == 53) { + // If 1 January is not a Thursday, and not a Wednesday of a + // leap year, then this year has only 52 weeks. + var jan1 = (date.tm_wday + 371 - date.tm_yday) % 7; + if (jan1 != 4 && (jan1 != 3 || !isLeapYear(date.tm_year))) val = 1; + } + return leadingNulls(val, 2); + }, + "%w": date => date.tm_wday, + "%W": date => { + var days = date.tm_yday + 7 - ((date.tm_wday + 6) % 7); + return leadingNulls(Math.floor(days / 7), 2); + }, + "%y": date => { + // Replaced by the last two digits of the year as a decimal number [00,99]. [ tm_year] + return (date.tm_year + 1900).toString().substring(2); + }, + // Replaced by the year as a decimal number (for example, 1997). [ tm_year] + "%Y": date => date.tm_year + 1900, + "%z": date => { + // Replaced by the offset from UTC in the ISO 8601:2000 standard format ( +hhmm or -hhmm ). + // For example, "-0430" means 4 hours 30 minutes behind UTC (west of Greenwich). + var off = date.tm_gmtoff; + var ahead = off >= 0; + off = Math.abs(off) / 60; + // convert from minutes into hhmm format (which means 60 minutes = 100 units) + off = (off / 60) * 100 + (off % 60); + return (ahead ? "+" : "-") + String("0000" + off).slice(-4); + }, + "%Z": date => date.tm_zone, + "%%": () => "%" + }; + + // Replace %% with a pair of NULLs (which cannot occur in a C string), then + // re-inject them after processing. + pattern = pattern.replace(/%%/g, "\0\0"); + for (var rule in EXPANSION_RULES_2) { + if (pattern.includes(rule)) { + pattern = pattern.replace( + new RegExp(rule, "g"), + EXPANSION_RULES_2[rule](date) + ); + } + } + pattern = pattern.replace(/\0\0/g, "%"); + + var bytes = intArrayFromString(pattern, false); + if (bytes.length > maxsize) { + return 0; + } + + writeArrayToMemory(bytes, s); + return bytes.length - 1; +}; + +var _proc_exit = code => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + if (Module["onExit"]) Module["onExit"](code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); +}; +/** @param {boolean|number=} implicit */ +var exitJS = (status, implicit) => { + EXITSTATUS = status; + + _proc_exit(status); +}; + +var handleException = e => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == "unwind") { + return EXITSTATUS; + } + quit_(1, e); +}; + +var stringToUTF8OnStack = str => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; +}; + +function getCFunc(ident) { + var func = Module["_" + ident]; // closure exported function + return func; +} + +/** + * @param {string|null=} returnType + * @param {Array=} argTypes + * @param {Arguments|Array=} args + * @param {Object=} opts + */ +var ccall = function (ident, returnType, argTypes, args, opts) { + // For fast lookup of conversion functions + var toC = { + string: str => { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { + // null string + // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' + ret = stringToUTF8OnStack(str); + } + return ret; + }, + array: arr => { + var ret = stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret; + } + }; + + function convertReturnValue(ret) { + if (returnType === "string") { + return UTF8ToString(ret); + } + if (returnType === "boolean") return Boolean(ret); + return ret; + } + + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + function onDone(ret) { + if (stack !== 0) stackRestore(stack); + return convertReturnValue(ret); + } + + ret = onDone(ret); + return ret; +}; + +/** + * @param {string=} returnType + * @param {Array=} argTypes + * @param {Object=} opts + */ +var cwrap = function (ident, returnType, argTypes, opts) { + // When the function takes numbers and returns a number, we can just return + // the original function + var numericArgs = + !argTypes || + argTypes.every(type => type === "number" || type === "boolean"); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function () { + return ccall(ident, returnType, argTypes, arguments, opts); + }; +}; + +var FSNode = /** @constructor */ function (parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev; +}; +var readMode = 292 /*292*/ | 73; /*73*/ +var writeMode = 146; /*146*/ +Object.defineProperties(FSNode.prototype, { + read: { + get: /** @this{FSNode} */ function () { + return (this.mode & readMode) === readMode; + }, + set: /** @this{FSNode} */ function (val) { + val ? (this.mode |= readMode) : (this.mode &= ~readMode); + } + }, + write: { + get: /** @this{FSNode} */ function () { + return (this.mode & writeMode) === writeMode; + }, + set: /** @this{FSNode} */ function (val) { + val ? (this.mode |= writeMode) : (this.mode &= ~writeMode); + } + }, + isFolder: { + get: /** @this{FSNode} */ function () { + return FS.isDir(this.mode); + } + }, + isDevice: { + get: /** @this{FSNode} */ function () { + return FS.isChrdev(this.mode); + } + } +}); +FS.FSNode = FSNode; +FS.createPreloadedFile = FS_createPreloadedFile; +FS.staticInit(); +var wasmImports = { + __syscall_faccessat: ___syscall_faccessat, + __syscall_fcntl64: ___syscall_fcntl64, + __syscall_fstat64: ___syscall_fstat64, + __syscall_getdents64: ___syscall_getdents64, + __syscall_lstat64: ___syscall_lstat64, + __syscall_newfstatat: ___syscall_newfstatat, + __syscall_openat: ___syscall_openat, + __syscall_renameat: ___syscall_renameat, + __syscall_rmdir: ___syscall_rmdir, + __syscall_stat64: ___syscall_stat64, + __syscall_unlinkat: ___syscall_unlinkat, + _emscripten_get_now_is_monotonic: __emscripten_get_now_is_monotonic, + _gmtime_js: __gmtime_js, + _localtime_js: __localtime_js, + _mktime_js: __mktime_js, + _tzset_js: __tzset_js, + abort: _abort, + emscripten_date_now: _emscripten_date_now, + emscripten_get_now: _emscripten_get_now, + emscripten_memcpy_big: _emscripten_memcpy_big, + emscripten_resize_heap: _emscripten_resize_heap, + emscripten_run_script: _emscripten_run_script, + environ_get: _environ_get, + environ_sizes_get: _environ_sizes_get, + fd_close: _fd_close, + fd_fdstat_get: _fd_fdstat_get, + fd_read: _fd_read, + fd_seek: _fd_seek, + fd_write: _fd_write, + strftime: _strftime +}; +var asm = createWasm(); +/** @type {function(...*):?} */ +var ___wasm_call_ctors = function () { + return (___wasm_call_ctors = Module["asm"]["__wasm_call_ctors"]).apply( + null, + arguments + ); +}; + +/** @type {function(...*):?} */ +var _malloc = function () { + return (_malloc = Module["asm"]["malloc"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var _captureByCount = (Module["_captureByCount"] = function () { + return (_captureByCount = Module["_captureByCount"] = + Module["asm"]["captureByCount"]).apply(null, arguments); +}); + +/** @type {function(...*):?} */ +var _captureByMs = (Module["_captureByMs"] = function () { + return (_captureByMs = Module["_captureByMs"] = + Module["asm"]["captureByMs"]).apply(null, arguments); +}); + +/** @type {function(...*):?} */ +var _main = (Module["_main"] = function () { + return (_main = Module["_main"] = Module["asm"]["__main_argc_argv"]).apply( + null, + arguments + ); +}); + +/** @type {function(...*):?} */ +var ___errno_location = function () { + return (___errno_location = Module["asm"]["__errno_location"]).apply( + null, + arguments + ); +}; + +/** @type {function(...*):?} */ +var _free = (Module["_free"] = function () { + return (_free = Module["_free"] = Module["asm"]["free"]).apply( + null, + arguments + ); +}); + +/** @type {function(...*):?} */ +var setTempRet0 = function () { + return (setTempRet0 = Module["asm"]["setTempRet0"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var stackSave = function () { + return (stackSave = Module["asm"]["stackSave"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var stackRestore = function () { + return (stackRestore = Module["asm"]["stackRestore"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var stackAlloc = function () { + return (stackAlloc = Module["asm"]["stackAlloc"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var dynCall_iiiji = (Module["dynCall_iiiji"] = function () { + return (dynCall_iiiji = Module["dynCall_iiiji"] = + Module["asm"]["dynCall_iiiji"]).apply(null, arguments); +}); + +/** @type {function(...*):?} */ +var dynCall_jiji = (Module["dynCall_jiji"] = function () { + return (dynCall_jiji = Module["dynCall_jiji"] = + Module["asm"]["dynCall_jiji"]).apply(null, arguments); +}); + +/** @type {function(...*):?} */ +var dynCall_jiiji = (Module["dynCall_jiiji"] = function () { + return (dynCall_jiiji = Module["dynCall_jiiji"] = + Module["asm"]["dynCall_jiiji"]).apply(null, arguments); +}); + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +Module["ccall"] = ccall; +Module["cwrap"] = cwrap; + +var calledRun; + +dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled +}; + +function callMain(args = []) { + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv >> 2; + args.forEach(arg => { + HEAP32[argv_ptr++] = stringToUTF8OnStack(arg); + }); + HEAP32[argv_ptr] = 0; + + try { + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function run(args = arguments_) { + if (runDependencies > 0) { + return; + } + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + if (calledRun) return; + calledRun = true; + Module["calledRun"] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); + + if (shouldRunNow) callMain(args); + + postRun(); + } + + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function () { + setTimeout(function () { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } +} + +if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } +} + +// shouldRunNow refers to calling main(), not run(). +var shouldRunNow = true; + +if (Module["noInitialRun"]) shouldRunNow = false; + +run(); + +// end include: postamble.js diff --git a/Yi.Pure.Vue3/public/wasm/capture.worker.wasm b/Yi.Pure.Vue3/public/wasm/capture.worker.wasm new file mode 100644 index 00000000..d84bdee2 Binary files /dev/null and b/Yi.Pure.Vue3/public/wasm/capture.worker.wasm differ diff --git a/Yi.Pure.Vue3/public/wasm/index.js b/Yi.Pure.Vue3/public/wasm/index.js new file mode 100644 index 00000000..5f1022c6 --- /dev/null +++ b/Yi.Pure.Vue3/public/wasm/index.js @@ -0,0 +1,5477 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if (typeof exports === "object" && typeof module === "object") + module.exports = factory(); + else if (typeof define === "function" && define.amd) define([], factory); + else if (typeof exports === "object") exports["cheetahCapture"] = factory(); + else root["cheetahCapture"] = factory(); +})(self, function () { + return /******/ (function () { + // webpackBootstrap + /******/ var __webpack_modules__ = { + /***/ 3099: /***/ function (module) { + module.exports = function (it) { + if (typeof it != "function") { + throw TypeError(String(it) + " is not a function"); + } + return it; + }; + + /***/ + }, + + /***/ 6077: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + + module.exports = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + " as a prototype"); + } + return it; + }; + + /***/ + }, + + /***/ 1223: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + var create = __webpack_require__(30); + var definePropertyModule = __webpack_require__(3070); + + var UNSCOPABLES = wellKnownSymbol("unscopables"); + var ArrayPrototype = Array.prototype; + + // Array.prototype[@@unscopables] + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + if (ArrayPrototype[UNSCOPABLES] == undefined) { + definePropertyModule.f(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); + } + + // add a key to Array.prototype[@@unscopables] + module.exports = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; + }; + + /***/ + }, + + /***/ 5787: /***/ function (module) { + module.exports = function (it, Constructor, name) { + if (!(it instanceof Constructor)) { + throw TypeError( + "Incorrect " + (name ? name + " " : "") + "invocation" + ); + } + return it; + }; + + /***/ + }, + + /***/ 9670: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + + module.exports = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + " is not an object"); + } + return it; + }; + + /***/ + }, + + /***/ 8533: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $forEach = __webpack_require__(2092).forEach; + var arrayMethodIsStrict = __webpack_require__(9341); + var arrayMethodUsesToLength = __webpack_require__(9207); + + var STRICT_METHOD = arrayMethodIsStrict("forEach"); + var USES_TO_LENGTH = arrayMethodUsesToLength("forEach"); + + // `Array.prototype.forEach` method implementation + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + module.exports = + !STRICT_METHOD || !USES_TO_LENGTH + ? function forEach(callbackfn /* , thisArg */) { + return $forEach( + this, + callbackfn, + arguments.length > 1 ? arguments[1] : undefined + ); + } + : [].forEach; + + /***/ + }, + + /***/ 1318: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toIndexedObject = __webpack_require__(5656); + var toLength = __webpack_require__(7466); + var toAbsoluteIndex = __webpack_require__(1400); + + // `Array.prototype.{ indexOf, includes }` methods implementation + var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) + while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + + module.exports = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + + /***/ + }, + + /***/ 2092: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var bind = __webpack_require__(9974); + var IndexedObject = __webpack_require__(8361); + var toObject = __webpack_require__(7908); + var toLength = __webpack_require__(7466); + var arraySpeciesCreate = __webpack_require__(5417); + + var push = [].push; + + // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation + var createMethod = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP + ? create($this, length) + : IS_FILTER + ? create($this, 0) + : undefined; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) + switch (TYPE) { + case 3: + return true; // some + case 5: + return value; // find + case 6: + return index; // findIndex + case 2: + push.call(target, value); // filter + } + else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + + module.exports = { + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6) + }; + + /***/ + }, + + /***/ 1194: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + var wellKnownSymbol = __webpack_require__(5112); + var V8_VERSION = __webpack_require__(7392); + + var SPECIES = wellKnownSymbol("species"); + + module.exports = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return ( + V8_VERSION >= 51 || + !fails(function () { + var array = []; + var constructor = (array.constructor = {}); + constructor[SPECIES] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }) + ); + }; + + /***/ + }, + + /***/ 9341: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var fails = __webpack_require__(7293); + + module.exports = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return ( + !!method && + fails(function () { + // eslint-disable-next-line no-useless-call,no-throw-literal + method.call( + null, + argument || + function () { + throw 1; + }, + 1 + ); + }) + ); + }; + + /***/ + }, + + /***/ 9207: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var fails = __webpack_require__(7293); + var has = __webpack_require__(6656); + + var defineProperty = Object.defineProperty; + var cache = {}; + + var thrower = function (it) { + throw it; + }; + + module.exports = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, "ACCESSORS") ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + + return (cache[METHOD_NAME] = + !!method && + !fails(function () { + if (ACCESSORS && !DESCRIPTORS) return true; + var O = { length: -1 }; + + if (ACCESSORS) + defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + })); + }; + + /***/ + }, + + /***/ 5417: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + var isArray = __webpack_require__(3157); + var wellKnownSymbol = __webpack_require__(5112); + + var SPECIES = wellKnownSymbol("species"); + + // `ArraySpeciesCreate` abstract operation + // https://tc39.github.io/ecma262/#sec-arrayspeciescreate + module.exports = function (originalArray, length) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (typeof C == "function" && (C === Array || isArray(C.prototype))) + C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } + return new (C === undefined ? Array : C)(length === 0 ? 0 : length); + }; + + /***/ + }, + + /***/ 3411: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + + // call something on iterator step with safe closing on error + module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (error) { + var returnMethod = iterator["return"]; + if (returnMethod !== undefined) + anObject(returnMethod.call(iterator)); + throw error; + } + }; + + /***/ + }, + + /***/ 7072: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + + try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + return: function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line no-throw-literal + Array.from(iteratorWithReturn, function () { + throw 2; + }); + } catch (error) { + /* empty */ + } + + module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: (ITERATION_SUPPORT = true) }; + } + }; + }; + exec(object); + } catch (error) { + /* empty */ + } + return ITERATION_SUPPORT; + }; + + /***/ + }, + + /***/ 4326: /***/ function (module) { + var toString = {}.toString; + + module.exports = function (it) { + return toString.call(it).slice(8, -1); + }; + + /***/ + }, + + /***/ 648: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var TO_STRING_TAG_SUPPORT = __webpack_require__(1694); + var classofRaw = __webpack_require__(4326); + var wellKnownSymbol = __webpack_require__(5112); + + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + // ES3 wrong here + var CORRECT_ARGUMENTS = + classofRaw( + (function () { + return arguments; + })() + ) == "Arguments"; + + // fallback for IE11 Script Access Denied error + var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { + /* empty */ + } + }; + + // getting tag from ES6+ `Object.prototype.toString` + module.exports = TO_STRING_TAG_SUPPORT + ? classofRaw + : function (it) { + var O, tag, result; + return it === undefined + ? "Undefined" + : it === null + ? "Null" + : // @@toStringTag case + typeof (tag = tryGet((O = Object(it)), TO_STRING_TAG)) == + "string" + ? tag + : // builtinTag case + CORRECT_ARGUMENTS + ? classofRaw(O) + : // ES3 arguments fallback + (result = classofRaw(O)) == "Object" && + typeof O.callee == "function" + ? "Arguments" + : result; + }; + + /***/ + }, + + /***/ 5631: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var defineProperty = __webpack_require__(3070).f; + var create = __webpack_require__(30); + var redefineAll = __webpack_require__(2248); + var bind = __webpack_require__(9974); + var anInstance = __webpack_require__(5787); + var iterate = __webpack_require__(612); + var defineIterator = __webpack_require__(654); + var setSpecies = __webpack_require__(6340); + var DESCRIPTORS = __webpack_require__(9781); + var fastKey = __webpack_require__(2423).fastKey; + var InternalStateModule = __webpack_require__(9909); + + var setInternalState = InternalStateModule.set; + var internalStateGetterFor = InternalStateModule.getterFor; + + module.exports = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, CONSTRUCTOR_NAME); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!DESCRIPTORS) that.size = 0; + if (iterable != undefined) + iterate(iterable, that[ADDER], that, IS_MAP); + }); + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + // change existing entry + if (entry) { + entry.value = value; + // create new entry + } else { + state.last = entry = { + index: (index = fastKey(key, true)), + key: key, + value: value, + previous: (previous = state.last), + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS) state.size++; + else that.size++; + // add to index + if (index !== "F") state.index[index] = entry; + } + return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); + // fast case + var index = fastKey(key); + var entry; + if (index !== "F") return state.index[index]; + // frozen object case + for (entry = state.first; entry; entry = entry.next) { + if (entry.key == key) return entry; + } + }; + + redefineAll(C.prototype, { + // 23.1.3.1 Map.prototype.clear() + // 23.2.3.2 Set.prototype.clear() + clear: function clear() { + var that = this; + var state = getInternalState(that); + var data = state.index; + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) + entry.previous = entry.previous.next = undefined; + delete data[entry.index]; + entry = entry.next; + } + state.first = state.last = undefined; + if (DESCRIPTORS) state.size = 0; + else that.size = 0; + }, + // 23.1.3.3 Map.prototype.delete(key) + // 23.2.3.4 Set.prototype.delete(value) + delete: function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first == entry) state.first = next; + if (state.last == entry) state.last = prev; + if (DESCRIPTORS) state.size--; + else that.size--; + } + return !!entry; + }, + // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) + // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) + forEach: function forEach(callbackfn /* , that = undefined */) { + var state = getInternalState(this); + var boundFunction = bind( + callbackfn, + arguments.length > 1 ? arguments[1] : undefined, + 3 + ); + var entry; + while ((entry = entry ? entry.next : state.first)) { + boundFunction(entry.value, entry.key, this); + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + } + }, + // 23.1.3.7 Map.prototype.has(key) + // 23.2.3.7 Set.prototype.has(value) + has: function has(key) { + return !!getEntry(this, key); + } + }); + + redefineAll( + C.prototype, + IS_MAP + ? { + // 23.1.3.6 Map.prototype.get(key) + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // 23.1.3.9 Map.prototype.set(key, value) + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } + : { + // 23.2.3.1 Set.prototype.add(value) + add: function add(value) { + return define( + this, + (value = value === 0 ? 0 : value), + value + ); + } + } + ); + if (DESCRIPTORS) + defineProperty(C.prototype, "size", { + get: function () { + return getInternalState(this).size; + } + }); + return C; + }, + setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + " Iterator"; + var getInternalCollectionState = + internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = + internalStateGetterFor(ITERATOR_NAME); + // add .keys, .values, .entries, [@@iterator] + // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 + defineIterator( + C, + CONSTRUCTOR_NAME, + function (iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, + function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + // get next entry + if ( + !state.target || + !(state.last = entry = entry ? entry.next : state.state.first) + ) { + // or finish the iteration + state.target = undefined; + return { value: undefined, done: true }; + } + // return step by kind + if (kind == "keys") return { value: entry.key, done: false }; + if (kind == "values") + return { value: entry.value, done: false }; + return { value: [entry.key, entry.value], done: false }; + }, + IS_MAP ? "entries" : "values", + !IS_MAP, + true + ); + + // add [@@species], 23.1.2.2, 23.2.2.2 + setSpecies(CONSTRUCTOR_NAME); + } + }; + + /***/ + }, + + /***/ 7710: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var global = __webpack_require__(7854); + var isForced = __webpack_require__(4705); + var redefine = __webpack_require__(1320); + var InternalMetadataModule = __webpack_require__(2423); + var iterate = __webpack_require__(612); + var anInstance = __webpack_require__(5787); + var isObject = __webpack_require__(111); + var fails = __webpack_require__(7293); + var checkCorrectnessOfIteration = __webpack_require__(7072); + var setToStringTag = __webpack_require__(8003); + var inheritIfRequired = __webpack_require__(9587); + + module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf("Map") !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf("Weak") !== -1; + var ADDER = IS_MAP ? "set" : "add"; + var NativeConstructor = global[CONSTRUCTOR_NAME]; + var NativePrototype = + NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var nativeMethod = NativePrototype[KEY]; + redefine( + NativePrototype, + KEY, + KEY == "add" + ? function add(value) { + nativeMethod.call(this, value === 0 ? 0 : value); + return this; + } + : KEY == "delete" + ? function (key) { + return IS_WEAK && !isObject(key) + ? false + : nativeMethod.call(this, key === 0 ? 0 : key); + } + : KEY == "get" + ? function get(key) { + return IS_WEAK && !isObject(key) + ? undefined + : nativeMethod.call(this, key === 0 ? 0 : key); + } + : KEY == "has" + ? function has(key) { + return IS_WEAK && !isObject(key) + ? false + : nativeMethod.call(this, key === 0 ? 0 : key); + } + : function set(key, value) { + nativeMethod.call(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + + // eslint-disable-next-line max-len + if ( + isForced( + CONSTRUCTOR_NAME, + typeof NativeConstructor != "function" || + !( + IS_WEAK || + (NativePrototype.forEach && + !fails(function () { + new NativeConstructor().entries().next(); + })) + ) + ) + ) { + // create collection constructor + Constructor = common.getConstructor( + wrapper, + CONSTRUCTOR_NAME, + IS_MAP, + ADDER + ); + InternalMetadataModule.REQUIRED = true; + } else if (isForced(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + // early implementations not supports chaining + var HASNT_CHAINING = + instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { + instance.has(1); + }); + // most early implementations doesn't supports iterables, most modern - not close it correctly + // eslint-disable-next-line no-new + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function ( + iterable + ) { + new NativeConstructor(iterable); + }); + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = + !IS_WEAK && + fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); + }); + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance(dummy, Constructor, CONSTRUCTOR_NAME); + var that = inheritIfRequired( + new NativeConstructor(), + dummy, + Constructor + ); + if (iterable != undefined) + iterate(iterable, that[ADDER], that, IS_MAP); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod("delete"); + fixMethod("has"); + IS_MAP && fixMethod("get"); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + + // weak collections should not contains .clear method + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + $( + { global: true, forced: Constructor != NativeConstructor }, + exported + ); + + setToStringTag(Constructor, CONSTRUCTOR_NAME); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; + }; + + /***/ + }, + + /***/ 9920: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var has = __webpack_require__(6656); + var ownKeys = __webpack_require__(3887); + var getOwnPropertyDescriptorModule = __webpack_require__(1236); + var definePropertyModule = __webpack_require__(3070); + + module.exports = function (target, source) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!has(target, key)) + defineProperty( + target, + key, + getOwnPropertyDescriptor(source, key) + ); + } + }; + + /***/ + }, + + /***/ 8544: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + module.exports = !fails(function () { + function F() { + /* empty */ + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + + /***/ + }, + + /***/ 4994: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var IteratorPrototype = __webpack_require__(3383).IteratorPrototype; + var create = __webpack_require__(30); + var createPropertyDescriptor = __webpack_require__(9114); + var setToStringTag = __webpack_require__(8003); + var Iterators = __webpack_require__(7497); + + var returnThis = function () { + return this; + }; + + module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { + next: createPropertyDescriptor(1, next) + }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + + /***/ + }, + + /***/ 8880: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var definePropertyModule = __webpack_require__(3070); + var createPropertyDescriptor = __webpack_require__(9114); + + module.exports = DESCRIPTORS + ? function (object, key, value) { + return definePropertyModule.f( + object, + key, + createPropertyDescriptor(1, value) + ); + } + : function (object, key, value) { + object[key] = value; + return object; + }; + + /***/ + }, + + /***/ 9114: /***/ function (module) { + module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + /***/ + }, + + /***/ 6135: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var toPrimitive = __webpack_require__(7593); + var definePropertyModule = __webpack_require__(3070); + var createPropertyDescriptor = __webpack_require__(9114); + + module.exports = function (object, key, value) { + var propertyKey = toPrimitive(key); + if (propertyKey in object) + definePropertyModule.f( + object, + propertyKey, + createPropertyDescriptor(0, value) + ); + else object[propertyKey] = value; + }; + + /***/ + }, + + /***/ 654: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var createIteratorConstructor = __webpack_require__(4994); + var getPrototypeOf = __webpack_require__(9518); + var setPrototypeOf = __webpack_require__(7674); + var setToStringTag = __webpack_require__(8003); + var createNonEnumerableProperty = __webpack_require__(8880); + var redefine = __webpack_require__(1320); + var wellKnownSymbol = __webpack_require__(5112); + var IS_PURE = __webpack_require__(1913); + var Iterators = __webpack_require__(7497); + var IteratorsCore = __webpack_require__(3383); + + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + + var returnThis = function () { + return this; + }; + + module.exports = function ( + Iterable, + NAME, + IteratorConstructor, + next, + DEFAULT, + IS_SET, + FORCED + ) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function () { + return new IteratorConstructor(this); + }; + }; + + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = + IterablePrototype[ITERATOR] || + IterablePrototype["@@iterator"] || + (DEFAULT && IterablePrototype[DEFAULT]); + var defaultIterator = + (!BUGGY_SAFARI_ITERATORS && nativeIterator) || + getIterationMethod(DEFAULT); + var anyNativeIterator = + NAME == "Array" + ? IterablePrototype.entries || nativeIterator + : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf( + anyNativeIterator.call(new Iterable()) + ); + if ( + IteratorPrototype !== Object.prototype && + CurrentIteratorPrototype.next + ) { + if ( + !IS_PURE && + getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype + ) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if ( + typeof CurrentIteratorPrototype[ITERATOR] != "function" + ) { + createNonEnumerableProperty( + CurrentIteratorPrototype, + ITERATOR, + returnThis + ); + } + } + // Set @@toStringTag to native iterators + setToStringTag( + CurrentIteratorPrototype, + TO_STRING_TAG, + true, + true + ); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array#{values, @@iterator}.name in V8 / FF + if ( + DEFAULT == VALUES && + nativeIterator && + nativeIterator.name !== VALUES + ) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return nativeIterator.call(this); + }; + } + + // define iterator + if ( + (!IS_PURE || FORCED) && + IterablePrototype[ITERATOR] !== defaultIterator + ) { + createNonEnumerableProperty( + IterablePrototype, + ITERATOR, + defaultIterator + ); + } + Iterators[NAME] = defaultIterator; + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if ( + BUGGY_SAFARI_ITERATORS || + INCORRECT_VALUES_NAME || + !(KEY in IterablePrototype) + ) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } + else + $( + { + target: NAME, + proto: true, + forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME + }, + methods + ); + } + + return methods; + }; + + /***/ + }, + + /***/ 7235: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var path = __webpack_require__(857); + var has = __webpack_require__(6656); + var wrappedWellKnownSymbolModule = __webpack_require__(6061); + var defineProperty = __webpack_require__(3070).f; + + module.exports = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!has(Symbol, NAME)) + defineProperty(Symbol, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + + /***/ + }, + + /***/ 9781: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + // Thank's IE8 for his funny defineProperty + module.exports = !fails(function () { + return ( + Object.defineProperty({}, 1, { + get: function () { + return 7; + } + })[1] != 7 + ); + }); + + /***/ + }, + + /***/ 317: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var isObject = __webpack_require__(111); + + var document = global.document; + // typeof document.createElement is 'object' in old IE + var EXISTS = isObject(document) && isObject(document.createElement); + + module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; + }; + + /***/ + }, + + /***/ 8324: /***/ function (module) { + // iterable DOM collections + // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods + module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + /***/ + }, + + /***/ 6833: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var userAgent = __webpack_require__(8113); + + module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); + + /***/ + }, + + /***/ 8113: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var getBuiltIn = __webpack_require__(5005); + + module.exports = getBuiltIn("navigator", "userAgent") || ""; + + /***/ + }, + + /***/ 7392: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var userAgent = __webpack_require__(8113); + + var process = global.process; + var versions = process && process.versions; + var v8 = versions && versions.v8; + var match, version; + + if (v8) { + match = v8.split("."); + version = match[0] + match[1]; + } else if (userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } + } + + module.exports = version && +version; + + /***/ + }, + + /***/ 748: /***/ function (module) { + // IE8- don't enum bug keys + module.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + + /***/ + }, + + /***/ 2109: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var getOwnPropertyDescriptor = __webpack_require__(1236).f; + var createNonEnumerableProperty = __webpack_require__(8880); + var redefine = __webpack_require__(1320); + var setGlobal = __webpack_require__(3505); + var copyConstructorProperties = __webpack_require__(9920); + var isForced = __webpack_require__(4705); + + /* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target +*/ + module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced( + GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, + options.forced + ); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + // extend global + redefine(target, key, sourceProperty, options); + } + }; + + /***/ + }, + + /***/ 7293: /***/ function (module) { + module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + + /***/ + }, + + /***/ 6677: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + module.exports = !fails(function () { + return Object.isExtensible(Object.preventExtensions({})); + }); + + /***/ + }, + + /***/ 9974: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var aFunction = __webpack_require__(3099); + + // optional / simple context binding + module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 0: + return function () { + return fn.call(that); + }; + case 1: + return function (a) { + return fn.call(that, a); + }; + case 2: + return function (a, b) { + return fn.call(that, a, b); + }; + case 3: + return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + /***/ + }, + + /***/ 5005: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var path = __webpack_require__(857); + var global = __webpack_require__(7854); + + var aFunction = function (variable) { + return typeof variable == "function" ? variable : undefined; + }; + + module.exports = function (namespace, method) { + return arguments.length < 2 + ? aFunction(path[namespace]) || aFunction(global[namespace]) + : (path[namespace] && path[namespace][method]) || + (global[namespace] && global[namespace][method]); + }; + + /***/ + }, + + /***/ 1246: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var classof = __webpack_require__(648); + var Iterators = __webpack_require__(7497); + var wellKnownSymbol = __webpack_require__(5112); + + var ITERATOR = wellKnownSymbol("iterator"); + + module.exports = function (it) { + if (it != undefined) + return it[ITERATOR] || it["@@iterator"] || Iterators[classof(it)]; + }; + + /***/ + }, + + /***/ 7854: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var check = function (it) { + return it && it.Math == Math && it; + }; + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == "object" && globalThis) || + check(typeof window == "object" && window) || + check(typeof self == "object" && self) || + check( + typeof __webpack_require__.g == "object" && __webpack_require__.g + ) || + // eslint-disable-next-line no-new-func + Function("return this")(); + + /***/ + }, + + /***/ 6656: /***/ function (module) { + var hasOwnProperty = {}.hasOwnProperty; + + module.exports = function (it, key) { + return hasOwnProperty.call(it, key); + }; + + /***/ + }, + + /***/ 3501: /***/ function (module) { + module.exports = {}; + + /***/ + }, + + /***/ 842: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + + module.exports = function (a, b) { + var console = global.console; + if (console && console.error) { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } + }; + + /***/ + }, + + /***/ 490: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var getBuiltIn = __webpack_require__(5005); + + module.exports = getBuiltIn("document", "documentElement"); + + /***/ + }, + + /***/ 4664: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var fails = __webpack_require__(7293); + var createElement = __webpack_require__(317); + + // Thank's IE8 for his funny defineProperty + module.exports = + !DESCRIPTORS && + !fails(function () { + return ( + Object.defineProperty(createElement("div"), "a", { + get: function () { + return 7; + } + }).a != 7 + ); + }); + + /***/ + }, + + /***/ 8361: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + var classof = __webpack_require__(4326); + + var split = "".split; + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins + return !Object("z").propertyIsEnumerable(0); + }) + ? function (it) { + return classof(it) == "String" ? split.call(it, "") : Object(it); + } + : Object; + + /***/ + }, + + /***/ 9587: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + var setPrototypeOf = __webpack_require__(7674); + + // makes subclassing work correct for wrapped built-ins + module.exports = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + typeof (NewTarget = dummy.constructor) == "function" && + NewTarget !== Wrapper && + isObject((NewTargetPrototype = NewTarget.prototype)) && + NewTargetPrototype !== Wrapper.prototype + ) + setPrototypeOf($this, NewTargetPrototype); + return $this; + }; + + /***/ + }, + + /***/ 2788: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var store = __webpack_require__(5465); + + var functionToString = Function.toString; + + // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper + if (typeof store.inspectSource != "function") { + store.inspectSource = function (it) { + return functionToString.call(it); + }; + } + + module.exports = store.inspectSource; + + /***/ + }, + + /***/ 2423: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var hiddenKeys = __webpack_require__(3501); + var isObject = __webpack_require__(111); + var has = __webpack_require__(6656); + var defineProperty = __webpack_require__(3070).f; + var uid = __webpack_require__(9711); + var FREEZING = __webpack_require__(6677); + + var METADATA = uid("meta"); + var id = 0; + + var isExtensible = + Object.isExtensible || + function () { + return true; + }; + + var setMetadata = function (it) { + defineProperty(it, METADATA, { + value: { + objectID: "O" + ++id, // object ID + weakData: {} // weak collections IDs + } + }); + }; + + var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) + return typeof it == "symbol" + ? it + : (typeof it == "string" ? "S" : "P") + it; + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return "F"; + // not necessary to add metadata + if (!create) return "E"; + // add missing metadata + setMetadata(it); + // return object ID + } + return it[METADATA].objectID; + }; + + var getWeakData = function (it, create) { + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } + return it[METADATA].weakData; + }; + + // add metadata on freeze-family methods calling + var onFreeze = function (it) { + if ( + FREEZING && + meta.REQUIRED && + isExtensible(it) && + !has(it, METADATA) + ) + setMetadata(it); + return it; + }; + + var meta = (module.exports = { + REQUIRED: false, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze + }); + + hiddenKeys[METADATA] = true; + + /***/ + }, + + /***/ 9909: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var NATIVE_WEAK_MAP = __webpack_require__(8536); + var global = __webpack_require__(7854); + var isObject = __webpack_require__(111); + var createNonEnumerableProperty = __webpack_require__(8880); + var objectHas = __webpack_require__(6656); + var sharedKey = __webpack_require__(6200); + var hiddenKeys = __webpack_require__(3501); + + var WeakMap = global.WeakMap; + var set, get, has; + + var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); + }; + + var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + + if (NATIVE_WEAK_MAP) { + var store = new WeakMap(); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function (it, metadata) { + wmset.call(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store, it) || {}; + }; + has = function (it) { + return wmhas.call(store, it); + }; + } else { + var STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return objectHas(it, STATE); + }; + } + + module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + + /***/ + }, + + /***/ 7659: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + var Iterators = __webpack_require__(7497); + + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + + // check on default Array iterator + module.exports = function (it) { + return ( + it !== undefined && + (Iterators.Array === it || ArrayPrototype[ITERATOR] === it) + ); + }; + + /***/ + }, + + /***/ 3157: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var classof = __webpack_require__(4326); + + // `IsArray` abstract operation + // https://tc39.github.io/ecma262/#sec-isarray + module.exports = + Array.isArray || + function isArray(arg) { + return classof(arg) == "Array"; + }; + + /***/ + }, + + /***/ 4705: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + var replacement = /#|\.prototype\./; + + var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL + ? true + : value == NATIVE + ? false + : typeof detection == "function" + ? fails(detection) + : !!detection; + }; + + var normalize = (isForced.normalize = function (string) { + return String(string).replace(replacement, ".").toLowerCase(); + }); + + var data = (isForced.data = {}); + var NATIVE = (isForced.NATIVE = "N"); + var POLYFILL = (isForced.POLYFILL = "P"); + + module.exports = isForced; + + /***/ + }, + + /***/ 111: /***/ function (module) { + module.exports = function (it) { + return typeof it === "object" + ? it !== null + : typeof it === "function"; + }; + + /***/ + }, + + /***/ 1913: /***/ function (module) { + module.exports = false; + + /***/ + }, + + /***/ 612: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var isArrayIteratorMethod = __webpack_require__(7659); + var toLength = __webpack_require__(7466); + var bind = __webpack_require__(9974); + var getIteratorMethod = __webpack_require__(1246); + var callWithSafeIterationClosing = __webpack_require__(3411); + + var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; + }; + + var iterate = (module.exports = function ( + iterable, + fn, + that, + AS_ENTRIES, + IS_ITERATOR + ) { + var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); + var iterator, iterFn, index, length, result, next, step; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (typeof iterFn != "function") + throw TypeError("Target is not iterable"); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for ( + index = 0, length = toLength(iterable.length); + length > index; + index++ + ) { + result = AS_ENTRIES + ? boundFunction( + anObject((step = iterable[index]))[0], + step[1] + ) + : boundFunction(iterable[index]); + if (result && result instanceof Result) return result; + } + return new Result(false); + } + iterator = iterFn.call(iterable); + } + + next = iterator.next; + while (!(step = next.call(iterator)).done) { + result = callWithSafeIterationClosing( + iterator, + boundFunction, + step.value, + AS_ENTRIES + ); + if (typeof result == "object" && result && result instanceof Result) + return result; + } + return new Result(false); + }); + + iterate.stop = function (result) { + return new Result(true, result); + }; + + /***/ + }, + + /***/ 3383: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var getPrototypeOf = __webpack_require__(9518); + var createNonEnumerableProperty = __webpack_require__(8880); + var has = __webpack_require__(6656); + var wellKnownSymbol = __webpack_require__(5112); + var IS_PURE = __webpack_require__(1913); + + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + + var returnThis = function () { + return this; + }; + + // `%IteratorPrototype%` object + // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object + var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + + if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!("next" in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf( + getPrototypeOf(arrayIterator) + ); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + + if (IteratorPrototype == undefined) IteratorPrototype = {}; + + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() + if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); + } + + module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS + }; + + /***/ + }, + + /***/ 7497: /***/ function (module) { + module.exports = {}; + + /***/ + }, + + /***/ 5948: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var getOwnPropertyDescriptor = __webpack_require__(1236).f; + var classof = __webpack_require__(4326); + var macrotask = __webpack_require__(261).set; + var IS_IOS = __webpack_require__(6833); + + var MutationObserver = + global.MutationObserver || global.WebKitMutationObserver; + var process = global.process; + var Promise = global.Promise; + var IS_NODE = classof(process) == "process"; + // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` + var queueMicrotaskDescriptor = getOwnPropertyDescriptor( + global, + "queueMicrotask" + ); + var queueMicrotask = + queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + + var flush, head, last, notify, toggle, node, promise, then; + + // modern engines have queueMicrotask method + if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (IS_NODE && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (error) { + if (head) notify(); + else last = undefined; + throw error; + } + } + last = undefined; + if (parent) parent.enter(); + }; + + // Node.js + if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + } else if (MutationObserver && !IS_IOS) { + toggle = true; + node = document.createTextNode(""); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise.resolve(undefined); + then = promise.then; + notify = function () { + then.call(promise, flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } + } + + module.exports = + queueMicrotask || + function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } + last = task; + }; + + /***/ + }, + + /***/ 3366: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + + module.exports = global.Promise; + + /***/ + }, + + /***/ 133: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var fails = __webpack_require__(7293); + + module.exports = + !!Object.getOwnPropertySymbols && + !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); + }); + + /***/ + }, + + /***/ 8536: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var inspectSource = __webpack_require__(2788); + + var WeakMap = global.WeakMap; + + module.exports = + typeof WeakMap === "function" && + /native code/.test(inspectSource(WeakMap)); + + /***/ + }, + + /***/ 8523: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var aFunction = __webpack_require__(3099); + + var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) + throw TypeError("Bad Promise constructor"); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); + }; + + // 25.4.1.5 NewPromiseCapability(C) + module.exports.f = function (C) { + return new PromiseCapability(C); + }; + + /***/ + }, + + /***/ 30: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var defineProperties = __webpack_require__(6048); + var enumBugKeys = __webpack_require__(748); + var hiddenKeys = __webpack_require__(3501); + var html = __webpack_require__(490); + var documentCreateElement = __webpack_require__(317); + var sharedKey = __webpack_require__(6200); + + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + + var EmptyConstructor = function () { + /* empty */ + }; + + var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT; + }; + + // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag("")); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; + }; + + // Create object with fake `null` prototype: use iframe Object with cleared prototype + var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + + // Check for document.domain and active x support + // No need to use active x approach when document.domain is not set + // see https://github.com/es-shims/es5-shim/issues/150 + // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 + // avoid IE GC bug + var activeXDocument; + var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject("htmlfile"); + } catch (error) { + /* ignore */ + } + NullProtoObject = activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) + : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + + hiddenKeys[IE_PROTO] = true; + + // `Object.create` method + // https://tc39.github.io/ecma262/#sec-object.create + module.exports = + Object.create || + function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined + ? result + : defineProperties(result, Properties); + }; + + /***/ + }, + + /***/ 6048: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var definePropertyModule = __webpack_require__(3070); + var anObject = __webpack_require__(9670); + var objectKeys = __webpack_require__(1956); + + // `Object.defineProperties` method + // https://tc39.github.io/ecma262/#sec-object.defineproperties + module.exports = DESCRIPTORS + ? Object.defineProperties + : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f( + O, + (key = keys[index++]), + Properties[key] + ); + return O; + }; + + /***/ + }, + + /***/ 3070: /***/ function ( + __unused_webpack_module, + exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var IE8_DOM_DEFINE = __webpack_require__(4664); + var anObject = __webpack_require__(9670); + var toPrimitive = __webpack_require__(7593); + + var nativeDefineProperty = Object.defineProperty; + + // `Object.defineProperty` method + // https://tc39.github.io/ecma262/#sec-object.defineproperty + exports.f = DESCRIPTORS + ? nativeDefineProperty + : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { + /* empty */ + } + if ("get" in Attributes || "set" in Attributes) + throw TypeError("Accessors not supported"); + if ("value" in Attributes) O[P] = Attributes.value; + return O; + }; + + /***/ + }, + + /***/ 1236: /***/ function ( + __unused_webpack_module, + exports, + __webpack_require__ + ) { + var DESCRIPTORS = __webpack_require__(9781); + var propertyIsEnumerableModule = __webpack_require__(5296); + var createPropertyDescriptor = __webpack_require__(9114); + var toIndexedObject = __webpack_require__(5656); + var toPrimitive = __webpack_require__(7593); + var has = __webpack_require__(6656); + var IE8_DOM_DEFINE = __webpack_require__(4664); + + var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor + exports.f = DESCRIPTORS + ? nativeGetOwnPropertyDescriptor + : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) + try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { + /* empty */ + } + if (has(O, P)) + return createPropertyDescriptor( + !propertyIsEnumerableModule.f.call(O, P), + O[P] + ); + }; + + /***/ + }, + + /***/ 8006: /***/ function ( + __unused_webpack_module, + exports, + __webpack_require__ + ) { + var internalObjectKeys = __webpack_require__(6324); + var enumBugKeys = __webpack_require__(748); + + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + + // `Object.getOwnPropertyNames` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertynames + exports.f = + Object.getOwnPropertyNames || + function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + + /***/ + }, + + /***/ 5181: /***/ function (__unused_webpack_module, exports) { + exports.f = Object.getOwnPropertySymbols; + + /***/ + }, + + /***/ 9518: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var has = __webpack_require__(6656); + var toObject = __webpack_require__(7908); + var sharedKey = __webpack_require__(6200); + var CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544); + + var IE_PROTO = sharedKey("IE_PROTO"); + var ObjectPrototype = Object.prototype; + + // `Object.getPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.getprototypeof + module.exports = CORRECT_PROTOTYPE_GETTER + ? Object.getPrototypeOf + : function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if ( + typeof O.constructor == "function" && + O instanceof O.constructor + ) { + return O.constructor.prototype; + } + return O instanceof Object ? ObjectPrototype : null; + }; + + /***/ + }, + + /***/ 6324: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var has = __webpack_require__(6656); + var toIndexedObject = __webpack_require__(5656); + var indexOf = __webpack_require__(1318).indexOf; + var hiddenKeys = __webpack_require__(3501); + + module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !has(hiddenKeys, key) && has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) + if (has(O, (key = names[i++]))) { + ~indexOf(result, key) || result.push(key); + } + return result; + }; + + /***/ + }, + + /***/ 1956: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var internalObjectKeys = __webpack_require__(6324); + var enumBugKeys = __webpack_require__(748); + + // `Object.keys` method + // https://tc39.github.io/ecma262/#sec-object.keys + module.exports = + Object.keys || + function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + + /***/ + }, + + /***/ 5296: /***/ function (__unused_webpack_module, exports) { + "use strict"; + + var nativePropertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // Nashorn ~ JDK8 bug + var NASHORN_BUG = + getOwnPropertyDescriptor && + !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + + // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable + exports.f = NASHORN_BUG + ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } + : nativePropertyIsEnumerable; + + /***/ + }, + + /***/ 7674: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var aPossiblePrototype = __webpack_require__(6077); + + // `Object.setPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.setprototypeof + // Works with __proto__ only. Old v8 can't work with null proto objects. + /* eslint-disable no-proto */ + module.exports = + Object.setPrototypeOf || + ("__proto__" in {} + ? (function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor( + Object.prototype, + "__proto__" + ).set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + /* empty */ + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; + })() + : undefined); + + /***/ + }, + + /***/ 3887: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var getBuiltIn = __webpack_require__(5005); + var getOwnPropertyNamesModule = __webpack_require__(8006); + var getOwnPropertySymbolsModule = __webpack_require__(5181); + var anObject = __webpack_require__(9670); + + // all object keys, includes non-enumerable and symbols + module.exports = + getBuiltIn("Reflect", "ownKeys") || + function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols + ? keys.concat(getOwnPropertySymbols(it)) + : keys; + }; + + /***/ + }, + + /***/ 857: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + + module.exports = global; + + /***/ + }, + + /***/ 2534: /***/ function (module) { + module.exports = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } + }; + + /***/ + }, + + /***/ 9478: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var isObject = __webpack_require__(111); + var newPromiseCapability = __webpack_require__(8523); + + module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; + }; + + /***/ + }, + + /***/ 2248: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var redefine = __webpack_require__(1320); + + module.exports = function (target, src, options) { + for (var key in src) redefine(target, key, src[key], options); + return target; + }; + + /***/ + }, + + /***/ 1320: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var createNonEnumerableProperty = __webpack_require__(8880); + var has = __webpack_require__(6656); + var setGlobal = __webpack_require__(3505); + var inspectSource = __webpack_require__(2788); + var InternalStateModule = __webpack_require__(9909); + + var getInternalState = InternalStateModule.get; + var enforceInternalState = InternalStateModule.enforce; + var TEMPLATE = String(String).split("String"); + + (module.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + if (typeof value == "function") { + if (typeof key == "string" && !has(value, "name")) + createNonEnumerableProperty(value, "name", key); + enforceInternalState(value).source = TEMPLATE.join( + typeof key == "string" ? key : "" + ); + } + if (O === global) { + if (simple) O[key] = value; + else setGlobal(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + if (simple) O[key] = value; + else createNonEnumerableProperty(O, key, value); + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, "toString", function toString() { + return ( + (typeof this == "function" && getInternalState(this).source) || + inspectSource(this) + ); + }); + + /***/ + }, + + /***/ 7066: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var anObject = __webpack_require__(9670); + + // `RegExp.prototype.flags` getter implementation + // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags + module.exports = function () { + var that = anObject(this); + var result = ""; + if (that.global) result += "g"; + if (that.ignoreCase) result += "i"; + if (that.multiline) result += "m"; + if (that.dotAll) result += "s"; + if (that.unicode) result += "u"; + if (that.sticky) result += "y"; + return result; + }; + + /***/ + }, + + /***/ 4488: /***/ function (module) { + // `RequireObjectCoercible` abstract operation + // https://tc39.github.io/ecma262/#sec-requireobjectcoercible + module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; + }; + + /***/ + }, + + /***/ 3505: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var createNonEnumerableProperty = __webpack_require__(8880); + + module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } + return value; + }; + + /***/ + }, + + /***/ 6340: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var getBuiltIn = __webpack_require__(5005); + var definePropertyModule = __webpack_require__(3070); + var wellKnownSymbol = __webpack_require__(5112); + var DESCRIPTORS = __webpack_require__(9781); + + var SPECIES = wellKnownSymbol("species"); + + module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule.f; + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineProperty(Constructor, SPECIES, { + configurable: true, + get: function () { + return this; + } + }); + } + }; + + /***/ + }, + + /***/ 8003: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var defineProperty = __webpack_require__(3070).f; + var has = __webpack_require__(6656); + var wellKnownSymbol = __webpack_require__(5112); + + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + + module.exports = function (it, TAG, STATIC) { + if (it && !has((it = STATIC ? it : it.prototype), TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { + configurable: true, + value: TAG + }); + } + }; + + /***/ + }, + + /***/ 6200: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var shared = __webpack_require__(2309); + var uid = __webpack_require__(9711); + + var keys = shared("keys"); + + module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); + }; + + /***/ + }, + + /***/ 5465: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var setGlobal = __webpack_require__(3505); + + var SHARED = "__core-js_shared__"; + var store = global[SHARED] || setGlobal(SHARED, {}); + + module.exports = store; + + /***/ + }, + + /***/ 2309: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var IS_PURE = __webpack_require__(1913); + var store = __webpack_require__(5465); + + (module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); + })("versions", []).push({ + version: "3.6.5", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2020 Denis Pushkarev (zloirock.ru)" + }); + + /***/ + }, + + /***/ 6707: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var anObject = __webpack_require__(9670); + var aFunction = __webpack_require__(3099); + var wellKnownSymbol = __webpack_require__(5112); + + var SPECIES = wellKnownSymbol("species"); + + // `SpeciesConstructor` abstract operation + // https://tc39.github.io/ecma262/#sec-speciesconstructor + module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined + ? defaultConstructor + : aFunction(S); + }; + + /***/ + }, + + /***/ 261: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var fails = __webpack_require__(7293); + var classof = __webpack_require__(4326); + var bind = __webpack_require__(9974); + var html = __webpack_require__(490); + var createElement = __webpack_require__(317); + var IS_IOS = __webpack_require__(6833); + + var location = global.location; + var set = global.setImmediate; + var clear = global.clearImmediate; + var process = global.process; + var MessageChannel = global.MessageChannel; + var Dispatch = global.Dispatch; + var counter = 0; + var queue = {}; + var ONREADYSTATECHANGE = "onreadystatechange"; + var defer, channel, port; + + var run = function (id) { + // eslint-disable-next-line no-prototype-builtins + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } + }; + + var runner = function (id) { + return function () { + run(id); + }; + }; + + var listener = function (event) { + run(event.data); + }; + + var post = function (id) { + // old engines have not location.origin + global.postMessage(id + "", location.protocol + "//" + location.host); + }; + + // Node.js 0.9+ & IE10+ has setImmediate, otherwise: + if (!set || !clear) { + set = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) args.push(arguments[i++]); + queue[++counter] = function () { + // eslint-disable-next-line no-new-func + (typeof fn == "function" ? fn : Function(fn)).apply( + undefined, + args + ); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (classof(process) == "process") { + defer = function (id) { + process.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = bind(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + global.addEventListener && + typeof postMessage == "function" && + !global.importScripts && + !fails(post) && + location.protocol !== "file:" + ) { + defer = post; + global.addEventListener("message", listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in createElement("script")) { + defer = function (id) { + html.appendChild(createElement("script"))[ONREADYSTATECHANGE] = + function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } + } + + module.exports = { + set: set, + clear: clear + }; + + /***/ + }, + + /***/ 1400: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toInteger = __webpack_require__(9958); + + var max = Math.max; + var min = Math.min; + + // Helper for a popular repeating case of the spec: + // Let integer be ? ToInteger(index). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + module.exports = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + + /***/ + }, + + /***/ 5656: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + // toObject with fallback for non-array-like ES3 strings + var IndexedObject = __webpack_require__(8361); + var requireObjectCoercible = __webpack_require__(4488); + + module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); + }; + + /***/ + }, + + /***/ 9958: /***/ function (module) { + var ceil = Math.ceil; + var floor = Math.floor; + + // `ToInteger` abstract operation + // https://tc39.github.io/ecma262/#sec-tointeger + module.exports = function (argument) { + return isNaN((argument = +argument)) + ? 0 + : (argument > 0 ? floor : ceil)(argument); + }; + + /***/ + }, + + /***/ 7466: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var toInteger = __webpack_require__(9958); + + var min = Math.min; + + // `ToLength` abstract operation + // https://tc39.github.io/ecma262/#sec-tolength + module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1fffffffffffff) : 0; // 2 ** 53 - 1 == 9007199254740991 + }; + + /***/ + }, + + /***/ 7908: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var requireObjectCoercible = __webpack_require__(4488); + + // `ToObject` abstract operation + // https://tc39.github.io/ecma262/#sec-toobject + module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); + }; + + /***/ + }, + + /***/ 7593: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var isObject = __webpack_require__(111); + + // `ToPrimitive` abstract operation + // https://tc39.github.io/ecma262/#sec-toprimitive + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + module.exports = function (input, PREFERRED_STRING) { + if (!isObject(input)) return input; + var fn, val; + if ( + PREFERRED_STRING && + typeof (fn = input.toString) == "function" && + !isObject((val = fn.call(input))) + ) + return val; + if ( + typeof (fn = input.valueOf) == "function" && + !isObject((val = fn.call(input))) + ) + return val; + if ( + !PREFERRED_STRING && + typeof (fn = input.toString) == "function" && + !isObject((val = fn.call(input))) + ) + return val; + throw TypeError("Can't convert object to primitive value"); + }; + + /***/ + }, + + /***/ 1694: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + + test[TO_STRING_TAG] = "z"; + + module.exports = String(test) === "[object z]"; + + /***/ + }, + + /***/ 9711: /***/ function (module) { + var id = 0; + var postfix = Math.random(); + + module.exports = function (key) { + return ( + "Symbol(" + + String(key === undefined ? "" : key) + + ")_" + + (++id + postfix).toString(36) + ); + }; + + /***/ + }, + + /***/ 3307: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var NATIVE_SYMBOL = __webpack_require__(133); + + module.exports = + NATIVE_SYMBOL && + // eslint-disable-next-line no-undef + !Symbol.sham && + // eslint-disable-next-line no-undef + typeof Symbol.iterator == "symbol"; + + /***/ + }, + + /***/ 6061: /***/ function ( + __unused_webpack_module, + exports, + __webpack_require__ + ) { + var wellKnownSymbol = __webpack_require__(5112); + + exports.f = wellKnownSymbol; + + /***/ + }, + + /***/ 5112: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var shared = __webpack_require__(2309); + var has = __webpack_require__(6656); + var uid = __webpack_require__(9711); + var NATIVE_SYMBOL = __webpack_require__(133); + var USE_SYMBOL_AS_UID = __webpack_require__(3307); + + var WellKnownSymbolsStore = shared("wks"); + var Symbol = global.Symbol; + var createWellKnownSymbol = USE_SYMBOL_AS_UID + ? Symbol + : (Symbol && Symbol.withoutSetter) || uid; + + module.exports = function (name) { + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) + WellKnownSymbolsStore[name] = Symbol[name]; + else + WellKnownSymbolsStore[name] = createWellKnownSymbol( + "Symbol." + name + ); + } + return WellKnownSymbolsStore[name]; + }; + + /***/ + }, + + /***/ 7327: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var $filter = __webpack_require__(2092).filter; + var arrayMethodHasSpeciesSupport = __webpack_require__(1194); + var arrayMethodUsesToLength = __webpack_require__(9207); + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("filter"); + // Edge 14- issue + var USES_TO_LENGTH = arrayMethodUsesToLength("filter"); + + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + // with adding support of @@species + $( + { + target: "Array", + proto: true, + forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH + }, + { + filter: function filter(callbackfn /* , thisArg */) { + return $filter( + this, + callbackfn, + arguments.length > 1 ? arguments[1] : undefined + ); + } + } + ); + + /***/ + }, + + /***/ 2772: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var $indexOf = __webpack_require__(1318).indexOf; + var arrayMethodIsStrict = __webpack_require__(9341); + var arrayMethodUsesToLength = __webpack_require__(9207); + + var nativeIndexOf = [].indexOf; + + var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; + var STRICT_METHOD = arrayMethodIsStrict("indexOf"); + var USES_TO_LENGTH = arrayMethodUsesToLength("indexOf", { + ACCESSORS: true, + 1: 0 + }); + + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + $( + { + target: "Array", + proto: true, + forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH + }, + { + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + return NEGATIVE_ZERO + ? // convert -0 to +0 + nativeIndexOf.apply(this, arguments) || 0 + : $indexOf( + this, + searchElement, + arguments.length > 1 ? arguments[1] : undefined + ); + } + } + ); + + /***/ + }, + + /***/ 6992: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var toIndexedObject = __webpack_require__(5656); + var addToUnscopables = __webpack_require__(1223); + var Iterators = __webpack_require__(7497); + var InternalStateModule = __webpack_require__(9909); + var defineIterator = __webpack_require__(654); + + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + + // `Array.prototype.entries` method + // https://tc39.github.io/ecma262/#sec-array.prototype.entries + // `Array.prototype.keys` method + // https://tc39.github.io/ecma262/#sec-array.prototype.keys + // `Array.prototype.values` method + // https://tc39.github.io/ecma262/#sec-array.prototype.values + // `Array.prototype[@@iterator]` method + // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator + // `CreateArrayIterator` internal method + // https://tc39.github.io/ecma262/#sec-createarrayiterator + module.exports = defineIterator( + Array, + "Array", + function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); + // `%ArrayIteratorPrototype%.next` method + // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next + }, + function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == "keys") return { value: index, done: false }; + if (kind == "values") return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; + }, + "values" + ); + + // argumentsList[@@iterator] is %ArrayProto_values% + // https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject + // https://tc39.github.io/ecma262/#sec-createmappedargumentsobject + Iterators.Arguments = Iterators.Array; + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + + /***/ + }, + + /***/ 7042: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var isObject = __webpack_require__(111); + var isArray = __webpack_require__(3157); + var toAbsoluteIndex = __webpack_require__(1400); + var toLength = __webpack_require__(7466); + var toIndexedObject = __webpack_require__(5656); + var createProperty = __webpack_require__(6135); + var wellKnownSymbol = __webpack_require__(5112); + var arrayMethodHasSpeciesSupport = __webpack_require__(1194); + var arrayMethodUsesToLength = __webpack_require__(9207); + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var USES_TO_LENGTH = arrayMethodUsesToLength("slice", { + ACCESSORS: true, + 0: 0, + 1: 2 + }); + + var SPECIES = wellKnownSymbol("species"); + var nativeSlice = [].slice; + var max = Math.max; + + // `Array.prototype.slice` method + // https://tc39.github.io/ecma262/#sec-array.prototype.slice + // fallback for not array-like ES3 strings and DOM objects + $( + { + target: "Array", + proto: true, + forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH + }, + { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = toLength(O.length); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex( + end === undefined ? length : end, + length + ); + // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + // cross-realm fallback + if ( + typeof Constructor == "function" && + (Constructor === Array || isArray(Constructor.prototype)) + ) { + Constructor = undefined; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) Constructor = undefined; + } + if (Constructor === Array || Constructor === undefined) { + return nativeSlice.call(O, k, fin); + } + } + result = new (Constructor === undefined ? Array : Constructor)( + max(fin - k, 0) + ); + for (n = 0; k < fin; k++, n++) + if (k in O) createProperty(result, n, O[k]); + result.length = n; + return result; + } + } + ); + + /***/ + }, + + /***/ 3706: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var setToStringTag = __webpack_require__(8003); + + // JSON[@@toStringTag] property + // https://tc39.github.io/ecma262/#sec-json-@@tostringtag + setToStringTag(global.JSON, "JSON", true); + + /***/ + }, + + /***/ 1532: /***/ function ( + module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var collection = __webpack_require__(7710); + var collectionStrong = __webpack_require__(5631); + + // `Map` constructor + // https://tc39.github.io/ecma262/#sec-map-objects + module.exports = collection( + "Map", + function (init) { + return function Map() { + return init(this, arguments.length ? arguments[0] : undefined); + }; + }, + collectionStrong + ); + + /***/ + }, + + /***/ 408: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var setToStringTag = __webpack_require__(8003); + + // Math[@@toStringTag] property + // https://tc39.github.io/ecma262/#sec-math-@@tostringtag + setToStringTag(Math, "Math", true); + + /***/ + }, + + /***/ 9337: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var $ = __webpack_require__(2109); + var DESCRIPTORS = __webpack_require__(9781); + var ownKeys = __webpack_require__(3887); + var toIndexedObject = __webpack_require__(5656); + var getOwnPropertyDescriptorModule = __webpack_require__(1236); + var createProperty = __webpack_require__(6135); + + // `Object.getOwnPropertyDescriptors` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors + $( + { target: "Object", stat: true, sham: !DESCRIPTORS }, + { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors( + object + ) { + var O = toIndexedObject(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var keys = ownKeys(O); + var result = {}; + var index = 0; + var key, descriptor; + while (keys.length > index) { + descriptor = getOwnPropertyDescriptor(O, (key = keys[index++])); + if (descriptor !== undefined) + createProperty(result, key, descriptor); + } + return result; + } + } + ); + + /***/ + }, + + /***/ 8674: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var $ = __webpack_require__(2109); + var IS_PURE = __webpack_require__(1913); + var global = __webpack_require__(7854); + var getBuiltIn = __webpack_require__(5005); + var NativePromise = __webpack_require__(3366); + var redefine = __webpack_require__(1320); + var redefineAll = __webpack_require__(2248); + var setToStringTag = __webpack_require__(8003); + var setSpecies = __webpack_require__(6340); + var isObject = __webpack_require__(111); + var aFunction = __webpack_require__(3099); + var anInstance = __webpack_require__(5787); + var classof = __webpack_require__(4326); + var inspectSource = __webpack_require__(2788); + var iterate = __webpack_require__(612); + var checkCorrectnessOfIteration = __webpack_require__(7072); + var speciesConstructor = __webpack_require__(6707); + var task = __webpack_require__(261).set; + var microtask = __webpack_require__(5948); + var promiseResolve = __webpack_require__(9478); + var hostReportErrors = __webpack_require__(842); + var newPromiseCapabilityModule = __webpack_require__(8523); + var perform = __webpack_require__(2534); + var InternalStateModule = __webpack_require__(9909); + var isForced = __webpack_require__(4705); + var wellKnownSymbol = __webpack_require__(5112); + var V8_VERSION = __webpack_require__(7392); + + var SPECIES = wellKnownSymbol("species"); + var PROMISE = "Promise"; + var getInternalState = InternalStateModule.get; + var setInternalState = InternalStateModule.set; + var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); + var PromiseConstructor = NativePromise; + var TypeError = global.TypeError; + var document = global.document; + var process = global.process; + var $fetch = getBuiltIn("fetch"); + var newPromiseCapability = newPromiseCapabilityModule.f; + var newGenericPromiseCapability = newPromiseCapability; + var IS_NODE = classof(process) == "process"; + var DISPATCH_EVENT = !!( + document && + document.createEvent && + global.dispatchEvent + ); + var UNHANDLED_REJECTION = "unhandledrejection"; + var REJECTION_HANDLED = "rejectionhandled"; + var PENDING = 0; + var FULFILLED = 1; + var REJECTED = 2; + var HANDLED = 1; + var UNHANDLED = 2; + var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + + var FORCED = isForced(PROMISE, function () { + var GLOBAL_CORE_JS_PROMISE = + inspectSource(PromiseConstructor) !== String(PromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE) { + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (V8_VERSION === 66) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + if (!IS_NODE && typeof PromiseRejectionEvent != "function") + return true; + } + // We need Promise#finally in the pure version for preventing prototype pollution + if (IS_PURE && !PromiseConstructor.prototype["finally"]) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) + return false; + // Detect correctness of subclassing with @@species support + var promise = PromiseConstructor.resolve(1); + var FakePromise = function (exec) { + exec( + function () { + /* empty */ + }, + function () { + /* empty */ + } + ); + }; + var constructor = (promise.constructor = {}); + constructor[SPECIES] = FakePromise; + return !( + promise.then(function () { + /* empty */ + }) instanceof FakePromise + ); + }); + + var INCORRECT_ITERATION = + FORCED || + !checkCorrectnessOfIteration(function (iterable) { + PromiseConstructor.all(iterable)["catch"](function () { + /* empty */ + }); + }); + + // helpers + var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == "function" + ? then + : false; + }; + + var notify = function (promise, state, isReject) { + if (state.notified) return; + state.notified = true; + var chain = state.reactions; + microtask(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; + // variable length - can't use forEach + while (chain.length > index) { + var reaction = chain[index++]; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) + onHandleUnhandled(promise, state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError("Promise-chain cycle")); + } else if ((then = isThenable(result))) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + } + state.reactions = []; + state.notified = false; + if (isReject && !state.rejection) onUnhandled(promise, state); + }); + }; + + var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document.createEvent("Event"); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if ((handler = global["on" + name])) handler(event); + else if (name === UNHANDLED_REJECTION) + hostReportErrors("Unhandled promise rejection", reason); + }; + + var onUnhandled = function (promise, state) { + task.call(global, function () { + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE) { + process.emit("unhandledRejection", value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = + IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); + }; + + var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; + }; + + var onHandleUnhandled = function (promise, state) { + task.call(global, function () { + if (IS_NODE) { + process.emit("rejectionHandled", promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); + }; + + var bind = function (fn, promise, state, unwrap) { + return function (value) { + fn(promise, state, value, unwrap); + }; + }; + + var internalReject = function (promise, state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(promise, state, true); + }; + + var internalResolve = function (promise, state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (promise === value) + throw TypeError("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + then.call( + value, + bind(internalResolve, promise, wrapper, state), + bind(internalReject, promise, wrapper, state) + ); + } catch (error) { + internalReject(promise, wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(promise, state, false); + } + } catch (error) { + internalReject(promise, { done: false }, error, state); + } + }; + + // constructor polyfill + if (FORCED) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromiseConstructor, PROMISE); + aFunction(executor); + Internal.call(this); + var state = getInternalState(this); + try { + executor( + bind(internalResolve, this, state), + bind(internalReject, this, state) + ); + } catch (error) { + internalReject(this, state, error); + } + }; + // eslint-disable-next-line no-unused-vars + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + Internal.prototype = redefineAll(PromiseConstructor.prototype, { + // `Promise.prototype.then` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.then + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability( + speciesConstructor(this, PromiseConstructor) + ); + reaction.ok = + typeof onFulfilled == "function" ? onFulfilled : true; + reaction.fail = typeof onRejected == "function" && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + state.parent = true; + state.reactions.push(reaction); + if (state.state != PENDING) notify(this, state, false); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.catch + catch: function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, promise, state); + this.reject = bind(internalReject, promise, state); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (!IS_PURE && typeof NativePromise == "function") { + nativeThen = NativePromise.prototype.then; + + // wrap native Promise#then for native async functions + redefine( + NativePromise.prototype, + "then", + function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, + { unsafe: true } + ); + + // wrap fetch result + if (typeof $fetch == "function") + $( + { global: true, enumerable: true, forced: true }, + { + // eslint-disable-next-line no-unused-vars + fetch: function fetch(input /* , init */) { + return promiseResolve( + PromiseConstructor, + $fetch.apply(global, arguments) + ); + } + } + ); + } + } + + $( + { global: true, wrap: true, forced: FORCED }, + { + Promise: PromiseConstructor + } + ); + + setToStringTag(PromiseConstructor, PROMISE, false, true); + setSpecies(PROMISE); + + PromiseWrapper = getBuiltIn(PROMISE); + + // statics + $( + { target: PROMISE, stat: true, forced: FORCED }, + { + // `Promise.reject` method + // https://tc39.github.io/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability(this); + capability.reject.call(undefined, r); + return capability.promise; + } + } + ); + + $( + { target: PROMISE, stat: true, forced: IS_PURE || FORCED }, + { + // `Promise.resolve` method + // https://tc39.github.io/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve( + IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, + x + ); + } + } + ); + + $( + { target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, + { + // `Promise.all` method + // https://tc39.github.io/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aFunction(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + $promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.github.io/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aFunction(C.resolve); + iterate(iterable, function (promise) { + $promiseResolve + .call(C, promise) + .then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } + } + ); + + /***/ + }, + + /***/ 9714: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + + var redefine = __webpack_require__(1320); + var anObject = __webpack_require__(9670); + var fails = __webpack_require__(7293); + var flags = __webpack_require__(7066); + + var TO_STRING = "toString"; + var RegExpPrototype = RegExp.prototype; + var nativeToString = RegExpPrototype[TO_STRING]; + + var NOT_GENERIC = fails(function () { + return nativeToString.call({ source: "a", flags: "b" }) != "/a/b"; + }); + // FF44- RegExp#toString has a wrong name + var INCORRECT_NAME = nativeToString.name != TO_STRING; + + // `RegExp.prototype.toString` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring + if (NOT_GENERIC || INCORRECT_NAME) { + redefine( + RegExp.prototype, + TO_STRING, + function toString() { + var R = anObject(this); + var p = String(R.source); + var rf = R.flags; + var f = String( + rf === undefined && + R instanceof RegExp && + !("flags" in RegExpPrototype) + ? flags.call(R) + : rf + ); + return "/" + p + "/" + f; + }, + { unsafe: true } + ); + } + + /***/ + }, + + /***/ 2443: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var defineWellKnownSymbol = __webpack_require__(7235); + + // `Symbol.asyncIterator` well-known symbol + // https://tc39.github.io/ecma262/#sec-symbol.asynciterator + defineWellKnownSymbol("asyncIterator"); + + /***/ + }, + + /***/ 1817: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + "use strict"; + // `Symbol.prototype.description` getter + // https://tc39.github.io/ecma262/#sec-symbol.prototype.description + + var $ = __webpack_require__(2109); + var DESCRIPTORS = __webpack_require__(9781); + var global = __webpack_require__(7854); + var has = __webpack_require__(6656); + var isObject = __webpack_require__(111); + var defineProperty = __webpack_require__(3070).f; + var copyConstructorProperties = __webpack_require__(9920); + + var NativeSymbol = global.Symbol; + + if ( + DESCRIPTORS && + typeof NativeSymbol == "function" && + (!("description" in NativeSymbol.prototype) || + // Safari 12 bug + NativeSymbol().description !== undefined) + ) { + var EmptyStringDescriptionStore = {}; + // wrap Symbol constructor for correct work with undefined description + var SymbolWrapper = function Symbol() { + var description = + arguments.length < 1 || arguments[0] === undefined + ? undefined + : String(arguments[0]); + var result = + this instanceof SymbolWrapper + ? new NativeSymbol(description) + : // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' + description === undefined + ? NativeSymbol() + : NativeSymbol(description); + if (description === "") EmptyStringDescriptionStore[result] = true; + return result; + }; + copyConstructorProperties(SymbolWrapper, NativeSymbol); + var symbolPrototype = (SymbolWrapper.prototype = + NativeSymbol.prototype); + symbolPrototype.constructor = SymbolWrapper; + + var symbolToString = symbolPrototype.toString; + var native = String(NativeSymbol("test")) == "Symbol(test)"; + var regexp = /^Symbol\((.*)\)[^)]+$/; + defineProperty(symbolPrototype, "description", { + configurable: true, + get: function description() { + var symbol = isObject(this) ? this.valueOf() : this; + var string = symbolToString.call(symbol); + if (has(EmptyStringDescriptionStore, symbol)) return ""; + var desc = native + ? string.slice(7, -1) + : string.replace(regexp, "$1"); + return desc === "" ? undefined : desc; + } + }); + + $( + { global: true, forced: true }, + { + Symbol: SymbolWrapper + } + ); + } + + /***/ + }, + + /***/ 4747: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var DOMIterables = __webpack_require__(8324); + var forEach = __webpack_require__(8533); + var createNonEnumerableProperty = __webpack_require__(8880); + + for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== forEach) + try { + createNonEnumerableProperty( + CollectionPrototype, + "forEach", + forEach + ); + } catch (error) { + CollectionPrototype.forEach = forEach; + } + } + + /***/ + }, + + /***/ 3948: /***/ function ( + __unused_webpack_module, + __unused_webpack_exports, + __webpack_require__ + ) { + var global = __webpack_require__(7854); + var DOMIterables = __webpack_require__(8324); + var ArrayIteratorMethods = __webpack_require__(6992); + var createNonEnumerableProperty = __webpack_require__(8880); + var wellKnownSymbol = __webpack_require__(5112); + + var ITERATOR = wellKnownSymbol("iterator"); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var ArrayValues = ArrayIteratorMethods.values; + + for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + if (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[ITERATOR] !== ArrayValues) + try { + createNonEnumerableProperty( + CollectionPrototype, + ITERATOR, + ArrayValues + ); + } catch (error) { + CollectionPrototype[ITERATOR] = ArrayValues; + } + if (!CollectionPrototype[TO_STRING_TAG]) { + createNonEnumerableProperty( + CollectionPrototype, + TO_STRING_TAG, + COLLECTION_NAME + ); + } + if (DOMIterables[COLLECTION_NAME]) + for (var METHOD_NAME in ArrayIteratorMethods) { + // some Chrome versions have non-configurable methods on DOMTokenList + if ( + CollectionPrototype[METHOD_NAME] !== + ArrayIteratorMethods[METHOD_NAME] + ) + try { + createNonEnumerableProperty( + CollectionPrototype, + METHOD_NAME, + ArrayIteratorMethods[METHOD_NAME] + ); + } catch (error) { + CollectionPrototype[METHOD_NAME] = + ArrayIteratorMethods[METHOD_NAME]; + } + } + } + } + + /***/ + } + + /******/ + }; + /************************************************************************/ + /******/ // The module cache + /******/ var __webpack_module_cache__ = {}; + /******/ + /******/ // The require function + /******/ function __webpack_require__(moduleId) { + /******/ // Check if module is in cache + /******/ var cachedModule = __webpack_module_cache__[moduleId]; + /******/ if (cachedModule !== undefined) { + /******/ return cachedModule.exports; + /******/ + } + /******/ // Create a new module (and put it into the cache) + /******/ var module = (__webpack_module_cache__[moduleId] = { + /******/ // no module.id needed + /******/ // no module.loaded needed + /******/ exports: {} + /******/ + }); + /******/ + /******/ // Execute the module function + /******/ __webpack_modules__[moduleId]( + module, + module.exports, + __webpack_require__ + ); + /******/ + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ + } + /******/ + /************************************************************************/ + /******/ /* webpack/runtime/define property getters */ /******/ !(function () { + /******/ // define getter functions for harmony exports + /******/ __webpack_require__.d = function (exports, definition) { + /******/ for (var key in definition) { + /******/ if ( + __webpack_require__.o(definition, key) && + !__webpack_require__.o(exports, key) + ) { + /******/ Object.defineProperty(exports, key, { + enumerable: true, + get: definition[key] + }); + /******/ + } + /******/ + } + /******/ + }; + /******/ + })(); + /******/ + /******/ /* webpack/runtime/global */ /******/ !(function () { + /******/ __webpack_require__.g = (function () { + /******/ if (typeof globalThis === "object") return globalThis; + /******/ try { + /******/ return this || new Function("return this")(); + /******/ + } catch (e) { + /******/ if (typeof window === "object") return window; + /******/ + } + /******/ + })(); + /******/ + })(); + /******/ + /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !(function () { + /******/ __webpack_require__.o = function (obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + }; + /******/ + })(); + /******/ + /******/ /* webpack/runtime/make namespace object */ /******/ !(function () { + /******/ // define __esModule on exports + /******/ __webpack_require__.r = function (exports) { + /******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) { + /******/ Object.defineProperty(exports, Symbol.toStringTag, { + value: "Module" + }); + /******/ + } + /******/ Object.defineProperty(exports, "__esModule", { value: true }); + /******/ + }; + /******/ + })(); + /******/ + /************************************************************************/ + var __webpack_exports__ = {}; + // This entry need to be wrapped in an IIFE because it need to be in strict mode. + !(function () { + "use strict"; + // ESM COMPAT FLAG + __webpack_require__.r(__webpack_exports__); + + // EXPORTS + __webpack_require__.d(__webpack_exports__, { + default: function () { + return /* binding */ src; + }, + initCapture: function () { + return /* binding */ initCapture; + } + }); + + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.filter.js + var es_array_filter = __webpack_require__(7327); + // EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.for-each.js + var web_dom_collections_for_each = __webpack_require__(4747); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.get-own-property-descriptors.js + var es_object_get_own_property_descriptors = __webpack_require__(9337); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.index-of.js + var es_array_index_of = __webpack_require__(2772); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.description.js + var es_symbol_description = __webpack_require__(1817); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.async-iterator.js + var es_symbol_async_iterator = __webpack_require__(2443); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.json.to-string-tag.js + var es_json_to_string_tag = __webpack_require__(3706); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.math.to-string-tag.js + var es_math_to_string_tag = __webpack_require__(408); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.slice.js + var es_array_slice = __webpack_require__(7042); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.iterator.js + var es_array_iterator = __webpack_require__(6992); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.map.js + var es_map = __webpack_require__(1532); + // EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.iterator.js + var web_dom_collections_iterator = __webpack_require__(3948); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js + var es_regexp_to_string = __webpack_require__(9714); + // EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.js + var es_promise = __webpack_require__(8674); // CONCATENATED MODULE: ./src/consts.ts + const Events = { + startCapture: "startCapture", + receiveImageOnchange: "receiveImageOnchange", + receiveImageOnSuccess: "receiveImageOnSuccess", + receiveError: "receiveError" + }; // CONCATENATED MODULE: ./src/index.ts + const _excluded = ["info", "path", "file"]; + function _regeneratorRuntime() { + "use strict"; + /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = + function _regeneratorRuntime() { + return exports; + }; + var exports = {}, + Op = Object.prototype, + hasOwn = Op.hasOwnProperty, + defineProperty = + Object.defineProperty || + function (obj, key, desc) { + obj[key] = desc.value; + }, + $Symbol = "function" == typeof Symbol ? Symbol : {}, + iteratorSymbol = $Symbol.iterator || "@@iterator", + asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", + toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + function define(obj, key, value) { + return ( + Object.defineProperty(obj, key, { + value: value, + enumerable: !0, + configurable: !0, + writable: !0 + }), + obj[key] + ); + } + try { + define({}, ""); + } catch (err) { + define = function define(obj, key, value) { + return (obj[key] = value); + }; + } + function wrap(innerFn, outerFn, self, tryLocsList) { + var protoGenerator = + outerFn && outerFn.prototype instanceof Generator + ? outerFn + : Generator, + generator = Object.create(protoGenerator.prototype), + context = new Context(tryLocsList || []); + return ( + defineProperty(generator, "_invoke", { + value: makeInvokeMethod(innerFn, self, context) + }), + generator + ); + } + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + exports.wrap = wrap; + var ContinueSentinel = {}; + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + var IteratorPrototype = {}; + define(IteratorPrototype, iteratorSymbol, function () { + return this; + }); + var getProto = Object.getPrototypeOf, + NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && + (IteratorPrototype = NativeIteratorPrototype); + var Gp = + (GeneratorFunctionPrototype.prototype = + Generator.prototype = + Object.create(IteratorPrototype)); + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function (method) { + define(prototype, method, function (arg) { + return this._invoke(method, arg); + }); + }); + } + function AsyncIterator(generator, PromiseImpl) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if ("throw" !== record.type) { + var result = record.arg, + value = result.value; + return value && + "object" == typeof value && + hasOwn.call(value, "__await") + ? PromiseImpl.resolve(value.__await).then( + function (value) { + invoke("next", value, resolve, reject); + }, + function (err) { + invoke("throw", err, resolve, reject); + } + ) + : PromiseImpl.resolve(value).then( + function (unwrapped) { + (result.value = unwrapped), resolve(result); + }, + function (error) { + return invoke("throw", error, resolve, reject); + } + ); + } + reject(record.arg); + } + var previousPromise; + defineProperty(this, "_invoke", { + value: function value(method, arg) { + function callInvokeWithMethodAndArg() { + return new PromiseImpl(function (resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + return (previousPromise = previousPromise + ? previousPromise.then( + callInvokeWithMethodAndArg, + callInvokeWithMethodAndArg + ) + : callInvokeWithMethodAndArg()); + } + }); + } + function makeInvokeMethod(innerFn, self, context) { + var state = "suspendedStart"; + return function (method, arg) { + if ("executing" === state) + throw new Error("Generator is already running"); + if ("completed" === state) { + if ("throw" === method) throw arg; + return doneResult(); + } + for (context.method = method, context.arg = arg; ; ) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + if ("next" === context.method) + context.sent = context._sent = context.arg; + else if ("throw" === context.method) { + if ("suspendedStart" === state) + throw ((state = "completed"), context.arg); + context.dispatchException(context.arg); + } else + "return" === context.method && + context.abrupt("return", context.arg); + state = "executing"; + var record = tryCatch(innerFn, self, context); + if ("normal" === record.type) { + if ( + ((state = context.done ? "completed" : "suspendedYield"), + record.arg === ContinueSentinel) + ) + continue; + return { value: record.arg, done: context.done }; + } + "throw" === record.type && + ((state = "completed"), + (context.method = "throw"), + (context.arg = record.arg)); + } + }; + } + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (undefined === method) { + if (((context.delegate = null), "throw" === context.method)) { + if ( + delegate.iterator.return && + ((context.method = "return"), + (context.arg = undefined), + maybeInvokeDelegate(delegate, context), + "throw" === context.method) + ) + return ContinueSentinel; + (context.method = "throw"), + (context.arg = new TypeError( + "The iterator does not provide a 'throw' method" + )); + } + return ContinueSentinel; + } + var record = tryCatch(method, delegate.iterator, context.arg); + if ("throw" === record.type) + return ( + (context.method = "throw"), + (context.arg = record.arg), + (context.delegate = null), + ContinueSentinel + ); + var info = record.arg; + return info + ? info.done + ? ((context[delegate.resultName] = info.value), + (context.next = delegate.nextLoc), + "return" !== context.method && + ((context.method = "next"), (context.arg = undefined)), + (context.delegate = null), + ContinueSentinel) + : info + : ((context.method = "throw"), + (context.arg = new TypeError("iterator result is not an object")), + (context.delegate = null), + ContinueSentinel); + } + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + 1 in locs && (entry.catchLoc = locs[1]), + 2 in locs && + ((entry.finallyLoc = locs[2]), (entry.afterLoc = locs[3])), + this.tryEntries.push(entry); + } + function resetTryEntry(entry) { + var record = entry.completion || {}; + (record.type = "normal"), + delete record.arg, + (entry.completion = record); + } + function Context(tryLocsList) { + (this.tryEntries = [{ tryLoc: "root" }]), + tryLocsList.forEach(pushTryEntry, this), + this.reset(!0); + } + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) return iteratorMethod.call(iterable); + if ("function" == typeof iterable.next) return iterable; + if (!isNaN(iterable.length)) { + var i = -1, + next = function next() { + for (; ++i < iterable.length; ) + if (hasOwn.call(iterable, i)) + return (next.value = iterable[i]), (next.done = !1), next; + return (next.value = undefined), (next.done = !0), next; + }; + return (next.next = next); + } + } + return { next: doneResult }; + } + function doneResult() { + return { value: undefined, done: !0 }; + } + return ( + (GeneratorFunction.prototype = GeneratorFunctionPrototype), + defineProperty(Gp, "constructor", { + value: GeneratorFunctionPrototype, + configurable: !0 + }), + defineProperty(GeneratorFunctionPrototype, "constructor", { + value: GeneratorFunction, + configurable: !0 + }), + (GeneratorFunction.displayName = define( + GeneratorFunctionPrototype, + toStringTagSymbol, + "GeneratorFunction" + )), + (exports.isGeneratorFunction = function (genFun) { + var ctor = "function" == typeof genFun && genFun.constructor; + return ( + !!ctor && + (ctor === GeneratorFunction || + "GeneratorFunction" === (ctor.displayName || ctor.name)) + ); + }), + (exports.mark = function (genFun) { + return ( + Object.setPrototypeOf + ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) + : ((genFun.__proto__ = GeneratorFunctionPrototype), + define(genFun, toStringTagSymbol, "GeneratorFunction")), + (genFun.prototype = Object.create(Gp)), + genFun + ); + }), + (exports.awrap = function (arg) { + return { __await: arg }; + }), + defineIteratorMethods(AsyncIterator.prototype), + define(AsyncIterator.prototype, asyncIteratorSymbol, function () { + return this; + }), + (exports.AsyncIterator = AsyncIterator), + (exports.async = function ( + innerFn, + outerFn, + self, + tryLocsList, + PromiseImpl + ) { + void 0 === PromiseImpl && (PromiseImpl = Promise); + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList), + PromiseImpl + ); + return exports.isGeneratorFunction(outerFn) + ? iter + : iter.next().then(function (result) { + return result.done ? result.value : iter.next(); + }); + }), + defineIteratorMethods(Gp), + define(Gp, toStringTagSymbol, "Generator"), + define(Gp, iteratorSymbol, function () { + return this; + }), + define(Gp, "toString", function () { + return "[object Generator]"; + }), + (exports.keys = function (val) { + var object = Object(val), + keys = []; + for (var key in object) keys.push(key); + return ( + keys.reverse(), + function next() { + for (; keys.length; ) { + var key = keys.pop(); + if (key in object) + return (next.value = key), (next.done = !1), next; + } + return (next.done = !0), next; + } + ); + }), + (exports.values = values), + (Context.prototype = { + constructor: Context, + reset: function reset(skipTempReset) { + if ( + ((this.prev = 0), + (this.next = 0), + (this.sent = this._sent = undefined), + (this.done = !1), + (this.delegate = null), + (this.method = "next"), + (this.arg = undefined), + this.tryEntries.forEach(resetTryEntry), + !skipTempReset) + ) + for (var name in this) + "t" === name.charAt(0) && + hasOwn.call(this, name) && + !isNaN(+name.slice(1)) && + (this[name] = undefined); + }, + stop: function stop() { + this.done = !0; + var rootRecord = this.tryEntries[0].completion; + if ("throw" === rootRecord.type) throw rootRecord.arg; + return this.rval; + }, + dispatchException: function dispatchException(exception) { + if (this.done) throw exception; + var context = this; + function handle(loc, caught) { + return ( + (record.type = "throw"), + (record.arg = exception), + (context.next = loc), + caught && + ((context.method = "next"), (context.arg = undefined)), + !!caught + ); + } + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i], + record = entry.completion; + if ("root" === entry.tryLoc) return handle("end"); + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"), + hasFinally = hasOwn.call(entry, "finallyLoc"); + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) + return handle(entry.catchLoc, !0); + if (this.prev < entry.finallyLoc) + return handle(entry.finallyLoc); + } else if (hasCatch) { + if (this.prev < entry.catchLoc) + return handle(entry.catchLoc, !0); + } else { + if (!hasFinally) + throw new Error("try statement without catch or finally"); + if (this.prev < entry.finallyLoc) + return handle(entry.finallyLoc); + } + } + } + }, + abrupt: function abrupt(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if ( + entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc + ) { + var finallyEntry = entry; + break; + } + } + finallyEntry && + ("break" === type || "continue" === type) && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc && + (finallyEntry = null); + var record = finallyEntry ? finallyEntry.completion : {}; + return ( + (record.type = type), + (record.arg = arg), + finallyEntry + ? ((this.method = "next"), + (this.next = finallyEntry.finallyLoc), + ContinueSentinel) + : this.complete(record) + ); + }, + complete: function complete(record, afterLoc) { + if ("throw" === record.type) throw record.arg; + return ( + "break" === record.type || "continue" === record.type + ? (this.next = record.arg) + : "return" === record.type + ? ((this.rval = this.arg = record.arg), + (this.method = "return"), + (this.next = "end")) + : "normal" === record.type && + afterLoc && + (this.next = afterLoc), + ContinueSentinel + ); + }, + finish: function finish(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) + return ( + this.complete(entry.completion, entry.afterLoc), + resetTryEntry(entry), + ContinueSentinel + ); + } + }, + catch: function _catch(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if ("throw" === record.type) { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + throw new Error("illegal catch attempt"); + }, + delegateYield: function delegateYield( + iterable, + resultName, + nextLoc + ) { + return ( + (this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }), + "next" === this.method && (this.arg = undefined), + ContinueSentinel + ); + } + }), + exports + ); + } + function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + var target = _objectWithoutPropertiesLoose(source, excluded); + var key, i; + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) + continue; + target[key] = source[key]; + } + } + return target; + } + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + return target; + } + + function asyncGeneratorStep( + gen, + resolve, + reject, + _next, + _throw, + key, + arg + ) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } + if (info.done) { + resolve(value); + } else { + Promise.resolve(value).then(_next, _throw); + } + } + function _asyncToGenerator(fn) { + return function () { + var self = this, + args = arguments; + return new Promise(function (resolve, reject) { + var gen = fn.apply(self, args); + function _next(value) { + asyncGeneratorStep( + gen, + resolve, + reject, + _next, + _throw, + "next", + value + ); + } + function _throw(err) { + asyncGeneratorStep( + gen, + resolve, + reject, + _next, + _throw, + "throw", + err + ); + } + _next(undefined); + }); + }; + } + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && + (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), + keys.push.apply(keys, symbols); + } + return keys; + } + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 + ? ownKeys(Object(source), !0).forEach(function (key) { + _defineProperty(target, key, source[key]); + }) + : Object.getOwnPropertyDescriptors + ? Object.defineProperties( + target, + Object.getOwnPropertyDescriptors(source) + ) + : ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty( + target, + key, + Object.getOwnPropertyDescriptor(source, key) + ); + }); + } + return target; + } + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; + } + + let captureWorker = null; + function workerPost(info) { + captureWorker && captureWorker.postMessage(_objectSpread({}, info)); + } + function initWorker(_x, _x2) { + return _initWorker.apply(this, arguments); + } + function _initWorker() { + _initWorker = _asyncToGenerator( + /*#__PURE__*/ _regeneratorRuntime().mark(function _callee( + url, + wasmPath + ) { + var promise; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) + switch ((_context.prev = _context.next)) { + case 0: + if (!captureWorker) { + _context.next = 2; + break; + } + return _context.abrupt("return", captureWorker); + case 2: + // captureWorker = new Worker(new URL('./capture.worker.js', import.meta.url)); + captureWorker = new Worker(url); + workerPost({ + type: "initPath", + info: wasmPath.toString() + }); + promise = new Promise(resolve => { + captureWorker && + captureWorker.addEventListener("message", e => { + var _e$data; + if ( + (e === null || e === void 0 + ? void 0 + : (_e$data = e.data) === null || + _e$data === void 0 + ? void 0 + : _e$data.type) === "init" + ) { + // wasm初始化完毕 + resolve(captureWorker); + } + }); + }); + return _context.abrupt("return", promise); + case 6: + case "end": + return _context.stop(); + } + }, _callee); + }) + ); + return _initWorker.apply(this, arguments); + } + function createRequest() { + let currentId = 0; + const map = new Map(); + return { + // 获取视频唯一id + setFrameCallback(item) { + const id = ++currentId; + map.set( + currentId, + _objectSpread( + _objectSpread({}, item), + {}, + { + url: [] + } + ) + ); + return id; + }, + // 设置 + getCbk(idx) { + return map.get(idx); + } + }; + } + const pool = createRequest(); + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + function rotateImage(imageData) { + let direction = + arguments.length > 1 && arguments[1] !== undefined + ? arguments[1] + : "l"; + const H = imageData.height; + const W = imageData.width; + const imgDt1 = new ImageData(H, W); + const imgDt2 = new ImageData(H, W); + const dt0 = imageData.data; + const dt1 = imgDt1.data; + const dt2 = imgDt2.data; + + // 2. Transposex + let r = 0; + let r1 = 0; // index of red pixel in old and new ImageData, respectively + for (let y = 0, lenH = H; y < lenH; y++) { + for (let x = 0, lenW = W; x < lenW; x++) { + r = (x + lenW * y) * 4; + r1 = (y + lenH * x) * 4; + dt1[r1 + 0] = dt0[r + 0]; + dt1[r1 + 1] = dt0[r + 1]; + dt1[r1 + 2] = dt0[r + 2]; + dt1[r1 + 3] = dt0[r + 3]; + } + } + + // 3. Reverse width / height + for (let y = 0, lenH = W; y < lenH; y++) { + for (let x = 0, lenW = H; x < lenW; x++) { + r = (x + lenW * y) * 4; + r1 = + direction === "l" + ? (x + lenW * (lenH - 1 - y)) * 4 + : (lenW - 1 - x + lenW * y) * 4; + dt2[r1 + 0] = dt1[r + 0]; + dt2[r1 + 1] = dt1[r + 1]; + dt2[r1 + 2] = dt1[r + 2]; + dt2[r1 + 3] = dt1[r + 3]; + } + } + return imgDt2; + } + function getUrl(_x3, _x4, _x5, _x6) { + return _getUrl.apply(this, arguments); + } + function _getUrl() { + _getUrl = _asyncToGenerator( + /*#__PURE__*/ _regeneratorRuntime().mark(function _callee2( + width, + height, + imageDataBuffer, + angle + ) { + var canvasWith, canvasHeight, imageData, imgData; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) + switch ((_context2.prev = _context2.next)) { + case 0: + canvasWith = width; + canvasHeight = height; + imageData = new ImageData(imageDataBuffer, width, height); + imgData = null; + _context2.t0 = angle / 90; + _context2.next = + _context2.t0 === 1 + ? 7 + : _context2.t0 === 2 + ? 11 + : _context2.t0 === 3 + ? 14 + : 18; + break; + case 7: + imgData = rotateImage(imageData, "r"); + canvasWith = height; + canvasHeight = width; + return _context2.abrupt("break", 20); + case 11: + imgData = rotateImage(imageData, "r"); + imgData = rotateImage(imageData, "r"); + return _context2.abrupt("break", 20); + case 14: + imgData = rotateImage(imageData, "l"); + canvasWith = height; + canvasHeight = width; + return _context2.abrupt("break", 20); + case 18: + imgData = imageData; + return _context2.abrupt("break", 20); + case 20: + canvas.width = canvasWith; + canvas.height = canvasHeight; + ctx.putImageData( + imgData, + 0, + 0, + 0, + 0, + canvasWith, + canvasHeight + ); + // const blob = new Blob([imageDataBuffer.buffer], {type: 'image/png'} /* (1) */); + return _context2.abrupt("return", { + url: canvas.toDataURL("image/jpeg") + // blob: blob, + }); + case 24: + case "end": + return _context2.stop(); + } + }, _callee2); + }) + ); + return _getUrl.apply(this, arguments); + } + function startCapture(id, info, path, file) { + workerPost({ + type: Events.startCapture, + id, + info, + path, + file + }); + } + function capture(data) { + const info = data.info, + path = data.path, + file = data.file, + func = _objectWithoutProperties(data, _excluded); + const id = pool.setFrameCallback(func); + startCapture(id, info, path, file); + } + function initCapture(_x7) { + return _initCapture.apply(this, arguments); + } + function _initCapture() { + _initCapture = _asyncToGenerator( + /*#__PURE__*/ _regeneratorRuntime().mark(function _callee4(_ref) { + var workerPath, wasmPath, worker; + return _regeneratorRuntime().wrap(function _callee4$(_context4) { + while (1) + switch ((_context4.prev = _context4.next)) { + case 0: + (workerPath = _ref.workerPath), (wasmPath = _ref.wasmPath); + _context4.next = 3; + return initWorker(workerPath, wasmPath); + case 3: + worker = _context4.sent; + worker.addEventListener( + "message", + /*#__PURE__*/ (function () { + var _ref2 = _asyncToGenerator( + /*#__PURE__*/ _regeneratorRuntime().mark( + function _callee3(e) { + var _e$data2; + var _ref3, + imageDataBuffer, + width, + height, + duration, + id, + _ref3$meta, + meta, + _meta$angle, + angle, + img, + cbk, + onChange, + info, + _pool$getCbk, + url, + _ref4, + onSuccess, + _pool$getCbk2, + _ref5, + errmsg, + onError; + return _regeneratorRuntime().wrap( + function _callee3$(_context3) { + while (1) + switch ((_context3.prev = _context3.next)) { + case 0: + _context3.t0 = + e === null || e === void 0 + ? void 0 + : (_e$data2 = e.data) === null || + _e$data2 === void 0 + ? void 0 + : _e$data2.type; + _context3.next = + _context3.t0 === + Events.receiveImageOnchange + ? 3 + : _context3.t0 === + Events.receiveImageOnSuccess + ? 15 + : _context3.t0 === + Events.receiveError + ? 21 + : 26; + break; + case 3: + (_ref3 = e.data || {}), + (imageDataBuffer = + _ref3.imageDataBuffer), + (width = _ref3.width), + (height = _ref3.height), + (duration = _ref3.duration), + (id = _ref3.id), + (_ref3$meta = _ref3.meta), + (meta = + _ref3$meta === void 0 + ? {} + : _ref3$meta); + (_meta$angle = meta.angle), + (angle = + _meta$angle === void 0 + ? 0 + : _meta$angle); + _context3.next = 7; + return getUrl( + width, + height, + imageDataBuffer, + angle + ); + case 7: + img = _context3.sent; + cbk = pool.getCbk(id); + onChange = cbk.onChange; + info = { + width, + height, + duration: duration / 1000000 + }; + (_pool$getCbk = pool.getCbk(id)), + (url = _pool$getCbk.url); + onChange && + onChange( + { + url + }, + img, + info + ); + url.push(img.url); + return _context3.abrupt("break", 27); + case 15: + (_ref4 = e.data || {}), + (id = _ref4.id), + (meta = _ref4.meta); + cbk = pool.getCbk(id); + onSuccess = cbk.onSuccess; + (_pool$getCbk2 = pool.getCbk(id)), + (url = _pool$getCbk2.url); + onSuccess && + onSuccess({ + url, + meta + }); + return _context3.abrupt("break", 27); + case 21: + (_ref5 = e.data || {}), + (errmsg = _ref5.errmsg), + (id = _ref5.id); + cbk = pool.getCbk(id); + onError = cbk.onError; + onError && onError(errmsg); + return _context3.abrupt("break", 27); + case 26: + return _context3.abrupt("break", 27); + case 27: + case "end": + return _context3.stop(); + } + }, + _callee3 + ); + } + ) + ); + return function (_x8) { + return _ref2.apply(this, arguments); + }; + })() + ); + return _context4.abrupt("return", { + capture + }); + case 6: + case "end": + return _context4.stop(); + } + }, _callee4); + }) + ); + return _initCapture.apply(this, arguments); + } + /* harmony default export */ var src = initCapture; + })(); + /******/ return __webpack_exports__; + /******/ + })(); +}); diff --git a/Yi.Pure.Vue3/src/App.vue b/Yi.Pure.Vue3/src/App.vue new file mode 100644 index 00000000..1a8766c3 --- /dev/null +++ b/Yi.Pure.Vue3/src/App.vue @@ -0,0 +1,55 @@ + + + diff --git a/Yi.Pure.Vue3/src/api/file.ts b/Yi.Pure.Vue3/src/api/file.ts new file mode 100644 index 00000000..d0c43d6d --- /dev/null +++ b/Yi.Pure.Vue3/src/api/file.ts @@ -0,0 +1,12 @@ +import { http } from "@/utils/http"; +import type { ResultFile } from "@/api/result"; + +/** 上传文件*/ +export const uploadFile = (data?: object) => { + return http.request("post", "/file", { + headers: { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + }, + data + }); +}; diff --git a/Yi.Pure.Vue3/src/api/list.ts b/Yi.Pure.Vue3/src/api/list.ts new file mode 100644 index 00000000..c0017843 --- /dev/null +++ b/Yi.Pure.Vue3/src/api/list.ts @@ -0,0 +1,14 @@ +import { http } from "@/utils/http"; + +type Result = { + success: boolean; + data?: { + /** 列表数据 */ + list: Array; + }; +}; + +/** 卡片列表 */ +export const getCardList = (data?: object) => { + return http.request("post", "/get-card-list", { data }); +}; diff --git a/Yi.Pure.Vue3/src/api/mock.ts b/Yi.Pure.Vue3/src/api/mock.ts new file mode 100644 index 00000000..549e9d09 --- /dev/null +++ b/Yi.Pure.Vue3/src/api/mock.ts @@ -0,0 +1,25 @@ +import { http } from "@/utils/http"; + +type Result = { + success: boolean; + data: Array; +}; + +/** 地图数据 */ +export const mapJson = (params?: object) => { + return http.request("get", "/get-map-info", { params }); +}; + +/** 文件上传 */ +export const formUpload = data => { + return http.request( + "post", + "https://run.mocky.io/v3/3aa761d7-b0b3-4a03-96b3-6168d4f7467b", + { data }, + { + headers: { + "Content-Type": "multipart/form-data" + } + } + ); +}; diff --git a/Yi.Pure.Vue3/src/api/monitor/online.ts b/Yi.Pure.Vue3/src/api/monitor/online.ts new file mode 100644 index 00000000..2b41e6ff --- /dev/null +++ b/Yi.Pure.Vue3/src/api/monitor/online.ts @@ -0,0 +1,12 @@ +import { http } from "@/utils/http"; +import type { Result, ResultPage } from "@/api/result"; + +/** 查询在线用户列表 */ +export const getOnlineList = (query?: object) => { + return http.request("get", "/online", { params: query }); +}; + +/** 强退用户 */ +export const forceLogout = (tokenId?: object) => { + return http.request("delete", `/online/${tokenId}`, {}); +}; diff --git a/Yi.Pure.Vue3/src/api/result.ts b/Yi.Pure.Vue3/src/api/result.ts new file mode 100644 index 00000000..e359b512 --- /dev/null +++ b/Yi.Pure.Vue3/src/api/result.ts @@ -0,0 +1,26 @@ +export type ResultList = { + status: number; + data?: Array; +}; + +export type Result = { + status: number; + data?: any; +}; + +export type ResultPage = { + status: number; + data?: { + /** 列表数据 */ + items: Array; + /** 总条目数 */ + totalCount?: number; + }; +}; + +export type ResultFile = { + status: number; + data?: Array<{ + id: string; + }>; +}; diff --git a/Yi.Pure.Vue3/src/api/routes.ts b/Yi.Pure.Vue3/src/api/routes.ts new file mode 100644 index 00000000..501ea3c7 --- /dev/null +++ b/Yi.Pure.Vue3/src/api/routes.ts @@ -0,0 +1,10 @@ +import { http } from "@/utils/http"; + +type Result = { + success: boolean; + data: Array; +}; + +export const getAsyncRoutes = () => { + return http.request("get", "/get-async-routes"); +}; diff --git a/Yi.Pure.Vue3/src/api/system.ts b/Yi.Pure.Vue3/src/api/system.ts new file mode 100644 index 00000000..2dd467ba --- /dev/null +++ b/Yi.Pure.Vue3/src/api/system.ts @@ -0,0 +1,52 @@ +import { http } from "@/utils/http"; +import type { Result, ResultList, ResultPage } from "./result.ts"; + +/** 新增角色 */ +export const addRole = (data: any) => { + return http.request("post", `/role`, { data }); +}; + +/** 获取系统管理-角色管理列表 */ +export const getRoleList = (data?: object) => { + return http.request("post", "/role", { data }); +}; + +/** 获取系统管理-菜单管理列表 */ +export const getMenuList = (data?: object) => { + return http.request("post", "/menu", { data }); +}; + +/** 获取系统监控-在线用户列表 */ +export const getOnlineLogsList = (data?: object) => { + return http.request("post", "/online-logs", { data }); +}; + +/** 获取系统监控-登录日志列表 */ +export const getLoginLogsList = (data?: object) => { + return http.request("post", "/login-logs", { data }); +}; + +/** 获取系统监控-操作日志列表 */ +export const getOperationLogsList = (data?: object) => { + return http.request("post", "/operation-logs", { data }); +}; + +/** 获取系统监控-系统日志列表 */ +export const getSystemLogsList = (data?: object) => { + return http.request("post", "/system-logs", { data }); +}; + +/** 获取系统监控-系统日志-根据 id 查日志详情 */ +export const getSystemLogsDetail = (data?: object) => { + return http.request("post", "/system-logs-detail", { data }); +}; + +/** 获取角色管理-权限-菜单权限 */ +export const getRoleMenu = (data?: object) => { + return http.request("post", "/role-menu", { data }); +}; + +/** 获取角色管理-权限-菜单权限-根据角色 id 查对应菜单 */ +export const getRoleMenuIds = (data?: object) => { + return http.request("post", "/role-menu-ids", { data }); +}; diff --git a/Yi.Pure.Vue3/src/api/system/dept.ts b/Yi.Pure.Vue3/src/api/system/dept.ts new file mode 100644 index 00000000..e8c14a4a --- /dev/null +++ b/Yi.Pure.Vue3/src/api/system/dept.ts @@ -0,0 +1,27 @@ +import { http } from "@/utils/http"; +import type { Result, ResultPage } from "@/api/result"; + +/** 获取系统管理-部门管理列表 */ +export const getDeptList = (data?: object) => { + return http.request("get", "/dept", { data }); +}; + +/** 查询部门详细 */ +export const getDept = id => { + return http.request("get", `/dept/${id}`, {}); +}; + +/** 新增部门 */ +export const addDept = data => { + return http.request("post", `/dept`, { data }); +}; + +/** 修改部门 */ +export const updateDept = (id, data) => { + return http.request("put", `/dept/${id}`, { data }); +}; + +/** 删除部门 */ +export const delDept = id => { + return http.request("delete", `/dept`, { params: { id } }); +}; diff --git a/Yi.Pure.Vue3/src/api/system/menu.ts b/Yi.Pure.Vue3/src/api/system/menu.ts new file mode 100644 index 00000000..a808153b --- /dev/null +++ b/Yi.Pure.Vue3/src/api/system/menu.ts @@ -0,0 +1,32 @@ +import { http } from "@/utils/http"; +import type { Result, ResultPage } from "@/api/result"; + +/** 查询菜单下拉树结构 */ +export const getMenuOption = () => { + return http.request("get", `/menu`, {}); +}; + +/** 查询菜单列表 */ +export const getListMenu = query => { + return http.request("get", `/menu`, { params: query }); +}; + +/** 查询菜单详细 */ +export const getMenu = id => { + return http.request("get", `/menu/${id}`, {}); +}; + +/** 新增菜单 */ +export const addMenu = data => { + return http.request("post", `/menu`, { data }); +}; + +/** 更新菜单 */ +export const updateMenu = (id, data) => { + return http.request("put", `/menu/${id}`, { data }); +}; + +/** 删除菜单 */ +export const delMenu = ids => { + return http.request("delete", `/menu`, { params: { id: ids } }); +}; diff --git a/Yi.Pure.Vue3/src/api/system/post.ts b/Yi.Pure.Vue3/src/api/system/post.ts new file mode 100644 index 00000000..57cb3568 --- /dev/null +++ b/Yi.Pure.Vue3/src/api/system/post.ts @@ -0,0 +1,37 @@ +import { http } from "@/utils/http"; +import type { Result, ResultPage } from "@/api/result"; + +/** 查询岗位列表 */ +export const getPostList = (data?: object) => { + return http.request("get", "/post", { data }); +}; + +/** 查询岗位详细 */ +export const getPost = id => { + return http.request("get", `/post/${id}`, {}); +}; + +/** 新增岗位 */ +export const addPost = data => { + return http.request("post", `/post`, { data }); +}; + +/** 修改岗位 */ +export const updatePost = (id, data) => { + return http.request("put", `/post/${id}`, { data }); +}; + +/** 修改岗位状态 */ +export const updatePostStatus = (id, state) => { + return http.request("put", `/post/${id}/${state}`, {}); +}; + +/** 删除岗位 */ +export const delPost = ids => { + return http.request("delete", `/post`, { params: { id: ids } }); +}; + +/** 获取岗位选择框列表 */ +export const getPostOptionSelect = () => { + return http.request("get", `/post`, {}); +}; diff --git a/Yi.Pure.Vue3/src/api/system/role.ts b/Yi.Pure.Vue3/src/api/system/role.ts new file mode 100644 index 00000000..a112cf85 --- /dev/null +++ b/Yi.Pure.Vue3/src/api/system/role.ts @@ -0,0 +1,47 @@ +import { http } from "@/utils/http"; +import type { Result, ResultList, ResultPage } from "@/api/result"; + +/** 获取角色选择框列表 */ +export const getRoleOption = () => { + return http.request("get", `/role`, {}); +}; + +/** 查询角色列表 */ +export const getRoleList = query => { + return http.request("get", `/role`, { params: query }); +}; + +/** 查询角色详细 */ +export const getRole = roleId => { + return http.request("get", `/role/${roleId}`, {}); +}; + +/** 新增角色 */ +export const addRole = data => { + return http.request("post", `/role`, { data }); +}; + +/** 修改角色 */ +export const updateRole = (roleId, data) => { + return http.request("put", `/role/${roleId}`, { data }); +}; + +/** 修改角色状态 */ +export const changeRoleStatus = (roleId, state) => { + return http.request("put", `/role/${roleId}/${state}`, {}); +}; + +/** 删除角色 */ +export const delRole = roleIds => { + return http.request("delete", `/role`, { params: { id: roleIds } }); +}; + +/** 修改角色数据权限 */ +export const updataDataScope = data => { + return http.request("put", `/role/data-scpoce`, { data }); +}; + +/** 根据角色ID查询菜单下拉树结构 */ +export const getRoleMenuSelect = roleId => { + return http.request("get", `/menu/role-id/${roleId}`, {}); +}; diff --git a/Yi.Pure.Vue3/src/api/system/user.ts b/Yi.Pure.Vue3/src/api/system/user.ts new file mode 100644 index 00000000..6d7ae78d --- /dev/null +++ b/Yi.Pure.Vue3/src/api/system/user.ts @@ -0,0 +1,91 @@ +import { http } from "@/utils/http"; +import type { Result, ResultPage } from "@/api/result"; + +/** 获取系统管理-用户管理列表 */ +export const getUserList = (data?: object) => { + return http.request("get", "/user", { params: data }); +}; + +/** 获取一个用户详细消息 */ +export const getUser = (userId: string) => { + return http.request("get", `/user/${userId}`, {}); +}; + +/** 删除用户 */ +export const delUser = (userIds: string[]) => { + return http.request("delete", `/user`, { + params: { id: userIds } + }); +}; + +/** 用户密码重置 */ +export const resetUserPwd = (id: string, password: string) => { + return http.request("put", `/account/rest-password/${id}`, { + data: { password } + }); +}; + +/** 改变用户状态 */ +export const changeUserStatus = (userId: string, state: boolean) => { + return http.request("put", `/user/${userId}/${state}`, {}); +}; + +/** 修改用户 */ +export const updateUser = (id: string, data: any) => { + return http.request("put", `/user/${id}`, { data }); +}; + +/** 新增用户 */ +export const addUser = (data: any) => { + return http.request("post", `/user`, { data }); +}; + +/** 查询用户个人信息 */ +export const getUserProfile = () => { + return http.request("get", `/account`, {}); +}; + +/** 修改用户个人信息 */ +export const updateUserProfile = data => { + return http.request("put", `/user/profile`, { data }); +}; + +/** 只修改用户头像 */ +export const updateUserIcon = data => { + return http.request("put", `/account/icon`, { data: { icon: data } }); +}; + +/** 用户密码重置 */ +export const updateUserPwd = (oldPassword, newPassword) => { + const data = { + oldPassword, + newPassword + }; + return http.request("put", `/account/password`, { data }); +}; + +export type UserInfoResult = { + status: number; + data: UserInfo; +}; + +export type UserInfo = { + user: { + /** 头像 */ + icon: string; + /** 用户名 */ + userName: string; + /** 昵称 */ + nick: string; + /** 邮箱 */ + email: string; + /** 联系电话 */ + phone: string; + /** 简介 */ + introduction: string; + }; + /** 当前登录用户的角色 */ + roleCodes: Array; + /** 按钮级别权限 */ + permissions: Array; +}; diff --git a/Yi.Pure.Vue3/src/api/user.ts b/Yi.Pure.Vue3/src/api/user.ts new file mode 100644 index 00000000..c3afcf62 --- /dev/null +++ b/Yi.Pure.Vue3/src/api/user.ts @@ -0,0 +1,75 @@ +import { http } from "@/utils/http"; + +export type imageCaptcha = { + status: number; + data: { + //uuid + uuid: string; // 使用字符串表示 Guid + //验证码图片字节数值 + img: Uint8Array | null; + }; +}; + +export type LoginResult = { + status: number; + data: { + token: string; + refreshToken: string; + }; +}; + +export type UserResult = { + status: number; + data: { + user: { + /** 头像 */ + icon: string; + /** 用户名 */ + userName: string; + /** 昵称 */ + nick: string; + }; + + /** 当前登录用户的角色 */ + roleCodes: Array; + /** 按钮级别权限 */ + permissions: Array; + /** `token` */ + accessToken: string; + /** 用于调用刷新`accessToken`的接口时所需的`token` */ + refreshToken: string; + /** `accessToken`的过期时间(格式'xxxx/xx/xx xx:xx:xx') */ + expires: Date; + }; +}; + +export type RefreshTokenResult = { + success: boolean; + data: { + /** `token` */ + accessToken: string; + /** 用于调用刷新`accessToken`的接口时所需的`token` */ + refreshToken: string; + /** `accessToken`的过期时间(格式'xxxx/xx/xx xx:xx:xx') */ + expires: Date; + }; +}; + +/** 登录 */ +export const getLogin = (data?: object) => { + return http.request("post", "/account/login", { data }); +}; + +export const getUserInfo = () => { + return http.request("get", "/account"); +}; + +/** 获取验证码 */ +export const getCodeImg = () => { + return http.request("get", "/account/captcha-image"); +}; + +/** 刷新`token` */ +export const refreshTokenApi = (data?: object) => { + return http.request("post", "/refresh-token", { data }); +}; diff --git a/Yi.Pure.Vue3/src/assets/car.png b/Yi.Pure.Vue3/src/assets/car.png new file mode 100644 index 00000000..233890c0 Binary files /dev/null and b/Yi.Pure.Vue3/src/assets/car.png differ diff --git a/Yi.Pure.Vue3/src/assets/iconfont/iconfont.css b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.css new file mode 100644 index 00000000..9a153df3 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.css @@ -0,0 +1,27 @@ +@font-face { + font-family: "iconfont"; /* Project id 2208059 */ + src: + url("iconfont.woff2?t=1671895108120") format("woff2"), + url("iconfont.woff?t=1671895108120") format("woff"), + url("iconfont.ttf?t=1671895108120") format("truetype"); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.pure-iconfont-tabs:before { + content: "\e63e"; +} + +.pure-iconfont-logo:before { + content: "\e620"; +} + +.pure-iconfont-new:before { + content: "\e615"; +} diff --git a/Yi.Pure.Vue3/src/assets/iconfont/iconfont.js b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.js new file mode 100644 index 00000000..64d8bd84 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.js @@ -0,0 +1,69 @@ +(window._iconfont_svg_string_2208059 = + ''), + (function (e) { + var t = (t = document.getElementsByTagName("script"))[t.length - 1], + c = t.getAttribute("data-injectcss"), + t = t.getAttribute("data-disable-injectsvg"); + if (!t) { + var n, + l, + i, + o, + a, + h = function (t, c) { + c.parentNode.insertBefore(t, c); + }; + if (c && !e.__iconfont__svg__cssinject__) { + e.__iconfont__svg__cssinject__ = !0; + try { + document.write( + "" + ); + } catch (t) { + console && console.log(t); + } + } + (n = function () { + var t, + c = document.createElement("div"); + (c.innerHTML = e._iconfont_svg_string_2208059), + (c = c.getElementsByTagName("svg")[0]) && + (c.setAttribute("aria-hidden", "true"), + (c.style.position = "absolute"), + (c.style.width = 0), + (c.style.height = 0), + (c.style.overflow = "hidden"), + (c = c), + (t = document.body).firstChild + ? h(c, t.firstChild) + : t.appendChild(c)); + }), + document.addEventListener + ? ~["complete", "loaded", "interactive"].indexOf(document.readyState) + ? setTimeout(n, 0) + : ((l = function () { + document.removeEventListener("DOMContentLoaded", l, !1), n(); + }), + document.addEventListener("DOMContentLoaded", l, !1)) + : document.attachEvent && + ((i = n), + (o = e.document), + (a = !1), + v(), + (o.onreadystatechange = function () { + "complete" == o.readyState && + ((o.onreadystatechange = null), d()); + })); + } + function d() { + a || ((a = !0), i()); + } + function v() { + try { + o.documentElement.doScroll("left"); + } catch (t) { + return void setTimeout(v, 50); + } + d(); + } + })(window); diff --git a/Yi.Pure.Vue3/src/assets/iconfont/iconfont.json b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.json new file mode 100644 index 00000000..cec48060 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.json @@ -0,0 +1,30 @@ +{ + "id": "2208059", + "name": "pure-admin", + "font_family": "iconfont", + "css_prefix_text": "pure-iconfont-", + "description": "pure-admin-iconfont", + "glyphs": [ + { + "icon_id": "20594647", + "name": "Tabs", + "font_class": "tabs", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "22129506", + "name": "PureLogo", + "font_class": "logo", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "7795615", + "name": "New", + "font_class": "new", + "unicode": "e615", + "unicode_decimal": 58901 + } + ] +} diff --git a/Yi.Pure.Vue3/src/assets/iconfont/iconfont.ttf b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.ttf new file mode 100644 index 00000000..82efcf8f Binary files /dev/null and b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.ttf differ diff --git a/Yi.Pure.Vue3/src/assets/iconfont/iconfont.woff b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.woff new file mode 100644 index 00000000..0fdaa0a4 Binary files /dev/null and b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.woff differ diff --git a/Yi.Pure.Vue3/src/assets/iconfont/iconfont.woff2 b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.woff2 new file mode 100644 index 00000000..e957d747 Binary files /dev/null and b/Yi.Pure.Vue3/src/assets/iconfont/iconfont.woff2 differ diff --git a/Yi.Pure.Vue3/src/assets/login/avatar.svg b/Yi.Pure.Vue3/src/assets/login/avatar.svg new file mode 100644 index 00000000..a63d2b1a --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/login/avatar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/login/bg.png b/Yi.Pure.Vue3/src/assets/login/bg.png new file mode 100644 index 00000000..8cdd3001 Binary files /dev/null and b/Yi.Pure.Vue3/src/assets/login/bg.png differ diff --git a/Yi.Pure.Vue3/src/assets/login/illustration.svg b/Yi.Pure.Vue3/src/assets/login/illustration.svg new file mode 100644 index 00000000..b58ffd08 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/login/illustration.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/status/403.svg b/Yi.Pure.Vue3/src/assets/status/403.svg new file mode 100644 index 00000000..ba3ce293 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/status/403.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/status/404.svg b/Yi.Pure.Vue3/src/assets/status/404.svg new file mode 100644 index 00000000..aacb7402 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/status/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/status/500.svg b/Yi.Pure.Vue3/src/assets/status/500.svg new file mode 100644 index 00000000..ea23a378 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/status/500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/back.svg b/Yi.Pure.Vue3/src/assets/svg/back.svg new file mode 100644 index 00000000..e1cda580 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/back_top.svg b/Yi.Pure.Vue3/src/assets/svg/back_top.svg new file mode 100644 index 00000000..f8e6aa02 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/back_top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/calendar.svg b/Yi.Pure.Vue3/src/assets/svg/calendar.svg new file mode 100644 index 00000000..d61313c5 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/dark.svg b/Yi.Pure.Vue3/src/assets/svg/dark.svg new file mode 100644 index 00000000..b5c4d2d5 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/day.svg b/Yi.Pure.Vue3/src/assets/svg/day.svg new file mode 100644 index 00000000..b7600345 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/day.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/enter_outlined.svg b/Yi.Pure.Vue3/src/assets/svg/enter_outlined.svg new file mode 100644 index 00000000..45e0bafe --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/enter_outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/exit_screen.svg b/Yi.Pure.Vue3/src/assets/svg/exit_screen.svg new file mode 100644 index 00000000..007c0b63 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/exit_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/full_screen.svg b/Yi.Pure.Vue3/src/assets/svg/full_screen.svg new file mode 100644 index 00000000..fff93a5d --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/full_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/globalization.svg b/Yi.Pure.Vue3/src/assets/svg/globalization.svg new file mode 100644 index 00000000..5f6bce6b --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/globalization.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/hot.svg b/Yi.Pure.Vue3/src/assets/svg/hot.svg new file mode 100644 index 00000000..d285f6fc --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/hot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/keyboard_esc.svg b/Yi.Pure.Vue3/src/assets/svg/keyboard_esc.svg new file mode 100644 index 00000000..bd671654 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/keyboard_esc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/laptop.svg b/Yi.Pure.Vue3/src/assets/svg/laptop.svg new file mode 100644 index 00000000..7d2a736d --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/laptop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/service.svg b/Yi.Pure.Vue3/src/assets/svg/service.svg new file mode 100644 index 00000000..11d8803c --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/service.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/shop.svg b/Yi.Pure.Vue3/src/assets/svg/shop.svg new file mode 100644 index 00000000..941b3362 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/shop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/system.svg b/Yi.Pure.Vue3/src/assets/svg/system.svg new file mode 100644 index 00000000..9ad39a56 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/system.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/svg/user_avatar.svg b/Yi.Pure.Vue3/src/assets/svg/user_avatar.svg new file mode 100644 index 00000000..3606d013 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/svg/user_avatar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/table-bar/collapse.svg b/Yi.Pure.Vue3/src/assets/table-bar/collapse.svg new file mode 100644 index 00000000..0823ae63 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/table-bar/collapse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/table-bar/drag.svg b/Yi.Pure.Vue3/src/assets/table-bar/drag.svg new file mode 100644 index 00000000..8ac32a7b --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/table-bar/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/table-bar/expand.svg b/Yi.Pure.Vue3/src/assets/table-bar/expand.svg new file mode 100644 index 00000000..bb41c350 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/table-bar/expand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/table-bar/refresh.svg b/Yi.Pure.Vue3/src/assets/table-bar/refresh.svg new file mode 100644 index 00000000..140288cd --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/table-bar/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/table-bar/settings.svg b/Yi.Pure.Vue3/src/assets/table-bar/settings.svg new file mode 100644 index 00000000..4ecd0779 --- /dev/null +++ b/Yi.Pure.Vue3/src/assets/table-bar/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/assets/user.jpg b/Yi.Pure.Vue3/src/assets/user.jpg new file mode 100644 index 00000000..a2973ace Binary files /dev/null and b/Yi.Pure.Vue3/src/assets/user.jpg differ diff --git a/Yi.Pure.Vue3/src/components/ReAnimateSelector/index.ts b/Yi.Pure.Vue3/src/components/ReAnimateSelector/index.ts new file mode 100644 index 00000000..87c9008b --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReAnimateSelector/index.ts @@ -0,0 +1,7 @@ +import { withInstall } from "@pureadmin/utils"; +import reAnimateSelector from "./src/index.vue"; + +/** [animate.css](https://animate.style/) 选择器组件 */ +export const ReAnimateSelector = withInstall(reAnimateSelector); + +export default ReAnimateSelector; diff --git a/Yi.Pure.Vue3/src/components/ReAnimateSelector/src/animate.ts b/Yi.Pure.Vue3/src/components/ReAnimateSelector/src/animate.ts new file mode 100644 index 00000000..2b0593c7 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReAnimateSelector/src/animate.ts @@ -0,0 +1,114 @@ +export const animates = [ + /* Attention seekers */ + "bounce", + "flash", + "pulse", + "rubberBand", + "shakeX", + "headShake", + "swing", + "tada", + "wobble", + "jello", + "heartBeat", + /* Back entrances */ + "backInDown", + "backInLeft", + "backInRight", + "backInUp", + /* Back exits */ + "backOutDown", + "backOutLeft", + "backOutRight", + "backOutUp", + /* Bouncing entrances */ + "bounceIn", + "bounceInDown", + "bounceInLeft", + "bounceInRight", + "bounceInUp", + /* Bouncing exits */ + "bounceOut", + "bounceOutDown", + "bounceOutLeft", + "bounceOutRight", + "bounceOutUp", + /* Fading entrances */ + "fadeIn", + "fadeInDown", + "fadeInDownBig", + "fadeInLeft", + "fadeInLeftBig", + "fadeInRight", + "fadeInRightBig", + "fadeInUp", + "fadeInUpBig", + "fadeInTopLeft", + "fadeInTopRight", + "fadeInBottomLeft", + "fadeInBottomRight", + /* Fading exits */ + "fadeOut", + "fadeOutDown", + "fadeOutDownBig", + "fadeOutLeft", + "fadeOutLeftBig", + "fadeOutRight", + "fadeOutRightBig", + "fadeOutUp", + "fadeOutUpBig", + "fadeOutTopLeft", + "fadeOutTopRight", + "fadeOutBottomRight", + "fadeOutBottomLeft", + /* Flippers */ + "flip", + "flipInX", + "flipInY", + "flipOutX", + "flipOutY", + /* Lightspeed */ + "lightSpeedInRight", + "lightSpeedInLeft", + "lightSpeedOutRight", + "lightSpeedOutLeft", + /* Rotating entrances */ + "rotateIn", + "rotateInDownLeft", + "rotateInDownRight", + "rotateInUpLeft", + "rotateInUpRight", + /* Rotating exits */ + "rotateOut", + "rotateOutDownLeft", + "rotateOutDownRight", + "rotateOutUpLeft", + "rotateOutUpRight", + /* Specials */ + "hinge", + "jackInTheBox", + "rollIn", + "rollOut", + /* Zooming entrances */ + "zoomIn", + "zoomInDown", + "zoomInLeft", + "zoomInRight", + "zoomInUp", + /* Zooming exits */ + "zoomOut", + "zoomOutDown", + "zoomOutLeft", + "zoomOutRight", + "zoomOutUp", + /* Sliding entrances */ + "slideInDown", + "slideInLeft", + "slideInRight", + "slideInUp", + /* Sliding exits */ + "slideOutDown", + "slideOutLeft", + "slideOutRight", + "slideOutUp" +]; diff --git a/Yi.Pure.Vue3/src/components/ReAnimateSelector/src/index.vue b/Yi.Pure.Vue3/src/components/ReAnimateSelector/src/index.vue new file mode 100644 index 00000000..e10056b8 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReAnimateSelector/src/index.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/components/ReAuth/index.ts b/Yi.Pure.Vue3/src/components/ReAuth/index.ts new file mode 100644 index 00000000..975ed2ca --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReAuth/index.ts @@ -0,0 +1,5 @@ +import auth from "./src/auth"; + +const Auth = auth; + +export { Auth }; diff --git a/Yi.Pure.Vue3/src/components/ReAuth/src/auth.tsx b/Yi.Pure.Vue3/src/components/ReAuth/src/auth.tsx new file mode 100644 index 00000000..d2cf9b35 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReAuth/src/auth.tsx @@ -0,0 +1,20 @@ +import { defineComponent, Fragment } from "vue"; +import { hasAuth } from "@/router/utils"; + +export default defineComponent({ + name: "Auth", + props: { + value: { + type: undefined, + default: [] + } + }, + setup(props, { slots }) { + return () => { + if (!slots) return null; + return hasAuth(props.value) ? ( + {slots.default?.()} + ) : null; + }; + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReBarcode/index.ts b/Yi.Pure.Vue3/src/components/ReBarcode/index.ts new file mode 100644 index 00000000..ad098485 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReBarcode/index.ts @@ -0,0 +1,7 @@ +import { withInstall } from "@pureadmin/utils"; +import reBarcode from "./src/index.vue"; + +/** 条形码组件 */ +export const ReBarcode = withInstall(reBarcode); + +export default ReBarcode; diff --git a/Yi.Pure.Vue3/src/components/ReBarcode/src/index.vue b/Yi.Pure.Vue3/src/components/ReBarcode/src/index.vue new file mode 100644 index 00000000..b8674f31 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReBarcode/src/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/Yi.Pure.Vue3/src/components/ReCol/index.ts b/Yi.Pure.Vue3/src/components/ReCol/index.ts new file mode 100644 index 00000000..7a6c9374 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCol/index.ts @@ -0,0 +1,29 @@ +import { ElCol } from "element-plus"; +import { h, defineComponent } from "vue"; + +// 封装element-plus的el-col组件 +export default defineComponent({ + name: "ReCol", + props: { + value: { + type: Number, + default: 24 + } + }, + render() { + const attrs = this.$attrs; + const val = this.value; + return h( + ElCol, + { + xs: val, + sm: val, + md: val, + lg: val, + xl: val, + ...attrs + }, + { default: () => this.$slots.default() } + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReCountTo/README.md b/Yi.Pure.Vue3/src/components/ReCountTo/README.md new file mode 100644 index 00000000..b5048f36 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCountTo/README.md @@ -0,0 +1,2 @@ +normal 普通数字动画组件 +rebound 回弹式数字动画组件 diff --git a/Yi.Pure.Vue3/src/components/ReCountTo/index.ts b/Yi.Pure.Vue3/src/components/ReCountTo/index.ts new file mode 100644 index 00000000..1817218a --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCountTo/index.ts @@ -0,0 +1,11 @@ +import reNormalCountTo from "./src/normal"; +import reboundCountTo from "./src/rebound"; +import { withInstall } from "@pureadmin/utils"; + +/** 普通数字动画组件 */ +const ReNormalCountTo = withInstall(reNormalCountTo); + +/** 回弹式数字动画组件 */ +const ReboundCountTo = withInstall(reboundCountTo); + +export { ReNormalCountTo, ReboundCountTo }; diff --git a/Yi.Pure.Vue3/src/components/ReCountTo/src/normal/index.tsx b/Yi.Pure.Vue3/src/components/ReCountTo/src/normal/index.tsx new file mode 100644 index 00000000..538e0bbe --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCountTo/src/normal/index.tsx @@ -0,0 +1,179 @@ +import { + watch, + unref, + computed, + reactive, + onMounted, + defineComponent +} from "vue"; +import { countToProps } from "./props"; +import { isNumber } from "@pureadmin/utils"; + +export default defineComponent({ + name: "ReNormalCountTo", + props: countToProps, + emits: ["mounted", "callback"], + setup(props, { emit }) { + const state = reactive<{ + localStartVal: number; + printVal: number | null; + displayValue: string; + paused: boolean; + localDuration: number | null; + startTime: number | null; + timestamp: number | null; + rAF: any; + remaining: number | null; + color: string; + fontSize: string; + }>({ + localStartVal: props.startVal, + displayValue: formatNumber(props.startVal), + printVal: null, + paused: false, + localDuration: props.duration, + startTime: null, + timestamp: null, + remaining: null, + rAF: null, + color: null, + fontSize: "16px" + }); + + const getCountDown = computed(() => { + return props.startVal > props.endVal; + }); + + watch([() => props.startVal, () => props.endVal], () => { + if (props.autoplay) { + start(); + } + }); + + function start() { + const { startVal, duration, color, fontSize } = props; + state.localStartVal = startVal; + state.startTime = null; + state.localDuration = duration; + state.paused = false; + state.color = color; + state.fontSize = fontSize; + state.rAF = requestAnimationFrame(count); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + function pauseResume() { + if (state.paused) { + resume(); + state.paused = false; + } else { + pause(); + state.paused = true; + } + } + + function pause() { + cancelAnimationFrame(state.rAF); + } + + function resume() { + state.startTime = null; + state.localDuration = +(state.remaining as number); + state.localStartVal = +(state.printVal as number); + requestAnimationFrame(count); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + function reset() { + state.startTime = null; + cancelAnimationFrame(state.rAF); + state.displayValue = formatNumber(props.startVal); + } + + function count(timestamp: number) { + const { useEasing, easingFn, endVal } = props; + if (!state.startTime) state.startTime = timestamp; + state.timestamp = timestamp; + const progress = timestamp - state.startTime; + state.remaining = (state.localDuration as number) - progress; + if (useEasing) { + if (unref(getCountDown)) { + state.printVal = + state.localStartVal - + easingFn( + progress, + 0, + state.localStartVal - endVal, + state.localDuration as number + ); + } else { + state.printVal = easingFn( + progress, + state.localStartVal, + endVal - state.localStartVal, + state.localDuration as number + ); + } + } else { + if (unref(getCountDown)) { + state.printVal = + state.localStartVal - + (state.localStartVal - endVal) * + (progress / (state.localDuration as number)); + } else { + state.printVal = + state.localStartVal + + (endVal - state.localStartVal) * + (progress / (state.localDuration as number)); + } + } + if (unref(getCountDown)) { + state.printVal = state.printVal < endVal ? endVal : state.printVal; + } else { + state.printVal = state.printVal > endVal ? endVal : state.printVal; + } + state.displayValue = formatNumber(state.printVal); + if (progress < (state.localDuration as number)) { + state.rAF = requestAnimationFrame(count); + } else { + emit("callback"); + } + } + + function formatNumber(num: number | string) { + const { decimals, decimal, separator, suffix, prefix } = props; + num = Number(num).toFixed(decimals); + num += ""; + const x = num.split("."); + let x1 = x[0]; + const x2 = x.length > 1 ? decimal + x[1] : ""; + const rgx = /(\d+)(\d{3})/; + if (separator && !isNumber(separator)) { + while (rgx.test(x1)) { + x1 = x1.replace(rgx, "$1" + separator + "$2"); + } + } + return prefix + x1 + x2 + suffix; + } + + onMounted(() => { + if (props.autoplay) { + start(); + } + emit("mounted"); + }); + + return () => ( + <> + + {state.displayValue} + + + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReCountTo/src/normal/props.ts b/Yi.Pure.Vue3/src/components/ReCountTo/src/normal/props.ts new file mode 100644 index 00000000..f04c2f5e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCountTo/src/normal/props.ts @@ -0,0 +1,32 @@ +import type { PropType } from "vue"; +import propTypes from "@/utils/propTypes"; + +export const countToProps = { + startVal: propTypes.number.def(0), + endVal: propTypes.number.def(2020), + duration: propTypes.number.def(1300), + autoplay: propTypes.bool.def(true), + decimals: { + type: Number as PropType, + required: false, + default: 0, + validator(value: number) { + return value >= 0; + } + }, + color: propTypes.string.def(), + fontSize: propTypes.string.def(), + decimal: propTypes.string.def("."), + separator: propTypes.string.def(","), + prefix: propTypes.string.def(""), + suffix: propTypes.string.def(""), + useEasing: propTypes.bool.def(true), + easingFn: { + type: Function as PropType< + (t: number, b: number, c: number, d: number) => number + >, + default(t: number, b: number, c: number, d: number) { + return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b; + } + } +}; diff --git a/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/index.tsx b/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/index.tsx new file mode 100644 index 00000000..ff6c224d --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/index.tsx @@ -0,0 +1,72 @@ +import "./rebound.css"; +import { + ref, + unref, + onBeforeMount, + defineComponent, + onBeforeUnmount +} from "vue"; +import { reboundProps } from "./props"; + +export default defineComponent({ + name: "ReboundCountTo", + props: reboundProps, + setup(props) { + const ulRef = ref(); + const timer = ref(null); + + onBeforeMount(() => { + const ua = navigator.userAgent.toLowerCase(); + const testUA = regexp => regexp.test(ua); + const isSafari = testUA(/safari/g) && !testUA(/chrome/g); + + // Safari浏览器的兼容代码 + isSafari && + (timer.value = setTimeout(() => { + ulRef.value.setAttribute( + "style", + ` + animation: none; + transform: translateY(calc(var(--i) * -9.09%)) + ` + ); + }, props.delay * 1000)); + }); + + onBeforeUnmount(() => { + clearTimeout(unref(timer)); + }); + + return () => ( + <> +
+
    +
  • 0
  • +
  • 1
  • +
  • 2
  • +
  • 3
  • +
  • 4
  • +
  • 5
  • +
  • 6
  • +
  • 7
  • +
  • 8
  • +
  • 9
  • +
  • 0
  • +
+ + + + + + +
+ + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/props.ts b/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/props.ts new file mode 100644 index 00000000..8b0491af --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/props.ts @@ -0,0 +1,15 @@ +import type { PropType } from "vue"; +import propTypes from "@/utils/propTypes"; + +export const reboundProps = { + delay: propTypes.number.def(1), + blur: propTypes.number.def(2), + i: { + type: Number as PropType, + required: false, + default: 0, + validator(value: number) { + return value < 10 && value >= 0 && Number.isInteger(value); + } + } +}; diff --git a/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/rebound.css b/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/rebound.css new file mode 100644 index 00000000..9fc59321 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCountTo/src/rebound/rebound.css @@ -0,0 +1,77 @@ +.scroll-num { + width: var(--width, 20px); + height: var(--height, calc(var(--width, 20px) * 1.8)); + color: var(--color, #333); + font-size: var(--height, calc(var(--width, 20px) * 1.1)); + line-height: var(--height, calc(var(--width, 20px) * 1.8)); + text-align: center; + overflow: hidden; + animation: enhance-bounce-in-down 1s calc(var(--delay) * 1s) forwards; +} + +ul { + animation: + move 0.3s linear infinite, + bounce-in-down 1s calc(var(--delay) * 1s) forwards; +} + +@keyframes move { + from { + transform: translateY(-90%); + filter: url(#blur); + } + + to { + transform: translateY(1%); + filter: url(#blur); + } +} + +@keyframes bounce-in-down { + from { + transform: translateY(calc(var(--i) * -9.09% - 7%)); + filter: none; + } + + 25% { + transform: translateY(calc(var(--i) * -9.09% + 3%)); + } + + 50% { + transform: translateY(calc(var(--i) * -9.09% - 1%)); + } + + 70% { + transform: translateY(calc(var(--i) * -9.09% + 0.6%)); + } + + 85% { + transform: translateY(calc(var(--i) * -9.09% - 0.3%)); + } + + to { + transform: translateY(calc(var(--i) * -9.09%)); + } +} + +@keyframes enhance-bounce-in-down { + 25% { + transform: translateY(8%); + } + + 50% { + transform: translateY(-4%); + } + + 70% { + transform: translateY(2%); + } + + 85% { + transform: translateY(-1%); + } + + to { + transform: translateY(0); + } +} diff --git a/Yi.Pure.Vue3/src/components/ReCropper/index.ts b/Yi.Pure.Vue3/src/components/ReCropper/index.ts new file mode 100644 index 00000000..62e25903 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/index.ts @@ -0,0 +1,7 @@ +import reCropper from "./src"; +import { withInstall } from "@pureadmin/utils"; + +/** 图片裁剪组件 */ +export const ReCropper = withInstall(reCropper); + +export default ReCropper; diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/circled.css b/Yi.Pure.Vue3/src/components/ReCropper/src/circled.css new file mode 100644 index 00000000..54c77d23 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/circled.css @@ -0,0 +1,8 @@ +@import "cropperjs/dist/cropper.css"; + +.re-circled { + .cropper-view-box, + .cropper-face { + border-radius: 50%; + } +} diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/index.tsx b/Yi.Pure.Vue3/src/components/ReCropper/src/index.tsx new file mode 100644 index 00000000..826ffd0a --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/index.tsx @@ -0,0 +1,457 @@ +import "./circled.css"; +import Cropper from "cropperjs"; +import { ElUpload } from "element-plus"; +import type { CSSProperties } from "vue"; +import { useEventListener } from "@vueuse/core"; +import { longpress } from "@/directives/longpress"; +import { useTippy, directive as tippy } from "vue-tippy"; +import { + type PropType, + ref, + unref, + computed, + onMounted, + onUnmounted, + defineComponent +} from "vue"; +import { + delay, + debounce, + isArray, + downloadByBase64, + useResizeObserver +} from "@pureadmin/utils"; +import { + Reload, + Upload, + ArrowH, + ArrowV, + ArrowUp, + ArrowDown, + ArrowLeft, + ChangeIcon, + ArrowRight, + RotateLeft, + SearchPlus, + RotateRight, + SearchMinus, + DownloadIcon +} from "./svg"; + +type Options = Cropper.Options; + +const defaultOptions: Options = { + aspectRatio: 1, + zoomable: true, + zoomOnTouch: true, + zoomOnWheel: true, + cropBoxMovable: true, + cropBoxResizable: true, + toggleDragModeOnDblclick: true, + autoCrop: true, + background: true, + highlight: true, + center: true, + responsive: true, + restore: true, + checkCrossOrigin: true, + checkOrientation: true, + scalable: true, + modal: true, + guides: true, + movable: true, + rotatable: true +}; + +const props = { + src: { type: String, required: true }, + alt: { type: String }, + circled: { type: Boolean, default: false }, + /** 是否可以通过点击裁剪区域关闭右键弹出的功能菜单,默认 `true` */ + isClose: { type: Boolean, default: true }, + realTimePreview: { type: Boolean, default: true }, + height: { type: [String, Number], default: "360px" }, + crossorigin: { + type: String as PropType<"" | "anonymous" | "use-credentials" | undefined>, + default: undefined + }, + imageStyle: { type: Object as PropType, default: () => ({}) }, + options: { type: Object as PropType, default: () => ({}) } +}; + +export default defineComponent({ + name: "ReCropper", + props, + setup(props, { attrs, emit }) { + const tippyElRef = ref>(); + const imgElRef = ref>(); + const cropper = ref>(); + const inCircled = ref(props.circled); + const isInClose = ref(props.isClose); + const inSrc = ref(props.src); + const isReady = ref(false); + const imgBase64 = ref(); + + let scaleX = 1; + let scaleY = 1; + + const debounceRealTimeCroppered = debounce(realTimeCroppered, 80); + + const getImageStyle = computed((): CSSProperties => { + return { + height: props.height, + maxWidth: "100%", + ...props.imageStyle + }; + }); + + const getClass = computed(() => { + return [ + attrs.class, + { + ["re-circled"]: inCircled.value + } + ]; + }); + + const iconClass = computed(() => { + return [ + "p-[6px]", + "h-[30px]", + "w-[30px]", + "outline-none", + "rounded-[4px]", + "cursor-pointer", + "hover:bg-[rgba(0,0,0,0.06)]" + ]; + }); + + const getWrapperStyle = computed((): CSSProperties => { + return { height: `${props.height}`.replace(/px/, "") + "px" }; + }); + + onMounted(init); + + onUnmounted(() => { + cropper.value?.destroy(); + isReady.value = false; + cropper.value = null; + imgBase64.value = ""; + scaleX = 1; + scaleY = 1; + }); + + useResizeObserver(tippyElRef, () => handCropper("reset")); + + async function init() { + const imgEl = unref(imgElRef); + if (!imgEl) return; + cropper.value = new Cropper(imgEl, { + ...defaultOptions, + ready: () => { + isReady.value = true; + realTimeCroppered(); + delay(400).then(() => emit("readied", cropper.value)); + }, + crop() { + debounceRealTimeCroppered(); + }, + zoom() { + debounceRealTimeCroppered(); + }, + cropmove() { + debounceRealTimeCroppered(); + }, + ...props.options + }); + } + + function realTimeCroppered() { + props.realTimePreview && croppered(); + } + + function croppered() { + if (!cropper.value) return; + const canvas = inCircled.value + ? getRoundedCanvas() + : cropper.value.getCroppedCanvas(); + // https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toBlob + canvas.toBlob(blob => { + if (!blob) return; + const fileReader: FileReader = new FileReader(); + fileReader.readAsDataURL(blob); + fileReader.onloadend = e => { + if (!e.target?.result || !blob) return; + imgBase64.value = e.target.result; + emit("cropper", { + base64: e.target.result, + blob, + info: { size: blob.size, ...cropper.value.getData() } + }); + }; + fileReader.onerror = () => { + emit("error"); + }; + }); + } + + function getRoundedCanvas() { + const sourceCanvas = cropper.value!.getCroppedCanvas(); + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d")!; + const width = sourceCanvas.width; + const height = sourceCanvas.height; + canvas.width = width; + canvas.height = height; + context.imageSmoothingEnabled = true; + context.drawImage(sourceCanvas, 0, 0, width, height); + context.globalCompositeOperation = "destination-in"; + context.beginPath(); + context.arc( + width / 2, + height / 2, + Math.min(width, height) / 2, + 0, + 2 * Math.PI, + true + ); + context.fill(); + return canvas; + } + + function handCropper(event: string, arg?: number | Array) { + if (event === "scaleX") { + scaleX = arg = scaleX === -1 ? 1 : -1; + } + + if (event === "scaleY") { + scaleY = arg = scaleY === -1 ? 1 : -1; + } + arg && isArray(arg) + ? cropper.value?.[event]?.(...arg) + : cropper.value?.[event]?.(arg); + } + + function beforeUpload(file) { + const reader = new FileReader(); + reader.readAsDataURL(file); + inSrc.value = ""; + reader.onload = e => { + inSrc.value = e.target?.result as string; + }; + reader.onloadend = () => { + init(); + }; + return false; + } + + const menuContent = defineComponent({ + directives: { + tippy, + longpress + }, + setup() { + return () => ( +
+ + + + downloadByBase64(imgBase64.value, "cropping.png")} + /> + { + inCircled.value = !inCircled.value; + realTimeCroppered(); + }} + /> + handCropper("reset")} + /> + handCropper("move", [0, -10]), "0:100"]} + /> + handCropper("move", [0, 10]), "0:100"]} + /> + handCropper("move", [-10, 0]), "0:100"]} + /> + handCropper("move", [10, 0]), "0:100"]} + /> + handCropper("scaleX", -1)} + /> + handCropper("scaleY", -1)} + /> + handCropper("rotate", -45)} + /> + handCropper("rotate", 45)} + /> + handCropper("zoom", 0.1), "0:100"]} + /> + handCropper("zoom", -0.1), "0:100"]} + /> +
+ ); + } + }); + + function onContextmenu(event) { + event.preventDefault(); + + const { show, setProps, destroy, state } = useTippy(tippyElRef, { + content: menuContent, + arrow: false, + theme: "light", + trigger: "manual", + interactive: true, + appendTo: "parent", + // hideOnClick: false, + placement: "bottom-end" + }); + + setProps({ + getReferenceClientRect: () => ({ + width: 0, + height: 0, + top: event.clientY, + bottom: event.clientY, + left: event.clientX, + right: event.clientX + }) + }); + + show(); + + if (isInClose.value) { + if (!state.value.isShown && !state.value.isVisible) return; + useEventListener(tippyElRef, "click", destroy); + } + } + + return { + inSrc, + props, + imgElRef, + tippyElRef, + getClass, + getWrapperStyle, + getImageStyle, + isReady, + croppered, + onContextmenu + }; + }, + + render() { + const { + inSrc, + isReady, + getClass, + getImageStyle, + onContextmenu, + getWrapperStyle + } = this; + const { alt, crossorigin } = this.props; + + return inSrc ? ( +
onContextmenu(event)} + > + {alt} +
+ ) : null; + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-down.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-down.svg new file mode 100644 index 00000000..36558e89 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-h.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-h.svg new file mode 100644 index 00000000..f955c41e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-h.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-left.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-left.svg new file mode 100644 index 00000000..5f1c01e0 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-right.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-right.svg new file mode 100644 index 00000000..1a0fe00e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-up.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-up.svg new file mode 100644 index 00000000..942f9261 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-v.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-v.svg new file mode 100644 index 00000000..bbd0476f --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/arrow-v.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/change.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/change.svg new file mode 100644 index 00000000..ec3f02b3 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/change.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/download.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/download.svg new file mode 100644 index 00000000..854b2c99 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/index.ts b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/index.ts new file mode 100644 index 00000000..1306ba77 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/index.ts @@ -0,0 +1,31 @@ +import Reload from "./reload.svg?component"; +import Upload from "./upload.svg?component"; +import ArrowH from "./arrow-h.svg?component"; +import ArrowV from "./arrow-v.svg?component"; +import ArrowUp from "./arrow-up.svg?component"; +import ChangeIcon from "./change.svg?component"; +import ArrowDown from "./arrow-down.svg?component"; +import ArrowLeft from "./arrow-left.svg?component"; +import DownloadIcon from "./download.svg?component"; +import ArrowRight from "./arrow-right.svg?component"; +import RotateLeft from "./rotate-left.svg?component"; +import SearchPlus from "./search-plus.svg?component"; +import RotateRight from "./rotate-right.svg?component"; +import SearchMinus from "./search-minus.svg?component"; + +export { + Reload, + Upload, + ArrowH, + ArrowV, + ArrowUp, + ArrowDown, + ArrowLeft, + ChangeIcon, + ArrowRight, + RotateLeft, + SearchPlus, + RotateRight, + SearchMinus, + DownloadIcon +}; diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/reload.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/reload.svg new file mode 100644 index 00000000..9f9615a7 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/reload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/rotate-left.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/rotate-left.svg new file mode 100644 index 00000000..bea3fc01 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/rotate-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/rotate-right.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/rotate-right.svg new file mode 100644 index 00000000..67ecdc60 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/rotate-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/search-minus.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/search-minus.svg new file mode 100644 index 00000000..73727063 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/search-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/search-plus.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/search-plus.svg new file mode 100644 index 00000000..5fa8ae9e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/search-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropper/src/svg/upload.svg b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/upload.svg new file mode 100644 index 00000000..a0080199 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropper/src/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReCropperPreview/index.ts b/Yi.Pure.Vue3/src/components/ReCropperPreview/index.ts new file mode 100644 index 00000000..e7949fee --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropperPreview/index.ts @@ -0,0 +1,7 @@ +import reCropperPreview from "./src/index.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** 图片裁剪预览组件 */ +export const ReCropperPreview = withInstall(reCropperPreview); + +export default ReCropperPreview; diff --git a/Yi.Pure.Vue3/src/components/ReCropperPreview/src/index.vue b/Yi.Pure.Vue3/src/components/ReCropperPreview/src/index.vue new file mode 100644 index 00000000..c34cc94e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReCropperPreview/src/index.vue @@ -0,0 +1,76 @@ + + + diff --git a/Yi.Pure.Vue3/src/components/ReDialog/index.ts b/Yi.Pure.Vue3/src/components/ReDialog/index.ts new file mode 100644 index 00000000..b471764b --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReDialog/index.ts @@ -0,0 +1,69 @@ +import { ref } from "vue"; +import reDialog from "./index.vue"; +import { useTimeoutFn } from "@vueuse/core"; +import { withInstall } from "@pureadmin/utils"; +import type { + EventType, + ArgsType, + DialogProps, + ButtonProps, + DialogOptions +} from "./type"; + +const dialogStore = ref>([]); + +/** 打开弹框 */ +const addDialog = (options: DialogOptions) => { + const open = () => + dialogStore.value.push(Object.assign(options, { visible: true })); + if (options?.openDelay) { + useTimeoutFn(() => { + open(); + }, options.openDelay); + } else { + open(); + } +}; + +/** 关闭弹框 */ +const closeDialog = (options: DialogOptions, index: number, args?: any) => { + dialogStore.value[index].visible = false; + options.closeCallBack && options.closeCallBack({ options, index, args }); + + const closeDelay = options?.closeDelay ?? 200; + useTimeoutFn(() => { + dialogStore.value.splice(index, 1); + }, closeDelay); +}; + +/** + * @description 更改弹框自身属性值 + * @param value 属性值 + * @param key 属性,默认`title` + * @param index 弹框索引(默认`0`,代表只有一个弹框,对于嵌套弹框要改哪个弹框的属性值就把该弹框索引赋给`index`) + */ +const updateDialog = (value: any, key = "title", index = 0) => { + dialogStore.value[index][key] = value; +}; + +/** 关闭所有弹框 */ +const closeAllDialog = () => { + dialogStore.value = []; +}; + +/** 千万别忘了在下面这三处引入并注册下,放心注册,不使用`addDialog`调用就不会被挂载 + * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L4 + * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L12 + * https://github.com/pure-admin/vue-pure-admin/blob/main/src/App.vue#L22 + */ +const ReDialog = withInstall(reDialog); + +export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions }; +export { + ReDialog, + dialogStore, + addDialog, + closeDialog, + updateDialog, + closeAllDialog +}; diff --git a/Yi.Pure.Vue3/src/components/ReDialog/index.vue b/Yi.Pure.Vue3/src/components/ReDialog/index.vue new file mode 100644 index 00000000..23a0106e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReDialog/index.vue @@ -0,0 +1,206 @@ + + + diff --git a/Yi.Pure.Vue3/src/components/ReDialog/type.ts b/Yi.Pure.Vue3/src/components/ReDialog/type.ts new file mode 100644 index 00000000..7efbe201 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReDialog/type.ts @@ -0,0 +1,275 @@ +import type { CSSProperties, VNode, Component } from "vue"; + +type DoneFn = (cancel?: boolean) => void; +type EventType = + | "open" + | "close" + | "openAutoFocus" + | "closeAutoFocus" + | "fullscreenCallBack"; +type ArgsType = { + /** `cancel` 点击取消按钮、`sure` 点击确定按钮、`close` 点击右上角关闭按钮或空白页或按下了esc键 */ + command: "cancel" | "sure" | "close"; +}; +type ButtonType = + | "primary" + | "success" + | "warning" + | "danger" + | "info" + | "text"; + +/** https://element-plus.org/zh-CN/component/dialog.html#attributes */ +type DialogProps = { + /** `Dialog` 的显示与隐藏 */ + visible?: boolean; + /** `Dialog` 的标题 */ + title?: string; + /** `Dialog` 的宽度,默认 `50%` */ + width?: string | number; + /** 是否为全屏 `Dialog`(会一直处于全屏状态,除非弹框关闭),默认 `false`,`fullscreen` 和 `fullscreenIcon` 都传时只有 `fullscreen` 会生效 */ + fullscreen?: boolean; + /** 是否显示全屏操作图标,默认 `false`,`fullscreen` 和 `fullscreenIcon` 都传时只有 `fullscreen` 会生效 */ + fullscreenIcon?: boolean; + /** `Dialog CSS` 中的 `margin-top` 值,默认 `15vh` */ + top?: string; + /** 是否需要遮罩层,默认 `true` */ + modal?: boolean; + /** `Dialog` 自身是否插入至 `body` 元素上。嵌套的 `Dialog` 必须指定该属性并赋值为 `true`,默认 `false` */ + appendToBody?: boolean; + /** 是否在 `Dialog` 出现时将 `body` 滚动锁定,默认 `true` */ + lockScroll?: boolean; + /** `Dialog` 的自定义类名 */ + class?: string; + /** `Dialog` 的自定义样式 */ + style?: CSSProperties; + /** `Dialog` 打开的延时时间,单位毫秒,默认 `0` */ + openDelay?: number; + /** `Dialog` 关闭的延时时间,单位毫秒,默认 `0` */ + closeDelay?: number; + /** 是否可以通过点击 `modal` 关闭 `Dialog`,默认 `true` */ + closeOnClickModal?: boolean; + /** 是否可以通过按下 `ESC` 关闭 `Dialog`,默认 `true` */ + closeOnPressEscape?: boolean; + /** 是否显示关闭按钮,默认 `true` */ + showClose?: boolean; + /** 关闭前的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */ + beforeClose?: (done: DoneFn) => void; + /** 为 `Dialog` 启用可拖拽功能,默认 `false` */ + draggable?: boolean; + /** 是否让 `Dialog` 的 `header` 和 `footer` 部分居中排列,默认 `false` */ + center?: boolean; + /** 是否水平垂直对齐对话框,默认 `false` */ + alignCenter?: boolean; + /** 当关闭 `Dialog` 时,销毁其中的元素,默认 `false` */ + destroyOnClose?: boolean; +}; + +//element-plus.org/zh-CN/component/popconfirm.html#attributes +type Popconfirm = { + /** 标题 */ + title?: string; + /** 确定按钮文字 */ + confirmButtonText?: string; + /** 取消按钮文字 */ + cancelButtonText?: string; + /** 确定按钮类型,默认 `primary` */ + confirmButtonType?: ButtonType; + /** 取消按钮类型,默认 `text` */ + cancelButtonType?: ButtonType; + /** 自定义图标,默认 `QuestionFilled` */ + icon?: string | Component; + /** `Icon` 颜色,默认 `#f90` */ + iconColor?: string; + /** 是否隐藏 `Icon`,默认 `false` */ + hideIcon?: boolean; + /** 关闭时的延迟,默认 `200` */ + hideAfter?: number; + /** 是否将 `popover` 的下拉列表插入至 `body` 元素,默认 `true` */ + teleported?: boolean; + /** 当 `popover` 组件长时间不触发且 `persistent` 属性设置为 `false` 时, `popover` 将会被删除,默认 `false` */ + persistent?: boolean; + /** 弹层宽度,最小宽度 `150px`,默认 `150` */ + width?: string | number; +}; + +type BtnClickDialog = { + options?: DialogOptions; + index?: number; +}; +type BtnClickButton = { + btn?: ButtonProps; + index?: number; +}; +/** https://element-plus.org/zh-CN/component/button.html#button-attributes */ +type ButtonProps = { + /** 按钮文字 */ + label: string; + /** 按钮尺寸 */ + size?: "large" | "default" | "small"; + /** 按钮类型 */ + type?: "primary" | "success" | "warning" | "danger" | "info"; + /** 是否为朴素按钮,默认 `false` */ + plain?: boolean; + /** 是否为文字按钮,默认 `false` */ + text?: boolean; + /** 是否显示文字按钮背景颜色,默认 `false` */ + bg?: boolean; + /** 是否为链接按钮,默认 `false` */ + link?: boolean; + /** 是否为圆角按钮,默认 `false` */ + round?: boolean; + /** 是否为圆形按钮,默认 `false` */ + circle?: boolean; + /** 确定按钮的 `Popconfirm` 气泡确认框相关配置 */ + popconfirm?: Popconfirm; + /** 是否为加载中状态,默认 `false` */ + loading?: boolean; + /** 自定义加载中状态图标组件 */ + loadingIcon?: string | Component; + /** 按钮是否为禁用状态,默认 `false` */ + disabled?: boolean; + /** 图标组件 */ + icon?: string | Component; + /** 是否开启原生 `autofocus` 属性,默认 `false` */ + autofocus?: boolean; + /** 原生 `type` 属性,默认 `button` */ + nativeType?: "button" | "submit" | "reset"; + /** 自动在两个中文字符之间插入空格 */ + autoInsertSpace?: boolean; + /** 自定义按钮颜色, 并自动计算 `hover` 和 `active` 触发后的颜色 */ + color?: string; + /** `dark` 模式, 意味着自动设置 `color` 为 `dark` 模式的颜色,默认 `false` */ + dark?: boolean; + /** 自定义元素标签 */ + tag?: string | Component; + /** 点击按钮后触发的回调 */ + btnClick?: ({ + dialog, + button + }: { + /** 当前 `Dialog` 信息 */ + dialog: BtnClickDialog; + /** 当前 `button` 信息 */ + button: BtnClickButton; + }) => void; +}; + +interface DialogOptions extends DialogProps { + /** 内容区组件的 `props`,可通过 `defineProps` 接收 */ + props?: any; + /** 是否隐藏 `Dialog` 按钮操作区的内容 */ + hideFooter?: boolean; + /** 确定按钮的 `Popconfirm` 气泡确认框相关配置 */ + popconfirm?: Popconfirm; + /** 点击确定按钮后是否开启 `loading` 加载动画 */ + sureBtnLoading?: boolean; + /** + * @description 自定义对话框标题的内容渲染器 + * @see {@link https://element-plus.org/zh-CN/component/dialog.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%A4%B4%E9%83%A8} + */ + headerRenderer?: ({ + close, + titleId, + titleClass + }: { + close: Function; + titleId: string; + titleClass: string; + }) => VNode | Component; + /** 自定义内容渲染器 */ + contentRenderer?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => VNode | Component; + /** 自定义按钮操作区的内容渲染器,会覆盖`footerButtons`以及默认的 `取消` 和 `确定` 按钮 */ + footerRenderer?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => VNode | Component; + /** 自定义底部按钮操作 */ + footerButtons?: Array; + /** `Dialog` 打开后的回调 */ + open?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** `Dialog` 关闭后的回调(只有点击右上角关闭按钮或空白页或按下了esc键关闭页面时才会触发) */ + close?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** `Dialog` 关闭后的回调。 `args` 返回的 `command` 值解析:`cancel` 点击取消按钮、`sure` 点击确定按钮、`close` 点击右上角关闭按钮或空白页或按下了esc键 */ + closeCallBack?: ({ + options, + index, + args + }: { + options: DialogOptions; + index: number; + args: any; + }) => void; + /** 点击全屏按钮时的回调 */ + fullscreenCallBack?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** 输入焦点聚焦在 `Dialog` 内容时的回调 */ + openAutoFocus?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** 输入焦点从 `Dialog` 内容失焦时的回调 */ + closeAutoFocus?: ({ + options, + index + }: { + options: DialogOptions; + index: number; + }) => void; + /** 点击底部取消按钮的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */ + beforeCancel?: ( + done: Function, + { + options, + index + }: { + options: DialogOptions; + index: number; + } + ) => void; + /** 点击底部确定按钮的回调,会暂停 `Dialog` 的关闭. 回调函数内执行 `done` 参数方法的时候才是真正关闭对话框的时候 */ + beforeSure?: ( + done: Function, + { + options, + index, + closeLoading + }: { + options: DialogOptions; + index: number; + /** 关闭确定按钮的 `loading` 加载动画 */ + closeLoading: Function; + } + ) => void; +} + +export type { EventType, ArgsType, DialogProps, ButtonProps, DialogOptions }; diff --git a/Yi.Pure.Vue3/src/components/ReFlicker/index.css b/Yi.Pure.Vue3/src/components/ReFlicker/index.css new file mode 100644 index 00000000..4c40af45 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlicker/index.css @@ -0,0 +1,39 @@ +.point { + width: var(--point-width); + height: var(--point-height); + background: var(--point-background); + position: relative; + border-radius: var(--point-border-radius); +} + +.point-flicker:after { + background: var(--point-background); +} + +.point-flicker:before, +.point-flicker:after { + content: ""; + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + border-radius: var(--point-border-radius); + animation: flicker 1.2s ease-out infinite; +} + +@keyframes flicker { + 0% { + transform: scale(0.5); + opacity: 1; + } + + 30% { + opacity: 1; + } + + 100% { + transform: scale(var(--point-scale)); + opacity: 0; + } +} diff --git a/Yi.Pure.Vue3/src/components/ReFlicker/index.ts b/Yi.Pure.Vue3/src/components/ReFlicker/index.ts new file mode 100644 index 00000000..b829323f --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlicker/index.ts @@ -0,0 +1,44 @@ +import "./index.css"; +import { type Component, h, defineComponent } from "vue"; + +export interface attrsType { + width?: string; + height?: string; + borderRadius?: number | string; + background?: string; + scale?: number | string; +} + +/** + * 圆点、方形闪烁动画组件 + * @param width 可选 string 宽 + * @param height 可选 string 高 + * @param borderRadius 可选 number | string 传0为方形、传50%或者不传为圆形 + * @param background 可选 string 闪烁颜色 + * @param scale 可选 number | string 闪烁范围,默认2,值越大闪烁范围越大 + * @returns Component + */ +export function useRenderFlicker(attrs?: attrsType): Component { + return defineComponent({ + name: "ReFlicker", + render() { + return h( + "div", + { + class: "point point-flicker", + style: { + "--point-width": attrs?.width ?? "12px", + "--point-height": attrs?.height ?? "12px", + "--point-background": + attrs?.background ?? "var(--el-color-primary)", + "--point-border-radius": attrs?.borderRadius ?? "50%", + "--point-scale": attrs?.scale ?? "2" + } + }, + { + default: () => [] + } + ); + } + }); +} diff --git a/Yi.Pure.Vue3/src/components/ReFlop/index.ts b/Yi.Pure.Vue3/src/components/ReFlop/index.ts new file mode 100644 index 00000000..7c9428a1 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlop/index.ts @@ -0,0 +1,7 @@ +import reFlop from "./src/index.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** 时间翻牌组件 */ +export const ReFlop = withInstall(reFlop); + +export default ReFlop; diff --git a/Yi.Pure.Vue3/src/components/ReFlop/src/filpper.css b/Yi.Pure.Vue3/src/components/ReFlop/src/filpper.css new file mode 100644 index 00000000..a5352433 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlop/src/filpper.css @@ -0,0 +1,184 @@ +.m-flipper { + display: inline-block; + position: relative; + width: 60px; + height: 100px; + line-height: 100px; + border: solid 1px #000; + border-radius: 10px; + background: #fff; + font-size: 66px; + color: #fff; + box-shadow: 0 0 6px rgb(0 0 0 / 50%); + text-align: center; + font-family: "Helvetica Neue"; +} + +.m-flipper .digital::before, +.m-flipper .digital::after { + content: ""; + position: absolute; + left: 0; + right: 0; + background: #000; + overflow: hidden; + box-sizing: border-box; +} + +.m-flipper .digital::before { + top: 0; + bottom: 50%; + border-radius: 10px 10px 0 0; + border-bottom: solid 1px #666; +} + +.m-flipper .digital::after { + top: 50%; + bottom: 0; + border-radius: 0 0 10px 10px; + line-height: 0; +} + +/* 向下翻 */ +.m-flipper.down .front::before { + z-index: 3; +} + +.m-flipper.down .back::after { + z-index: 2; + transform-origin: 50% 0%; + transform: perspective(160px) rotateX(180deg); +} + +.m-flipper.down .front::after, +.m-flipper.down .back::before { + z-index: 1; +} + +.m-flipper.down.go .front::before { + transform-origin: 50% 100%; + animation: frontFlipDown 0.6s ease-in-out both; + box-shadow: 0 -2px 6px rgb(255 255 255 / 30%); + backface-visibility: hidden; +} + +.m-flipper.down.go .back::after { + animation: backFlipDown 0.6s ease-in-out both; +} + +/* 向上翻 */ +.m-flipper.up .front::after { + z-index: 3; +} + +.m-flipper.up .back::before { + z-index: 2; + transform-origin: 50% 100%; + transform: perspective(160px) rotateX(-180deg); +} + +.m-flipper.up .front::before, +.m-flipper.up .back::after { + z-index: 1; +} + +.m-flipper.up.go .front::after { + transform-origin: 50% 0; + animation: frontFlipUp 0.6s ease-in-out both; + box-shadow: 0 2px 6px rgb(255 255 255 / 30%); + backface-visibility: hidden; +} + +.m-flipper.up.go .back::before { + animation: backFlipUp 0.6s ease-in-out both; +} + +@keyframes frontFlipDown { + 0% { + transform: perspective(160px) rotateX(0deg); + } + + 100% { + transform: perspective(160px) rotateX(-180deg); + } +} + +@keyframes backFlipDown { + 0% { + transform: perspective(160px) rotateX(180deg); + } + + 100% { + transform: perspective(160px) rotateX(0deg); + } +} + +@keyframes frontFlipUp { + 0% { + transform: perspective(160px) rotateX(0deg); + } + + 100% { + transform: perspective(160px) rotateX(180deg); + } +} + +@keyframes backFlipUp { + 0% { + transform: perspective(160px) rotateX(-180deg); + } + + 100% { + transform: perspective(160px) rotateX(0deg); + } +} + +.m-flipper .number0::before, +.m-flipper .number0::after { + content: "0"; +} + +.m-flipper .number1::before, +.m-flipper .number1::after { + content: "1"; +} + +.m-flipper .number2::before, +.m-flipper .number2::after { + content: "2"; +} + +.m-flipper .number3::before, +.m-flipper .number3::after { + content: "3"; +} + +.m-flipper .number4::before, +.m-flipper .number4::after { + content: "4"; +} + +.m-flipper .number5::before, +.m-flipper .number5::after { + content: "5"; +} + +.m-flipper .number6::before, +.m-flipper .number6::after { + content: "6"; +} + +.m-flipper .number7::before, +.m-flipper .number7::after { + content: "7"; +} + +.m-flipper .number8::before, +.m-flipper .number8::after { + content: "8"; +} + +.m-flipper .number9::before, +.m-flipper .number9::after { + content: "9"; +} diff --git a/Yi.Pure.Vue3/src/components/ReFlop/src/filpper.tsx b/Yi.Pure.Vue3/src/components/ReFlop/src/filpper.tsx new file mode 100644 index 00000000..4519c91e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlop/src/filpper.tsx @@ -0,0 +1,92 @@ +import "./filpper.css"; +import propTypes from "@/utils/propTypes"; +import { defineComponent, ref } from "vue"; + +const props = { + // front paper text + // 前牌文字 + frontText: propTypes.number.def(0), + // back paper text + // 后牌文字 + backText: propTypes.number.def(1), + // flipping duration, please be consistent with the CSS animation-duration value. + // 翻牌动画时间,与CSS中设置的animation-duration保持一致 + duration: propTypes.number.def(600) +}; + +export default defineComponent({ + name: "ReFlop", + props, + setup(props) { + const { frontText, backText, duration } = props; + const isFlipping = ref(false); + const flipType = ref("down"); + const frontTextFromData = ref(frontText); + const backTextFromData = ref(backText); + + const textClass = (number: number) => { + return "number" + number; + }; + + const flip = (type: string, front: number, back: number) => { + // 如果处于翻转中,则不执行 + if (isFlipping.value) return false; + frontTextFromData.value = front; + backTextFromData.value = back; + // 根据传递过来的type设置翻转方向 + flipType.value = type; + // 设置翻转状态为true + isFlipping.value = true; + + setTimeout(() => { + // 设置翻转状态为false + isFlipping.value = false; + frontTextFromData.value = back; + }, duration); + }; + + // 下翻牌 + const flipDown = (front: any, back: any): void => { + flip("down", front, back); + }; + + // 上翻牌 + const flipUp = (front: any, back: any): void => { + flip("up", front, back); + }; + + // 设置前牌文字 + function setFront(text: number): void { + frontTextFromData.value = text; + } + + // 设置后牌文字 + const setBack = (text: number): void => { + backTextFromData.value = text; + }; + + return { + flipType, + isFlipping, + frontTextFromData, + backTextFromData, + textClass, + flipDown, + flipUp, + setFront, + setBack + }; + }, + + render() { + const main = `m-flipper ${this.flipType} ${this.isFlipping ? "go" : ""}`; + const front = `digital front ${this.textClass(this.frontTextFromData)}`; + const back = `digital back ${this.textClass(this.backTextFromData)}`; + return ( +
+
+
+
+ ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReFlop/src/index.vue b/Yi.Pure.Vue3/src/components/ReFlop/src/index.vue new file mode 100644 index 00000000..52ae7d5c --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlop/src/index.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/index.ts b/Yi.Pure.Vue3/src/components/ReFlowChart/index.ts new file mode 100644 index 00000000..0af0e0e9 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/index.ts @@ -0,0 +1,17 @@ +import control from "./src/Control.vue"; +import nodePanel from "./src/NodePanel.vue"; +import dataDialog from "./src/DataDialog.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** LogicFlow流程图-控制面板 */ +const Control = withInstall(control); + +/** LogicFlow流程图-拖拽面板 */ +const NodePanel = withInstall(nodePanel); + +/** LogicFlow流程图-查看数据 */ +const DataDialog = withInstall(dataDialog); + +export { Control, NodePanel, DataDialog }; + +// LogicFlow流程图文档:http://logic-flow.org/ diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/Control.vue b/Yi.Pure.Vue3/src/components/ReFlowChart/src/Control.vue new file mode 100644 index 00000000..e0f46fb8 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/Control.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/DataDialog.vue b/Yi.Pure.Vue3/src/components/ReFlowChart/src/DataDialog.vue new file mode 100644 index 00000000..5740527e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/DataDialog.vue @@ -0,0 +1,17 @@ + + + diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/NodePanel.vue b/Yi.Pure.Vue3/src/components/ReFlowChart/src/NodePanel.vue new file mode 100644 index 00000000..53d0d5c1 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/NodePanel.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/adpterForTurbo.ts b/Yi.Pure.Vue3/src/components/ReFlowChart/src/adpterForTurbo.ts new file mode 100644 index 00000000..d3948b75 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/adpterForTurbo.ts @@ -0,0 +1,166 @@ +const TurboType = { + SEQUENCE_FLOW: 1, + START_EVENT: 2, + END_EVENT: 3, + USER_TASK: 4, + SERVICE_TASK: 5, + EXCLUSIVE_GATEWAY: 6 +}; + +function getTurboType(type) { + switch (type) { + case "bpmn:sequenceFlow": + return TurboType.SEQUENCE_FLOW; + case "bpmn:startEvent": + return TurboType.START_EVENT; + case "bpmn:endEvent": + return TurboType.END_EVENT; + case "bpmn:userTask": + return TurboType.USER_TASK; + case "bpmn:serviceTask": + return TurboType.SERVICE_TASK; + case "bpmn:exclusiveGateway": + return TurboType.EXCLUSIVE_GATEWAY; + default: + return type; + } +} + +function convertNodeToTurboElement(node) { + const { id, type, x, y, text = "", properties } = node; + return { + incoming: [], + outgoing: [], + dockers: [], + type: getTurboType(node.type), + properties: { + ...properties, + name: (text && text.value) || "", + x: x, + y: y, + text, + logicFlowType: type + }, + key: id + }; +} + +function convertEdgeToTurboElement(edge) { + const { + id, + type, + sourceNodeId, + targetNodeId, + startPoint, + endPoint, + pointsList, + text = "", + properties + } = edge; + return { + incoming: [sourceNodeId], + outgoing: [targetNodeId], + type: getTurboType(type), + dockers: [], + properties: { + ...properties, + name: (text && text.value) || "", + text, + startPoint, + endPoint, + pointsList, + logicFlowType: type + }, + key: id + }; +} + +export function toTurboData(data) { + const nodeMap = new Map(); + const turboData = { + flowElementList: [] + }; + data.nodes.forEach(node => { + const flowElement = convertNodeToTurboElement(node); + turboData.flowElementList.push(flowElement); + nodeMap.set(node.id, flowElement); + }); + data.edges.forEach(edge => { + const flowElement = convertEdgeToTurboElement(edge); + const sourceElement = nodeMap.get(edge.sourceNodeId); + sourceElement.outgoing.push(flowElement.key); + const targetElement = nodeMap.get(edge.targetNodeId); + targetElement.incoming.push(flowElement.key); + turboData.flowElementList.push(flowElement); + }); + return turboData; +} + +function convertFlowElementToEdge(element) { + const { incoming, outgoing, properties, key } = element; + const { text, startPoint, endPoint, pointsList, logicFlowType } = properties; + const edge = { + id: key, + type: logicFlowType, + sourceNodeId: incoming[0], + targetNodeId: outgoing[0], + text, + startPoint, + endPoint, + pointsList, + properties: {} + }; + const excludeProperties = [ + "startPoint", + "endPoint", + "pointsList", + "text", + "logicFlowType" + ]; + Object.keys(element.properties).forEach(property => { + if (excludeProperties.indexOf(property) === -1) { + edge.properties[property] = element.properties[property]; + } + }); + return edge; +} + +function convertFlowElementToNode(element) { + const { properties, key } = element; + const { x, y, text, logicFlowType } = properties; + const node = { + id: key, + type: logicFlowType, + x, + y, + text, + properties: {} + }; + const excludeProperties = ["x", "y", "text", "logicFlowType"]; + Object.keys(element.properties).forEach(property => { + if (excludeProperties.indexOf(property) === -1) { + node.properties[property] = element.properties[property]; + } + }); + return node; +} + +export function toLogicflowData(data) { + const lfData = { + nodes: [], + edges: [] + }; + const list = data.flowElementList; + list && + list.length > 0 && + list.forEach(element => { + if (element.type === TurboType.SEQUENCE_FLOW) { + const edge = convertFlowElementToEdge(element); + lfData.edges.push(edge); + } else { + const node = convertFlowElementToNode(element); + lfData.nodes.push(node); + } + }); + return lfData; +} diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.css b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.css new file mode 100644 index 00000000..2f47d92d --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.css @@ -0,0 +1,49 @@ +@font-face { + font-family: "iconfont"; + src: url("iconfont.eot?t=1618544337340"); /* IE9 */ + src: + url("iconfont.eot?t=1618544337340#iefix") format("embedded-opentype"), + /* IE6-IE8 */ + url("data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAZ0AAsAAAAADKgAAAYmAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDZAqLQIldATYCJAMgCxIABCAFhG0HgQkb6ApRlA9Sk+xngd1wXQyjTXRCW7pkEvLB0N9/pZhyo7nvIIK1Nisnipg3omjUREiURDXNNEL/jDRCI5H/riTu/9q0D5OakT05VaM3E4kMJI2QhanZillesmYnVT0pD5+399suTrCEkjDhqLtAxyURhIU6Ser/1tp8aDPgI2g7ex2ah+Q7i0rI+Gy9rSNYOtEEdPFQVkrlj/1c3oZFk6Sv/bYQqWUunsgkk8QRkrgkCJEKpUcO8zx0cFLQr+x6CEiNi0BN2YWV4MwJhmDEqhdU4BwR8oIOEXPCjGMzcoKDuLmnLwLw6vy9vMCFM6ggIW50umRpIbVW14U29L/QmIZgqDs5cD0JDKwCHFIylReQ51yFpO+XKBwDcjHltbq9801mxdeFzX8inbguoAq1yCWzpH95JuRUJIC0EDPH5nNGtIkkA4GgvROBocpEEKLCCBwVj0BRF/CJHFYhEo9WCbF1TCdgEEgF0A0Ee8NxioIeN97QzQqFMd2tdfIJC3KeK0T3eJYu0J07g6BVbCB0IiDVDNsQ1mFcbNxDCTk6IWEb2ShHfHxUlvAjkfj0mHDhC56GAL4CWMUgQXgEywDxuH0TBAD7gDZuRqtx7KWpnyTbushlJUpytdfnUvoS/pXG880npIYe3wueUdIJoa9HlRgdsYiF5QJv8C2zjIbzXERGQmwH0QylmjJfC4evBB8UUKQZMsAMG2aWMU6nc6s9m7X4Thn0gTfomgnm5d0qwX4v0rQH3GZn4Ajp8F2VeUcTTARpA+FfyLcpc+T05bOemT2fny8EH8Vn4LPFh3htyOtB3jDSJj34IpEQ3HNboUdasWNDQifcA8BfPPkTe6YaWp0nF/IrhQHGW2D5HTO7O2zfTH3+gxip/NioTs9VwUXL7T3AbzTxHa3qSu1e4EZTfZl/QiC2c7UI5jZ/ET938pSH8Z8IPBwU0NopeLgB7h6Kvp0GVCOw72KAjKFA71sPKX7/9g+Js/AmNfj8/o28sqNVdSTVI93p08F3v/75zqw8W79vb0RVaCTrw6aNntrQwCtbzzDKosTRFMjp/WFqtpZUEGxsi6P8L09byvlyrrvUJ6/ZFJR/X32mbUmndlduWjbdnwnY2ZBHo8OIKIVDUJah62hi4aKdSoqZsWypN7d0w6nsAzb12tWrqZOl12+W/W7YyLFxDy/7U369cgFF85PUVevYahz8y/HS9ZGrbv7saR0sn5MfEzhinC2Dizcv5xHycyChG33pcskigbRkvXnDaurRjRuIeDdu4rnSgPQ/L196FHQg6FGs7266c82aTtDT1jU0CqzWoG2Ndf91wRo1g/0wo9b4VPtV+2iwl/fjvxq4f83CBZeYgx6njp8mb7jzou9FfPdwBBpffvyUx6XARoc/1umGwtrl034lryLH/YCEwly/XrrckYHsd+/YWY/u3EGI085rV6RD5+Bw7dqnoAvBjzifw3S3zdaNZL/dRnfz7XZup232DX4VtD6Cn+AzkqFgBq6unr/gwtCDuydN51fk76ocHS/nN25Y/WqMe1fzBRgEQHPEjqE0gIbkR1CKM/zYUukn9ItRVMHwLfuO1kaP2mlUivpAUpbb8f5wZS1eib+cs3/qlD9r8DU2NEccqhPVFos3SRGSKtb4hyJEcX6VZhArj8Y+edgVpHICKD9tt8ddsvuYpNLZfQGoyBiY2CzKm1chkFmHUGwbUityTs70kCCSE2DZZADRaSeo0heYTpdQ3vwIAv0+QagzEKTOQnnOzHzoXTMkrCJYy6q7Wb1GNPO6hLi6keVYaDeqpDDFGarGkqy3sLFRMXFPDjZjqYsD5A6BI4RneUk0sdlwM2w0iqxFEtuwhkTpCLHER0fzWQ+I0ogmcLVPgqkQmBZLrdvC1tMQmfGTE66J3y+HCdoZqUgFBd/Y1TCJTL92VqwoMRVQOUxzpYJTiZd1EHAIyXmskS4RmbCySY4ZpVPEsmRv1QbTIKLoGtgt4kVTI74qM2p4tulMzwFS4qPiUDFxCSSUSGJJKJd2ozFS1kgYmyN1snOnimh0brybVuw0G0WV9iF3xeYjFAg4LcEi4Q692C7TUI8omiJRZAN3M+4ikTLBlosAAAA=") + format("woff2"), + url("iconfont.woff?t=1618544337340") format("woff"), + url("iconfont.ttf?t=1618544337340") format("truetype"), + /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("iconfont.svg?t=1618544337340#iconfont") format("svg"); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-full-screen-hs::before { + content: "\e656"; +} + +.icon-watch-hs::before { + content: "\e766"; +} + +.icon-download-hs::before { + content: "\e6af"; +} + +.icon-enlarge-hs::before { + content: "\e765"; +} + +.icon-previous-hs::before { + content: "\e84c"; +} + +.icon-zoom-out-hs::before { + content: "\e744"; +} + +.icon-next-step-hs::before { + content: "\e84b"; +} diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.eot b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.eot new file mode 100644 index 00000000..c77503fb Binary files /dev/null and b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.eot differ diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.js b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.js new file mode 100644 index 00000000..5df9c0a2 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.js @@ -0,0 +1,63 @@ +!(function (c) { + var t, + e, + o, + a, + n, + l, + i = + '', + s = (s = document.getElementsByTagName("script"))[ + s.length - 1 + ].getAttribute("data-injectcss"); + if (s && !c.__iconfont__svg__cssinject__) { + c.__iconfont__svg__cssinject__ = !0; + try { + document.write( + "" + ); + } catch (c) { + console && console.log(c); + } + } + function h() { + n || ((n = !0), o()); + } + (t = function () { + var c, t, e, o; + ((o = document.createElement("div")).innerHTML = i), + (i = null), + (e = o.getElementsByTagName("svg")[0]) && + (e.setAttribute("aria-hidden", "true"), + (e.style.position = "absolute"), + (e.style.width = 0), + (e.style.height = 0), + (e.style.overflow = "hidden"), + (c = e), + (t = document.body).firstChild + ? ((o = c), (e = t.firstChild).parentNode.insertBefore(o, e)) + : t.appendChild(c)); + }), + document.addEventListener + ? ~["complete", "loaded", "interactive"].indexOf(document.readyState) + ? setTimeout(t, 0) + : ((e = function () { + document.removeEventListener("DOMContentLoaded", e, !1), t(); + }), + document.addEventListener("DOMContentLoaded", e, !1)) + : document.attachEvent && + ((o = t), + (a = c.document), + (n = !1), + (l = function () { + try { + a.documentElement.doScroll("left"); + } catch (c) { + return void setTimeout(l, 50); + } + h(); + })(), + (a.onreadystatechange = function () { + "complete" == a.readyState && ((a.onreadystatechange = null), h()); + })); +})(window); diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.json b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.json new file mode 100644 index 00000000..6f91abb6 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.json @@ -0,0 +1,58 @@ +{ + "id": "2491438", + "name": "liu'c'tu", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "755619", + "name": "自适应图标", + "font_class": "full-screen-hs", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "14445801", + "name": "查看", + "font_class": "watch-hs", + "unicode": "e766", + "unicode_decimal": 59238 + }, + { + "icon_id": "9712640", + "name": "下载", + "font_class": "download-hs", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "1029099", + "name": "放大", + "font_class": "enlarge-hs", + "unicode": "e765", + "unicode_decimal": 59237 + }, + { + "icon_id": "20017362", + "name": "上一步", + "font_class": "previous-hs", + "unicode": "e84c", + "unicode_decimal": 59468 + }, + { + "icon_id": "1010015", + "name": "缩小", + "font_class": "zoom-out-hs", + "unicode": "e744", + "unicode_decimal": 59204 + }, + { + "icon_id": "20017363", + "name": "下一步", + "font_class": "next-step-hs", + "unicode": "e84b", + "unicode_decimal": 59467 + } + ] +} diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.svg b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.svg new file mode 100644 index 00000000..358bd518 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.ttf b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.ttf new file mode 100644 index 00000000..b332ae7d Binary files /dev/null and b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.ttf differ diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff new file mode 100644 index 00000000..0743a938 Binary files /dev/null and b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff differ diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff2 b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff2 new file mode 100644 index 00000000..98f6f354 Binary files /dev/null and b/Yi.Pure.Vue3/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff2 differ diff --git a/Yi.Pure.Vue3/src/components/ReFlowChart/src/config.ts b/Yi.Pure.Vue3/src/components/ReFlowChart/src/config.ts new file mode 100644 index 00000000..810431a4 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReFlowChart/src/config.ts @@ -0,0 +1,55 @@ +export const nodeList = [ + { + text: "开始", + type: "start", + class: "node-start" + }, + { + text: "矩形", + type: "rect", + class: "node-rect" + }, + { + type: "user", + text: "用户", + class: "node-user" + }, + { + type: "push", + text: "推送", + class: "node-push" + }, + { + type: "download", + text: "位置", + class: "node-download" + }, + { + type: "end", + text: "结束", + class: "node-end" + } +]; + +export const BpmnNode = [ + { + type: "bpmn:startEvent", + text: "开始", + class: "bpmn-start" + }, + { + type: "bpmn:endEvent", + text: "结束", + class: "bpmn-end" + }, + { + type: "bpmn:exclusiveGateway", + text: "网关", + class: "bpmn-exclusiveGateway" + }, + { + type: "bpmn:userTask", + text: "用户", + class: "bpmn-user" + } +]; diff --git a/Yi.Pure.Vue3/src/components/ReIcon/data.ts b/Yi.Pure.Vue3/src/components/ReIcon/data.ts new file mode 100644 index 00000000..b5769e8c --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/data.ts @@ -0,0 +1,3869 @@ +/** + * 想要哪个图标集 自行添加即可 请注意此处添加的图标集均为在线图标(https://iconify.design/docs/api/#public-api) + * 如果项目在内网环境下 参考 https://www.bilibili.com/video/BV17S4y1J79d?p=4&vd_source=5a992808de6229d78e7810536c5f9ab3 教程自行离线部署图标 + * https://icones.js.org/collections/图标集前缀名-meta.json(如:https://icones.js.org/collections/ri-meta.json 取icons字段,可获得当前图标集的所有图标) + */ +export const IconJson = { + // https://icones.js.org/collections/ep-meta.json + "ep:": [ + "add-location", + "aim", + "alarm-clock", + "apple", + "arrow-down", + "arrow-down-bold", + "arrow-left", + "arrow-left-bold", + "arrow-right", + "arrow-right-bold", + "arrow-up", + "arrow-up-bold", + "avatar", + "back", + "baseball", + "basketball", + "bell", + "bell-filled", + "bicycle", + "bottom", + "bottom-left", + "bottom-right", + "bowl", + "box", + "briefcase", + "brush", + "brush-filled", + "burger", + "calendar", + "camera", + "camera-filled", + "caret-bottom", + "caret-left", + "caret-right", + "caret-top", + "cellphone", + "chat-dot-round", + "chat-dot-square", + "chat-line-round", + "chat-line-square", + "chat-round", + "chat-square", + "check", + "checked", + "cherry", + "chicken", + "chrome-filled", + "circle-check", + "circle-check-filled", + "circle-close", + "circle-close-filled", + "circle-plus", + "circle-plus-filled", + "clock", + "close", + "close-bold", + "cloudy", + "coffee", + "coffee-cup", + "coin", + "cold-drink", + "collection", + "collection-tag", + "comment", + "compass", + "connection", + "coordinate", + "copy-document", + "cpu", + "credit-card", + "crop", + "d-arrow-left", + "d-arrow-right", + "d-caret", + "data-analysis", + "data-board", + "data-line", + "delete", + "delete-filled", + "delete-location", + "dessert", + "discount", + "dish", + "dish-dot", + "document", + "document-add", + "document-checked", + "document-copy", + "document-delete", + "document-remove", + "download", + "drizzling", + "edit", + "edit-pen", + "eleme", + "eleme-filled", + "element-plus", + "expand", + "failed", + "female", + "files", + "film", + "filter", + "finished", + "first-aid-kit", + "flag", + "fold", + "folder", + "folder-add", + "folder-checked", + "folder-delete", + "folder-opened", + "folder-remove", + "food", + "football", + "fork-spoon", + "fries", + "full-screen", + "goblet", + "goblet-full", + "goblet-square", + "goblet-square-full", + "gold-medal", + "goods", + "goods-filled", + "grape", + "grid", + "guide", + "handbag", + "headset", + "help", + "help-filled", + "hide", + "histogram", + "home-filled", + "hot-water", + "house", + "ice-cream", + "ice-cream-round", + "ice-cream-square", + "ice-drink", + "ice-tea", + "info-filled", + "iphone", + "key", + "knife-fork", + "lightning", + "link", + "list", + "loading", + "location", + "location-filled", + "location-information", + "lock", + "lollipop", + "magic-stick", + "magnet", + "male", + "management", + "map-location", + "medal", + "memo", + "menu", + "message", + "message-box", + "mic", + "microphone", + "milk-tea", + "minus", + "money", + "monitor", + "moon", + "moon-night", + "more", + "more-filled", + "mostly-cloudy", + "mouse", + "mug", + "mute", + "mute-notification", + "no-smoking", + "notebook", + "notification", + "odometer", + "office-building", + "open", + "operation", + "opportunity", + "orange", + "paperclip", + "partly-cloudy", + "pear", + "phone", + "phone-filled", + "picture", + "picture-filled", + "picture-rounded", + "pie-chart", + "place", + "platform", + "plus", + "pointer", + "position", + "postcard", + "pouring", + "present", + "price-tag", + "printer", + "promotion", + "quartz-watch", + "question-filled", + "rank", + "reading", + "reading-lamp", + "refresh", + "refresh-left", + "refresh-right", + "refrigerator", + "remove", + "remove-filled", + "right", + "scale-to-original", + "school", + "scissor", + "search", + "select", + "sell", + "semi-select", + "service", + "set-up", + "setting", + "share", + "ship", + "shop", + "shopping-bag", + "shopping-cart", + "shopping-cart-full", + "shopping-trolley", + "smoking", + "soccer", + "sold-out", + "sort", + "sort-down", + "sort-up", + "stamp", + "star", + "star-filled", + "stopwatch", + "success-filled", + "sugar", + "suitcase", + "suitcase-line", + "sunny", + "sunrise", + "sunset", + "switch", + "switch-button", + "switch-filled", + "takeaway-box", + "ticket", + "tickets", + "timer", + "toilet-paper", + "tools", + "top", + "top-left", + "top-right", + "trend-charts", + "trophy", + "trophy-base", + "turn-off", + "umbrella", + "unlock", + "upload", + "upload-filled", + "user", + "user-filled", + "van", + "video-camera", + "video-camera-filled", + "video-pause", + "video-play", + "view", + "wallet", + "wallet-filled", + "warn-triangle-filled", + "warning", + "warning-filled", + "watch", + "watermelon", + "wind-power", + "zoom-in", + "zoom-out" + ], + // https://icones.js.org/collections/ri-meta.json + "ri:": [ + "24-hours-fill", + "24-hours-line", + "4k-fill", + "4k-line", + "a-b", + "account-box-fill", + "account-box-line", + "account-circle-fill", + "account-circle-line", + "account-pin-box-fill", + "account-pin-box-line", + "account-pin-circle-fill", + "account-pin-circle-line", + "add-box-fill", + "add-box-line", + "add-circle-fill", + "add-circle-line", + "add-fill", + "add-line", + "admin-fill", + "admin-line", + "advertisement-fill", + "advertisement-line", + "ai-generate", + "airplay-fill", + "airplay-line", + "alarm-fill", + "alarm-line", + "alarm-warning-fill", + "alarm-warning-line", + "album-fill", + "album-line", + "alert-fill", + "alert-line", + "aliens-fill", + "aliens-line", + "align-bottom", + "align-center", + "align-justify", + "align-left", + "align-right", + "align-top", + "align-vertically", + "alipay-fill", + "alipay-line", + "amazon-fill", + "amazon-line", + "anchor-fill", + "anchor-line", + "ancient-gate-fill", + "ancient-gate-line", + "ancient-pavilion-fill", + "ancient-pavilion-line", + "android-fill", + "android-line", + "angularjs-fill", + "angularjs-line", + "anticlockwise-2-fill", + "anticlockwise-2-line", + "anticlockwise-fill", + "anticlockwise-line", + "app-store-fill", + "app-store-line", + "apple-fill", + "apple-line", + "apps-2-fill", + "apps-2-line", + "apps-fill", + "apps-line", + "archive-2-fill", + "archive-2-line", + "archive-drawer-fill", + "archive-drawer-line", + "archive-fill", + "archive-line", + "arrow-down-circle-fill", + "arrow-down-circle-line", + "arrow-down-double-fill", + "arrow-down-double-line", + "arrow-down-fill", + "arrow-down-line", + "arrow-down-s-fill", + "arrow-down-s-line", + "arrow-drop-down-fill", + "arrow-drop-down-line", + "arrow-drop-left-fill", + "arrow-drop-left-line", + "arrow-drop-right-fill", + "arrow-drop-right-line", + "arrow-drop-up-fill", + "arrow-drop-up-line", + "arrow-go-back-fill", + "arrow-go-back-line", + "arrow-go-forward-fill", + "arrow-go-forward-line", + "arrow-left-circle-fill", + "arrow-left-circle-line", + "arrow-left-double-fill", + "arrow-left-double-line", + "arrow-left-down-fill", + "arrow-left-down-line", + "arrow-left-fill", + "arrow-left-line", + "arrow-left-right-fill", + "arrow-left-right-line", + "arrow-left-s-fill", + "arrow-left-s-line", + "arrow-left-up-fill", + "arrow-left-up-line", + "arrow-right-circle-fill", + "arrow-right-circle-line", + "arrow-right-double-fill", + "arrow-right-double-line", + "arrow-right-down-fill", + "arrow-right-down-line", + "arrow-right-fill", + "arrow-right-line", + "arrow-right-s-fill", + "arrow-right-s-line", + "arrow-right-up-fill", + "arrow-right-up-line", + "arrow-turn-back-fill", + "arrow-turn-back-line", + "arrow-turn-forward-fill", + "arrow-turn-forward-line", + "arrow-up-circle-fill", + "arrow-up-circle-line", + "arrow-up-double-fill", + "arrow-up-double-line", + "arrow-up-down-fill", + "arrow-up-down-line", + "arrow-up-fill", + "arrow-up-line", + "arrow-up-s-fill", + "arrow-up-s-line", + "artboard-2-fill", + "artboard-2-line", + "artboard-fill", + "artboard-line", + "article-fill", + "article-line", + "aspect-ratio-fill", + "aspect-ratio-line", + "asterisk", + "at-fill", + "at-line", + "attachment-2", + "attachment-fill", + "attachment-line", + "auction-fill", + "auction-line", + "award-fill", + "award-line", + "baidu-fill", + "baidu-line", + "ball-pen-fill", + "ball-pen-line", + "bank-card-2-fill", + "bank-card-2-line", + "bank-card-fill", + "bank-card-line", + "bank-fill", + "bank-line", + "bar-chart-2-fill", + "bar-chart-2-line", + "bar-chart-box-fill", + "bar-chart-box-line", + "bar-chart-fill", + "bar-chart-grouped-fill", + "bar-chart-grouped-line", + "bar-chart-horizontal-fill", + "bar-chart-horizontal-line", + "bar-chart-line", + "barcode-box-fill", + "barcode-box-line", + "barcode-fill", + "barcode-line", + "bard-fill", + "bard-line", + "barricade-fill", + "barricade-line", + "base-station-fill", + "base-station-line", + "basketball-fill", + "basketball-line", + "battery-2-charge-fill", + "battery-2-charge-line", + "battery-2-fill", + "battery-2-line", + "battery-charge-fill", + "battery-charge-line", + "battery-fill", + "battery-line", + "battery-low-fill", + "battery-low-line", + "battery-saver-fill", + "battery-saver-line", + "battery-share-fill", + "battery-share-line", + "bear-smile-fill", + "bear-smile-line", + "beer-fill", + "beer-line", + "behance-fill", + "behance-line", + "bell-fill", + "bell-line", + "bike-fill", + "bike-line", + "bilibili-fill", + "bilibili-line", + "bill-fill", + "bill-line", + "billiards-fill", + "billiards-line", + "bit-coin-fill", + "bit-coin-line", + "blaze-fill", + "blaze-line", + "blender-fill", + "blender-line", + "bluetooth-connect-fill", + "bluetooth-connect-line", + "bluetooth-fill", + "bluetooth-line", + "blur-off-fill", + "blur-off-line", + "body-scan-fill", + "body-scan-line", + "bold", + "book-2-fill", + "book-2-line", + "book-3-fill", + "book-3-line", + "book-fill", + "book-line", + "book-mark-fill", + "book-mark-line", + "book-open-fill", + "book-open-line", + "book-read-fill", + "book-read-line", + "booklet-fill", + "booklet-line", + "bookmark-2-fill", + "bookmark-2-line", + "bookmark-3-fill", + "bookmark-3-line", + "bookmark-fill", + "bookmark-line", + "bootstrap-fill", + "bootstrap-line", + "box-1-fill", + "box-1-line", + "box-2-fill", + "box-2-line", + "box-3-fill", + "box-3-line", + "boxing-fill", + "boxing-line", + "braces-fill", + "braces-line", + "brackets-fill", + "brackets-line", + "brain-fill", + "brain-line", + "briefcase-2-fill", + "briefcase-2-line", + "briefcase-3-fill", + "briefcase-3-line", + "briefcase-4-fill", + "briefcase-4-line", + "briefcase-5-fill", + "briefcase-5-line", + "briefcase-fill", + "briefcase-line", + "bring-forward", + "bring-to-front", + "broadcast-fill", + "broadcast-line", + "brush-2-fill", + "brush-2-line", + "brush-3-fill", + "brush-3-line", + "brush-4-fill", + "brush-4-line", + "brush-fill", + "brush-line", + "bubble-chart-fill", + "bubble-chart-line", + "bug-2-fill", + "bug-2-line", + "bug-fill", + "bug-line", + "building-2-fill", + "building-2-line", + "building-3-fill", + "building-3-line", + "building-4-fill", + "building-4-line", + "building-fill", + "building-line", + "bus-2-fill", + "bus-2-line", + "bus-fill", + "bus-line", + "bus-wifi-fill", + "bus-wifi-line", + "cactus-fill", + "cactus-line", + "cake-2-fill", + "cake-2-line", + "cake-3-fill", + "cake-3-line", + "cake-fill", + "cake-line", + "calculator-fill", + "calculator-line", + "calendar-2-fill", + "calendar-2-line", + "calendar-check-fill", + "calendar-check-line", + "calendar-close-fill", + "calendar-close-line", + "calendar-event-fill", + "calendar-event-line", + "calendar-fill", + "calendar-line", + "calendar-todo-fill", + "calendar-todo-line", + "camera-2-fill", + "camera-2-line", + "camera-3-fill", + "camera-3-line", + "camera-fill", + "camera-lens-fill", + "camera-lens-line", + "camera-line", + "camera-off-fill", + "camera-off-line", + "camera-switch-fill", + "camera-switch-line", + "candle-fill", + "candle-line", + "capsule-fill", + "capsule-line", + "car-fill", + "car-line", + "car-washing-fill", + "car-washing-line", + "caravan-fill", + "caravan-line", + "cash-fill", + "cash-line", + "cast-fill", + "cast-line", + "cellphone-fill", + "cellphone-line", + "celsius-fill", + "celsius-line", + "centos-fill", + "centos-line", + "character-recognition-fill", + "character-recognition-line", + "charging-pile-2-fill", + "charging-pile-2-line", + "charging-pile-fill", + "charging-pile-line", + "chat-1-fill", + "chat-1-line", + "chat-2-fill", + "chat-2-line", + "chat-3-fill", + "chat-3-line", + "chat-4-fill", + "chat-4-line", + "chat-check-fill", + "chat-check-line", + "chat-delete-fill", + "chat-delete-line", + "chat-download-fill", + "chat-download-line", + "chat-follow-up-fill", + "chat-follow-up-line", + "chat-forward-fill", + "chat-forward-line", + "chat-heart-fill", + "chat-heart-line", + "chat-history-fill", + "chat-history-line", + "chat-new-fill", + "chat-new-line", + "chat-off-fill", + "chat-off-line", + "chat-poll-fill", + "chat-poll-line", + "chat-private-fill", + "chat-private-line", + "chat-quote-fill", + "chat-quote-line", + "chat-settings-fill", + "chat-settings-line", + "chat-smile-2-fill", + "chat-smile-2-line", + "chat-smile-3-fill", + "chat-smile-3-line", + "chat-smile-fill", + "chat-smile-line", + "chat-upload-fill", + "chat-upload-line", + "chat-voice-fill", + "chat-voice-line", + "check-double-fill", + "check-double-line", + "check-fill", + "check-line", + "checkbox-blank-circle-fill", + "checkbox-blank-circle-line", + "checkbox-blank-fill", + "checkbox-blank-line", + "checkbox-circle-fill", + "checkbox-circle-line", + "checkbox-fill", + "checkbox-indeterminate-fill", + "checkbox-indeterminate-line", + "checkbox-line", + "checkbox-multiple-blank-fill", + "checkbox-multiple-blank-line", + "checkbox-multiple-fill", + "checkbox-multiple-line", + "china-railway-fill", + "china-railway-line", + "chrome-fill", + "chrome-line", + "circle-fill", + "circle-line", + "clapperboard-fill", + "clapperboard-line", + "clipboard-fill", + "clipboard-line", + "clockwise-2-fill", + "clockwise-2-line", + "clockwise-fill", + "clockwise-line", + "close-circle-fill", + "close-circle-line", + "close-fill", + "close-line", + "closed-captioning-fill", + "closed-captioning-line", + "cloud-fill", + "cloud-line", + "cloud-off-fill", + "cloud-off-line", + "cloud-windy-fill", + "cloud-windy-line", + "cloudy-2-fill", + "cloudy-2-line", + "cloudy-fill", + "cloudy-line", + "code-box-fill", + "code-box-line", + "code-fill", + "code-line", + "code-s-fill", + "code-s-line", + "code-s-slash-fill", + "code-s-slash-line", + "code-view", + "codepen-fill", + "codepen-line", + "coin-fill", + "coin-line", + "coins-fill", + "coins-line", + "collage-fill", + "collage-line", + "command-fill", + "command-line", + "community-fill", + "community-line", + "compass-2-fill", + "compass-2-line", + "compass-3-fill", + "compass-3-line", + "compass-4-fill", + "compass-4-line", + "compass-discover-fill", + "compass-discover-line", + "compass-fill", + "compass-line", + "compasses-2-fill", + "compasses-2-line", + "compasses-fill", + "compasses-line", + "computer-fill", + "computer-line", + "contacts-book-2-fill", + "contacts-book-2-line", + "contacts-book-fill", + "contacts-book-line", + "contacts-book-upload-fill", + "contacts-book-upload-line", + "contacts-fill", + "contacts-line", + "contract-left-fill", + "contract-left-line", + "contract-left-right-fill", + "contract-left-right-line", + "contract-right-fill", + "contract-right-line", + "contract-up-down-fill", + "contract-up-down-line", + "contrast-2-fill", + "contrast-2-line", + "contrast-drop-2-fill", + "contrast-drop-2-line", + "contrast-drop-fill", + "contrast-drop-line", + "contrast-fill", + "contrast-line", + "copilot-fill", + "copilot-line", + "copper-coin-fill", + "copper-coin-line", + "copper-diamond-fill", + "copper-diamond-line", + "copyleft-fill", + "copyleft-line", + "copyright-fill", + "copyright-line", + "coreos-fill", + "coreos-line", + "corner-down-left-fill", + "corner-down-left-line", + "corner-down-right-fill", + "corner-down-right-line", + "corner-left-down-fill", + "corner-left-down-line", + "corner-left-up-fill", + "corner-left-up-line", + "corner-right-down-fill", + "corner-right-down-line", + "corner-right-up-fill", + "corner-right-up-line", + "corner-up-left-double-fill", + "corner-up-left-double-line", + "corner-up-left-fill", + "corner-up-left-line", + "corner-up-right-double-fill", + "corner-up-right-double-line", + "corner-up-right-fill", + "corner-up-right-line", + "coupon-2-fill", + "coupon-2-line", + "coupon-3-fill", + "coupon-3-line", + "coupon-4-fill", + "coupon-4-line", + "coupon-5-fill", + "coupon-5-line", + "coupon-fill", + "coupon-line", + "cpu-fill", + "cpu-line", + "creative-commons-by-fill", + "creative-commons-by-line", + "creative-commons-fill", + "creative-commons-line", + "creative-commons-nc-fill", + "creative-commons-nc-line", + "creative-commons-nd-fill", + "creative-commons-nd-line", + "creative-commons-sa-fill", + "creative-commons-sa-line", + "creative-commons-zero-fill", + "creative-commons-zero-line", + "criminal-fill", + "criminal-line", + "crop-2-fill", + "crop-2-line", + "crop-fill", + "crop-line", + "cross-fill", + "cross-line", + "crosshair-2-fill", + "crosshair-2-line", + "crosshair-fill", + "crosshair-line", + "css3-fill", + "css3-line", + "cup-fill", + "cup-line", + "currency-fill", + "currency-line", + "cursor-fill", + "cursor-line", + "customer-service-2-fill", + "customer-service-2-line", + "customer-service-fill", + "customer-service-line", + "dashboard-2-fill", + "dashboard-2-line", + "dashboard-3-fill", + "dashboard-3-line", + "dashboard-fill", + "dashboard-line", + "database-2-fill", + "database-2-line", + "database-fill", + "database-line", + "delete-back-2-fill", + "delete-back-2-line", + "delete-back-fill", + "delete-back-line", + "delete-bin-2-fill", + "delete-bin-2-line", + "delete-bin-3-fill", + "delete-bin-3-line", + "delete-bin-4-fill", + "delete-bin-4-line", + "delete-bin-5-fill", + "delete-bin-5-line", + "delete-bin-6-fill", + "delete-bin-6-line", + "delete-bin-7-fill", + "delete-bin-7-line", + "delete-bin-fill", + "delete-bin-line", + "delete-column", + "delete-row", + "device-fill", + "device-line", + "device-recover-fill", + "device-recover-line", + "dingding-fill", + "dingding-line", + "direction-fill", + "direction-line", + "disc-fill", + "disc-line", + "discord-fill", + "discord-line", + "discuss-fill", + "discuss-line", + "dislike-fill", + "dislike-line", + "disqus-fill", + "disqus-line", + "divide-fill", + "divide-line", + "donut-chart-fill", + "donut-chart-line", + "door-closed-fill", + "door-closed-line", + "door-fill", + "door-line", + "door-lock-box-fill", + "door-lock-box-line", + "door-lock-fill", + "door-lock-line", + "door-open-fill", + "door-open-line", + "dossier-fill", + "dossier-line", + "douban-fill", + "douban-line", + "double-quotes-l", + "double-quotes-r", + "download-2-fill", + "download-2-line", + "download-cloud-2-fill", + "download-cloud-2-line", + "download-cloud-fill", + "download-cloud-line", + "download-fill", + "download-line", + "draft-fill", + "draft-line", + "drag-drop-fill", + "drag-drop-line", + "drag-move-2-fill", + "drag-move-2-line", + "drag-move-fill", + "drag-move-line", + "draggable", + "dribbble-fill", + "dribbble-line", + "drive-fill", + "drive-line", + "drizzle-fill", + "drizzle-line", + "drop-fill", + "drop-line", + "dropbox-fill", + "dropbox-line", + "dropdown-list", + "dual-sim-1-fill", + "dual-sim-1-line", + "dual-sim-2-fill", + "dual-sim-2-line", + "dv-fill", + "dv-line", + "dvd-fill", + "dvd-line", + "e-bike-2-fill", + "e-bike-2-line", + "e-bike-fill", + "e-bike-line", + "earth-fill", + "earth-line", + "earthquake-fill", + "earthquake-line", + "edge-fill", + "edge-line", + "edge-new-fill", + "edge-new-line", + "edit-2-fill", + "edit-2-line", + "edit-box-fill", + "edit-box-line", + "edit-circle-fill", + "edit-circle-line", + "edit-fill", + "edit-line", + "eject-fill", + "eject-line", + "emoji-sticker-fill", + "emoji-sticker-line", + "emotion-2-fill", + "emotion-2-line", + "emotion-fill", + "emotion-happy-fill", + "emotion-happy-line", + "emotion-laugh-fill", + "emotion-laugh-line", + "emotion-line", + "emotion-normal-fill", + "emotion-normal-line", + "emotion-sad-fill", + "emotion-sad-line", + "emotion-unhappy-fill", + "emotion-unhappy-line", + "empathize-fill", + "empathize-line", + "emphasis", + "emphasis-cn", + "english-input", + "equal-fill", + "equal-line", + "equalizer-fill", + "equalizer-line", + "eraser-fill", + "eraser-line", + "error-warning-fill", + "error-warning-line", + "evernote-fill", + "evernote-line", + "exchange-box-fill", + "exchange-box-line", + "exchange-cny-fill", + "exchange-cny-line", + "exchange-dollar-fill", + "exchange-dollar-line", + "exchange-fill", + "exchange-funds-fill", + "exchange-funds-line", + "exchange-line", + "expand-left-fill", + "expand-left-line", + "expand-left-right-fill", + "expand-left-right-line", + "expand-right-fill", + "expand-right-line", + "expand-up-down-fill", + "expand-up-down-line", + "external-link-fill", + "external-link-line", + "eye-2-fill", + "eye-2-line", + "eye-close-fill", + "eye-close-line", + "eye-fill", + "eye-line", + "eye-off-fill", + "eye-off-line", + "facebook-box-fill", + "facebook-box-line", + "facebook-circle-fill", + "facebook-circle-line", + "facebook-fill", + "facebook-line", + "fahrenheit-fill", + "fahrenheit-line", + "feedback-fill", + "feedback-line", + "file-2-fill", + "file-2-line", + "file-3-fill", + "file-3-line", + "file-4-fill", + "file-4-line", + "file-add-fill", + "file-add-line", + "file-chart-2-fill", + "file-chart-2-line", + "file-chart-fill", + "file-chart-line", + "file-close-fill", + "file-close-line", + "file-cloud-fill", + "file-cloud-line", + "file-code-fill", + "file-code-line", + "file-copy-2-fill", + "file-copy-2-line", + "file-copy-fill", + "file-copy-line", + "file-damage-fill", + "file-damage-line", + "file-download-fill", + "file-download-line", + "file-edit-fill", + "file-edit-line", + "file-excel-2-fill", + "file-excel-2-line", + "file-excel-fill", + "file-excel-line", + "file-fill", + "file-forbid-fill", + "file-forbid-line", + "file-gif-fill", + "file-gif-line", + "file-history-fill", + "file-history-line", + "file-hwp-fill", + "file-hwp-line", + "file-image-fill", + "file-image-line", + "file-info-fill", + "file-info-line", + "file-line", + "file-list-2-fill", + "file-list-2-line", + "file-list-3-fill", + "file-list-3-line", + "file-list-fill", + "file-list-line", + "file-lock-fill", + "file-lock-line", + "file-mark-fill", + "file-mark-line", + "file-music-fill", + "file-music-line", + "file-paper-2-fill", + "file-paper-2-line", + "file-paper-fill", + "file-paper-line", + "file-pdf-2-fill", + "file-pdf-2-line", + "file-pdf-fill", + "file-pdf-line", + "file-ppt-2-fill", + "file-ppt-2-line", + "file-ppt-fill", + "file-ppt-line", + "file-reduce-fill", + "file-reduce-line", + "file-search-fill", + "file-search-line", + "file-settings-fill", + "file-settings-line", + "file-shield-2-fill", + "file-shield-2-line", + "file-shield-fill", + "file-shield-line", + "file-shred-fill", + "file-shred-line", + "file-text-fill", + "file-text-line", + "file-transfer-fill", + "file-transfer-line", + "file-unknow-fill", + "file-unknow-line", + "file-upload-fill", + "file-upload-line", + "file-user-fill", + "file-user-line", + "file-video-fill", + "file-video-line", + "file-warning-fill", + "file-warning-line", + "file-word-2-fill", + "file-word-2-line", + "file-word-fill", + "file-word-line", + "file-zip-fill", + "file-zip-line", + "film-fill", + "film-line", + "filter-2-fill", + "filter-2-line", + "filter-3-fill", + "filter-3-line", + "filter-fill", + "filter-line", + "filter-off-fill", + "filter-off-line", + "find-replace-fill", + "find-replace-line", + "finder-fill", + "finder-line", + "fingerprint-2-fill", + "fingerprint-2-line", + "fingerprint-fill", + "fingerprint-line", + "fire-fill", + "fire-line", + "firefox-fill", + "firefox-line", + "first-aid-kit-fill", + "first-aid-kit-line", + "flag-2-fill", + "flag-2-line", + "flag-fill", + "flag-line", + "flashlight-fill", + "flashlight-line", + "flask-fill", + "flask-line", + "flickr-fill", + "flickr-line", + "flight-land-fill", + "flight-land-line", + "flight-takeoff-fill", + "flight-takeoff-line", + "flood-fill", + "flood-line", + "flow-chart", + "flutter-fill", + "flutter-line", + "focus-2-fill", + "focus-2-line", + "focus-3-fill", + "focus-3-line", + "focus-fill", + "focus-line", + "foggy-fill", + "foggy-line", + "folder-2-fill", + "folder-2-line", + "folder-3-fill", + "folder-3-line", + "folder-4-fill", + "folder-4-line", + "folder-5-fill", + "folder-5-line", + "folder-add-fill", + "folder-add-line", + "folder-chart-2-fill", + "folder-chart-2-line", + "folder-chart-fill", + "folder-chart-line", + "folder-download-fill", + "folder-download-line", + "folder-fill", + "folder-forbid-fill", + "folder-forbid-line", + "folder-history-fill", + "folder-history-line", + "folder-image-fill", + "folder-image-line", + "folder-info-fill", + "folder-info-line", + "folder-keyhole-fill", + "folder-keyhole-line", + "folder-line", + "folder-lock-fill", + "folder-lock-line", + "folder-music-fill", + "folder-music-line", + "folder-open-fill", + "folder-open-line", + "folder-received-fill", + "folder-received-line", + "folder-reduce-fill", + "folder-reduce-line", + "folder-settings-fill", + "folder-settings-line", + "folder-shared-fill", + "folder-shared-line", + "folder-shield-2-fill", + "folder-shield-2-line", + "folder-shield-fill", + "folder-shield-line", + "folder-transfer-fill", + "folder-transfer-line", + "folder-unknow-fill", + "folder-unknow-line", + "folder-upload-fill", + "folder-upload-line", + "folder-user-fill", + "folder-user-line", + "folder-video-fill", + "folder-video-line", + "folder-warning-fill", + "folder-warning-line", + "folder-zip-fill", + "folder-zip-line", + "folders-fill", + "folders-line", + "font-color", + "font-family", + "font-mono", + "font-sans", + "font-sans-serif", + "font-size", + "font-size-2", + "football-fill", + "football-line", + "footprint-fill", + "footprint-line", + "forbid-2-fill", + "forbid-2-line", + "forbid-fill", + "forbid-line", + "format-clear", + "forward-10-fill", + "forward-10-line", + "forward-15-fill", + "forward-15-line", + "forward-30-fill", + "forward-30-line", + "forward-5-fill", + "forward-5-line", + "fridge-fill", + "fridge-line", + "fullscreen-exit-fill", + "fullscreen-exit-line", + "fullscreen-fill", + "fullscreen-line", + "function-fill", + "function-line", + "functions", + "funds-box-fill", + "funds-box-line", + "funds-fill", + "funds-line", + "gallery-fill", + "gallery-line", + "gallery-upload-fill", + "gallery-upload-line", + "game-fill", + "game-line", + "gamepad-fill", + "gamepad-line", + "gas-station-fill", + "gas-station-line", + "gatsby-fill", + "gatsby-line", + "genderless-fill", + "genderless-line", + "ghost-2-fill", + "ghost-2-line", + "ghost-fill", + "ghost-line", + "ghost-smile-fill", + "ghost-smile-line", + "gift-2-fill", + "gift-2-line", + "gift-fill", + "gift-line", + "git-branch-fill", + "git-branch-line", + "git-close-pull-request-fill", + "git-close-pull-request-line", + "git-commit-fill", + "git-commit-line", + "git-merge-fill", + "git-merge-line", + "git-pull-request-fill", + "git-pull-request-line", + "git-repository-commits-fill", + "git-repository-commits-line", + "git-repository-fill", + "git-repository-line", + "git-repository-private-fill", + "git-repository-private-line", + "github-fill", + "github-line", + "gitlab-fill", + "gitlab-line", + "global-fill", + "global-line", + "globe-fill", + "globe-line", + "goblet-fill", + "goblet-line", + "google-fill", + "google-line", + "google-play-fill", + "google-play-line", + "government-fill", + "government-line", + "gps-fill", + "gps-line", + "gradienter-fill", + "gradienter-line", + "graduation-cap-fill", + "graduation-cap-line", + "grid-fill", + "grid-line", + "group-2-fill", + "group-2-line", + "group-fill", + "group-line", + "guide-fill", + "guide-line", + "h-1", + "h-2", + "h-3", + "h-4", + "h-5", + "h-6", + "hail-fill", + "hail-line", + "hammer-fill", + "hammer-line", + "hand-coin-fill", + "hand-coin-line", + "hand-heart-fill", + "hand-heart-line", + "hand-sanitizer-fill", + "hand-sanitizer-line", + "handbag-fill", + "handbag-line", + "hard-drive-2-fill", + "hard-drive-2-line", + "hard-drive-3-fill", + "hard-drive-3-line", + "hard-drive-fill", + "hard-drive-line", + "hashtag", + "haze-2-fill", + "haze-2-line", + "haze-fill", + "haze-line", + "hd-fill", + "hd-line", + "heading", + "headphone-fill", + "headphone-line", + "health-book-fill", + "health-book-line", + "heart-2-fill", + "heart-2-line", + "heart-3-fill", + "heart-3-line", + "heart-add-fill", + "heart-add-line", + "heart-fill", + "heart-line", + "heart-pulse-fill", + "heart-pulse-line", + "hearts-fill", + "hearts-line", + "heavy-showers-fill", + "heavy-showers-line", + "hexagon-fill", + "hexagon-line", + "history-fill", + "history-line", + "home-2-fill", + "home-2-line", + "home-3-fill", + "home-3-line", + "home-4-fill", + "home-4-line", + "home-5-fill", + "home-5-line", + "home-6-fill", + "home-6-line", + "home-7-fill", + "home-7-line", + "home-8-fill", + "home-8-line", + "home-fill", + "home-gear-fill", + "home-gear-line", + "home-heart-fill", + "home-heart-line", + "home-line", + "home-office-fill", + "home-office-line", + "home-smile-2-fill", + "home-smile-2-line", + "home-smile-fill", + "home-smile-line", + "home-wifi-fill", + "home-wifi-line", + "honor-of-kings-fill", + "honor-of-kings-line", + "honour-fill", + "honour-line", + "hospital-fill", + "hospital-line", + "hotel-bed-fill", + "hotel-bed-line", + "hotel-fill", + "hotel-line", + "hotspot-fill", + "hotspot-line", + "hourglass-2-fill", + "hourglass-2-line", + "hourglass-fill", + "hourglass-line", + "hq-fill", + "hq-line", + "html5-fill", + "html5-line", + "ie-fill", + "ie-line", + "image-2-fill", + "image-2-line", + "image-add-fill", + "image-add-line", + "image-edit-fill", + "image-edit-line", + "image-fill", + "image-line", + "inbox-2-fill", + "inbox-2-line", + "inbox-archive-fill", + "inbox-archive-line", + "inbox-fill", + "inbox-line", + "inbox-unarchive-fill", + "inbox-unarchive-line", + "increase-decrease-fill", + "increase-decrease-line", + "indent-decrease", + "indent-increase", + "indeterminate-circle-fill", + "indeterminate-circle-line", + "infinity-fill", + "infinity-line", + "information-fill", + "information-line", + "infrared-thermometer-fill", + "infrared-thermometer-line", + "ink-bottle-fill", + "ink-bottle-line", + "input-cursor-move", + "input-method-fill", + "input-method-line", + "insert-column-left", + "insert-column-right", + "insert-row-bottom", + "insert-row-top", + "instagram-fill", + "instagram-line", + "install-fill", + "install-line", + "instance-fill", + "instance-line", + "invision-fill", + "invision-line", + "italic", + "javascript-fill", + "javascript-line", + "kakao-talk-fill", + "kakao-talk-line", + "key-2-fill", + "key-2-line", + "key-fill", + "key-line", + "keyboard-box-fill", + "keyboard-box-line", + "keyboard-fill", + "keyboard-line", + "keynote-fill", + "keynote-line", + "kick-fill", + "kick-line", + "knife-blood-fill", + "knife-blood-line", + "knife-fill", + "knife-line", + "landscape-fill", + "landscape-line", + "layout-2-fill", + "layout-2-line", + "layout-3-fill", + "layout-3-line", + "layout-4-fill", + "layout-4-line", + "layout-5-fill", + "layout-5-line", + "layout-6-fill", + "layout-6-line", + "layout-bottom-2-fill", + "layout-bottom-2-line", + "layout-bottom-fill", + "layout-bottom-line", + "layout-column-fill", + "layout-column-line", + "layout-fill", + "layout-grid-fill", + "layout-grid-line", + "layout-left-2-fill", + "layout-left-2-line", + "layout-left-fill", + "layout-left-line", + "layout-line", + "layout-masonry-fill", + "layout-masonry-line", + "layout-right-2-fill", + "layout-right-2-line", + "layout-right-fill", + "layout-right-line", + "layout-row-fill", + "layout-row-line", + "layout-top-2-fill", + "layout-top-2-line", + "layout-top-fill", + "layout-top-line", + "leaf-fill", + "leaf-line", + "lifebuoy-fill", + "lifebuoy-line", + "lightbulb-fill", + "lightbulb-flash-fill", + "lightbulb-flash-line", + "lightbulb-line", + "line-chart-fill", + "line-chart-line", + "line-fill", + "line-height", + "line-line", + "link", + "link-m", + "link-unlink", + "link-unlink-m", + "linkedin-box-fill", + "linkedin-box-line", + "linkedin-fill", + "linkedin-line", + "links-fill", + "links-line", + "list-check", + "list-check-2", + "list-check-3", + "list-indefinite", + "list-ordered", + "list-ordered-2", + "list-radio", + "list-settings-fill", + "list-settings-line", + "list-unordered", + "live-fill", + "live-line", + "loader-2-fill", + "loader-2-line", + "loader-3-fill", + "loader-3-line", + "loader-4-fill", + "loader-4-line", + "loader-5-fill", + "loader-5-line", + "loader-fill", + "loader-line", + "lock-2-fill", + "lock-2-line", + "lock-fill", + "lock-line", + "lock-password-fill", + "lock-password-line", + "lock-unlock-fill", + "lock-unlock-line", + "login-box-fill", + "login-box-line", + "login-circle-fill", + "login-circle-line", + "logout-box-fill", + "logout-box-line", + "logout-box-r-fill", + "logout-box-r-line", + "logout-circle-fill", + "logout-circle-line", + "logout-circle-r-fill", + "logout-circle-r-line", + "loop-left-fill", + "loop-left-line", + "loop-right-fill", + "loop-right-line", + "luggage-cart-fill", + "luggage-cart-line", + "luggage-deposit-fill", + "luggage-deposit-line", + "lungs-fill", + "lungs-line", + "mac-fill", + "mac-line", + "macbook-fill", + "macbook-line", + "magic-fill", + "magic-line", + "mail-add-fill", + "mail-add-line", + "mail-check-fill", + "mail-check-line", + "mail-close-fill", + "mail-close-line", + "mail-download-fill", + "mail-download-line", + "mail-fill", + "mail-forbid-fill", + "mail-forbid-line", + "mail-line", + "mail-lock-fill", + "mail-lock-line", + "mail-open-fill", + "mail-open-line", + "mail-send-fill", + "mail-send-line", + "mail-settings-fill", + "mail-settings-line", + "mail-star-fill", + "mail-star-line", + "mail-unread-fill", + "mail-unread-line", + "mail-volume-fill", + "mail-volume-line", + "map-2-fill", + "map-2-line", + "map-fill", + "map-line", + "map-pin-2-fill", + "map-pin-2-line", + "map-pin-3-fill", + "map-pin-3-line", + "map-pin-4-fill", + "map-pin-4-line", + "map-pin-5-fill", + "map-pin-5-line", + "map-pin-add-fill", + "map-pin-add-line", + "map-pin-fill", + "map-pin-line", + "map-pin-range-fill", + "map-pin-range-line", + "map-pin-time-fill", + "map-pin-time-line", + "map-pin-user-fill", + "map-pin-user-line", + "mark-pen-fill", + "mark-pen-line", + "markdown-fill", + "markdown-line", + "markup-fill", + "markup-line", + "mastercard-fill", + "mastercard-line", + "mastodon-fill", + "mastodon-line", + "medal-2-fill", + "medal-2-line", + "medal-fill", + "medal-line", + "medicine-bottle-fill", + "medicine-bottle-line", + "medium-fill", + "medium-line", + "megaphone-fill", + "megaphone-line", + "memories-fill", + "memories-line", + "men-fill", + "men-line", + "mental-health-fill", + "mental-health-line", + "menu-2-fill", + "menu-2-line", + "menu-3-fill", + "menu-3-line", + "menu-4-fill", + "menu-4-line", + "menu-5-fill", + "menu-5-line", + "menu-add-fill", + "menu-add-line", + "menu-fill", + "menu-fold-fill", + "menu-fold-line", + "menu-line", + "menu-search-fill", + "menu-search-line", + "menu-unfold-fill", + "menu-unfold-line", + "merge-cells-horizontal", + "merge-cells-vertical", + "message-2-fill", + "message-2-line", + "message-3-fill", + "message-3-line", + "message-fill", + "message-line", + "messenger-fill", + "messenger-line", + "meta-fill", + "meta-line", + "meteor-fill", + "meteor-line", + "mic-2-fill", + "mic-2-line", + "mic-fill", + "mic-line", + "mic-off-fill", + "mic-off-line", + "mickey-fill", + "mickey-line", + "microscope-fill", + "microscope-line", + "microsoft-fill", + "microsoft-line", + "microsoft-loop-fill", + "microsoft-loop-line", + "mind-map", + "mini-program-fill", + "mini-program-line", + "mist-fill", + "mist-line", + "money-cny-box-fill", + "money-cny-box-line", + "money-cny-circle-fill", + "money-cny-circle-line", + "money-dollar-box-fill", + "money-dollar-box-line", + "money-dollar-circle-fill", + "money-dollar-circle-line", + "money-euro-box-fill", + "money-euro-box-line", + "money-euro-circle-fill", + "money-euro-circle-line", + "money-pound-box-fill", + "money-pound-box-line", + "money-pound-circle-fill", + "money-pound-circle-line", + "moon-clear-fill", + "moon-clear-line", + "moon-cloudy-fill", + "moon-cloudy-line", + "moon-fill", + "moon-foggy-fill", + "moon-foggy-line", + "moon-line", + "more-2-fill", + "more-2-line", + "more-fill", + "more-line", + "motorbike-fill", + "motorbike-line", + "mouse-fill", + "mouse-line", + "movie-2-fill", + "movie-2-line", + "movie-fill", + "movie-line", + "music-2-fill", + "music-2-line", + "music-fill", + "music-line", + "mv-fill", + "mv-line", + "navigation-fill", + "navigation-line", + "netease-cloud-music-fill", + "netease-cloud-music-line", + "netflix-fill", + "netflix-line", + "newspaper-fill", + "newspaper-line", + "nft-fill", + "nft-line", + "node-tree", + "notification-2-fill", + "notification-2-line", + "notification-3-fill", + "notification-3-line", + "notification-4-fill", + "notification-4-line", + "notification-badge-fill", + "notification-badge-line", + "notification-fill", + "notification-line", + "notification-off-fill", + "notification-off-line", + "notion-fill", + "notion-line", + "npmjs-fill", + "npmjs-line", + "number-0", + "number-1", + "number-2", + "number-3", + "number-4", + "number-5", + "number-6", + "number-7", + "number-8", + "number-9", + "numbers-fill", + "numbers-line", + "nurse-fill", + "nurse-line", + "octagon-fill", + "octagon-line", + "oil-fill", + "oil-line", + "omega", + "open-arm-fill", + "open-arm-line", + "open-source-fill", + "open-source-line", + "openai-fill", + "openai-line", + "openbase-fill", + "openbase-line", + "opera-fill", + "opera-line", + "order-play-fill", + "order-play-line", + "organization-chart", + "outlet-2-fill", + "outlet-2-line", + "outlet-fill", + "outlet-line", + "overline", + "p2p-fill", + "p2p-line", + "page-separator", + "pages-fill", + "pages-line", + "paint-brush-fill", + "paint-brush-line", + "paint-fill", + "paint-line", + "palette-fill", + "palette-line", + "pantone-fill", + "pantone-line", + "paragraph", + "parent-fill", + "parent-line", + "parentheses-fill", + "parentheses-line", + "parking-box-fill", + "parking-box-line", + "parking-fill", + "parking-line", + "pass-expired-fill", + "pass-expired-line", + "pass-pending-fill", + "pass-pending-line", + "pass-valid-fill", + "pass-valid-line", + "passport-fill", + "passport-line", + "patreon-fill", + "patreon-line", + "pause-circle-fill", + "pause-circle-line", + "pause-fill", + "pause-line", + "pause-mini-fill", + "pause-mini-line", + "paypal-fill", + "paypal-line", + "pen-nib-fill", + "pen-nib-line", + "pencil-fill", + "pencil-line", + "pencil-ruler-2-fill", + "pencil-ruler-2-line", + "pencil-ruler-fill", + "pencil-ruler-line", + "pentagon-fill", + "pentagon-line", + "percent-fill", + "percent-line", + "phone-camera-fill", + "phone-camera-line", + "phone-fill", + "phone-find-fill", + "phone-find-line", + "phone-line", + "phone-lock-fill", + "phone-lock-line", + "picture-in-picture-2-fill", + "picture-in-picture-2-line", + "picture-in-picture-exit-fill", + "picture-in-picture-exit-line", + "picture-in-picture-fill", + "picture-in-picture-line", + "pie-chart-2-fill", + "pie-chart-2-line", + "pie-chart-box-fill", + "pie-chart-box-line", + "pie-chart-fill", + "pie-chart-line", + "pin-distance-fill", + "pin-distance-line", + "ping-pong-fill", + "ping-pong-line", + "pinterest-fill", + "pinterest-line", + "pinyin-input", + "pixelfed-fill", + "pixelfed-line", + "plane-fill", + "plane-line", + "planet-fill", + "planet-line", + "plant-fill", + "plant-line", + "play-circle-fill", + "play-circle-line", + "play-fill", + "play-line", + "play-list-2-fill", + "play-list-2-line", + "play-list-add-fill", + "play-list-add-line", + "play-list-fill", + "play-list-line", + "play-mini-fill", + "play-mini-line", + "playstation-fill", + "playstation-line", + "plug-2-fill", + "plug-2-line", + "plug-fill", + "plug-line", + "polaroid-2-fill", + "polaroid-2-line", + "polaroid-fill", + "polaroid-line", + "police-car-fill", + "police-car-line", + "presentation-fill", + "presentation-line", + "price-tag-2-fill", + "price-tag-2-line", + "price-tag-3-fill", + "price-tag-3-line", + "price-tag-fill", + "price-tag-line", + "printer-cloud-fill", + "printer-cloud-line", + "printer-fill", + "printer-line", + "product-hunt-fill", + "product-hunt-line", + "profile-fill", + "profile-line", + "prohibited-fill", + "prohibited-line", + "projector-2-fill", + "projector-2-line", + "projector-fill", + "projector-line", + "psychotherapy-fill", + "psychotherapy-line", + "pulse-fill", + "pulse-line", + "pushpin-2-fill", + "pushpin-2-line", + "pushpin-fill", + "pushpin-line", + "qq-fill", + "qq-line", + "qr-code-fill", + "qr-code-line", + "qr-scan-2-fill", + "qr-scan-2-line", + "qr-scan-fill", + "qr-scan-line", + "question-answer-fill", + "question-answer-line", + "question-fill", + "question-line", + "question-mark", + "questionnaire-fill", + "questionnaire-line", + "quill-pen-fill", + "quill-pen-line", + "quote-text", + "radar-fill", + "radar-line", + "radio-2-fill", + "radio-2-line", + "radio-button-fill", + "radio-button-line", + "radio-fill", + "radio-line", + "rainbow-fill", + "rainbow-line", + "rainy-fill", + "rainy-line", + "reactjs-fill", + "reactjs-line", + "record-circle-fill", + "record-circle-line", + "record-mail-fill", + "record-mail-line", + "rectangle-fill", + "rectangle-line", + "recycle-fill", + "recycle-line", + "red-packet-fill", + "red-packet-line", + "reddit-fill", + "reddit-line", + "refresh-fill", + "refresh-line", + "refund-2-fill", + "refund-2-line", + "refund-fill", + "refund-line", + "registered-fill", + "registered-line", + "remixicon-fill", + "remixicon-line", + "remote-control-2-fill", + "remote-control-2-line", + "remote-control-fill", + "remote-control-line", + "repeat-2-fill", + "repeat-2-line", + "repeat-fill", + "repeat-line", + "repeat-one-fill", + "repeat-one-line", + "replay-10-fill", + "replay-10-line", + "replay-15-fill", + "replay-15-line", + "replay-30-fill", + "replay-30-line", + "replay-5-fill", + "replay-5-line", + "reply-all-fill", + "reply-all-line", + "reply-fill", + "reply-line", + "reserved-fill", + "reserved-line", + "rest-time-fill", + "rest-time-line", + "restart-fill", + "restart-line", + "restaurant-2-fill", + "restaurant-2-line", + "restaurant-fill", + "restaurant-line", + "rewind-fill", + "rewind-line", + "rewind-mini-fill", + "rewind-mini-line", + "rfid-fill", + "rfid-line", + "rhythm-fill", + "rhythm-line", + "riding-fill", + "riding-line", + "road-map-fill", + "road-map-line", + "roadster-fill", + "roadster-line", + "robot-2-fill", + "robot-2-line", + "robot-fill", + "robot-line", + "rocket-2-fill", + "rocket-2-line", + "rocket-fill", + "rocket-line", + "rotate-lock-fill", + "rotate-lock-line", + "rounded-corner", + "route-fill", + "route-line", + "router-fill", + "router-line", + "rss-fill", + "rss-line", + "ruler-2-fill", + "ruler-2-line", + "ruler-fill", + "ruler-line", + "run-fill", + "run-line", + "safari-fill", + "safari-line", + "safe-2-fill", + "safe-2-line", + "safe-fill", + "safe-line", + "sailboat-fill", + "sailboat-line", + "save-2-fill", + "save-2-line", + "save-3-fill", + "save-3-line", + "save-fill", + "save-line", + "scales-2-fill", + "scales-2-line", + "scales-3-fill", + "scales-3-line", + "scales-fill", + "scales-line", + "scan-2-fill", + "scan-2-line", + "scan-fill", + "scan-line", + "school-fill", + "school-line", + "scissors-2-fill", + "scissors-2-line", + "scissors-cut-fill", + "scissors-cut-line", + "scissors-fill", + "scissors-line", + "screenshot-2-fill", + "screenshot-2-line", + "screenshot-fill", + "screenshot-line", + "sd-card-fill", + "sd-card-line", + "sd-card-mini-fill", + "sd-card-mini-line", + "search-2-fill", + "search-2-line", + "search-eye-fill", + "search-eye-line", + "search-fill", + "search-line", + "secure-payment-fill", + "secure-payment-line", + "seedling-fill", + "seedling-line", + "send-backward", + "send-plane-2-fill", + "send-plane-2-line", + "send-plane-fill", + "send-plane-line", + "send-to-back", + "sensor-fill", + "sensor-line", + "seo-fill", + "seo-line", + "separator", + "server-fill", + "server-line", + "service-fill", + "service-line", + "settings-2-fill", + "settings-2-line", + "settings-3-fill", + "settings-3-line", + "settings-4-fill", + "settings-4-line", + "settings-5-fill", + "settings-5-line", + "settings-6-fill", + "settings-6-line", + "settings-fill", + "settings-line", + "shake-hands-fill", + "shake-hands-line", + "shape-2-fill", + "shape-2-line", + "shape-fill", + "shape-line", + "shapes-fill", + "shapes-line", + "share-box-fill", + "share-box-line", + "share-circle-fill", + "share-circle-line", + "share-fill", + "share-forward-2-fill", + "share-forward-2-line", + "share-forward-box-fill", + "share-forward-box-line", + "share-forward-fill", + "share-forward-line", + "share-line", + "shield-check-fill", + "shield-check-line", + "shield-cross-fill", + "shield-cross-line", + "shield-fill", + "shield-flash-fill", + "shield-flash-line", + "shield-keyhole-fill", + "shield-keyhole-line", + "shield-line", + "shield-star-fill", + "shield-star-line", + "shield-user-fill", + "shield-user-line", + "shining-2-fill", + "shining-2-line", + "shining-fill", + "shining-line", + "ship-2-fill", + "ship-2-line", + "ship-fill", + "ship-line", + "shirt-fill", + "shirt-line", + "shopping-bag-2-fill", + "shopping-bag-2-line", + "shopping-bag-3-fill", + "shopping-bag-3-line", + "shopping-bag-fill", + "shopping-bag-line", + "shopping-basket-2-fill", + "shopping-basket-2-line", + "shopping-basket-fill", + "shopping-basket-line", + "shopping-cart-2-fill", + "shopping-cart-2-line", + "shopping-cart-fill", + "shopping-cart-line", + "showers-fill", + "showers-line", + "shuffle-fill", + "shuffle-line", + "shut-down-fill", + "shut-down-line", + "side-bar-fill", + "side-bar-line", + "signal-tower-fill", + "signal-tower-line", + "signal-wifi-1-fill", + "signal-wifi-1-line", + "signal-wifi-2-fill", + "signal-wifi-2-line", + "signal-wifi-3-fill", + "signal-wifi-3-line", + "signal-wifi-error-fill", + "signal-wifi-error-line", + "signal-wifi-fill", + "signal-wifi-line", + "signal-wifi-off-fill", + "signal-wifi-off-line", + "sim-card-2-fill", + "sim-card-2-line", + "sim-card-fill", + "sim-card-line", + "single-quotes-l", + "single-quotes-r", + "sip-fill", + "sip-line", + "sketching", + "skip-back-fill", + "skip-back-line", + "skip-back-mini-fill", + "skip-back-mini-line", + "skip-down-fill", + "skip-down-line", + "skip-forward-fill", + "skip-forward-line", + "skip-forward-mini-fill", + "skip-forward-mini-line", + "skip-left-fill", + "skip-left-line", + "skip-right-fill", + "skip-right-line", + "skip-up-fill", + "skip-up-line", + "skull-2-fill", + "skull-2-line", + "skull-fill", + "skull-line", + "skype-fill", + "skype-line", + "slack-fill", + "slack-line", + "slash-commands", + "slash-commands-2", + "slice-fill", + "slice-line", + "slideshow-2-fill", + "slideshow-2-line", + "slideshow-3-fill", + "slideshow-3-line", + "slideshow-4-fill", + "slideshow-4-line", + "slideshow-fill", + "slideshow-line", + "slow-down-fill", + "slow-down-line", + "smartphone-fill", + "smartphone-line", + "snapchat-fill", + "snapchat-line", + "snowy-fill", + "snowy-line", + "sort-asc", + "sort-desc", + "sound-module-fill", + "sound-module-line", + "soundcloud-fill", + "soundcloud-line", + "space", + "space-ship-fill", + "space-ship-line", + "spam-2-fill", + "spam-2-line", + "spam-3-fill", + "spam-3-line", + "spam-fill", + "spam-line", + "sparkling-2-fill", + "sparkling-2-line", + "sparkling-fill", + "sparkling-line", + "speak-fill", + "speak-line", + "speaker-2-fill", + "speaker-2-line", + "speaker-3-fill", + "speaker-3-line", + "speaker-fill", + "speaker-line", + "spectrum-fill", + "spectrum-line", + "speed-fill", + "speed-line", + "speed-mini-fill", + "speed-mini-line", + "speed-up-fill", + "speed-up-line", + "split-cells-horizontal", + "split-cells-vertical", + "spotify-fill", + "spotify-line", + "spy-fill", + "spy-line", + "square-fill", + "square-line", + "stack-fill", + "stack-line", + "stack-overflow-fill", + "stack-overflow-line", + "stackshare-fill", + "stackshare-line", + "star-fill", + "star-half-fill", + "star-half-line", + "star-half-s-fill", + "star-half-s-line", + "star-line", + "star-s-fill", + "star-s-line", + "star-smile-fill", + "star-smile-line", + "steam-fill", + "steam-line", + "steering-2-fill", + "steering-2-line", + "steering-fill", + "steering-line", + "stethoscope-fill", + "stethoscope-line", + "sticky-note-2-fill", + "sticky-note-2-line", + "sticky-note-fill", + "sticky-note-line", + "stock-fill", + "stock-line", + "stop-circle-fill", + "stop-circle-line", + "stop-fill", + "stop-line", + "stop-mini-fill", + "stop-mini-line", + "store-2-fill", + "store-2-line", + "store-3-fill", + "store-3-line", + "store-fill", + "store-line", + "strikethrough", + "strikethrough-2", + "subscript", + "subscript-2", + "subtract-fill", + "subtract-line", + "subway-fill", + "subway-line", + "subway-wifi-fill", + "subway-wifi-line", + "suitcase-2-fill", + "suitcase-2-line", + "suitcase-3-fill", + "suitcase-3-line", + "suitcase-fill", + "suitcase-line", + "sun-cloudy-fill", + "sun-cloudy-line", + "sun-fill", + "sun-foggy-fill", + "sun-foggy-line", + "sun-line", + "supabase-fill", + "supabase-line", + "superscript", + "superscript-2", + "surgical-mask-fill", + "surgical-mask-line", + "surround-sound-fill", + "surround-sound-line", + "survey-fill", + "survey-line", + "swap-box-fill", + "swap-box-line", + "swap-fill", + "swap-line", + "switch-fill", + "switch-line", + "sword-fill", + "sword-line", + "syringe-fill", + "syringe-line", + "t-box-fill", + "t-box-line", + "t-shirt-2-fill", + "t-shirt-2-line", + "t-shirt-air-fill", + "t-shirt-air-line", + "t-shirt-fill", + "t-shirt-line", + "table-2", + "table-alt-fill", + "table-alt-line", + "table-fill", + "table-line", + "tablet-fill", + "tablet-line", + "takeaway-fill", + "takeaway-line", + "taobao-fill", + "taobao-line", + "tape-fill", + "tape-line", + "task-fill", + "task-line", + "taxi-fill", + "taxi-line", + "taxi-wifi-fill", + "taxi-wifi-line", + "team-fill", + "team-line", + "telegram-fill", + "telegram-line", + "temp-cold-fill", + "temp-cold-line", + "temp-hot-fill", + "temp-hot-line", + "tent-fill", + "tent-line", + "terminal-box-fill", + "terminal-box-line", + "terminal-fill", + "terminal-line", + "terminal-window-fill", + "terminal-window-line", + "test-tube-fill", + "test-tube-line", + "text", + "text-direction-l", + "text-direction-r", + "text-spacing", + "text-wrap", + "thermometer-fill", + "thermometer-line", + "threads-fill", + "threads-line", + "thumb-down-fill", + "thumb-down-line", + "thumb-up-fill", + "thumb-up-line", + "thunderstorms-fill", + "thunderstorms-line", + "ticket-2-fill", + "ticket-2-line", + "ticket-fill", + "ticket-line", + "tiktok-fill", + "tiktok-line", + "time-fill", + "time-line", + "timer-2-fill", + "timer-2-line", + "timer-fill", + "timer-flash-fill", + "timer-flash-line", + "timer-line", + "todo-fill", + "todo-line", + "toggle-fill", + "toggle-line", + "token-swap-fill", + "token-swap-line", + "tools-fill", + "tools-line", + "tornado-fill", + "tornado-line", + "trademark-fill", + "trademark-line", + "traffic-light-fill", + "traffic-light-line", + "train-fill", + "train-line", + "train-wifi-fill", + "train-wifi-line", + "translate", + "translate-2", + "travesti-fill", + "travesti-line", + "treasure-map-fill", + "treasure-map-line", + "tree-fill", + "tree-line", + "trello-fill", + "trello-line", + "triangle-fill", + "triangle-line", + "trophy-fill", + "trophy-line", + "truck-fill", + "truck-line", + "tumblr-fill", + "tumblr-line", + "tv-2-fill", + "tv-2-line", + "tv-fill", + "tv-line", + "twitch-fill", + "twitch-line", + "twitter-fill", + "twitter-line", + "twitter-x-fill", + "twitter-x-line", + "typhoon-fill", + "typhoon-line", + "u-disk-fill", + "u-disk-line", + "ubuntu-fill", + "ubuntu-line", + "umbrella-fill", + "umbrella-line", + "underline", + "uninstall-fill", + "uninstall-line", + "unpin-fill", + "unpin-line", + "unsplash-fill", + "unsplash-line", + "upload-2-fill", + "upload-2-line", + "upload-cloud-2-fill", + "upload-cloud-2-line", + "upload-cloud-fill", + "upload-cloud-line", + "upload-fill", + "upload-line", + "usb-fill", + "usb-line", + "user-2-fill", + "user-2-line", + "user-3-fill", + "user-3-line", + "user-4-fill", + "user-4-line", + "user-5-fill", + "user-5-line", + "user-6-fill", + "user-6-line", + "user-add-fill", + "user-add-line", + "user-fill", + "user-follow-fill", + "user-follow-line", + "user-forbid-fill", + "user-forbid-line", + "user-heart-fill", + "user-heart-line", + "user-line", + "user-location-fill", + "user-location-line", + "user-received-2-fill", + "user-received-2-line", + "user-received-fill", + "user-received-line", + "user-search-fill", + "user-search-line", + "user-settings-fill", + "user-settings-line", + "user-shared-2-fill", + "user-shared-2-line", + "user-shared-fill", + "user-shared-line", + "user-smile-fill", + "user-smile-line", + "user-star-fill", + "user-star-line", + "user-unfollow-fill", + "user-unfollow-line", + "user-voice-fill", + "user-voice-line", + "verified-badge-fill", + "verified-badge-line", + "video-add-fill", + "video-add-line", + "video-chat-fill", + "video-chat-line", + "video-download-fill", + "video-download-line", + "video-fill", + "video-line", + "video-upload-fill", + "video-upload-line", + "vidicon-2-fill", + "vidicon-2-line", + "vidicon-fill", + "vidicon-line", + "vimeo-fill", + "vimeo-line", + "vip-crown-2-fill", + "vip-crown-2-line", + "vip-crown-fill", + "vip-crown-line", + "vip-diamond-fill", + "vip-diamond-line", + "vip-fill", + "vip-line", + "virus-fill", + "virus-line", + "visa-fill", + "visa-line", + "voice-recognition-fill", + "voice-recognition-line", + "voiceprint-fill", + "voiceprint-line", + "volume-down-fill", + "volume-down-line", + "volume-mute-fill", + "volume-mute-line", + "volume-off-vibrate-fill", + "volume-off-vibrate-line", + "volume-up-fill", + "volume-up-line", + "volume-vibrate-fill", + "volume-vibrate-line", + "vuejs-fill", + "vuejs-line", + "walk-fill", + "walk-line", + "wallet-2-fill", + "wallet-2-line", + "wallet-3-fill", + "wallet-3-line", + "wallet-fill", + "wallet-line", + "water-flash-fill", + "water-flash-line", + "water-percent-fill", + "water-percent-line", + "webcam-fill", + "webcam-line", + "wechat-2-fill", + "wechat-2-line", + "wechat-channels-fill", + "wechat-channels-line", + "wechat-fill", + "wechat-line", + "wechat-pay-fill", + "wechat-pay-line", + "weibo-fill", + "weibo-line", + "whatsapp-fill", + "whatsapp-line", + "wheelchair-fill", + "wheelchair-line", + "wifi-fill", + "wifi-line", + "wifi-off-fill", + "wifi-off-line", + "window-2-fill", + "window-2-line", + "window-fill", + "window-line", + "windows-fill", + "windows-line", + "windy-fill", + "windy-line", + "wireless-charging-fill", + "wireless-charging-line", + "women-fill", + "women-line", + "wordpress-fill", + "wordpress-line", + "wubi-input", + "xbox-fill", + "xbox-line", + "xing-fill", + "xing-line", + "youtube-fill", + "youtube-line", + "yuque-fill", + "yuque-line", + "zcool-fill", + "zcool-line", + "zhihu-fill", + "zhihu-line", + "zoom-in-fill", + "zoom-in-line", + "zoom-out-fill", + "zoom-out-line", + "zzz-fill", + "zzz-line" + ], + // https://icones.js.org/collections/fa-solid-meta.json + "fa-solid:": [ + "abacus", + "ad", + "address-book", + "address-card", + "adjust", + "air-freshener", + "align-center", + "align-justify", + "align-left", + "align-right", + "allergies", + "ambulance", + "american-sign-language-interpreting", + "anchor", + "angle-double-down", + "angle-double-left", + "angle-double-right", + "angle-double-up", + "angle-down", + "angle-left", + "angle-right", + "angle-up", + "angry", + "ankh", + "apple-alt", + "archive", + "archway", + "arrow-alt-circle-down", + "arrow-alt-circle-left", + "arrow-alt-circle-right", + "arrow-alt-circle-up", + "arrow-circle-down", + "arrow-circle-left", + "arrow-circle-right", + "arrow-circle-up", + "arrow-down", + "arrow-left", + "arrow-right", + "arrow-up", + "arrows-alt", + "arrows-alt-h", + "arrows-alt-v", + "assistive-listening-systems", + "asterisk", + "at", + "atlas", + "atom", + "audio-description", + "award", + "baby", + "baby-carriage", + "backspace", + "backward", + "bacon", + "bacteria", + "bacterium", + "bahai", + "balance-scale", + "balance-scale-left", + "balance-scale-right", + "ban", + "band-aid", + "barcode", + "bars", + "baseball-ball", + "basketball-ball", + "bath", + "battery-empty", + "battery-full", + "battery-half", + "battery-quarter", + "battery-three-quarters", + "bed", + "beer", + "bell", + "bell-slash", + "bezier-curve", + "bible", + "bicycle", + "biking", + "binoculars", + "biohazard", + "birthday-cake", + "blender", + "blender-phone", + "blind", + "blog", + "bold", + "bolt", + "bomb", + "bone", + "bong", + "book", + "book-dead", + "book-medical", + "book-open", + "book-reader", + "bookmark", + "border-all", + "border-none", + "border-style", + "bowling-ball", + "box", + "box-open", + "box-tissue", + "boxes", + "braille", + "brain", + "bread-slice", + "briefcase", + "briefcase-medical", + "broadcast-tower", + "broom", + "brush", + "bug", + "building", + "bullhorn", + "bullseye", + "burn", + "bus", + "bus-alt", + "business-time", + "calculator", + "calculator-alt", + "calendar", + "calendar-alt", + "calendar-check", + "calendar-day", + "calendar-minus", + "calendar-plus", + "calendar-times", + "calendar-week", + "camera", + "camera-retro", + "campground", + "candy-cane", + "cannabis", + "capsules", + "car", + "car-alt", + "car-battery", + "car-crash", + "car-side", + "caravan", + "caret-down", + "caret-left", + "caret-right", + "caret-square-down", + "caret-square-left", + "caret-square-right", + "caret-square-up", + "caret-up", + "carrot", + "cart-arrow-down", + "cart-plus", + "cash-register", + "cat", + "certificate", + "chair", + "chalkboard", + "chalkboard-teacher", + "charging-station", + "chart-area", + "chart-bar", + "chart-line", + "chart-pie", + "check", + "check-circle", + "check-double", + "check-square", + "cheese", + "chess", + "chess-bishop", + "chess-board", + "chess-king", + "chess-knight", + "chess-pawn", + "chess-queen", + "chess-rook", + "chevron-circle-down", + "chevron-circle-left", + "chevron-circle-right", + "chevron-circle-up", + "chevron-down", + "chevron-left", + "chevron-right", + "chevron-up", + "child", + "church", + "circle", + "circle-notch", + "city", + "clinic-medical", + "clipboard", + "clipboard-check", + "clipboard-list", + "clock", + "clone", + "closed-captioning", + "cloud", + "cloud-download-alt", + "cloud-meatball", + "cloud-moon", + "cloud-moon-rain", + "cloud-rain", + "cloud-showers-heavy", + "cloud-sun", + "cloud-sun-rain", + "cloud-upload-alt", + "cocktail", + "code", + "code-branch", + "coffee", + "cog", + "cogs", + "coins", + "columns", + "comment", + "comment-alt", + "comment-dollar", + "comment-dots", + "comment-medical", + "comment-slash", + "comments", + "comments-dollar", + "compact-disc", + "compass", + "compress", + "compress-alt", + "compress-arrows-alt", + "concierge-bell", + "cookie", + "cookie-bite", + "copy", + "copyright", + "couch", + "credit-card", + "crop", + "crop-alt", + "cross", + "crosshairs", + "crow", + "crown", + "crutch", + "cube", + "cubes", + "cut", + "database", + "deaf", + "democrat", + "desktop", + "dharmachakra", + "diagnoses", + "dice", + "dice-d20", + "dice-d6", + "dice-five", + "dice-four", + "dice-one", + "dice-six", + "dice-three", + "dice-two", + "digital-tachograph", + "directions", + "disease", + "divide", + "dizzy", + "dna", + "dog", + "dollar-sign", + "dolly", + "dolly-flatbed", + "donate", + "door-closed", + "door-open", + "dot-circle", + "dove", + "download", + "drafting-compass", + "dragon", + "draw-polygon", + "drum", + "drum-steelpan", + "drumstick-bite", + "dumbbell", + "dumpster", + "dumpster-fire", + "dungeon", + "edit", + "egg", + "eject", + "ellipsis-h", + "ellipsis-v", + "empty-set", + "envelope", + "envelope-open", + "envelope-open-text", + "envelope-square", + "equals", + "eraser", + "ethernet", + "euro-sign", + "exchange-alt", + "exclamation", + "exclamation-circle", + "exclamation-triangle", + "expand", + "expand-alt", + "expand-arrows-alt", + "external-link-alt", + "external-link-square-alt", + "eye", + "eye-dropper", + "eye-slash", + "fan", + "fast-backward", + "fast-forward", + "faucet", + "fax", + "feather", + "feather-alt", + "female", + "fighter-jet", + "file", + "file-alt", + "file-archive", + "file-audio", + "file-code", + "file-contract", + "file-csv", + "file-download", + "file-excel", + "file-export", + "file-image", + "file-import", + "file-invoice", + "file-invoice-dollar", + "file-medical", + "file-medical-alt", + "file-pdf", + "file-powerpoint", + "file-prescription", + "file-signature", + "file-upload", + "file-video", + "file-word", + "fill", + "fill-drip", + "film", + "filter", + "fingerprint", + "fire", + "fire-alt", + "fire-extinguisher", + "first-aid", + "fish", + "fist-raised", + "flag", + "flag-checkered", + "flag-usa", + "flask", + "flushed", + "folder", + "folder-minus", + "folder-open", + "folder-plus", + "font", + "football-ball", + "forward", + "frog", + "frown", + "frown-open", + "function", + "funnel-dollar", + "futbol", + "gamepad", + "gas-pump", + "gavel", + "gem", + "genderless", + "ghost", + "gift", + "gifts", + "glass-cheers", + "glass-martini", + "glass-martini-alt", + "glass-whiskey", + "glasses", + "globe", + "globe-africa", + "globe-americas", + "globe-asia", + "globe-europe", + "golf-ball", + "gopuram", + "graduation-cap", + "greater-than", + "greater-than-equal", + "grimace", + "grin", + "grin-alt", + "grin-beam", + "grin-beam-sweat", + "grin-hearts", + "grin-squint", + "grin-squint-tears", + "grin-stars", + "grin-tears", + "grin-tongue", + "grin-tongue-squint", + "grin-tongue-wink", + "grin-wink", + "grip-horizontal", + "grip-lines", + "grip-lines-vertical", + "grip-vertical", + "guitar", + "h-square", + "hamburger", + "hammer", + "hamsa", + "hand-holding", + "hand-holding-heart", + "hand-holding-medical", + "hand-holding-usd", + "hand-holding-water", + "hand-lizard", + "hand-middle-finger", + "hand-paper", + "hand-peace", + "hand-point-down", + "hand-point-left", + "hand-point-right", + "hand-point-up", + "hand-pointer", + "hand-rock", + "hand-scissors", + "hand-sparkles", + "hand-spock", + "hands", + "hands-helping", + "hands-wash", + "handshake", + "handshake-alt-slash", + "handshake-slash", + "hanukiah", + "hard-hat", + "hashtag", + "hat-cowboy", + "hat-cowboy-side", + "hat-wizard", + "hdd", + "head-side-cough", + "head-side-cough-slash", + "head-side-mask", + "head-side-virus", + "heading", + "headphones", + "headphones-alt", + "headset", + "heart", + "heart-broken", + "heartbeat", + "helicopter", + "highlighter", + "hiking", + "hippo", + "history", + "hockey-puck", + "holly-berry", + "home", + "horse", + "horse-head", + "hospital", + "hospital-alt", + "hospital-symbol", + "hospital-user", + "hot-tub", + "hotdog", + "hotel", + "hourglass", + "hourglass-end", + "hourglass-half", + "hourglass-start", + "house-damage", + "house-user", + "hryvnia", + "i-cursor", + "ice-cream", + "icicles", + "icons", + "id-badge", + "id-card", + "id-card-alt", + "igloo", + "image", + "images", + "inbox", + "indent", + "industry", + "infinity", + "info", + "info-circle", + "integral", + "intersection", + "italic", + "jedi", + "joint", + "journal-whills", + "kaaba", + "key", + "keyboard", + "khanda", + "kiss", + "kiss-beam", + "kiss-wink-heart", + "kiwi-bird", + "lambda", + "landmark", + "language", + "laptop", + "laptop-code", + "laptop-house", + "laptop-medical", + "laugh", + "laugh-beam", + "laugh-squint", + "laugh-wink", + "layer-group", + "leaf", + "lemon", + "less-than", + "less-than-equal", + "level-down-alt", + "level-up-alt", + "life-ring", + "lightbulb", + "link", + "lira-sign", + "list", + "list-alt", + "list-ol", + "list-ul", + "location-arrow", + "lock", + "lock-open", + "long-arrow-alt-down", + "long-arrow-alt-left", + "long-arrow-alt-right", + "long-arrow-alt-up", + "low-vision", + "luggage-cart", + "lungs", + "lungs-virus", + "magic", + "magnet", + "mail-bulk", + "male", + "map", + "map-marked", + "map-marked-alt", + "map-marker", + "map-marker-alt", + "map-pin", + "map-signs", + "marker", + "mars", + "mars-double", + "mars-stroke", + "mars-stroke-h", + "mars-stroke-v", + "mask", + "medal", + "medkit", + "meh", + "meh-blank", + "meh-rolling-eyes", + "memory", + "menorah", + "mercury", + "meteor", + "microchip", + "microphone", + "microphone-alt", + "microphone-alt-slash", + "microphone-slash", + "microscope", + "minus", + "minus-circle", + "minus-square", + "mitten", + "mobile", + "mobile-alt", + "money-bill", + "money-bill-alt", + "money-bill-wave", + "money-bill-wave-alt", + "money-check", + "money-check-alt", + "monument", + "moon", + "mortar-pestle", + "mosque", + "motorcycle", + "mountain", + "mouse", + "mouse-pointer", + "mug-hot", + "music", + "network-wired", + "neuter", + "newspaper", + "not-equal", + "notes-medical", + "object-group", + "object-ungroup", + "oil-can", + "om", + "omega", + "otter", + "outdent", + "pager", + "paint-brush", + "paint-roller", + "palette", + "pallet", + "paper-plane", + "paperclip", + "parachute-box", + "paragraph", + "parking", + "passport", + "pastafarianism", + "paste", + "pause", + "pause-circle", + "paw", + "peace", + "pen", + "pen-alt", + "pen-fancy", + "pen-nib", + "pen-square", + "pencil-alt", + "pencil-ruler", + "people-arrows", + "people-carry", + "pepper-hot", + "percent", + "percentage", + "person-booth", + "phone", + "phone-alt", + "phone-slash", + "phone-square", + "phone-square-alt", + "phone-volume", + "photo-video", + "pi", + "piggy-bank", + "pills", + "pizza-slice", + "place-of-worship", + "plane", + "plane-arrival", + "plane-departure", + "plane-slash", + "play", + "play-circle", + "plug", + "plus", + "plus-circle", + "plus-square", + "podcast", + "poll", + "poll-h", + "poo", + "poo-storm", + "poop", + "portrait", + "pound-sign", + "power-off", + "pray", + "praying-hands", + "prescription", + "prescription-bottle", + "prescription-bottle-alt", + "print", + "procedures", + "project-diagram", + "pump-medical", + "pump-soap", + "puzzle-piece", + "qrcode", + "question", + "question-circle", + "quidditch", + "quote-left", + "quote-right", + "quran", + "radiation", + "radiation-alt", + "rainbow", + "random", + "receipt", + "record-vinyl", + "recycle", + "redo", + "redo-alt", + "registered", + "remove-format", + "reply", + "reply-all", + "republican", + "restroom", + "retweet", + "ribbon", + "ring", + "road", + "robot", + "rocket", + "route", + "rss", + "rss-square", + "ruble-sign", + "ruler", + "ruler-combined", + "ruler-horizontal", + "ruler-vertical", + "running", + "rupee-sign", + "sad-cry", + "sad-tear", + "satellite", + "satellite-dish", + "save", + "school", + "screwdriver", + "scroll", + "sd-card", + "search", + "search-dollar", + "search-location", + "search-minus", + "search-plus", + "seedling", + "server", + "shapes", + "share", + "share-alt", + "share-alt-square", + "share-square", + "shekel-sign", + "shield-alt", + "shield-virus", + "ship", + "shipping-fast", + "shoe-prints", + "shopping-bag", + "shopping-basket", + "shopping-cart", + "shower", + "shuttle-van", + "sigma", + "sign", + "sign-in-alt", + "sign-language", + "sign-out-alt", + "signal", + "signal-alt", + "signal-alt-slash", + "signal-slash", + "signature", + "sim-card", + "sink", + "sitemap", + "skating", + "skiing", + "skiing-nordic", + "skull", + "skull-crossbones", + "slash", + "sleigh", + "sliders-h", + "smile", + "smile-beam", + "smile-wink", + "smog", + "smoking", + "smoking-ban", + "sms", + "snowboarding", + "snowflake", + "snowman", + "snowplow", + "soap", + "socks", + "solar-panel", + "sort", + "sort-alpha-down", + "sort-alpha-down-alt", + "sort-alpha-up", + "sort-alpha-up-alt", + "sort-amount-down", + "sort-amount-down-alt", + "sort-amount-up", + "sort-amount-up-alt", + "sort-down", + "sort-numeric-down", + "sort-numeric-down-alt", + "sort-numeric-up", + "sort-numeric-up-alt", + "sort-up", + "spa", + "space-shuttle", + "spell-check", + "spider", + "spinner", + "splotch", + "spray-can", + "square", + "square-full", + "square-root", + "square-root-alt", + "stamp", + "star", + "star-and-crescent", + "star-half", + "star-half-alt", + "star-of-david", + "star-of-life", + "step-backward", + "step-forward", + "stethoscope", + "sticky-note", + "stop", + "stop-circle", + "stopwatch", + "stopwatch-20", + "store", + "store-alt", + "store-alt-slash", + "store-slash", + "stream", + "street-view", + "strikethrough", + "stroopwafel", + "subscript", + "subway", + "suitcase", + "suitcase-rolling", + "sun", + "superscript", + "surprise", + "swatchbook", + "swimmer", + "swimming-pool", + "synagogue", + "sync", + "sync-alt", + "syringe", + "table", + "table-tennis", + "tablet", + "tablet-alt", + "tablets", + "tachometer-alt", + "tag", + "tags", + "tally", + "tape", + "tasks", + "taxi", + "teeth", + "teeth-open", + "temperature-high", + "temperature-low", + "tenge", + "terminal", + "text-height", + "text-width", + "th", + "th-large", + "th-list", + "theater-masks", + "thermometer", + "thermometer-empty", + "thermometer-full", + "thermometer-half", + "thermometer-quarter", + "thermometer-three-quarters", + "theta", + "thumbs-down", + "thumbs-up", + "thumbtack", + "ticket-alt", + "tilde", + "times", + "times-circle", + "tint", + "tint-slash", + "tired", + "toggle-off", + "toggle-on", + "toilet", + "toilet-paper", + "toilet-paper-slash", + "toolbox", + "tools", + "tooth", + "torah", + "torii-gate", + "tractor", + "trademark", + "traffic-light", + "trailer", + "train", + "tram", + "transgender", + "transgender-alt", + "trash", + "trash-alt", + "trash-restore", + "trash-restore-alt", + "tree", + "trophy", + "truck", + "truck-loading", + "truck-monster", + "truck-moving", + "truck-pickup", + "tshirt", + "tty", + "tv", + "umbrella", + "umbrella-beach", + "underline", + "undo", + "undo-alt", + "union", + "universal-access", + "university", + "unlink", + "unlock", + "unlock-alt", + "upload", + "user", + "user-alt", + "user-alt-slash", + "user-astronaut", + "user-check", + "user-circle", + "user-clock", + "user-cog", + "user-edit", + "user-friends", + "user-graduate", + "user-injured", + "user-lock", + "user-md", + "user-minus", + "user-ninja", + "user-nurse", + "user-plus", + "user-secret", + "user-shield", + "user-slash", + "user-tag", + "user-tie", + "user-times", + "users", + "users-cog", + "users-slash", + "utensil-spoon", + "utensils", + "value-absolute", + "vector-square", + "venus", + "venus-double", + "venus-mars", + "vest", + "vest-patches", + "vial", + "vials", + "video", + "video-slash", + "vihara", + "virus", + "virus-slash", + "viruses", + "voicemail", + "volleyball-ball", + "volume", + "volume-down", + "volume-mute", + "volume-off", + "volume-slash", + "volume-up", + "vote-yea", + "vr-cardboard", + "walking", + "wallet", + "warehouse", + "water", + "wave-square", + "weight", + "weight-hanging", + "wheelchair", + "wifi", + "wifi-slash", + "wind", + "window-close", + "window-maximize", + "window-minimize", + "window-restore", + "wine-bottle", + "wine-glass", + "wine-glass-alt", + "won-sign", + "wrench", + "x-ray", + "yen-sign", + "yin-yang" + ] +}; diff --git a/Yi.Pure.Vue3/src/components/ReIcon/index.ts b/Yi.Pure.Vue3/src/components/ReIcon/index.ts new file mode 100644 index 00000000..9f77a1eb --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/index.ts @@ -0,0 +1,15 @@ +import iconifyIconOffline from "./src/iconifyIconOffline"; +import iconifyIconOnline from "./src/iconifyIconOnline"; +import iconSelect from "./src/Select.vue"; +import fontIcon from "./src/iconfont"; + +/** 本地图标组件 */ +const IconifyIconOffline = iconifyIconOffline; +/** 在线图标组件 */ +const IconifyIconOnline = iconifyIconOnline; +/** `IconSelect`图标选择器组件 */ +const IconSelect = iconSelect; +/** `iconfont`组件 */ +const FontIcon = fontIcon; + +export { IconifyIconOffline, IconifyIconOnline, IconSelect, FontIcon }; diff --git a/Yi.Pure.Vue3/src/components/ReIcon/src/Select.vue b/Yi.Pure.Vue3/src/components/ReIcon/src/Select.vue new file mode 100644 index 00000000..aad1042d --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/src/Select.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/components/ReIcon/src/hooks.ts b/Yi.Pure.Vue3/src/components/ReIcon/src/hooks.ts new file mode 100644 index 00000000..5a377dac --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/src/hooks.ts @@ -0,0 +1,61 @@ +import type { iconType } from "./types"; +import { h, defineComponent, type Component } from "vue"; +import { IconifyIconOnline, IconifyIconOffline, FontIcon } from "../index"; + +/** + * 支持 `iconfont`、自定义 `svg` 以及 `iconify` 中所有的图标 + * @see 点击查看文档图标篇 {@link https://pure-admin.github.io/pure-admin-doc/pages/icon/} + * @param icon 必传 图标 + * @param attrs 可选 iconType 属性 + * @returns Component + */ +export function useRenderIcon(icon: any, attrs?: iconType): Component { + // iconfont + const ifReg = /^IF-/; + // typeof icon === "function" 属于SVG + if (ifReg.test(icon)) { + // iconfont + const name = icon.split(ifReg)[1]; + const iconName = name.slice( + 0, + name.indexOf(" ") == -1 ? name.length : name.indexOf(" ") + ); + const iconType = name.slice(name.indexOf(" ") + 1, name.length); + return defineComponent({ + name: "FontIcon", + render() { + return h(FontIcon, { + icon: iconName, + iconType, + ...attrs + }); + } + }); + } else if (typeof icon === "function" || typeof icon?.render === "function") { + // svg + return attrs ? h(icon, { ...attrs }) : icon; + } else if (typeof icon === "object") { + return defineComponent({ + name: "OfflineIcon", + render() { + return h(IconifyIconOffline, { + icon: icon, + ...attrs + }); + } + }); + } else { + // 通过是否存在 : 符号来判断是在线还是本地图标,存在即是在线图标,反之 + return defineComponent({ + name: "Icon", + render() { + const IconifyIcon = + icon && icon.includes(":") ? IconifyIconOnline : IconifyIconOffline; + return h(IconifyIcon, { + icon: icon, + ...attrs + }); + } + }); + } +} diff --git a/Yi.Pure.Vue3/src/components/ReIcon/src/iconfont.ts b/Yi.Pure.Vue3/src/components/ReIcon/src/iconfont.ts new file mode 100644 index 00000000..c1104519 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/src/iconfont.ts @@ -0,0 +1,48 @@ +import { h, defineComponent } from "vue"; + +// 封装iconfont组件,默认`font-class`引用模式,支持`unicode`引用、`font-class`引用、`symbol`引用 (https://www.iconfont.cn/help/detail?spm=a313x.7781069.1998910419.20&helptype=code) +export default defineComponent({ + name: "FontIcon", + props: { + icon: { + type: String, + default: "" + } + }, + render() { + const attrs = this.$attrs; + if (Object.keys(attrs).includes("uni") || attrs?.iconType === "uni") { + return h( + "i", + { + class: "iconfont", + ...attrs + }, + this.icon + ); + } else if ( + Object.keys(attrs).includes("svg") || + attrs?.iconType === "svg" + ) { + return h( + "svg", + { + class: "icon-svg", + "aria-hidden": true + }, + { + default: () => [ + h("use", { + "xlink:href": `#${this.icon}` + }) + ] + } + ); + } else { + return h("i", { + class: `iconfont ${this.icon}`, + ...attrs + }); + } + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReIcon/src/iconifyIconOffline.ts b/Yi.Pure.Vue3/src/components/ReIcon/src/iconifyIconOffline.ts new file mode 100644 index 00000000..b47aa99a --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/src/iconifyIconOffline.ts @@ -0,0 +1,30 @@ +import { h, defineComponent } from "vue"; +import { Icon as IconifyIcon, addIcon } from "@iconify/vue/dist/offline"; + +// Iconify Icon在Vue里本地使用(用于内网环境) +export default defineComponent({ + name: "IconifyIconOffline", + components: { IconifyIcon }, + props: { + icon: { + default: null + } + }, + render() { + if (typeof this.icon === "object") addIcon(this.icon, this.icon); + const attrs = this.$attrs; + return h( + IconifyIcon, + { + icon: this.icon, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReIcon/src/iconifyIconOnline.ts b/Yi.Pure.Vue3/src/components/ReIcon/src/iconifyIconOnline.ts new file mode 100644 index 00000000..a5f5822d --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/src/iconifyIconOnline.ts @@ -0,0 +1,30 @@ +import { h, defineComponent } from "vue"; +import { Icon as IconifyIcon } from "@iconify/vue"; + +// Iconify Icon在Vue里在线使用(用于外网环境) +export default defineComponent({ + name: "IconifyIconOnline", + components: { IconifyIcon }, + props: { + icon: { + type: String, + default: "" + } + }, + render() { + const attrs = this.$attrs; + return h( + IconifyIcon, + { + icon: `${this.icon}`, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReIcon/src/offlineIcon.ts b/Yi.Pure.Vue3/src/components/ReIcon/src/offlineIcon.ts new file mode 100644 index 00000000..2283a55d --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/src/offlineIcon.ts @@ -0,0 +1,70 @@ +// 这里存放本地图标,在 src/layout/index.vue 文件中加载,避免在首启动加载 +import { addIcon } from "@iconify/vue/dist/offline"; + +// 本地菜单图标,后端在路由的 icon 中返回对应的图标字符串并且前端在此处使用 addIcon 添加即可渲染菜单图标 +// @iconify-icons/ep +import Menu from "@iconify-icons/ep/menu"; +import Edit from "@iconify-icons/ep/edit"; +import SetUp from "@iconify-icons/ep/set-up"; +import Guide from "@iconify-icons/ep/guide"; +import Monitor from "@iconify-icons/ep/monitor"; +import Lollipop from "@iconify-icons/ep/lollipop"; +import Histogram from "@iconify-icons/ep/histogram"; +import HomeFilled from "@iconify-icons/ep/home-filled"; +addIcon("ep:menu", Menu); +addIcon("ep:edit", Edit); +addIcon("ep:set-up", SetUp); +addIcon("ep:guide", Guide); +addIcon("ep:monitor", Monitor); +addIcon("ep:lollipop", Lollipop); +addIcon("ep:histogram", Histogram); +addIcon("ep:home-filled", HomeFilled); +// @iconify-icons/ri +import Tag from "@iconify-icons/ri/bookmark-2-line"; +import Ppt from "@iconify-icons/ri/file-ppt-2-line"; +import Card from "@iconify-icons/ri/bank-card-line"; +import Role from "@iconify-icons/ri/admin-fill"; +import Info from "@iconify-icons/ri/file-info-line"; +import Dept from "@iconify-icons/ri/git-branch-line"; +import Table from "@iconify-icons/ri/table-line"; +import Links from "@iconify-icons/ri/links-fill"; +import Search from "@iconify-icons/ri/search-line"; +import FlUser from "@iconify-icons/ri/admin-line"; +import Setting from "@iconify-icons/ri/settings-3-line"; +import MindMap from "@iconify-icons/ri/mind-map"; +import BarChart from "@iconify-icons/ri/bar-chart-horizontal-line"; +import LoginLog from "@iconify-icons/ri/window-line"; +import Artboard from "@iconify-icons/ri/artboard-line"; +import SystemLog from "@iconify-icons/ri/file-search-line"; +import ListCheck from "@iconify-icons/ri/list-check"; +import UbuntuFill from "@iconify-icons/ri/ubuntu-fill"; +import OnlineUser from "@iconify-icons/ri/user-voice-line"; +import EditBoxLine from "@iconify-icons/ri/edit-box-line"; +import OperationLog from "@iconify-icons/ri/history-fill"; +import InformationLine from "@iconify-icons/ri/information-line"; +import TerminalWindowLine from "@iconify-icons/ri/terminal-window-line"; +import CheckboxCircleLine from "@iconify-icons/ri/checkbox-circle-line"; +addIcon("ri:bookmark-2-line", Tag); +addIcon("ri:file-ppt-2-line", Ppt); +addIcon("ri:bank-card-line", Card); +addIcon("ri:admin-fill", Role); +addIcon("ri:file-info-line", Info); +addIcon("ri:git-branch-line", Dept); +addIcon("ri:links-fill", Links); +addIcon("ri:table-line", Table); +addIcon("ri:search-line", Search); +addIcon("ri:admin-line", FlUser); +addIcon("ri:settings-3-line", Setting); +addIcon("ri:mind-map", MindMap); +addIcon("ri:bar-chart-horizontal-line", BarChart); +addIcon("ri:window-line", LoginLog); +addIcon("ri:file-search-line", SystemLog); +addIcon("ri:artboard-line", Artboard); +addIcon("ri:list-check", ListCheck); +addIcon("ri:ubuntu-fill", UbuntuFill); +addIcon("ri:user-voice-line", OnlineUser); +addIcon("ri:edit-box-line", EditBoxLine); +addIcon("ri:history-fill", OperationLog); +addIcon("ri:information-line", InformationLine); +addIcon("ri:terminal-window-line", TerminalWindowLine); +addIcon("ri:checkbox-circle-line", CheckboxCircleLine); diff --git a/Yi.Pure.Vue3/src/components/ReIcon/src/types.ts b/Yi.Pure.Vue3/src/components/ReIcon/src/types.ts new file mode 100644 index 00000000..000bdc59 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReIcon/src/types.ts @@ -0,0 +1,20 @@ +export interface iconType { + // iconify (https://docs.iconify.design/icon-components/vue/#properties) + inline?: boolean; + width?: string | number; + height?: string | number; + horizontalFlip?: boolean; + verticalFlip?: boolean; + flip?: string; + rotate?: number | string; + color?: string; + horizontalAlign?: boolean; + verticalAlign?: boolean; + align?: string; + onLoad?: Function; + includes?: Function; + // svg 需要什么SVG属性自行添加 + fill?: string; + // all icon + style?: object; +} diff --git a/Yi.Pure.Vue3/src/components/ReImageVerify/index.ts b/Yi.Pure.Vue3/src/components/ReImageVerify/index.ts new file mode 100644 index 00000000..4215c52b --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReImageVerify/index.ts @@ -0,0 +1,7 @@ +import reImageVerify from "./src/index.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** 图形验证码组件 */ +export const ReImageVerify = withInstall(reImageVerify); + +export default ReImageVerify; diff --git a/Yi.Pure.Vue3/src/components/ReImageVerify/src/hooks.ts b/Yi.Pure.Vue3/src/components/ReImageVerify/src/hooks.ts new file mode 100644 index 00000000..71fcdfc2 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReImageVerify/src/hooks.ts @@ -0,0 +1,85 @@ +import { ref, onMounted } from "vue"; + +/** + * 绘制图形验证码 + * @param width - 图形宽度 + * @param height - 图形高度 + */ +export const useImageVerify = (width = 120, height = 40) => { + const domRef = ref(); + const imgCode = ref(""); + + function setImgCode(code: string) { + imgCode.value = code; + } + + function getImgCode() { + if (!domRef.value) return; + imgCode.value = draw(domRef.value, width, height); + } + + onMounted(() => { + getImgCode(); + }); + + return { + domRef, + imgCode, + setImgCode, + getImgCode + }; +}; + +function randomNum(min: number, max: number) { + const num = Math.floor(Math.random() * (max - min) + min); + return num; +} + +function randomColor(min: number, max: number) { + const r = randomNum(min, max); + const g = randomNum(min, max); + const b = randomNum(min, max); + return `rgb(${r},${g},${b})`; +} + +function draw(dom: HTMLCanvasElement, width: number, height: number) { + let imgCode = ""; + + const NUMBER_STRING = "0123456789"; + + const ctx = dom.getContext("2d"); + if (!ctx) return imgCode; + + ctx.fillStyle = randomColor(180, 230); + ctx.fillRect(0, 0, width, height); + for (let i = 0; i < 4; i += 1) { + const text = NUMBER_STRING[randomNum(0, NUMBER_STRING.length)]; + imgCode += text; + const fontSize = randomNum(18, 41); + const deg = randomNum(-30, 30); + ctx.font = `${fontSize}px Simhei`; + ctx.textBaseline = "top"; + ctx.fillStyle = randomColor(80, 150); + ctx.save(); + ctx.translate(30 * i + 15, 15); + ctx.rotate((deg * Math.PI) / 180); + ctx.fillText(text, -15 + 5, -15); + ctx.restore(); + } + for (let i = 0; i < 5; i += 1) { + ctx.beginPath(); + ctx.moveTo(randomNum(0, width), randomNum(0, height)); + ctx.lineTo(randomNum(0, width), randomNum(0, height)); + ctx.strokeStyle = randomColor(180, 230); + ctx.closePath(); + ctx.stroke(); + } + for (let i = 0; i < 41; i += 1) { + ctx.beginPath(); + ctx.arc(randomNum(0, width), randomNum(0, height), 1, 0, 2 * Math.PI); + ctx.closePath(); + ctx.fillStyle = randomColor(150, 200); + ctx.fill(); + } + return imgCode; +} diff --git a/Yi.Pure.Vue3/src/components/ReImageVerify/src/index.vue b/Yi.Pure.Vue3/src/components/ReImageVerify/src/index.vue new file mode 100644 index 00000000..03d0662a --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReImageVerify/src/index.vue @@ -0,0 +1,46 @@ + + + diff --git a/Yi.Pure.Vue3/src/components/ReMap/index.ts b/Yi.Pure.Vue3/src/components/ReMap/index.ts new file mode 100644 index 00000000..4bcd8289 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReMap/index.ts @@ -0,0 +1,7 @@ +import amap from "./src/Amap.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** 高德地图组件 */ +export const Amap = withInstall(amap); + +export default Amap; diff --git a/Yi.Pure.Vue3/src/components/ReMap/src/Amap.vue b/Yi.Pure.Vue3/src/components/ReMap/src/Amap.vue new file mode 100644 index 00000000..8f8bd5bf --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReMap/src/Amap.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/components/RePerms/index.ts b/Yi.Pure.Vue3/src/components/RePerms/index.ts new file mode 100644 index 00000000..3701c3c1 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/RePerms/index.ts @@ -0,0 +1,5 @@ +import perms from "./src/perms"; + +const Perms = perms; + +export { Perms }; diff --git a/Yi.Pure.Vue3/src/components/RePerms/src/perms.tsx b/Yi.Pure.Vue3/src/components/RePerms/src/perms.tsx new file mode 100644 index 00000000..da01bc16 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/RePerms/src/perms.tsx @@ -0,0 +1,20 @@ +import { defineComponent, Fragment } from "vue"; +import { hasPerms } from "@/utils/auth"; + +export default defineComponent({ + name: "Perms", + props: { + value: { + type: undefined, + default: [] + } + }, + setup(props, { slots }) { + return () => { + if (!slots) return null; + return hasPerms(props.value) ? ( + {slots.default?.()} + ) : null; + }; + } +}); diff --git a/Yi.Pure.Vue3/src/components/RePureTableBar/index.ts b/Yi.Pure.Vue3/src/components/RePureTableBar/index.ts new file mode 100644 index 00000000..31b8a16e --- /dev/null +++ b/Yi.Pure.Vue3/src/components/RePureTableBar/index.ts @@ -0,0 +1,5 @@ +import pureTableBar from "./src/bar"; +import { withInstall } from "@pureadmin/utils"; + +/** 配合 `@pureadmin/table` 实现快速便捷的表格操作 https://github.com/pure-admin/pure-admin-table */ +export const PureTableBar = withInstall(pureTableBar); diff --git a/Yi.Pure.Vue3/src/components/RePureTableBar/src/bar.tsx b/Yi.Pure.Vue3/src/components/RePureTableBar/src/bar.tsx new file mode 100644 index 00000000..5367c6b3 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/RePureTableBar/src/bar.tsx @@ -0,0 +1,393 @@ +import Sortable from "sortablejs"; +import { transformI18n } from "@/plugins/i18n"; +import { useEpThemeStoreHook } from "@/store/modules/epTheme"; +import { + type PropType, + ref, + unref, + computed, + nextTick, + defineComponent, + getCurrentInstance +} from "vue"; +import { + delay, + cloneDeep, + isBoolean, + isFunction, + getKeyList +} from "@pureadmin/utils"; + +import Fullscreen from "@iconify-icons/ri/fullscreen-fill"; +import ExitFullscreen from "@iconify-icons/ri/fullscreen-exit-fill"; +import DragIcon from "@/assets/table-bar/drag.svg?component"; +import ExpandIcon from "@/assets/table-bar/expand.svg?component"; +import RefreshIcon from "@/assets/table-bar/refresh.svg?component"; +import SettingIcon from "@/assets/table-bar/settings.svg?component"; +import CollapseIcon from "@/assets/table-bar/collapse.svg?component"; + +const props = { + /** 头部最左边的标题 */ + title: { + type: String, + default: "列表" + }, + /** 对于树形表格,如果想启用展开和折叠功能,传入当前表格的ref即可 */ + tableRef: { + type: Object as PropType + }, + /** 需要展示的列 */ + columns: { + type: Array as PropType, + default: () => [] + }, + isExpandAll: { + type: Boolean, + default: true + }, + tableKey: { + type: [String, Number] as PropType, + default: "0" + } +}; + +export default defineComponent({ + name: "PureTableBar", + props, + emits: ["refresh"], + setup(props, { emit, slots, attrs }) { + const size = ref("default"); + const loading = ref(false); + const checkAll = ref(true); + const isFullscreen = ref(false); + const isIndeterminate = ref(false); + const instance = getCurrentInstance()!; + const isExpandAll = ref(props.isExpandAll); + const filterColumns = cloneDeep(props?.columns).filter(column => + isBoolean(column?.hide) + ? !column.hide + : !(isFunction(column?.hide) && column?.hide()) + ); + let checkColumnList = getKeyList(cloneDeep(props?.columns), "label"); + const checkedColumns = ref(getKeyList(cloneDeep(filterColumns), "label")); + const dynamicColumns = ref(cloneDeep(props?.columns)); + + const getDropdownItemStyle = computed(() => { + return s => { + return { + background: + s === size.value ? useEpThemeStoreHook().epThemeColor : "", + color: s === size.value ? "#fff" : "var(--el-text-color-primary)" + }; + }; + }); + + const iconClass = computed(() => { + return [ + "text-black", + "dark:text-white", + "duration-100", + "hover:!text-primary", + "cursor-pointer", + "outline-none" + ]; + }); + + const topClass = computed(() => { + return [ + "flex", + "justify-between", + "pt-[3px]", + "px-[11px]", + "border-b-[1px]", + "border-solid", + "border-[#dcdfe6]", + "dark:border-[#303030]" + ]; + }); + + function onReFresh() { + loading.value = true; + emit("refresh"); + delay(500).then(() => (loading.value = false)); + } + + function onExpand() { + isExpandAll.value = !isExpandAll.value; + toggleRowExpansionAll(props.tableRef.data, isExpandAll.value); + } + + function toggleRowExpansionAll(data, isExpansion) { + data.forEach(item => { + props.tableRef.toggleRowExpansion(item, isExpansion); + if (item.children !== undefined && item.children !== null) { + toggleRowExpansionAll(item.children, isExpansion); + } + }); + } + + function handleCheckAllChange(val: boolean) { + checkedColumns.value = val ? checkColumnList : []; + isIndeterminate.value = false; + dynamicColumns.value.map(column => + val ? (column.hide = false) : (column.hide = true) + ); + } + + function handleCheckedColumnsChange(value: string[]) { + checkedColumns.value = value; + const checkedCount = value.length; + checkAll.value = checkedCount === checkColumnList.length; + isIndeterminate.value = + checkedCount > 0 && checkedCount < checkColumnList.length; + } + + function handleCheckColumnListChange(val: boolean, label: string) { + dynamicColumns.value.filter( + item => transformI18n(item.label) === transformI18n(label) + )[0].hide = !val; + } + + async function onReset() { + checkAll.value = true; + isIndeterminate.value = false; + dynamicColumns.value = cloneDeep(props?.columns); + checkColumnList = []; + checkColumnList = await getKeyList(cloneDeep(props?.columns), "label"); + checkedColumns.value = getKeyList(cloneDeep(filterColumns), "label"); + } + + const dropdown = { + dropdown: () => ( + + (size.value = "large")} + > + 宽松 + + (size.value = "default")} + > + 默认 + + (size.value = "small")} + > + 紧凑 + + + ) + }; + + /** 列展示拖拽排序 */ + const rowDrop = (event: { preventDefault: () => void }) => { + event.preventDefault(); + nextTick(() => { + const wrapper: HTMLElement = ( + instance?.proxy?.$refs[`GroupRef${unref(props.tableKey)}`] as any + ).$el.firstElementChild; + Sortable.create(wrapper, { + animation: 300, + handle: ".drag-btn", + onEnd: ({ newIndex, oldIndex, item }) => { + const targetThElem = item; + const wrapperElem = targetThElem.parentNode as HTMLElement; + const oldColumn = dynamicColumns.value[oldIndex]; + const newColumn = dynamicColumns.value[newIndex]; + if (oldColumn?.fixed || newColumn?.fixed) { + // 当前列存在fixed属性 则不可拖拽 + const oldThElem = wrapperElem.children[oldIndex] as HTMLElement; + if (newIndex > oldIndex) { + wrapperElem.insertBefore(targetThElem, oldThElem); + } else { + wrapperElem.insertBefore( + targetThElem, + oldThElem ? oldThElem.nextElementSibling : oldThElem + ); + } + return; + } + const currentRow = dynamicColumns.value.splice(oldIndex, 1)[0]; + dynamicColumns.value.splice(newIndex, 0, currentRow); + } + }); + }); + }; + + const isFixedColumn = (label: string) => { + return dynamicColumns.value.filter( + item => transformI18n(item.label) === transformI18n(label) + )[0].fixed + ? true + : false; + }; + + const rendTippyProps = (content: string) => { + // https://vue-tippy.netlify.app/props + return { + content, + offset: [0, 18], + duration: [300, 0], + followCursor: true, + hideOnClick: "toggle" + }; + }; + + const reference = { + reference: () => ( + + ) + }; + + return () => ( + <> +
+
+ {slots?.title ? ( + slots.title() + ) : ( +

{props.title}

+ )} +
+ {slots?.buttons ? ( +
{slots.buttons()}
+ ) : null} + {props.tableRef?.size ? ( + <> + onExpand()} + /> + + + ) : null} + onReFresh()} + /> + + + + + + + +
+ handleCheckAllChange(value)} + /> + onReset()}> + 重置 + +
+ +
+ + handleCheckedColumnsChange(value)} + > + + {checkColumnList.map((item, index) => { + return ( +
+ void; + }) => rowDrop(event)} + /> + + handleCheckColumnListChange(value, item) + } + > + + {transformI18n(item)} + + +
+ ); + })} +
+
+
+
+
+ + + (isFullscreen.value = !isFullscreen.value)} + /> +
+
+ {slots.default({ + size: size.value, + dynamicColumns: dynamicColumns.value + })} +
+ + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReQrcode/index.ts b/Yi.Pure.Vue3/src/components/ReQrcode/index.ts new file mode 100644 index 00000000..48037a8b --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReQrcode/index.ts @@ -0,0 +1,7 @@ +import reQrcode from "./src/index"; +import { withInstall } from "@pureadmin/utils"; + +/** 二维码组件 */ +export const ReQrcode = withInstall(reQrcode); + +export default ReQrcode; diff --git a/Yi.Pure.Vue3/src/components/ReQrcode/src/index.scss b/Yi.Pure.Vue3/src/components/ReQrcode/src/index.scss new file mode 100644 index 00000000..66ff6348 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReQrcode/src/index.scss @@ -0,0 +1,9 @@ +.qrcode { + &--disabled { + background: rgb(255 255 255 / 95%); + + & > div { + transform: translate(-50%, -50%); + } + } +} diff --git a/Yi.Pure.Vue3/src/components/ReQrcode/src/index.tsx b/Yi.Pure.Vue3/src/components/ReQrcode/src/index.tsx new file mode 100644 index 00000000..98127152 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReQrcode/src/index.tsx @@ -0,0 +1,261 @@ +import { + type PropType, + ref, + unref, + watch, + nextTick, + computed, + defineComponent +} from "vue"; +import "./index.scss"; +import propTypes from "@/utils/propTypes"; +import { isString, cloneDeep } from "@pureadmin/utils"; +import QRCode, { type QRCodeRenderersOptions } from "qrcode"; +import RefreshRight from "@iconify-icons/ep/refresh-right"; + +interface QrcodeLogo { + src?: string; + logoSize?: number; + bgColor?: string; + borderSize?: number; + crossOrigin?: string; + borderRadius?: number; + logoRadius?: number; +} + +const props = { + // img 或者 canvas,img不支持logo嵌套 + tag: propTypes.string + .validate((v: string) => ["canvas", "img"].includes(v)) + .def("canvas"), + // 二维码内容 + text: { + type: [String, Array] as PropType, + default: null + }, + // qrcode.js配置项 + options: { + type: Object as PropType, + default: (): QRCodeRenderersOptions => ({}) + }, + // 宽度 + width: propTypes.number.def(200), + // logo + logo: { + type: [String, Object] as PropType | string>, + default: (): QrcodeLogo | string => "" + }, + // 是否过期 + disabled: propTypes.bool.def(false), + // 过期提示内容 + disabledText: propTypes.string.def("") +}; + +export default defineComponent({ + name: "ReQrcode", + props, + emits: ["done", "click", "disabled-click"], + setup(props, { emit }) { + const { toCanvas, toDataURL } = QRCode; + const loading = ref(true); + const wrapRef = ref>(null); + const renderText = computed(() => String(props.text)); + const wrapStyle = computed(() => { + return { + width: props.width + "px", + height: props.width + "px" + }; + }); + const initQrcode = async () => { + await nextTick(); + const options = cloneDeep(props.options || {}); + if (props.tag === "canvas") { + // 容错率,默认对内容少的二维码采用高容错率,内容多的二维码采用低容错率 + options.errorCorrectionLevel = + options.errorCorrectionLevel || + getErrorCorrectionLevel(unref(renderText)); + const _width: number = await getOriginWidth(unref(renderText), options); + options.scale = + props.width === 0 ? undefined : (props.width / _width) * 4; + const canvasRef: any = await toCanvas( + unref(wrapRef) as HTMLCanvasElement, + unref(renderText), + options + ); + if (props.logo) { + const url = await createLogoCode(canvasRef); + emit("done", url); + loading.value = false; + } else { + emit("done", canvasRef.toDataURL()); + loading.value = false; + } + } else { + const url = await toDataURL(renderText.value, { + errorCorrectionLevel: "H", + width: props.width, + ...options + }); + (unref(wrapRef) as any).src = url; + emit("done", url); + loading.value = false; + } + }; + watch( + () => renderText.value, + val => { + if (!val) return; + initQrcode(); + }, + { + deep: true, + immediate: true + } + ); + const createLogoCode = (canvasRef: HTMLCanvasElement) => { + const canvasWidth = canvasRef.width; + const logoOptions: QrcodeLogo = Object.assign( + { + logoSize: 0.15, + bgColor: "#ffffff", + borderSize: 0.05, + crossOrigin: "anonymous", + borderRadius: 8, + logoRadius: 0 + }, + isString(props.logo) ? {} : props.logo + ); + const { + logoSize = 0.15, + bgColor = "#ffffff", + borderSize = 0.05, + crossOrigin = "anonymous", + borderRadius = 8, + logoRadius = 0 + } = logoOptions; + const logoSrc = isString(props.logo) ? props.logo : props.logo.src; + const logoWidth = canvasWidth * logoSize; + const logoXY = (canvasWidth * (1 - logoSize)) / 2; + const logoBgWidth = canvasWidth * (logoSize + borderSize); + const logoBgXY = (canvasWidth * (1 - logoSize - borderSize)) / 2; + const ctx = canvasRef.getContext("2d"); + if (!ctx) return; + // logo 底色 + canvasRoundRect(ctx)( + logoBgXY, + logoBgXY, + logoBgWidth, + logoBgWidth, + borderRadius + ); + ctx.fillStyle = bgColor; + ctx.fill(); + // logo + const image = new Image(); + if (crossOrigin || logoRadius) { + image.setAttribute("crossOrigin", crossOrigin); + } + (image as any).src = logoSrc; + // 使用image绘制可以避免某些跨域情况 + const drawLogoWithImage = (image: HTMLImageElement) => { + ctx.drawImage(image, logoXY, logoXY, logoWidth, logoWidth); + }; + // 使用canvas绘制以获得更多的功能 + const drawLogoWithCanvas = (image: HTMLImageElement) => { + const canvasImage = document.createElement("canvas"); + canvasImage.width = logoXY + logoWidth; + canvasImage.height = logoXY + logoWidth; + const imageCanvas = canvasImage.getContext("2d"); + if (!imageCanvas || !ctx) return; + imageCanvas.drawImage(image, logoXY, logoXY, logoWidth, logoWidth); + canvasRoundRect(ctx)(logoXY, logoXY, logoWidth, logoWidth, logoRadius); + if (!ctx) return; + const fillStyle = ctx.createPattern(canvasImage, "no-repeat"); + if (fillStyle) { + ctx.fillStyle = fillStyle; + ctx.fill(); + } + }; + // 将 logo绘制到 canvas上 + return new Promise((resolve: any) => { + image.onload = () => { + logoRadius ? drawLogoWithCanvas(image) : drawLogoWithImage(image); + resolve(canvasRef.toDataURL()); + }; + }); + }; + // 得到原QrCode的大小,以便缩放得到正确的QrCode大小 + const getOriginWidth = async ( + content: string, + options: QRCodeRenderersOptions + ) => { + const _canvas = document.createElement("canvas"); + await toCanvas(_canvas, content, options); + return _canvas.width; + }; + // 对于内容少的QrCode,增大容错率 + const getErrorCorrectionLevel = (content: string) => { + if (content.length > 36) { + return "M"; + } else if (content.length > 16) { + return "Q"; + } else { + return "H"; + } + }; + // 用于绘制圆角 + const canvasRoundRect = (ctx: CanvasRenderingContext2D) => { + return (x: number, y: number, w: number, h: number, r: number) => { + const minSize = Math.min(w, h); + if (r > minSize / 2) { + r = minSize / 2; + } + ctx.beginPath(); + ctx.moveTo(x + r, y); + ctx.arcTo(x + w, y, x + w, y + h, r); + ctx.arcTo(x + w, y + h, x, y + h, r); + ctx.arcTo(x, y + h, x, y, r); + ctx.arcTo(x, y, x + w, y, r); + ctx.closePath(); + return ctx; + }; + }; + const clickCode = () => { + emit("click"); + }; + const disabledClick = () => { + emit("disabled-click"); + }; + return () => ( + <> +
+ {props.tag === "canvas" ? ( + + ) : ( + + )} + {props.disabled && ( +
+
+ +
{props.disabledText}
+
+
+ )} +
+ + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReSeamlessScroll/index.ts b/Yi.Pure.Vue3/src/components/ReSeamlessScroll/index.ts new file mode 100644 index 00000000..2d3766a9 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSeamlessScroll/index.ts @@ -0,0 +1,7 @@ +import reSeamlessScroll from "./src/index.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** 无缝滚动组件 */ +export const ReSeamlessScroll = withInstall(reSeamlessScroll); + +export default ReSeamlessScroll; diff --git a/Yi.Pure.Vue3/src/components/ReSeamlessScroll/src/index.vue b/Yi.Pure.Vue3/src/components/ReSeamlessScroll/src/index.vue new file mode 100644 index 00000000..37dda0ff --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSeamlessScroll/src/index.vue @@ -0,0 +1,538 @@ + + + diff --git a/Yi.Pure.Vue3/src/components/ReSeamlessScroll/src/utils.ts b/Yi.Pure.Vue3/src/components/ReSeamlessScroll/src/utils.ts new file mode 100644 index 00000000..47934c93 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSeamlessScroll/src/utils.ts @@ -0,0 +1,115 @@ +/** + * @desc AnimationFrame简单兼容hack + */ +export const animationFrame = () => { + window.cancelAnimationFrame = (() => { + return ( + window.cancelAnimationFrame || + window.webkitCancelAnimationFrame || + window.mozCancelAnimationFrame || + window.oCancelAnimationFrame || + window.msCancelAnimationFrame || + function (id) { + return window.clearTimeout(id); + } + ); + })(); + window.requestAnimationFrame = (function () { + return ( + window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function (callback) { + return window.setTimeout(callback, 1000 / 60); + } + ); + })(); +}; + +/** + * @desc 判断数组是否相等 + * @return {Boolean} + * @param arr1 + * @param arr2 + */ +export const arrayEqual = (arr1: Array, arr2: Array) => { + if (arr1 === arr2) return true; + if (arr1.length !== arr2.length) return false; + for (let i = 0; i < arr1.length; ++i) { + if (arr1[i] !== arr2[i]) return false; + } + return true; +}; + +/** + * @desc 深浅合并拷贝 + */ +export function copyObj() { + if (!Array.isArray) { + // @ts-expect-error + Array.isArray = function (arg) { + return Object.prototype.toString.call(arg) === "[object Array]"; + }; + } + let name, + options, + src, + copy, + copyIsArray, + clone, + i = 1, + target = arguments[0] || {}, // 使用||运算符,排除隐式强制类型转换为false的数据类型 + deep = false, + len = arguments.length; + if (typeof target === "boolean") { + deep = target; + + target = arguments[1] || {}; + i++; + } + if (typeof target !== "object" && typeof target !== "function") { + target = {}; + } + // 如果arguments.length === 1 或typeof arguments[0] === 'boolean',且存在arguments[1],则直接返回target对象 + if (i === len) { + return target; + } + for (; i < len; i++) { + //所以如果源对象中数据类型为Undefined或Null那么就会跳过本次循环,接着循环下一个源对象 + + if ((options = arguments[i]) != null) { + // 如果遇到源对象的数据类型为Boolean, Number for in循环会被跳过,不执行for in循环// src用于判断target对象是否存在name属性 + for (name in options) { + // src用于判断target对象是否存在name属性 + src = target[name]; + // 需要复制的属性当前源对象的name属性 + copy = options[name]; + // 判断copy是否是数组 + copyIsArray = Array.isArray(copy); + // 如果是深复制且copy是一个对象或数组则需要递归直到copy成为一个基本数据类型为止 + if (deep && copy && (typeof copy === "object" || copyIsArray)) { + if (copyIsArray) { + copyIsArray = false; + // 如果目标对象存在name属性且是一个数组 + // 则使用目标对象的name属性,否则重新创建一个数组,用于复制 + clone = src && Array.isArray(src) ? src : []; + } else { + // 如果目标对象存在name属性且是一个对象则使用目标对象的name属性,否则重新创建一个对象,用于复制 + clone = src && typeof src === "object" ? src : {}; + } + // 深复制,所以递归调用copyObject函数 + // 返回值为target对象,即clone对象 + // copy是一个源对象 + // @ts-expect-error + target[name] = copyObj(deep, clone, copy); + } else if (copy !== undefined) { + // 浅复制,直接复制到target对象上 + target[name] = copy; + } + } + } + } + return target; +} diff --git a/Yi.Pure.Vue3/src/components/ReSegmented/index.ts b/Yi.Pure.Vue3/src/components/ReSegmented/index.ts new file mode 100644 index 00000000..de4253c4 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSegmented/index.ts @@ -0,0 +1,8 @@ +import reSegmented from "./src/index"; +import { withInstall } from "@pureadmin/utils"; + +/** 分段控制器组件 */ +export const ReSegmented = withInstall(reSegmented); + +export default ReSegmented; +export type { OptionsType } from "./src/type"; diff --git a/Yi.Pure.Vue3/src/components/ReSegmented/src/index.css b/Yi.Pure.Vue3/src/components/ReSegmented/src/index.css new file mode 100644 index 00000000..503bbe43 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSegmented/src/index.css @@ -0,0 +1,157 @@ +.pure-segmented { + --pure-control-padding-horizontal: 12px; + --pure-control-padding-horizontal-sm: 8px; + --pure-segmented-track-padding: 2px; + --pure-segmented-line-width: 1px; + + --pure-segmented-border-radius-small: 4px; + --pure-segmented-border-radius-base: 6px; + --pure-segmented-border-radius-large: 8px; + + box-sizing: border-box; + display: inline-block; + padding: var(--pure-segmented-track-padding); + font-size: var(--el-font-size-base); + color: rgba(0, 0, 0, 0.65); + background-color: rgb(0 0 0 / 4%); + border-radius: var(--pure-segmented-border-radius-base); +} + +.pure-segmented-block { + display: flex; +} + +.pure-segmented-block .pure-segmented-item { + flex: 1; + min-width: 0; +} + +.pure-segmented-block .pure-segmented-item > .pure-segmented-item-label > span { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* small */ +.pure-segmented.pure-segmented--small { + border-radius: var(--pure-segmented-border-radius-small); +} +.pure-segmented.pure-segmented--small .pure-segmented-item { + border-radius: var(--el-border-radius-small); +} +.pure-segmented.pure-segmented--small .pure-segmented-item > div { + min-height: calc( + var(--el-component-size-small) - var(--pure-segmented-track-padding) * 2 + ); + line-height: calc( + var(--el-component-size-small) - var(--pure-segmented-track-padding) * 2 + ); + padding: 0 + calc( + var(--pure-control-padding-horizontal-sm) - + var(--pure-segmented-line-width) + ); +} + +/* large */ +.pure-segmented.pure-segmented--large { + border-radius: var(--pure-segmented-border-radius-large); +} +.pure-segmented.pure-segmented--large .pure-segmented-item { + border-radius: calc( + var(--el-border-radius-base) + var(--el-border-radius-small) + ); +} +.pure-segmented.pure-segmented--large .pure-segmented-item > div { + min-height: calc( + var(--el-component-size-large) - var(--pure-segmented-track-padding) * 2 + ); + line-height: calc( + var(--el-component-size-large) - var(--pure-segmented-track-padding) * 2 + ); + padding: 0 + calc( + var(--pure-control-padding-horizontal) - var(--pure-segmented-line-width) + ); + font-size: var(--el-font-size-medium); +} + +/* default */ +.pure-segmented-item { + position: relative; + text-align: center; + cursor: pointer; + border-radius: var(--el-border-radius-base); + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); +} +.pure-segmented .pure-segmented-item > div { + min-height: calc( + var(--el-component-size) - var(--pure-segmented-track-padding) * 2 + ); + line-height: calc( + var(--el-component-size) - var(--pure-segmented-track-padding) * 2 + ); + padding: 0 + calc( + var(--pure-control-padding-horizontal) - var(--pure-segmented-line-width) + ); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + transition: 0.1s; +} + +.pure-segmented-group { + position: relative; + display: flex; + align-items: stretch; + justify-items: flex-start; + width: 100%; +} + +.pure-segmented-item-selected { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + display: none; + width: 0; + height: 100%; + padding: 4px 0; + background-color: #fff; + border-radius: 4px; + box-shadow: + 0 2px 8px -2px rgb(0 0 0 / 5%), + 0 1px 4px -1px rgb(0 0 0 / 7%), + 0 0 1px rgb(0 0 0 / 7%); + transition: + transform 0.5s cubic-bezier(0.645, 0.045, 0.355, 1), + width 0.5s cubic-bezier(0.645, 0.045, 0.355, 1); + will-change: transform, width; +} + +.pure-segmented-item > input { + position: absolute; + inset-block-start: 0; + inset-inline-start: 0; + width: 0; + height: 0; + opacity: 0; + pointer-events: none; +} + +.pure-segmented-item-label { + display: flex; + align-items: center; + justify-content: center; +} + +.pure-segmented-item-icon svg { + width: 16px; + height: 16px; +} + +.pure-segmented-item-disabled { + color: rgba(0, 0, 0, 0.25); + cursor: not-allowed; +} diff --git a/Yi.Pure.Vue3/src/components/ReSegmented/src/index.tsx b/Yi.Pure.Vue3/src/components/ReSegmented/src/index.tsx new file mode 100644 index 00000000..39580ed8 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSegmented/src/index.tsx @@ -0,0 +1,216 @@ +import "./index.css"; +import type { OptionsType } from "./type"; +import { useRenderIcon } from "@/components/ReIcon/src/hooks"; +import { + useDark, + isNumber, + isFunction, + useResizeObserver +} from "@pureadmin/utils"; +import { + type PropType, + h, + ref, + toRef, + watch, + nextTick, + defineComponent, + getCurrentInstance +} from "vue"; + +const props = { + options: { + type: Array, + default: () => [] + }, + /** 默认选中,按照第一个索引为 `0` 的模式,可选(`modelValue`只有传`number`类型时才为响应式) */ + modelValue: { + type: undefined, + require: false, + default: "0" + }, + /** 将宽度调整为父元素宽度 */ + block: { + type: Boolean, + default: false + }, + /** 控件尺寸 */ + size: { + type: String as PropType<"small" | "default" | "large"> + }, + /** 是否全局禁用,默认 `false` */ + disabled: { + type: Boolean, + default: false + }, + /** 当内容发生变化时,设置 `resize` 可使其自适应容器位置 */ + resize: { + type: Boolean, + default: false + } +}; + +export default defineComponent({ + name: "ReSegmented", + props, + emits: ["change", "update:modelValue"], + setup(props, { emit }) { + const width = ref(0); + const translateX = ref(0); + const { isDark } = useDark(); + const initStatus = ref(false); + const curMouseActive = ref(-1); + const segmentedItembg = ref(""); + const instance = getCurrentInstance()!; + const curIndex = isNumber(props.modelValue) + ? toRef(props, "modelValue") + : ref(0); + + function handleChange({ option, index }, event: Event) { + if (props.disabled || option.disabled) return; + event.preventDefault(); + isNumber(props.modelValue) + ? emit("update:modelValue", index) + : (curIndex.value = index); + segmentedItembg.value = ""; + emit("change", { index, option }); + } + + function handleMouseenter({ option, index }, event: Event) { + if (props.disabled) return; + event.preventDefault(); + curMouseActive.value = index; + if (option.disabled || curIndex.value === index) { + segmentedItembg.value = ""; + } else { + segmentedItembg.value = isDark.value + ? "#1f1f1f" + : "rgba(0, 0, 0, 0.06)"; + } + } + + function handleMouseleave(_, event: Event) { + if (props.disabled) return; + event.preventDefault(); + curMouseActive.value = -1; + } + + function handleInit(index = curIndex.value) { + nextTick(() => { + const curLabelRef = instance?.proxy?.$refs[`labelRef${index}`] as ElRef; + if (!curLabelRef) return; + width.value = curLabelRef.clientWidth; + translateX.value = curLabelRef.offsetLeft; + initStatus.value = true; + }); + } + + function handleResizeInit() { + useResizeObserver(".pure-segmented", () => { + nextTick(() => { + handleInit(curIndex.value); + }); + }); + } + + (props.block || props.resize) && handleResizeInit(); + + watch( + () => curIndex.value, + index => { + nextTick(() => { + handleInit(index); + }); + }, + { + immediate: true + } + ); + + watch(() => props.size, handleResizeInit, { + immediate: true + }); + + const rendLabel = () => { + return props.options.map((option, index) => { + return ( + + ); + }); + }; + + return () => ( +
+
+
+ {rendLabel()} +
+
+ ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReSegmented/src/type.ts b/Yi.Pure.Vue3/src/components/ReSegmented/src/type.ts new file mode 100644 index 00000000..205e34dc --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSegmented/src/type.ts @@ -0,0 +1,20 @@ +import type { VNode, Component } from "vue"; +import type { iconType } from "@/components/ReIcon/src/types.ts"; + +export interface OptionsType { + /** 文字 */ + label?: string | (() => VNode | Component); + /** + * @description 图标,采用平台内置的 `useRenderIcon` 函数渲染 + * @see {@link 用法参考 https://pure-admin.github.io/pure-admin-doc/pages/icon/#%E9%80%9A%E7%94%A8%E5%9B%BE%E6%A0%87-userendericon-hooks } + */ + icon?: string | Component; + /** 图标属性、样式配置 */ + iconAttrs?: iconType; + /** 值 */ + value?: any; + /** 是否禁用 */ + disabled?: boolean; + /** `tooltip` 提示 */ + tip?: string; +} diff --git a/Yi.Pure.Vue3/src/components/ReSelector/index.ts b/Yi.Pure.Vue3/src/components/ReSelector/index.ts new file mode 100644 index 00000000..3e28ddcf --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSelector/index.ts @@ -0,0 +1,7 @@ +import reSelector from "./src"; +import { withInstall } from "@pureadmin/utils"; + +/** 选择器组件 */ +export const ReSelector = withInstall(reSelector); + +export default ReSelector; diff --git a/Yi.Pure.Vue3/src/components/ReSelector/src/index.css b/Yi.Pure.Vue3/src/components/ReSelector/src/index.css new file mode 100644 index 00000000..b66b337c --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSelector/src/index.css @@ -0,0 +1,28 @@ +.hs-rate__icon { + font-size: 18px; + transition: 0.3s; +} + +.hs-item { + width: 30px; + height: 30px; + box-sizing: border-box; + line-height: 30px; +} + +.hs-on { + background-color: #409eff; + border-radius: 50%; +} + +.hs-range { + background-color: #f2f6fc; +} + +.both-left-sides { + border-radius: 50% 0 0 50%; +} + +.both-right-sides { + border-radius: 0 50% 50% 0; +} diff --git a/Yi.Pure.Vue3/src/components/ReSelector/src/index.tsx b/Yi.Pure.Vue3/src/components/ReSelector/src/index.tsx new file mode 100644 index 00000000..8922f772 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSelector/src/index.tsx @@ -0,0 +1,327 @@ +import "./index.css"; +import { + unref, + computed, + nextTick, + onBeforeMount, + defineComponent, + getCurrentInstance +} from "vue"; +import { addClass, removeClass, toggleClass } from "@pureadmin/utils"; + +const stayClass = "stay"; //鼠标点击 +const activeClass = "hs-on"; //鼠标移动上去 +const voidClass = "hs-off"; //鼠标移开 +const inRange = "hs-range"; //当前选中的两个元素之间的背景 +const bothLeftSides = "both-left-sides"; +const bothRightSides = "both-right-sides"; +let selectedDirection = "right"; //默认从左往右,索引变大 + +let overList = []; +// 存放第一个选中的元素和最后一个选中元素,只能存放这两个元素 +let selectedList = []; + +const props = { + HsKey: { + type: Number || String, + default: 0 + }, + disabled: { + type: Boolean, + default: false + }, + value: { + type: Number, + default: 0 + }, + max: { + type: Array, + default() { + return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + } + }, + // 回显数据的索引,长度必须是2 + echo: { + type: Array, + default() { + return []; + } + } +}; + +export default defineComponent({ + name: "ReSelector", + props, + emits: ["selectedVal"], + setup(props, { emit }) { + const instance = getCurrentInstance(); + const currentValue = props.value; + + const rateDisabled = computed(() => { + return props.disabled; + }); + + const classes = computed(() => { + const result = []; + let i = 0; + let threshold = currentValue; + if (currentValue !== Math.floor(currentValue)) { + threshold--; + } + for (; i < threshold; i++) { + result.push(activeClass); + } + for (; i < props.max.length; i++) { + result.push(voidClass); + } + return result; + }); + + // 鼠标移入 + const setCurrentValue = index => { + if (props.disabled) return; + // 当选中一个元素后,开始添加背景色 + if (selectedList.length === 1) { + if (overList.length < 1) overList.push({ index }); + + let firstIndex = overList[0].index; + + // 往右走,索引变大 + if (index > firstIndex) { + selectedDirection = "right"; + toggleClass( + false, + bothRightSides, + document.querySelector(".hs-select__item" + selectedList[0].index) + ); + + while (index >= firstIndex) { + addClass( + document.querySelector(".hs-select__item" + firstIndex), + inRange + ); + firstIndex++; + } + } else { + selectedDirection = "left"; + toggleClass( + true, + bothRightSides, + document.querySelector(".hs-select__item" + selectedList[0].index) + ); + + while (index <= firstIndex) { + addClass( + document.querySelector(".hs-select__item" + firstIndex), + inRange + ); + firstIndex--; + } + } + } + + addClass(document.querySelector("." + voidClass + index), activeClass); + }; + + // 鼠标离开 + const resetCurrentValue = index => { + if (props.disabled) return; + // 移除先检查是否选中 选中则返回false 不移除 + const currentHsDom = document.querySelector("." + voidClass + index); + if (currentHsDom.className.includes(stayClass)) { + return false; + } else { + removeClass(currentHsDom, activeClass); + } + + // 当选中一个元素后,开始移除背景色 + if (selectedList.length === 1) { + const firstIndex = overList[0].index; + if (index >= firstIndex) { + for (let i = 0; i <= index; i++) { + removeClass( + document.querySelector(".hs-select__item" + i), + inRange + ); + } + } else { + while (index <= firstIndex) { + removeClass( + document.querySelector(".hs-select__item" + index), + inRange + ); + index++; + } + } + } + }; + + // 鼠标点击 + const selectValue = (index, item) => { + if (props.disabled) return; + const len = selectedList.length; + + if (len < 2) { + selectedList.push({ item, index }); + addClass(document.querySelector("." + voidClass + index), stayClass); + + addClass( + document.querySelector(".hs-select__item" + selectedList[0].index), + bothLeftSides + ); + + if (selectedList[1]) { + if (selectedDirection === "right") { + addClass( + document.querySelector( + ".hs-select__item" + selectedList[1].index + ), + bothRightSides + ); + } else { + addClass( + document.querySelector( + ".hs-select__item" + selectedList[1].index + ), + bothLeftSides + ); + } + } + + if (len === 1) { + // 顺时针排序 + if (selectedDirection === "right") { + emit("selectedVal", { + left: selectedList[0].item, + right: selectedList[1].item, + whole: selectedList + }); + } else { + emit("selectedVal", { + left: selectedList[1].item, + right: selectedList[0].item, + whole: selectedList + }); + } + } + } else { + nextTick(() => { + selectedList.forEach(v => { + removeClass( + document.querySelector("." + voidClass + v.index), + activeClass, + stayClass + ); + + removeClass( + document.querySelector(".hs-select__item" + v.index), + bothLeftSides, + bothRightSides + ); + }); + + selectedList = []; + overList = []; + for (let i = 0; i <= props.max.length; i++) { + const currentDom = document.querySelector(".hs-select__item" + i); + if (currentDom) { + removeClass(currentDom, inRange); + } + } + + selectedList.push({ item, index }); + addClass(document.querySelector("." + voidClass + index), stayClass); + + addClass( + document.querySelector(".hs-select__item" + selectedList[0].index), + bothLeftSides + ); + }); + } + }; + + // 回显数据 + const echoView = item => { + if (item.length === 0) return; + + if (item.length > 2 || item.length === 1) { + throw "传入的数组长度必须是2"; + } + + item.sort((a, b) => { + return a - b; + }); + + addClass( + instance.refs["hsdiv" + props.HsKey + item[0]] as Element, + activeClass, + stayClass + ); + + addClass( + instance.refs["hstd" + props.HsKey + item[0]] as Element, + bothLeftSides + ); + + addClass( + instance.refs["hsdiv" + props.HsKey + item[1]] as Element, + activeClass, + stayClass + ); + + addClass( + instance.refs["hstd" + props.HsKey + item[1]] as Element, + bothRightSides + ); + + while (item[1] >= item[0]) { + addClass( + instance.refs["hstd" + props.HsKey + item[0]] as Element, + inRange + ); + item[0]++; + } + }; + + onBeforeMount(() => { + nextTick(() => { + echoView(props.echo); + }); + }); + + return () => ( + <> + + + + {props.max.map((item, key) => { + return ( + + ); + })} + + +
setCurrentValue(key)} + onMouseleave={() => resetCurrentValue(key)} + onClick={() => selectValue(key, item)} + style={{ + cursor: unref(rateDisabled) ? "auto" : "pointer", + textAlign: "center" + }} + key={key} + > +
+ {item} +
+
+ + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.css b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.css new file mode 100644 index 00000000..25bea766 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.css @@ -0,0 +1,23 @@ +@font-face { + font-family: "iconfont"; /* Project id 3268330 */ + src: + url("iconfont.woff2?t=1647939915215") format("woff2"), + url("iconfont.woff?t=1647939915215") format("woff"), + url("iconfont.ttf?t=1647939915215") format("truetype"); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-tuozhuai1:before { + content: "\e647"; +} + +.icon-tuozhuai1-copy:before { + content: "\eda3"; +} diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.js b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.js new file mode 100644 index 00000000..c09a927f --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.js @@ -0,0 +1,65 @@ +!(function (e) { + var t, + n, + c, + o, + s, + i = + '', + d = (d = document.getElementsByTagName("script"))[ + d.length - 1 + ].getAttribute("data-injectcss"), + m = function (e, t) { + t.parentNode.insertBefore(e, t); + }; + if (d && !e.__iconfont__svg__cssinject__) { + e.__iconfont__svg__cssinject__ = !0; + try { + document.write( + "" + ); + } catch (e) { + console && console.log(e); + } + } + function l() { + s || ((s = !0), c()); + } + function a() { + try { + o.documentElement.doScroll("left"); + } catch (e) { + return void setTimeout(a, 50); + } + l(); + } + (t = function () { + var e, + t = document.createElement("div"); + (t.innerHTML = i), + (i = null), + (t = t.getElementsByTagName("svg")[0]) && + (t.setAttribute("aria-hidden", "true"), + (t.style.position = "absolute"), + (t.style.width = 0), + (t.style.height = 0), + (t.style.overflow = "hidden"), + (t = t), + (e = document.body).firstChild ? m(t, e.firstChild) : e.appendChild(t)); + }), + document.addEventListener + ? ~["complete", "loaded", "interactive"].indexOf(document.readyState) + ? setTimeout(t, 0) + : ((n = function () { + document.removeEventListener("DOMContentLoaded", n, !1), t(); + }), + document.addEventListener("DOMContentLoaded", n, !1)) + : document.attachEvent && + ((c = t), + (o = e.document), + (s = !1), + a(), + (o.onreadystatechange = function () { + "complete" == o.readyState && ((o.onreadystatechange = null), l()); + })); +})(window); diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.json b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.json new file mode 100644 index 00000000..7dcd08e1 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.json @@ -0,0 +1,23 @@ +{ + "id": "3268330", + "name": "split", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "22378774", + "name": "拖拽", + "font_class": "tuozhuai1", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "23570521", + "name": "拖拽", + "font_class": "tuozhuai1-copy", + "unicode": "eda3", + "unicode_decimal": 60835 + } + ] +} diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.ttf b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.ttf new file mode 100644 index 00000000..04cbfdac Binary files /dev/null and b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.ttf differ diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.woff b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.woff new file mode 100644 index 00000000..9bd75a2f Binary files /dev/null and b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.woff differ diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.woff2 b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.woff2 new file mode 100644 index 00000000..ce75fa6d Binary files /dev/null and b/Yi.Pure.Vue3/src/components/ReSplitPane/iconfont/iconfont.woff2 differ diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/index.css b/Yi.Pure.Vue3/src/components/ReSplitPane/index.css new file mode 100644 index 00000000..130c0e0c --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSplitPane/index.css @@ -0,0 +1,49 @@ +.clearfix::after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; +} + +.vue-splitter-container { + height: 100%; + position: relative; +} + +.vue-splitter-container-mask { + z-index: 9999; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} + +.splitter-pane.vertical.splitter-paneL { + position: absolute; + left: 0; + height: 100%; + padding-right: 3px; +} + +.splitter-pane.vertical.splitter-paneR { + position: absolute; + right: 0; + height: 100%; + padding-left: 3px; +} + +.splitter-pane.horizontal.splitter-paneL { + position: absolute; + top: 0; + width: 100%; +} + +.splitter-pane.horizontal.splitter-paneR { + position: absolute; + bottom: 0; + width: 100%; + padding-top: 3px; +} diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/index.tsx b/Yi.Pure.Vue3/src/components/ReSplitPane/index.tsx new file mode 100644 index 00000000..4143f707 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSplitPane/index.tsx @@ -0,0 +1,136 @@ +import "./index.css"; +import resizer from "./resizer"; +import { type PropType, defineComponent, ref, unref, computed } from "vue"; + +export interface ContextProps { + minPercent: number; + defaultPercent: number; + split: string; +} + +/** 切割面板组件 */ +export default defineComponent({ + name: "SplitPane", + components: { resizer }, + props: { + splitSet: { + type: Object as PropType, + require: true + } + }, + emits: ["resize"], + setup(props, ctx) { + const active = ref(false); + const hasMoved = ref(false); + const percent = ref(props.splitSet?.defaultPercent); + const type = props.splitSet?.split === "vertical" ? "width" : "height"; + const resizeType = props.splitSet?.split === "vertical" ? "left" : "top"; + + const leftClass = ref([ + "splitter-pane splitter-paneL", + props.splitSet?.split + ]); + + const rightClass = ref([ + "splitter-pane splitter-paneR", + props.splitSet?.split + ]); + + const cursor = computed(() => { + return active.value + ? props.splitSet?.split === "vertical" + ? { cursor: "col-resize" } + : { cursor: "row-resize" } + : { cursor: "default" }; + }); + + const onClick = (): void => { + if (!hasMoved.value) { + percent.value = 50; + ctx.emit("resize", percent.value); + } + }; + + const onMouseDown = (): void => { + active.value = true; + hasMoved.value = false; + }; + + const onMouseUp = (): void => { + active.value = false; + }; + + const onMouseMove = (e: any): void => { + if (e.buttons === 0 || e.which === 0) { + active.value = false; + } + + if (active.value) { + let offset = 0; + let target = e.currentTarget; + if (props.splitSet?.split === "vertical") { + while (target) { + offset += target.offsetLeft; + target = target.offsetParent; + } + } else { + while (target) { + offset += target.offsetTop; + target = target.offsetParent; + } + } + + const currentPage = + props.splitSet?.split === "vertical" ? e.pageX : e.pageY; + const targetOffset = + props.splitSet?.split === "vertical" + ? e.currentTarget.offsetWidth + : e.currentTarget.offsetHeight; + const percents = + Math.floor(((currentPage - offset) / targetOffset) * 10000) / 100; + + if ( + percents > props.splitSet?.minPercent && + percents < 100 - props.splitSet?.minPercent + ) { + percent.value = percents; + } + + ctx.emit("resize", percent.value); + + hasMoved.value = true; + } + }; + + return () => ( + <> +
onMouseUp()} + onMousemove={() => onMouseMove(event)} + > +
+ {ctx.slots.paneL()} +
+ onMouseDown()} + onClick={() => onClick()} + > +
+ {ctx.slots.paneR()} +
+
+
+ + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/resizer.css b/Yi.Pure.Vue3/src/components/ReSplitPane/resizer.css new file mode 100644 index 00000000..34b1fc22 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSplitPane/resizer.css @@ -0,0 +1,47 @@ +@import "./iconfont/iconfont.css"; + +.splitter-pane-resizer { + box-sizing: border-box; + background: #000; + position: absolute; + opacity: 0.2; + z-index: 1; + background-clip: padding; + background-clip: padding-box; +} + +.splitter-pane-resizer.horizontal { + height: 6px; + width: 100%; + background: #e5e6eb; + cursor: row-resize; +} + +.splitter-pane-resizer.horizontal:before { + content: "\eda3"; + font-family: "iconfont"; + font-size: 13px; + color: #000; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.splitter-pane-resizer.vertical { + width: 6px; + height: 100%; + background: #e5e6eb; + cursor: col-resize; +} + +.splitter-pane-resizer.vertical:before { + content: "\e647"; + font-family: "iconfont"; + font-size: 13px; + color: #000; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} diff --git a/Yi.Pure.Vue3/src/components/ReSplitPane/resizer.tsx b/Yi.Pure.Vue3/src/components/ReSplitPane/resizer.tsx new file mode 100644 index 00000000..b4cee7d5 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReSplitPane/resizer.tsx @@ -0,0 +1,23 @@ +import "./resizer.css"; +import { computed, unref, defineComponent } from "vue"; + +export default defineComponent({ + name: "Resizer", + props: { + split: { + type: String, + required: true + }, + className: { + type: String, + default: "" + } + }, + setup(props) { + const classes = computed(() => { + return ["splitter-pane-resizer", props.split, props.className].join(" "); + }); + + return () =>
; + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReText/index.ts b/Yi.Pure.Vue3/src/components/ReText/index.ts new file mode 100644 index 00000000..62135660 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReText/index.ts @@ -0,0 +1,7 @@ +import reText from "./src/index.vue"; +import { withInstall } from "@pureadmin/utils"; + +/** 支持`Tooltip`提示的文本省略组件 */ +export const ReText = withInstall(reText); + +export default ReText; diff --git a/Yi.Pure.Vue3/src/components/ReText/src/index.vue b/Yi.Pure.Vue3/src/components/ReText/src/index.vue new file mode 100644 index 00000000..ecaebdbb --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReText/src/index.vue @@ -0,0 +1,66 @@ + + + diff --git a/Yi.Pure.Vue3/src/components/ReTreeLine/index.scss b/Yi.Pure.Vue3/src/components/ReTreeLine/index.scss new file mode 100644 index 00000000..c3d22d24 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReTreeLine/index.scss @@ -0,0 +1,55 @@ +$--element-tree-line-color: #dcdfe6 !default; +$--element-tree-line-style: dashed !default; +$--element-tree-line-width: 1px !default; + +/* 添加 el-tree-node__conten 默认没有的 position */ +.el-tree .el-tree-node__content { + position: relative; +} + +.element-tree-node-label-wrapper { + display: flex; + flex: 1; + align-items: center; +} + +.element-tree-node-label { + font-size: 12px; +} + +.element-tree-node-line-ver { + position: absolute; + top: 0; + left: 0; + display: block; + height: 100%; + border-left: $--element-tree-line-width $--element-tree-line-style + $--element-tree-line-color; + + &.last-node-line { + border-left: $--element-tree-line-width $--element-tree-line-style + transparent; + } + + &.last-node-isLeaf-line { + height: 50%; + } +} + +.element-tree-node-line-hor { + position: absolute; + top: 50%; + left: 0; + display: block; + height: 0; + border-bottom: $--element-tree-line-width $--element-tree-line-style + $--element-tree-line-color; +} + +.element-tree-node-label-line { + flex: 1; + align-self: center; + margin: 0 10px; + border-top: $--element-tree-line-width $--element-tree-line-style + $--element-tree-line-color; +} diff --git a/Yi.Pure.Vue3/src/components/ReTreeLine/index.ts b/Yi.Pure.Vue3/src/components/ReTreeLine/index.ts new file mode 100644 index 00000000..80a39653 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReTreeLine/index.ts @@ -0,0 +1,155 @@ +// 参考https://www.npmjs.com/package/element-tree-line (主要是替换需要通过函数传参的方式去注册组件,并添加更好的类型支持,并移除this.$scopedSlots,在3.x中,将所有this.$scopedSlots替换为this.$slots) +import "./index.scss"; +import { isFunction } from "@pureadmin/utils"; +import { type PropType, h, defineComponent } from "vue"; +import type { + TreeNode, + TreeData, + TreeNodeData +} from "element-plus/es/components/tree-v2/src/types"; + +/** 树形连接线组件 */ +export default defineComponent({ + name: "ReTreeLine", + props: { + node: { + type: Object as PropType, + required: true + }, + data: { + type: Array as PropType, + default: () => {} + }, + treeData: { + type: Array as PropType, + default: () => [] + }, + indent: { + type: Number, + default: 16 + }, + showLabelLine: { + type: Boolean, + default: true + } + }, + setup(_, context) { + const { slots } = context; + const getScopedSlot = slotName => { + if (!slotName) { + return null; + } + const slotNameSplits = slotName.split("||"); + let slot = null; + for (let index = 0; index < slotNameSplits.length; index++) { + const name = slotNameSplits[index]; + slot = (slots || {})[name]; + } + return slot; + }; + const getSlotValue = (slot, scopedData, defaultNode = null) => { + if (isFunction(slot)) { + return slot(scopedData) || defaultNode; + } + return slot || defaultNode; + }; + + return { + getScopedSlot, + getSlotValue + }; + }, + render() { + // 自定义整行节点label区域 + const scopeSlotDefault = this.getScopedSlot("default"); + // 显示横线时自定义节点label区域 + const labelSlot = this.getScopedSlot("node-label"); + // 显示横线时追加在横线右边的内容 + const afterLabelSlot = this.getScopedSlot("after-node-label"); + const labelNodes = scopeSlotDefault + ? this.getSlotValue(scopeSlotDefault, { + node: this.node, + data: this.data + }) + : [ + labelSlot + ? this.getSlotValue(labelSlot, { + node: this.node, + data: this.data + }) + : h("span", { class: "element-tree-node-label" }, this.node.label), + this.showLabelLine + ? h("span", { + class: "element-tree-node-label-line" + }) + : null, + this.getSlotValue(afterLabelSlot, { + node: this.node, + data: this.data + }) + ]; + // 取得每一层的当前节点是不是在当前层级列表的最后一个 + const lastnodeArr = []; + let currentNode = this.node; + while (currentNode) { + let parentNode = currentNode.parent; + // 兼容element-plus的 el-tree-v2 (Virtualized Tree 虚拟树) + if (currentNode.level === 1 && !currentNode.parent) { + // el-tree-v2的第一层node是没有parent的,必需 treeData 创建一个parent + if (!this.treeData || !Array.isArray(this.treeData)) { + throw Error( + "if you using el-tree-v2 (Virtualized Tree) of element-plus,element-tree-line required data." + ); + } + parentNode = { + children: Array.isArray(this.treeData) + ? this.treeData.map(item => { + return { ...item, key: item.id }; + }) + : [], + level: 0, + key: "node-0", + parent: null + }; + } + if (parentNode) { + // element-plus的 el-tree-v2 使用的是children和key, 其他使用的是 childNodes和id + const index = (parentNode.children || parentNode.childNodes).findIndex( + item => (item.key || item.id) === (currentNode.key || currentNode.id) + ); + lastnodeArr.unshift( + index === (parentNode.children || parentNode.childNodes).length - 1 + ); + } + currentNode = parentNode; + } + const lineNodes = []; + for (let i = 0; i < this.node.level; i++) { + lineNodes.push( + h("span", { + class: { + "element-tree-node-line-ver": true, + "last-node-line": lastnodeArr[i] && this.node.level - 1 !== i, + "last-node-isLeaf-line": lastnodeArr[i] && this.node.level - 1 === i + }, + style: { left: this.indent * i + "px" } + }) + ); + } + return h( + "span", + { + class: "element-tree-node-label-wrapper" + }, + [labelNodes].concat(lineNodes).concat([ + h("span", { + class: "element-tree-node-line-hor", + style: { + width: (this.node.isLeaf ? 24 : 8) + "px", + left: (this.node.level - 1) * this.indent + "px" + } + }) + ]) + ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReTypeit/index.ts b/Yi.Pure.Vue3/src/components/ReTypeit/index.ts new file mode 100644 index 00000000..e28a10c6 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReTypeit/index.ts @@ -0,0 +1,8 @@ +import typeIt from "./src/index"; +import type { Options as TypeItOptions } from "typeit"; + +const TypeIt = typeIt; + +export { TypeIt, TypeItOptions }; + +export default TypeIt; diff --git a/Yi.Pure.Vue3/src/components/ReTypeit/src/index.tsx b/Yi.Pure.Vue3/src/components/ReTypeit/src/index.tsx new file mode 100644 index 00000000..befc4f90 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReTypeit/src/index.tsx @@ -0,0 +1,56 @@ +import type { El } from "typeit/dist/types"; +import TypeIt, { type Options as TypeItOptions } from "typeit"; +import { type PropType, ref, defineComponent, onMounted } from "vue"; + +// 打字机效果组件(配置项详情请查阅 https://www.typeitjs.com/docs/vanilla/usage#options) +export default defineComponent({ + name: "TypeIt", + props: { + options: { + type: Object as PropType, + default: () => ({}) as TypeItOptions + } + }, + setup(props, { slots, expose }) { + /** + * 输出错误信息 + * @param message 错误信息 + */ + function throwError(message: string) { + throw new TypeError(message); + } + + /** + * 获取浏览器默认语言 + */ + function getBrowserLanguage() { + return navigator.language; + } + + const typedItRef = ref(null); + + onMounted(() => { + const $typed = typedItRef.value!.querySelector(".type-it") as El; + + if (!$typed) { + const errorMsg = + getBrowserLanguage() === "zh-CN" + ? "请确保有且只有一个具有class属性为 'type-it' 的元素" + : "Please make sure that there is only one element with a Class attribute with 'type-it'"; + throwError(errorMsg); + } + + const typeIt = new TypeIt($typed, props.options).go(); + + expose({ + typeIt + }); + }); + + return () => ( +
+ {slots.default?.() ?? } +
+ ); + } +}); diff --git a/Yi.Pure.Vue3/src/components/ReVxeTableBar/index.ts b/Yi.Pure.Vue3/src/components/ReVxeTableBar/index.ts new file mode 100644 index 00000000..6ffa7e23 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReVxeTableBar/index.ts @@ -0,0 +1,5 @@ +import vxeTableBar from "./src/bar"; +import { withInstall } from "@pureadmin/utils"; + +/** 配合 `vxe-table` 实现快速便捷的表格操作 */ +export const VxeTableBar = withInstall(vxeTableBar); diff --git a/Yi.Pure.Vue3/src/components/ReVxeTableBar/src/bar.tsx b/Yi.Pure.Vue3/src/components/ReVxeTableBar/src/bar.tsx new file mode 100644 index 00000000..581c9012 --- /dev/null +++ b/Yi.Pure.Vue3/src/components/ReVxeTableBar/src/bar.tsx @@ -0,0 +1,384 @@ +import Sortable from "sortablejs"; +import { transformI18n } from "@/plugins/i18n"; +import { useEpThemeStoreHook } from "@/store/modules/epTheme"; +import { delay, cloneDeep, getKeyList } from "@pureadmin/utils"; +import { + type PropType, + ref, + unref, + computed, + nextTick, + defineComponent, + getCurrentInstance +} from "vue"; + +import Fullscreen from "@iconify-icons/ri/fullscreen-fill"; +import ExitFullscreen from "@iconify-icons/ri/fullscreen-exit-fill"; +import DragIcon from "@/assets/table-bar/drag.svg?component"; +import ExpandIcon from "@/assets/table-bar/expand.svg?component"; +import RefreshIcon from "@/assets/table-bar/refresh.svg?component"; +import SettingIcon from "@/assets/table-bar/settings.svg?component"; +import CollapseIcon from "@/assets/table-bar/collapse.svg?component"; + +const props = { + /** 头部最左边的标题 */ + title: { + type: String, + default: "列表" + }, + vxeTableRef: { + type: Object as PropType + }, + /** 需要展示的列 */ + columns: { + type: Array as PropType, + default: () => [] + }, + /** 是否为树列表 */ + tree: { + type: Boolean, + default: false + }, + isExpandAll: { + type: Boolean, + default: true + }, + tableKey: { + type: [String, Number] as PropType, + default: "0" + } +}; + +export default defineComponent({ + name: "VxeTableBar", + props, + emits: ["refresh"], + setup(props, { emit, slots, attrs }) { + const size = ref("small"); + const loading = ref(false); + const checkAll = ref(true); + const isFullscreen = ref(false); + const isIndeterminate = ref(false); + const instance = getCurrentInstance()!; + const isExpandAll = ref(props.isExpandAll); + let checkColumnList = getKeyList(cloneDeep(props?.columns), "title"); + const checkedColumns = ref(getKeyList(cloneDeep(props?.columns), "title")); + const dynamicColumns = ref(cloneDeep(props?.columns)); + + const getDropdownItemStyle = computed(() => { + return s => { + return { + background: + s === size.value ? useEpThemeStoreHook().epThemeColor : "", + color: s === size.value ? "#fff" : "var(--el-text-color-primary)" + }; + }; + }); + + const iconClass = computed(() => { + return [ + "text-black", + "dark:text-white", + "duration-100", + "hover:!text-primary", + "cursor-pointer", + "outline-none" + ]; + }); + + const topClass = computed(() => { + return [ + "flex", + "justify-between", + "pt-[3px]", + "px-[11px]", + "border-b-[1px]", + "border-solid", + "border-[#dcdfe6]", + "dark:border-[#303030]" + ]; + }); + + function onReFresh() { + loading.value = true; + emit("refresh"); + delay(500).then(() => (loading.value = false)); + } + + function onExpand() { + isExpandAll.value = !isExpandAll.value; + isExpandAll.value + ? props.vxeTableRef.setAllTreeExpand(true) + : props.vxeTableRef.clearTreeExpand(); + props.vxeTableRef.refreshColumn(); + } + + function reloadColumn() { + const curCheckedColumns = cloneDeep(dynamicColumns.value).filter(item => + checkedColumns.value.includes(item.title) + ); + props.vxeTableRef.reloadColumn(curCheckedColumns); + } + + function handleCheckAllChange(val: boolean) { + checkedColumns.value = val ? checkColumnList : []; + isIndeterminate.value = false; + reloadColumn(); + } + + function handleCheckedColumnsChange(value: string[]) { + checkedColumns.value = value; + const checkedCount = value.length; + checkAll.value = checkedCount === checkColumnList.length; + isIndeterminate.value = + checkedCount > 0 && checkedCount < checkColumnList.length; + } + + async function onReset() { + checkAll.value = true; + isIndeterminate.value = false; + dynamicColumns.value = cloneDeep(props?.columns); + checkColumnList = []; + checkColumnList = await getKeyList(cloneDeep(props?.columns), "title"); + checkedColumns.value = getKeyList(cloneDeep(props?.columns), "title"); + props.vxeTableRef.refreshColumn(); + } + + function changeSize(curSize: string) { + size.value = curSize; + props.vxeTableRef.refreshColumn(); + } + + const dropdown = { + dropdown: () => ( + + changeSize("medium")} + > + 宽松 + + changeSize("small")} + > + 默认 + + changeSize("mini")} + > + 紧凑 + + + ) + }; + + /** 列展示拖拽排序 */ + const rowDrop = (event: { preventDefault: () => void }) => { + event.preventDefault(); + nextTick(() => { + const wrapper: HTMLElement = ( + instance?.proxy?.$refs[`VxeGroupRef${unref(props.tableKey)}`] as any + ).$el.firstElementChild; + Sortable.create(wrapper, { + animation: 300, + handle: ".drag-btn", + onEnd: ({ newIndex, oldIndex, item }) => { + const targetThElem = item; + const wrapperElem = targetThElem.parentNode as HTMLElement; + const oldColumn = dynamicColumns.value[oldIndex]; + const newColumn = dynamicColumns.value[newIndex]; + if (oldColumn?.fixed || newColumn?.fixed) { + // 当前列存在fixed属性 则不可拖拽 + const oldThElem = wrapperElem.children[oldIndex] as HTMLElement; + if (newIndex > oldIndex) { + wrapperElem.insertBefore(targetThElem, oldThElem); + } else { + wrapperElem.insertBefore( + targetThElem, + oldThElem ? oldThElem.nextElementSibling : oldThElem + ); + } + return; + } + const currentRow = dynamicColumns.value.splice(oldIndex, 1)[0]; + dynamicColumns.value.splice(newIndex, 0, currentRow); + reloadColumn(); + } + }); + }); + }; + + const isFixedColumn = (title: string) => { + return dynamicColumns.value.filter( + item => transformI18n(item.title) === transformI18n(title) + )[0].fixed + ? true + : false; + }; + + const rendTippyProps = (content: string) => { + // https://vue-tippy.netlify.app/props + return { + content, + offset: [0, 18], + duration: [300, 0], + followCursor: true, + hideOnClick: "toggle" + }; + }; + + const reference = { + reference: () => ( + + ) + }; + + return () => ( + <> +
+
+ {slots?.title ? ( + slots.title() + ) : ( +

{props.title}

+ )} +
+ {slots?.buttons ? ( +
{slots.buttons()}
+ ) : null} + {props.tree ? ( + <> + onExpand()} + /> + + + ) : null} + onReFresh()} + /> + + + + + + + +
+ handleCheckAllChange(value)} + /> + onReset()}> + 重置 + +
+ +
+ + handleCheckedColumnsChange(value)} + > + + {checkColumnList.map((item, index) => { + return ( +
+ void; + }) => rowDrop(event)} + /> + + + {transformI18n(item)} + + +
+ ); + })} +
+
+
+
+
+ + + (isFullscreen.value = !isFullscreen.value)} + /> +
+
+ {slots.default({ + size: size.value, + dynamicColumns: dynamicColumns.value + })} +
+ + ); + } +}); diff --git a/Yi.Pure.Vue3/src/config/index.ts b/Yi.Pure.Vue3/src/config/index.ts new file mode 100644 index 00000000..c81d1c4d --- /dev/null +++ b/Yi.Pure.Vue3/src/config/index.ts @@ -0,0 +1,55 @@ +import axios from "axios"; +import type { App } from "vue"; + +let config: object = {}; +const { VITE_PUBLIC_PATH } = import.meta.env; + +const setConfig = (cfg?: unknown) => { + config = Object.assign(config, cfg); +}; + +const getConfig = (key?: string): PlatformConfigs => { + if (typeof key === "string") { + const arr = key.split("."); + if (arr && arr.length) { + let data = config; + arr.forEach(v => { + if (data && typeof data[v] !== "undefined") { + data = data[v]; + } else { + data = null; + } + }); + return data; + } + } + return config; +}; + +/** 获取项目动态全局配置 */ +export const getPlatformConfig = async (app: App): Promise => { + app.config.globalProperties.$config = getConfig(); + return axios({ + method: "get", + url: `${VITE_PUBLIC_PATH}platform-config.json` + }) + .then(({ data: config }) => { + let $config = app.config.globalProperties.$config; + // 自动注入系统配置 + if (app && $config && typeof config === "object") { + $config = Object.assign($config, config); + app.config.globalProperties.$config = $config; + // 设置全局配置 + setConfig($config); + } + return $config; + }) + .catch(() => { + throw "请在public文件夹下添加platform-config.json配置文件"; + }); +}; + +/** 本地响应式存储的命名空间 */ +const responsiveStorageNameSpace = () => getConfig().ResponsiveStorageNameSpace; + +export { getConfig, setConfig, responsiveStorageNameSpace }; diff --git a/Yi.Pure.Vue3/src/directives/auth/index.ts b/Yi.Pure.Vue3/src/directives/auth/index.ts new file mode 100644 index 00000000..2fc64904 --- /dev/null +++ b/Yi.Pure.Vue3/src/directives/auth/index.ts @@ -0,0 +1,15 @@ +import { hasAuth } from "@/router/utils"; +import type { Directive, DirectiveBinding } from "vue"; + +export const auth: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding>) { + const { value } = binding; + if (value) { + !hasAuth(value) && el.parentNode?.removeChild(el); + } else { + throw new Error( + "[Directive: auth]: need auths! Like v-auth=\"['btn.add','btn.edit']\"" + ); + } + } +}; diff --git a/Yi.Pure.Vue3/src/directives/copy/index.ts b/Yi.Pure.Vue3/src/directives/copy/index.ts new file mode 100644 index 00000000..b71fa190 --- /dev/null +++ b/Yi.Pure.Vue3/src/directives/copy/index.ts @@ -0,0 +1,33 @@ +import { message } from "@/utils/message"; +import { useEventListener } from "@vueuse/core"; +import { copyTextToClipboard } from "@pureadmin/utils"; +import type { Directive, DirectiveBinding } from "vue"; + +export interface CopyEl extends HTMLElement { + copyValue: string; +} + +/** 文本复制指令(默认双击复制) */ +export const copy: Directive = { + mounted(el: CopyEl, binding: DirectiveBinding) { + const { value } = binding; + if (value) { + el.copyValue = value; + const arg = binding.arg ?? "dblclick"; + // Register using addEventListener on mounted, and removeEventListener automatically on unmounted + useEventListener(el, arg, () => { + const success = copyTextToClipboard(el.copyValue); + success + ? message("复制成功", { type: "success" }) + : message("复制失败", { type: "error" }); + }); + } else { + throw new Error( + '[Directive: copy]: need value! Like v-copy="modelValue"' + ); + } + }, + updated(el: CopyEl, binding: DirectiveBinding) { + el.copyValue = binding.value; + } +}; diff --git a/Yi.Pure.Vue3/src/directives/index.ts b/Yi.Pure.Vue3/src/directives/index.ts new file mode 100644 index 00000000..d01fe714 --- /dev/null +++ b/Yi.Pure.Vue3/src/directives/index.ts @@ -0,0 +1,6 @@ +export * from "./auth"; +export * from "./copy"; +export * from "./longpress"; +export * from "./optimize"; +export * from "./perms"; +export * from "./ripple"; diff --git a/Yi.Pure.Vue3/src/directives/longpress/index.ts b/Yi.Pure.Vue3/src/directives/longpress/index.ts new file mode 100644 index 00000000..4eec6a22 --- /dev/null +++ b/Yi.Pure.Vue3/src/directives/longpress/index.ts @@ -0,0 +1,63 @@ +import { useEventListener } from "@vueuse/core"; +import type { Directive, DirectiveBinding } from "vue"; +import { subBefore, subAfter, isFunction } from "@pureadmin/utils"; + +export const longpress: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + const cb = binding.value; + if (cb && isFunction(cb)) { + let timer = null; + let interTimer = null; + let num = 500; + let interNum = null; + const isInter = binding?.arg?.includes(":") ?? false; + + if (isInter) { + num = Number(subBefore(binding.arg, ":")); + interNum = Number(subAfter(binding.arg, ":")); + } else if (binding.arg) { + num = Number(binding.arg); + } + + const clear = () => { + if (timer) { + clearTimeout(timer); + timer = null; + } + if (interTimer) { + clearInterval(interTimer); + interTimer = null; + } + }; + + const onDownInter = (ev: PointerEvent) => { + ev.preventDefault(); + if (interTimer === null) { + interTimer = setInterval(() => cb(), interNum); + } + }; + + const onDown = (ev: PointerEvent) => { + clear(); + ev.preventDefault(); + if (timer === null) { + timer = isInter + ? setTimeout(() => { + cb(); + onDownInter(ev); + }, num) + : setTimeout(() => cb(), num); + } + }; + + // Register using addEventListener on mounted, and removeEventListener automatically on unmounted + useEventListener(el, "pointerdown", onDown); + useEventListener(el, "pointerup", clear); + useEventListener(el, "pointerleave", clear); + } else { + throw new Error( + '[Directive: longpress]: need callback and callback must be a function! Like v-longpress="callback"' + ); + } + } +}; diff --git a/Yi.Pure.Vue3/src/directives/optimize/index.ts b/Yi.Pure.Vue3/src/directives/optimize/index.ts new file mode 100644 index 00000000..7b92538d --- /dev/null +++ b/Yi.Pure.Vue3/src/directives/optimize/index.ts @@ -0,0 +1,68 @@ +import { + isArray, + throttle, + debounce, + isObject, + isFunction +} from "@pureadmin/utils"; +import { useEventListener } from "@vueuse/core"; +import type { Directive, DirectiveBinding } from "vue"; + +export interface OptimizeOptions { + /** 事件名 */ + event: string; + /** 事件触发的方法 */ + fn: (...params: any) => any; + /** 是否立即执行 */ + immediate?: boolean; + /** 防抖或节流的延迟时间(防抖默认:`200`毫秒、节流默认:`1000`毫秒) */ + timeout?: number; + /** 传递的参数 */ + params?: any; +} + +/** 防抖(v-optimize或v-optimize:debounce)、节流(v-optimize:throttle)指令 */ +export const optimize: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + const { value } = binding; + const optimizeType = binding.arg ?? "debounce"; + const type = ["debounce", "throttle"].find(t => t === optimizeType); + if (type) { + if (value && value.event && isFunction(value.fn)) { + let params = value?.params; + if (params) { + if (isArray(params) || isObject(params)) { + params = isObject(params) ? Array.of(params) : params; + } else { + throw new Error( + "[Directive: optimize]: `params` must be an array or object" + ); + } + } + // Register using addEventListener on mounted, and removeEventListener automatically on unmounted + useEventListener( + el, + value.event, + type === "debounce" + ? debounce( + params ? () => value.fn(...params) : value.fn, + value?.timeout ?? 200, + value?.immediate ?? false + ) + : throttle( + params ? () => value.fn(...params) : value.fn, + value?.timeout ?? 1000 + ) + ); + } else { + throw new Error( + "[Directive: optimize]: `event` and `fn` are required, and `fn` must be a function" + ); + } + } else { + throw new Error( + "[Directive: optimize]: only `debounce` and `throttle` are supported" + ); + } + } +}; diff --git a/Yi.Pure.Vue3/src/directives/perms/index.ts b/Yi.Pure.Vue3/src/directives/perms/index.ts new file mode 100644 index 00000000..073c918b --- /dev/null +++ b/Yi.Pure.Vue3/src/directives/perms/index.ts @@ -0,0 +1,15 @@ +import { hasPerms } from "@/utils/auth"; +import type { Directive, DirectiveBinding } from "vue"; + +export const perms: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding>) { + const { value } = binding; + if (value) { + !hasPerms(value) && el.parentNode?.removeChild(el); + } else { + throw new Error( + "[Directive: perms]: need perms! Like v-perms=\"['btn.add','btn.edit']\"" + ); + } + } +}; diff --git a/Yi.Pure.Vue3/src/directives/ripple/index.scss b/Yi.Pure.Vue3/src/directives/ripple/index.scss new file mode 100644 index 00000000..061c82c9 --- /dev/null +++ b/Yi.Pure.Vue3/src/directives/ripple/index.scss @@ -0,0 +1,48 @@ +/* stylelint-disable-next-line scss/dollar-variable-colon-space-after */ +$ripple-animation-transition-in: + transform 0.4s cubic-bezier(0, 0, 0.2, 1), + opacity 0.2s cubic-bezier(0, 0, 0.2, 1) !default; +$ripple-animation-transition-out: opacity 0.5s cubic-bezier(0, 0, 0.2, 1) !default; +$ripple-animation-visible-opacity: 0.25 !default; + +.v-ripple { + &__container { + position: absolute; + top: 0; + left: 0; + z-index: 0; + width: 100%; + height: 100%; + overflow: hidden; + pointer-events: none; + border-radius: inherit; + contain: strict; + } + + &__animation { + position: absolute; + top: 0; + left: 0; + overflow: hidden; + pointer-events: none; + background: currentcolor; + border-radius: 50%; + opacity: 0; + will-change: transform, opacity; + + &--enter { + opacity: 0; + transition: none; + } + + &--in { + opacity: $ripple-animation-visible-opacity; + transition: $ripple-animation-transition-in; + } + + &--out { + opacity: 0; + transition: $ripple-animation-transition-out; + } + } +} diff --git a/Yi.Pure.Vue3/src/directives/ripple/index.ts b/Yi.Pure.Vue3/src/directives/ripple/index.ts new file mode 100644 index 00000000..3fd94d9c --- /dev/null +++ b/Yi.Pure.Vue3/src/directives/ripple/index.ts @@ -0,0 +1,229 @@ +import "./index.scss"; +import { isObject } from "@pureadmin/utils"; +import type { Directive, DirectiveBinding } from "vue"; + +export interface RippleOptions { + /** 自定义`ripple`颜色,支持`tailwindcss` */ + class?: string; + /** 是否从中心扩散 */ + center?: boolean; + circle?: boolean; +} + +export interface RippleDirectiveBinding + extends Omit { + value?: boolean | { class: string }; + modifiers: { + center?: boolean; + circle?: boolean; + }; +} + +function transform(el: HTMLElement, value: string) { + el.style.transform = value; + el.style.webkitTransform = value; +} + +const calculate = ( + e: PointerEvent, + el: HTMLElement, + value: RippleOptions = {} +) => { + const offset = el.getBoundingClientRect(); + + // 获取点击位置距离 el 的垂直和水平距离 + let localX = e.clientX - offset.left; + let localY = e.clientY - offset.top; + + let radius = 0; + let scale = 0.3; + // 计算点击位置到 el 顶点最远距离,即为圆的最大半径(勾股定理) + if (el._ripple?.circle) { + scale = 0.15; + radius = el.clientWidth / 2; + radius = value.center + ? radius + : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4; + } else { + radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2; + } + + // 中心点坐标 + const centerX = `${(el.clientWidth - radius * 2) / 2}px`; + const centerY = `${(el.clientHeight - radius * 2) / 2}px`; + + // 点击位置坐标 + const x = value.center ? centerX : `${localX - radius}px`; + const y = value.center ? centerY : `${localY - radius}px`; + + return { radius, scale, x, y, centerX, centerY }; +}; + +const ripples = { + show(e: PointerEvent, el: HTMLElement, value: RippleOptions = {}) { + if (!el?._ripple?.enabled) { + return; + } + + // 创建 ripple 元素和 ripple 父元素 + const container = document.createElement("span"); + const animation = document.createElement("span"); + + container.appendChild(animation); + container.className = "v-ripple__container"; + + if (value.class) { + container.className += ` ${value.class}`; + } + + const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value); + + // ripple 圆大小 + const size = `${radius * 2}px`; + + animation.className = "v-ripple__animation"; + animation.style.width = size; + animation.style.height = size; + + el.appendChild(container); + + // 获取目标元素样式表 + const computed = window.getComputedStyle(el); + // 防止 position 被覆盖导致 ripple 位置有问题 + if (computed && computed.position === "static") { + el.style.position = "relative"; + el.dataset.previousPosition = "static"; + } + + animation.classList.add("v-ripple__animation--enter"); + animation.classList.add("v-ripple__animation--visible"); + transform( + animation, + `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})` + ); + animation.dataset.activated = String(performance.now()); + + setTimeout(() => { + animation.classList.remove("v-ripple__animation--enter"); + animation.classList.add("v-ripple__animation--in"); + transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`); + }, 0); + }, + + hide(el: HTMLElement | null) { + if (!el?._ripple?.enabled) return; + + const ripples = el.getElementsByClassName("v-ripple__animation"); + + if (ripples.length === 0) return; + const animation = ripples[ripples.length - 1] as HTMLElement; + + if (animation.dataset.isHiding) return; + else animation.dataset.isHiding = "true"; + + const diff = performance.now() - Number(animation.dataset.activated); + const delay = Math.max(250 - diff, 0); + + setTimeout(() => { + animation.classList.remove("v-ripple__animation--in"); + animation.classList.add("v-ripple__animation--out"); + + setTimeout(() => { + const ripples = el.getElementsByClassName("v-ripple__animation"); + if (ripples.length === 1 && el.dataset.previousPosition) { + el.style.position = el.dataset.previousPosition; + delete el.dataset.previousPosition; + } + + if (animation.parentNode?.parentNode === el) + el.removeChild(animation.parentNode); + }, 300); + }, delay); + } +}; + +function isRippleEnabled(value: any): value is true { + return typeof value === "undefined" || !!value; +} + +function rippleShow(e: PointerEvent) { + const value: RippleOptions = {}; + const element = e.currentTarget as HTMLElement | undefined; + + if (!element?._ripple || element._ripple.touched) return; + + value.center = element._ripple.centered; + if (element._ripple.class) { + value.class = element._ripple.class; + } + + ripples.show(e, element, value); +} + +function rippleHide(e: Event) { + const element = e.currentTarget as HTMLElement | null; + if (!element?._ripple) return; + + window.setTimeout(() => { + if (element._ripple) { + element._ripple.touched = false; + } + }); + ripples.hide(element); +} + +function updateRipple( + el: HTMLElement, + binding: RippleDirectiveBinding, + wasEnabled: boolean +) { + const { value, modifiers } = binding; + const enabled = isRippleEnabled(value); + if (!enabled) { + ripples.hide(el); + } + + el._ripple = el._ripple ?? {}; + el._ripple.enabled = enabled; + el._ripple.centered = modifiers.center; + el._ripple.circle = modifiers.circle; + if (isObject(value) && value.class) { + el._ripple.class = value.class; + } + + if (enabled && !wasEnabled) { + el.addEventListener("pointerdown", rippleShow); + el.addEventListener("pointerup", rippleHide); + } else if (!enabled && wasEnabled) { + removeListeners(el); + } +} + +function removeListeners(el: HTMLElement) { + el.removeEventListener("pointerdown", rippleShow); + el.removeEventListener("pointerup", rippleHide); +} + +function mounted(el: HTMLElement, binding: RippleDirectiveBinding) { + updateRipple(el, binding, false); +} + +function unmounted(el: HTMLElement) { + delete el._ripple; + removeListeners(el); +} + +function updated(el: HTMLElement, binding: RippleDirectiveBinding) { + if (binding.value === binding.oldValue) { + return; + } + + const wasEnabled = isRippleEnabled(binding.oldValue); + updateRipple(el, binding, wasEnabled); +} + +export const Ripple: Directive = { + mounted, + unmounted, + updated +}; diff --git a/Yi.Pure.Vue3/src/layout/components/lay-content/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-content/index.vue new file mode 100644 index 00000000..5810d665 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-content/index.vue @@ -0,0 +1,215 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-footer/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-footer/index.vue new file mode 100644 index 00000000..77631343 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-footer/index.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-frame/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-frame/index.vue new file mode 100644 index 00000000..b2bb9d51 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-frame/index.vue @@ -0,0 +1,79 @@ + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-navbar/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-navbar/index.vue new file mode 100644 index 00000000..691d880e --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-navbar/index.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-notice/components/NoticeItem.vue b/Yi.Pure.Vue3/src/layout/components/lay-notice/components/NoticeItem.vue new file mode 100644 index 00000000..823d9cd8 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-notice/components/NoticeItem.vue @@ -0,0 +1,177 @@ + + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-notice/components/NoticeList.vue b/Yi.Pure.Vue3/src/layout/components/lay-notice/components/NoticeList.vue new file mode 100644 index 00000000..7bc9922c --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-notice/components/NoticeList.vue @@ -0,0 +1,24 @@ + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-notice/data.ts b/Yi.Pure.Vue3/src/layout/components/lay-notice/data.ts new file mode 100644 index 00000000..bd49f5e5 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-notice/data.ts @@ -0,0 +1,99 @@ +import { $t } from "@/plugins/i18n"; + +export interface ListItem { + avatar: string; + title: string; + datetime: string; + type: string; + description: string; + status?: "primary" | "success" | "warning" | "info" | "danger"; + extra?: string; +} + +export interface TabItem { + key: string; + name: string; + list: ListItem[]; + emptyText: string; +} + +export const noticesData: TabItem[] = [ + { + key: "1", + name: $t("status.pureNotify"), + list: [], + emptyText: $t("status.pureNoNotify") + }, + { + key: "2", + name: $t("status.pureMessage"), + list: [ + { + avatar: "https://xiaoxian521.github.io/hyperlink/svg/smile1.svg", + title: "小铭 评论了你", + description: "诚在于心,信在于行,诚信在于心行合一。", + datetime: "今天", + type: "2" + }, + { + avatar: "https://xiaoxian521.github.io/hyperlink/svg/smile2.svg", + title: "李白 回复了你", + description: "长风破浪会有时,直挂云帆济沧海。", + datetime: "昨天", + type: "2" + }, + { + avatar: "https://xiaoxian521.github.io/hyperlink/svg/smile5.svg", + title: "标题", + description: + "请将鼠标移动到此处,以便测试超长的消息在此处将如何处理。本例中设置的描述最大行数为2,超过2行的描述内容将被省略并且可以通过tooltip查看完整内容", + datetime: "时间", + type: "2" + } + ], + emptyText: $t("status.pureNoMessage") + }, + { + key: "3", + name: $t("status.pureTodo"), + list: [ + { + avatar: "", + title: "第三方紧急代码变更", + description: + "小林提交于 2024-05-10,需在 2024-05-11 前完成代码变更任务", + datetime: "", + extra: "马上到期", + status: "danger", + type: "3" + }, + { + avatar: "", + title: "版本发布", + description: "指派小铭于 2024-06-18 前完成更新并发布", + datetime: "", + extra: "已耗时 8 天", + status: "warning", + type: "3" + }, + { + avatar: "", + title: "新功能开发", + description: "开发多租户管理", + datetime: "", + extra: "进行中", + type: "3" + }, + { + avatar: "", + title: "任务名称", + description: "任务需要在 2030-10-30 10:00 前启动", + datetime: "", + extra: "未开始", + status: "info", + type: "3" + } + ], + emptyText: $t("status.pureNoTodo") + } +]; diff --git a/Yi.Pure.Vue3/src/layout/components/lay-notice/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-notice/index.vue new file mode 100644 index 00000000..d85cf0f7 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-notice/index.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-panel/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-panel/index.vue new file mode 100644 index 00000000..fb4fb20a --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-panel/index.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchFooter.vue b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchFooter.vue new file mode 100644 index 00000000..d8350d0f --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchFooter.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchHistory.vue b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchHistory.vue new file mode 100644 index 00000000..87d5488c --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchHistory.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchHistoryItem.vue b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchHistoryItem.vue new file mode 100644 index 00000000..0ee9f194 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchHistoryItem.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchModal.vue b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchModal.vue new file mode 100644 index 00000000..f6993f6f --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchModal.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchResult.vue b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchResult.vue new file mode 100644 index 00000000..12507b15 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-search/components/SearchResult.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-search/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-search/index.vue new file mode 100644 index 00000000..123d6a66 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-search/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-search/types.ts b/Yi.Pure.Vue3/src/layout/components/lay-search/types.ts new file mode 100644 index 00000000..a39adbd4 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-search/types.ts @@ -0,0 +1,20 @@ +interface optionsItem { + path: string; + type: "history" | "collect"; + meta: { + icon?: string; + title?: string; + }; +} + +interface dragItem { + oldIndex: number; + newIndex: number; +} + +interface Props { + value: string; + options: Array; +} + +export type { optionsItem, dragItem, Props }; diff --git a/Yi.Pure.Vue3/src/layout/components/lay-setting/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-setting/index.vue new file mode 100644 index 00000000..18aacf25 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-setting/index.vue @@ -0,0 +1,642 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavHorizontal.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavHorizontal.vue new file mode 100644 index 00000000..6a2cd87e --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavHorizontal.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavMix.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavMix.vue new file mode 100644 index 00000000..c1562f2b --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavMix.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavVertical.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavVertical.vue new file mode 100644 index 00000000..0e9fa129 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/NavVertical.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarBreadCrumb.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarBreadCrumb.vue new file mode 100644 index 00000000..417b8394 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarBreadCrumb.vue @@ -0,0 +1,121 @@ + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarCenterCollapse.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarCenterCollapse.vue new file mode 100644 index 00000000..0f41fcca --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarCenterCollapse.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarExtraIcon.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarExtraIcon.vue new file mode 100644 index 00000000..7cad16e6 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarExtraIcon.vue @@ -0,0 +1,20 @@ + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarFullScreen.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarFullScreen.vue new file mode 100644 index 00000000..4d38bd0c --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarFullScreen.vue @@ -0,0 +1,30 @@ + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarItem.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarItem.vue new file mode 100644 index 00000000..cffa6771 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarItem.vue @@ -0,0 +1,223 @@ + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLeftCollapse.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLeftCollapse.vue new file mode 100644 index 00000000..c007d3b8 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLeftCollapse.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLinkItem.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLinkItem.vue new file mode 100644 index 00000000..8911c122 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLinkItem.vue @@ -0,0 +1,32 @@ + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLogo.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLogo.vue new file mode 100644 index 00000000..0441f52f --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarLogo.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarTopCollapse.vue b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarTopCollapse.vue new file mode 100644 index 00000000..c2f1b5ad --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-sidebar/components/SidebarTopCollapse.vue @@ -0,0 +1,38 @@ + + + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-tag/components/TagChrome.vue b/Yi.Pure.Vue3/src/layout/components/lay-tag/components/TagChrome.vue new file mode 100644 index 00000000..137365b4 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-tag/components/TagChrome.vue @@ -0,0 +1,33 @@ + diff --git a/Yi.Pure.Vue3/src/layout/components/lay-tag/index.scss b/Yi.Pure.Vue3/src/layout/components/lay-tag/index.scss new file mode 100644 index 00000000..b8812169 --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-tag/index.scss @@ -0,0 +1,371 @@ +@keyframes schedule-in-width { + from { + width: 0; + } + + to { + width: 100%; + } +} + +@keyframes schedule-out-width { + from { + width: 100%; + } + + to { + width: 0; + } +} + +.tags-view { + position: relative; + display: flex; + align-items: center; + width: 100%; + font-size: 14px; + color: var(--el-text-color-primary); + background: #fff; + box-shadow: 0 0 1px #888; + + .scroll-item { + position: relative; + display: inline-block; + height: 34px; + padding-left: 6px; + line-height: 34px; + cursor: pointer; + transition: all 0.4s; + + &:not(:first-child) { + padding-right: 24px; + } + + &.chrome-item { + padding-right: 0; + padding-left: 0; + margin-right: -18px; + box-shadow: none; + } + + .el-icon-close { + position: absolute; + top: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + color: var(--el-color-primary); + cursor: pointer; + border-radius: 4px; + transition: + background-color 0.12s, + color 0.12s; + transform: translate(0, -50%); + + &:hover { + color: rgb(0 0 0 / 88%) !important; + background-color: rgb(0 0 0 / 6%); + } + } + } + + .tag-title { + padding: 0 4px; + color: var(--el-text-color-primary); + text-decoration: none; + } + + .scroll-container { + position: relative; + flex: 1; + overflow: hidden; + white-space: nowrap; + + &.chrome-scroll-container { + padding-top: 4px; + + .fixed-tag { + padding: 0 !important; + } + } + + .tab { + position: relative; + float: left; + overflow: visible; + white-space: nowrap; + list-style: none; + + .scroll-item { + transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); + + &:nth-child(1) { + padding: 0 12px; + } + + &.chrome-item { + &:nth-child(1) { + padding: 0; + } + } + } + + .fixed-tag { + padding: 0 12px; + } + } + } + + /* 右键菜单 */ + .contextmenu { + position: absolute; + padding: 5px 0; + margin: 0; + font-size: 13px; + font-weight: normal; + color: var(--el-text-color-primary); + white-space: nowrap; + list-style-type: none; + background: #fff; + border-radius: 4px; + outline: 0; + box-shadow: 0 2px 8px rgb(0 0 0 / 15%); + + li { + display: flex; + align-items: center; + width: 100%; + padding: 7px 12px; + margin: 0; + cursor: pointer; + + &:hover { + color: var(--el-color-primary); + } + + svg { + display: block; + margin-right: 0.5em; + } + } + } +} + +.el-dropdown-menu { + li { + display: flex; + align-items: center; + width: 100%; + margin: 0; + cursor: pointer; + + svg { + display: block; + margin-right: 0.5em; + } + } +} + +.el-dropdown-menu__item:not(.is-disabled):hover { + color: #606266; + background: #f0f0f0; +} + +:deep(.el-dropdown-menu__item) i { + margin-right: 10px; +} + +:deep(.el-dropdown-menu__item--divided) { + margin: 1px 0; +} + +.el-dropdown-menu__item--divided::before { + margin: 0; +} + +.el-dropdown-menu__item.is-disabled { + cursor: not-allowed; +} + +.scroll-item.is-active { + position: relative; + color: #fff; + box-shadow: 0 0 0.7px #888; + + .chrome-tab { + z-index: 10; + } + + .chrome-tab__bg { + color: var(--el-color-primary-light-9) !important; + } + + .tag-title { + color: var(--el-color-primary) !important; + } + + .chrome-close-btn { + color: var(--el-color-primary); + + &:hover { + background-color: var(--el-color-primary); + } + } + + .chrome-tab-divider { + opacity: 0; + } +} + +.arrow-left, +.arrow-right, +.arrow-down { + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 34px; + color: var(--el-text-color-primary); + + svg { + width: 20px; + height: 20px; + } +} + +.arrow-left { + box-shadow: 5px 0 5px -6px #ccc; + + &:hover { + cursor: w-resize; + } +} + +.arrow-right { + border-right: 0.5px solid #ccc; + box-shadow: -5px 0 5px -6px #ccc; + + &:hover { + cursor: e-resize; + } +} + +/* 卡片模式下鼠标移入显示蓝色边框 */ +.card-in { + color: var(--el-color-primary); + + .tag-title { + color: var(--el-color-primary); + } +} + +/* 卡片模式下鼠标移出隐藏蓝色边框 */ +.card-out { + color: #666; + border: none; + + .tag-title { + color: #666; + } +} + +/* 灵动模式 */ +.schedule-active { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: var(--el-color-primary); +} + +/* 灵动模式下鼠标移入显示蓝色进度条 */ +.schedule-in { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: var(--el-color-primary); + animation: schedule-in-width 200ms ease-in; +} + +/* 灵动模式下鼠标移出隐藏蓝色进度条 */ +.schedule-out { + position: absolute; + bottom: 0; + left: 0; + width: 0; + height: 2px; + background: var(--el-color-primary); + animation: schedule-out-width 200ms ease-in; +} + +/* 谷歌风格的页签 */ +.chrome-tab { + position: relative; + display: inline-flex; + gap: 16px; + align-items: center; + justify-content: center; + padding: 0 24px; + white-space: nowrap; + cursor: pointer; + + .tag-title { + padding: 0; + } + + .chrome-tab-divider { + position: absolute; + right: 7px; + width: 1px; + height: 14px; + background-color: #2b2d2f; + } + + &:hover { + z-index: 10; + + .chrome-tab__bg { + color: #dee1e6; + } + + .tag-title { + color: #1f1f1f; + } + + .chrome-tab-divider { + opacity: 0; + } + } + + .chrome-tab__bg { + position: absolute; + top: 0; + left: 0; + z-index: -10; + width: 100%; + height: 100%; + color: transparent; + pointer-events: none; + } + + .chrome-close-btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + color: #666; + border-radius: 50%; + + &:hover { + color: white; + background-color: #b1b3b8; + } + } +} diff --git a/Yi.Pure.Vue3/src/layout/components/lay-tag/index.vue b/Yi.Pure.Vue3/src/layout/components/lay-tag/index.vue new file mode 100644 index 00000000..87f234fd --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/components/lay-tag/index.vue @@ -0,0 +1,685 @@ + + + + + diff --git a/Yi.Pure.Vue3/src/layout/frame.vue b/Yi.Pure.Vue3/src/layout/frame.vue new file mode 100644 index 00000000..4243b57d --- /dev/null +++ b/Yi.Pure.Vue3/src/layout/frame.vue @@ -0,0 +1,97 @@ + + +