From b3a7bba2796299f29015108687fa5990366e23fc Mon Sep 17 00:00:00 2001 From: Kaifuny Date: Thu, 20 Jul 2023 00:43:19 +0800 Subject: [PATCH] init: frontend monorepo Signed-off-by: Kaifuny --- contact-frontend/.eslintrc.cjs | 59 + contact-frontend/.gitignore | 28 + contact-frontend/.prettierignore | 12 + contact-frontend/README.md | 60 + contact-frontend/env/.env.dev | 0 contact-frontend/env/.env.mock | 0 contact-frontend/env/.env.release | 0 contact-frontend/env/vite-env.d.ts | 1 + contact-frontend/package.json | 54 + contact-frontend/packages/apps/web/README.md | 3 + contact-frontend/packages/apps/web/index.html | 13 + .../packages/apps/web/package.json | 33 + .../packages/apps/web/postcss.config.cjs | 6 + .../packages/apps/web/src/App.vue | 6 + .../packages/apps/web/src/index.css | 3 + .../apps/web/src/layouts/NavLayout.vue | 74 + .../packages/apps/web/src/main.ts | 7 + .../packages/apps/web/src/router/index.ts | 48 + .../apps/web/src/shims-vue-global.d.ts | 7 + .../packages/apps/web/src/views/HomeView.vue | 3 + .../packages/apps/web/tailwind.config.cjs | 12 + .../packages/apps/web/tsconfig.json | 9 + .../packages/apps/web/tsconfig.node.json | 10 + .../packages/apps/web/vite.config.ts | 20 + contact-frontend/packages/assets/README.md | 1 + .../packages/assets/img/login-bg.svg | 1 + contact-frontend/packages/assets/img/logo.png | Bin 0 -> 26749 bytes contact-frontend/packages/assets/package.json | 6 + .../packages/modules/composables/README.md | 0 .../packages/modules/composables/package.json | 14 + .../packages/modules/i18n/README.md | 1 + .../packages/modules/i18n/package.json | 14 + .../packages/modules/i18n/src/index.ts | 29 + .../modules/i18n/src/locales/en-US.json | 5 + .../modules/i18n/src/locales/zh-CN.json | 5 + .../packages/modules/i18n/tsconfig.json | 12 + .../packages/modules/mocks/README.md | 1 + .../packages/modules/mocks/package.json | 14 + .../packages/modules/models/README.md | 0 .../packages/modules/models/package.json | 14 + .../packages/modules/models/src/index.ts | 1 + .../packages/modules/models/src/routes.ts | 59 + .../packages/modules/models/tsconfig.json | 8 + .../packages/modules/services/auth/README.md | 1 + .../modules/services/auth/package.json | 29 + .../modules/services/auth/src/index.ts | 4 + .../modules/services/auth/src/routes/index.ts | 25 + .../services/auth/src/shims-vue-global.d.ts | 7 + .../services/auth/src/views/LoginView.vue | 49 + .../modules/services/auth/tsconfig.json | 9 + .../modules/services/auth/tsconfig.node.json | 10 + .../modules/services/auth/vite.config.ts | 18 + .../packages/modules/services/chat/README.md | 1 + .../modules/services/chat/package.json | 29 + .../modules/services/chat/src/index.ts | 3 + .../services/chat/src/layouts/MenusLayout.vue | 123 + .../modules/services/chat/src/routes/index.ts | 22 + .../services/chat/src/shims-vue-global.d.ts | 7 + .../services/chat/src/views/HomeView.vue | 3 + .../modules/services/chat/tsconfig.json | 9 + .../modules/services/chat/tsconfig.node.json | 10 + .../modules/services/chat/vite.config.ts | 18 + .../modules/services/dashboard/README.md | 1 + .../modules/services/dashboard/package.json | 29 + .../modules/services/dashboard/src/index.ts | 3 + .../services/dashboard/src/routes/index.ts | 26 + .../dashboard/src/shims-vue-global.d.ts | 7 + .../dashboard/src/views/DashboardView.vue | 5 + .../modules/services/dashboard/tsconfig.json | 9 + .../services/dashboard/tsconfig.node.json | 10 + .../modules/services/dashboard/vite.config.ts | 18 + .../modules/services/enterprise/README.md | 1 + .../modules/services/enterprise/package.json | 29 + .../modules/services/enterprise/src/index.ts | 3 + .../enterprise/src/layouts/MenusLayout.vue | 123 + .../services/enterprise/src/routes/index.ts | 22 + .../enterprise/src/shims-vue-global.d.ts | 7 + .../enterprise/src/views/HomeView.vue | 3 + .../modules/services/enterprise/tsconfig.json | 9 + .../services/enterprise/tsconfig.node.json | 10 + .../services/enterprise/vite.config.ts | 18 + .../modules/services/organization/README.md | 1 + .../services/organization/package.json | 29 + .../services/organization/src/index.ts | 3 + .../organization/src/layouts/MenusLayout.vue | 123 + .../services/organization/src/routes/index.ts | 22 + .../organization/src/shims-vue-global.d.ts | 7 + .../organization/src/views/HomeView.vue | 3 + .../services/organization/tsconfig.json | 9 + .../services/organization/tsconfig.node.json | 10 + .../services/organization/vite.config.ts | 18 + .../packages/modules/services/seats/README.md | 1 + .../modules/services/seats/package.json | 29 + .../modules/services/seats/src/index.ts | 3 + .../seats/src/layouts/MenusLayout.vue | 123 + .../services/seats/src/routes/index.ts | 22 + .../services/seats/src/shims-vue-global.d.ts | 7 + .../services/seats/src/views/HomeView.vue | 3 + .../modules/services/seats/tsconfig.json | 9 + .../modules/services/seats/tsconfig.node.json | 10 + .../modules/services/seats/vite.config.ts | 18 + .../modules/services/setting/README.md | 1 + .../modules/services/setting/package.json | 29 + .../modules/services/setting/src/index.ts | 3 + .../setting/src/layouts/MenusLayout.vue | 123 + .../services/setting/src/routes/index.ts | 22 + .../setting/src/shims-vue-global.d.ts | 7 + .../services/setting/src/views/HomeView.vue | 3 + .../modules/services/setting/tsconfig.json | 9 + .../services/setting/tsconfig.node.json | 10 + .../modules/services/setting/vite.config.ts | 18 + .../modules/services/system/README.md | 1 + .../modules/services/system/package.json | 29 + .../modules/services/system/src/index.ts | 3 + .../system/src/layouts/MenusLayout.vue | 11 + .../services/system/src/routes/index.ts | 62 + .../services/system/src/shims-vue-global.d.ts | 7 + .../services/system/src/views/HomeView.vue | 3 + .../modules/services/system/tsconfig.json | 9 + .../services/system/tsconfig.node.json | 10 + .../modules/services/system/vite.config.ts | 18 + .../modules/services/work-order/README.md | 1 + .../modules/services/work-order/package.json | 29 + .../modules/services/work-order/src/index.ts | 3 + .../work-order/src/layouts/MenusLayout.vue | 123 + .../services/work-order/src/routes/index.ts | 22 + .../work-order/src/shims-vue-global.d.ts | 7 + .../work-order/src/views/HomeView.vue | 3 + .../modules/services/work-order/tsconfig.json | 9 + .../services/work-order/tsconfig.node.json | 10 + .../services/work-order/vite.config.ts | 18 + contact-frontend/packages/plugins/README.md | 1 + contact-frontend/packages/plugins/index.ts | 0 .../packages/plugins/package.json | 31 + .../plugins/src/vue-directive/permission.ts | 0 contact-frontend/packages/shared/ui/README.md | 1 + .../packages/shared/ui/package.json | 24 + .../packages/shared/ui/src/components/Nav.vue | 152 + .../packages/shared/ui/src/index.ts | 5 + .../shared/ui/src/layouts/IndexLayout.vue | 8 + .../shared/ui/src/layouts/MenusLayout.vue | 13 + .../packages/shared/ui/src/pages/Page403.vue | 0 .../packages/shared/ui/src/pages/Page404.vue | 0 .../packages/shared/ui/src/pages/Page500.vue | 0 .../packages/shared/ui/tsconfig.json | 9 + .../packages/shared/ui/tsconfig.node.json | 10 + .../packages/shared/ui/vite.config.ts | 17 + .../packages/shared/utils/README.md | 1 + .../packages/shared/utils/index.ts | 0 .../packages/shared/utils/package.json | 6 + .../packages/widgets/cli/README.md | 0 .../packages/widgets/cli/package.json | 6 + .../packages/widgets/core/README.md | 0 .../packages/widgets/core/package.json | 6 + .../packages/widgets/sdk/README.md | 0 .../packages/widgets/sdk/package.json | 6 + contact-frontend/pnpm-lock.yaml | 4666 +++++++++++++++++ contact-frontend/pnpm-workspace.yaml | 3 + contact-frontend/prettier.config.cjs | 7 + contact-frontend/public/mockServiceWorker.js | 303 ++ contact-frontend/scripts/.gitkeep | 0 contact-frontend/tools/setup-naiveui/index.ts | 4 + .../tools/setup-naiveui/package.json | 6 + .../tools/setup-tailwind/index.ts | 7 + .../tools/setup-tailwind/package.json | 6 + contact-frontend/tsconfig.json | 23 + 166 files changed, 7737 insertions(+) create mode 100644 contact-frontend/.eslintrc.cjs create mode 100644 contact-frontend/.gitignore create mode 100644 contact-frontend/.prettierignore create mode 100644 contact-frontend/README.md create mode 100644 contact-frontend/env/.env.dev create mode 100644 contact-frontend/env/.env.mock create mode 100644 contact-frontend/env/.env.release create mode 100644 contact-frontend/env/vite-env.d.ts create mode 100644 contact-frontend/package.json create mode 100644 contact-frontend/packages/apps/web/README.md create mode 100644 contact-frontend/packages/apps/web/index.html create mode 100644 contact-frontend/packages/apps/web/package.json create mode 100644 contact-frontend/packages/apps/web/postcss.config.cjs create mode 100644 contact-frontend/packages/apps/web/src/App.vue create mode 100644 contact-frontend/packages/apps/web/src/index.css create mode 100644 contact-frontend/packages/apps/web/src/layouts/NavLayout.vue create mode 100644 contact-frontend/packages/apps/web/src/main.ts create mode 100644 contact-frontend/packages/apps/web/src/router/index.ts create mode 100644 contact-frontend/packages/apps/web/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/apps/web/src/views/HomeView.vue create mode 100644 contact-frontend/packages/apps/web/tailwind.config.cjs create mode 100644 contact-frontend/packages/apps/web/tsconfig.json create mode 100644 contact-frontend/packages/apps/web/tsconfig.node.json create mode 100644 contact-frontend/packages/apps/web/vite.config.ts create mode 100644 contact-frontend/packages/assets/README.md create mode 100644 contact-frontend/packages/assets/img/login-bg.svg create mode 100644 contact-frontend/packages/assets/img/logo.png create mode 100644 contact-frontend/packages/assets/package.json create mode 100644 contact-frontend/packages/modules/composables/README.md create mode 100644 contact-frontend/packages/modules/composables/package.json create mode 100644 contact-frontend/packages/modules/i18n/README.md create mode 100644 contact-frontend/packages/modules/i18n/package.json create mode 100644 contact-frontend/packages/modules/i18n/src/index.ts create mode 100644 contact-frontend/packages/modules/i18n/src/locales/en-US.json create mode 100644 contact-frontend/packages/modules/i18n/src/locales/zh-CN.json create mode 100644 contact-frontend/packages/modules/i18n/tsconfig.json create mode 100644 contact-frontend/packages/modules/mocks/README.md create mode 100644 contact-frontend/packages/modules/mocks/package.json create mode 100644 contact-frontend/packages/modules/models/README.md create mode 100644 contact-frontend/packages/modules/models/package.json create mode 100644 contact-frontend/packages/modules/models/src/index.ts create mode 100644 contact-frontend/packages/modules/models/src/routes.ts create mode 100644 contact-frontend/packages/modules/models/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/auth/README.md create mode 100644 contact-frontend/packages/modules/services/auth/package.json create mode 100644 contact-frontend/packages/modules/services/auth/src/index.ts create mode 100644 contact-frontend/packages/modules/services/auth/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/auth/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/auth/src/views/LoginView.vue create mode 100644 contact-frontend/packages/modules/services/auth/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/auth/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/auth/vite.config.ts create mode 100644 contact-frontend/packages/modules/services/chat/README.md create mode 100644 contact-frontend/packages/modules/services/chat/package.json create mode 100644 contact-frontend/packages/modules/services/chat/src/index.ts create mode 100644 contact-frontend/packages/modules/services/chat/src/layouts/MenusLayout.vue create mode 100644 contact-frontend/packages/modules/services/chat/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/chat/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/chat/src/views/HomeView.vue create mode 100644 contact-frontend/packages/modules/services/chat/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/chat/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/chat/vite.config.ts create mode 100644 contact-frontend/packages/modules/services/dashboard/README.md create mode 100644 contact-frontend/packages/modules/services/dashboard/package.json create mode 100644 contact-frontend/packages/modules/services/dashboard/src/index.ts create mode 100644 contact-frontend/packages/modules/services/dashboard/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/dashboard/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/dashboard/src/views/DashboardView.vue create mode 100644 contact-frontend/packages/modules/services/dashboard/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/dashboard/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/dashboard/vite.config.ts create mode 100644 contact-frontend/packages/modules/services/enterprise/README.md create mode 100644 contact-frontend/packages/modules/services/enterprise/package.json create mode 100644 contact-frontend/packages/modules/services/enterprise/src/index.ts create mode 100644 contact-frontend/packages/modules/services/enterprise/src/layouts/MenusLayout.vue create mode 100644 contact-frontend/packages/modules/services/enterprise/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/enterprise/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/enterprise/src/views/HomeView.vue create mode 100644 contact-frontend/packages/modules/services/enterprise/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/enterprise/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/enterprise/vite.config.ts create mode 100644 contact-frontend/packages/modules/services/organization/README.md create mode 100644 contact-frontend/packages/modules/services/organization/package.json create mode 100644 contact-frontend/packages/modules/services/organization/src/index.ts create mode 100644 contact-frontend/packages/modules/services/organization/src/layouts/MenusLayout.vue create mode 100644 contact-frontend/packages/modules/services/organization/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/organization/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/organization/src/views/HomeView.vue create mode 100644 contact-frontend/packages/modules/services/organization/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/organization/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/organization/vite.config.ts create mode 100644 contact-frontend/packages/modules/services/seats/README.md create mode 100644 contact-frontend/packages/modules/services/seats/package.json create mode 100644 contact-frontend/packages/modules/services/seats/src/index.ts create mode 100644 contact-frontend/packages/modules/services/seats/src/layouts/MenusLayout.vue create mode 100644 contact-frontend/packages/modules/services/seats/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/seats/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/seats/src/views/HomeView.vue create mode 100644 contact-frontend/packages/modules/services/seats/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/seats/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/seats/vite.config.ts create mode 100644 contact-frontend/packages/modules/services/setting/README.md create mode 100644 contact-frontend/packages/modules/services/setting/package.json create mode 100644 contact-frontend/packages/modules/services/setting/src/index.ts create mode 100644 contact-frontend/packages/modules/services/setting/src/layouts/MenusLayout.vue create mode 100644 contact-frontend/packages/modules/services/setting/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/setting/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/setting/src/views/HomeView.vue create mode 100644 contact-frontend/packages/modules/services/setting/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/setting/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/setting/vite.config.ts create mode 100644 contact-frontend/packages/modules/services/system/README.md create mode 100644 contact-frontend/packages/modules/services/system/package.json create mode 100644 contact-frontend/packages/modules/services/system/src/index.ts create mode 100644 contact-frontend/packages/modules/services/system/src/layouts/MenusLayout.vue create mode 100644 contact-frontend/packages/modules/services/system/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/system/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/system/src/views/HomeView.vue create mode 100644 contact-frontend/packages/modules/services/system/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/system/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/system/vite.config.ts create mode 100644 contact-frontend/packages/modules/services/work-order/README.md create mode 100644 contact-frontend/packages/modules/services/work-order/package.json create mode 100644 contact-frontend/packages/modules/services/work-order/src/index.ts create mode 100644 contact-frontend/packages/modules/services/work-order/src/layouts/MenusLayout.vue create mode 100644 contact-frontend/packages/modules/services/work-order/src/routes/index.ts create mode 100644 contact-frontend/packages/modules/services/work-order/src/shims-vue-global.d.ts create mode 100644 contact-frontend/packages/modules/services/work-order/src/views/HomeView.vue create mode 100644 contact-frontend/packages/modules/services/work-order/tsconfig.json create mode 100644 contact-frontend/packages/modules/services/work-order/tsconfig.node.json create mode 100644 contact-frontend/packages/modules/services/work-order/vite.config.ts create mode 100644 contact-frontend/packages/plugins/README.md create mode 100644 contact-frontend/packages/plugins/index.ts create mode 100644 contact-frontend/packages/plugins/package.json create mode 100644 contact-frontend/packages/plugins/src/vue-directive/permission.ts create mode 100644 contact-frontend/packages/shared/ui/README.md create mode 100644 contact-frontend/packages/shared/ui/package.json create mode 100644 contact-frontend/packages/shared/ui/src/components/Nav.vue create mode 100644 contact-frontend/packages/shared/ui/src/index.ts create mode 100644 contact-frontend/packages/shared/ui/src/layouts/IndexLayout.vue create mode 100644 contact-frontend/packages/shared/ui/src/layouts/MenusLayout.vue create mode 100644 contact-frontend/packages/shared/ui/src/pages/Page403.vue create mode 100644 contact-frontend/packages/shared/ui/src/pages/Page404.vue create mode 100644 contact-frontend/packages/shared/ui/src/pages/Page500.vue create mode 100644 contact-frontend/packages/shared/ui/tsconfig.json create mode 100644 contact-frontend/packages/shared/ui/tsconfig.node.json create mode 100644 contact-frontend/packages/shared/ui/vite.config.ts create mode 100644 contact-frontend/packages/shared/utils/README.md create mode 100644 contact-frontend/packages/shared/utils/index.ts create mode 100644 contact-frontend/packages/shared/utils/package.json create mode 100644 contact-frontend/packages/widgets/cli/README.md create mode 100644 contact-frontend/packages/widgets/cli/package.json create mode 100644 contact-frontend/packages/widgets/core/README.md create mode 100644 contact-frontend/packages/widgets/core/package.json create mode 100644 contact-frontend/packages/widgets/sdk/README.md create mode 100644 contact-frontend/packages/widgets/sdk/package.json create mode 100644 contact-frontend/pnpm-lock.yaml create mode 100644 contact-frontend/pnpm-workspace.yaml create mode 100644 contact-frontend/prettier.config.cjs create mode 100644 contact-frontend/public/mockServiceWorker.js create mode 100644 contact-frontend/scripts/.gitkeep create mode 100644 contact-frontend/tools/setup-naiveui/index.ts create mode 100644 contact-frontend/tools/setup-naiveui/package.json create mode 100644 contact-frontend/tools/setup-tailwind/index.ts create mode 100644 contact-frontend/tools/setup-tailwind/package.json create mode 100644 contact-frontend/tsconfig.json diff --git a/contact-frontend/.eslintrc.cjs b/contact-frontend/.eslintrc.cjs new file mode 100644 index 00000000..9ecc5013 --- /dev/null +++ b/contact-frontend/.eslintrc.cjs @@ -0,0 +1,59 @@ +module.exports = { + root: true, + env: { + 'vue/setup-compiler-macros': true, + node: true, + }, + parser: 'vue-eslint-parser', + parserOptions: { + parser: '@typescript-eslint/parser', + sourceType: 'module', + }, + 'plugins': [ + '@typescript-eslint', + ], + extends: [ + 'eslint:recommended', + 'plugin:vue/vue3-recommended', + 'plugin:prettier/recommended', + 'plugin:@typescript-eslint/recommended', + ], + rules: { + '@typescript-eslint/no-unused-vars': 'error', + 'no-empty-pattern': 'error', + 'no-useless-escape': 'error', + 'prettier/prettier': [ + 'error', + { + useTabs: false, + tabWidth: 2, + singleQuote: true, + trailingComma: 'es5', + printWidth: 80, + semi: false, + spacedComment: true + }, + ], + 'vue/no-mutating-props': 'error', + 'vue/no-unused-components': 'error', + 'vue/no-useless-template-attributes': 'error', + '@typescript-eslint/no-explicit-any': 'off', + 'vue/multi-word-component-names': 'off', + }, + ignorePatterns: [ + 'node_modules', + 'build', + 'dist', + 'public', + '*.d.ts', + '*.cjs', + ], + overrides: [ + { + files: ['./*.js'], + env: { + node: true, + }, + }, + ], +} diff --git a/contact-frontend/.gitignore b/contact-frontend/.gitignore new file mode 100644 index 00000000..38adffa6 --- /dev/null +++ b/contact-frontend/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/contact-frontend/.prettierignore b/contact-frontend/.prettierignore new file mode 100644 index 00000000..fc688866 --- /dev/null +++ b/contact-frontend/.prettierignore @@ -0,0 +1,12 @@ +**/.git +**/node_modules +**/public +**/assets +**/.husky +**/.vscode +**/env +**/dist +**/build +**/coverage + +**/*.html \ No newline at end of file diff --git a/contact-frontend/README.md b/contact-frontend/README.md new file mode 100644 index 00000000..9192bc2f --- /dev/null +++ b/contact-frontend/README.md @@ -0,0 +1,60 @@ +# 春松客服 - 前端项目相关 + +## 项目结构 + +``` +├── README.md +├── env +│   ├── .env.dev +│   ├── .env.mock +│   ├── .env.release +├── packages +│   ├── apps +│   │   ├── cskefu # web 端 +│   ├── assets # 静态资源 +│   ├── modules +│   │   ├── composables # 全局 composables +│   │   ├── models # 全局 models +│   │   ├── locales # 本地化数据 +│   │   ├── mocks # mock 数据 +│   │   ├── services +│   │   │   ├── dashboard # 工作台相关 +│   │   │   ├── chat # 客服对话聊天相关 +│   │   │   ├── worker-order # 工单模块 +│   │   │   ├── seats # 坐席模块 +│   │   │   ├── setting # 组织设置相关 +│   │   │   ├── system # 系统设置模块 +│   │   │   ├── auth # 权限/登录相关 +│   ├── plugins # 插件 (开发使用的三方库,例如:ProseMirror) +│   │   ├── prose-mirror # prose-mirror 插件 +│   │   ├── directives # 自定义指令 +│   ├── widgets # 小组件 +│   │   ├── core +│   │   ├── sdk +│   ├── shared +│   │   ├── ui # 全局 UI 组件 +│   │   ├── utils # 全局 utils +├── public +├── scripts +├── tools +│   │   ├── setup-naiveui +│   │   ├── setup-tailwind +``` + +## How to Develop + +### 1. 安装依赖 + +```bash +pnpm install +``` + +### 2. 启动项目 + +```bash +pnpm run dev +``` + +## License + +[春松许可证 v1.0](https://www.cskefu.com/2023/06/25/chunsong-public-license-1-0/) \ No newline at end of file diff --git a/contact-frontend/env/.env.dev b/contact-frontend/env/.env.dev new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/env/.env.mock b/contact-frontend/env/.env.mock new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/env/.env.release b/contact-frontend/env/.env.release new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/env/vite-env.d.ts b/contact-frontend/env/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/contact-frontend/env/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/contact-frontend/package.json b/contact-frontend/package.json new file mode 100644 index 00000000..b3c40843 --- /dev/null +++ b/contact-frontend/package.json @@ -0,0 +1,54 @@ +{ + "name": "contact-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "pnpm run -C packages/apps/web dev", + "mock": "vite packages/apps/web", + "build": "", + "build:web": "", + "build:widgets-sdk": "", + "lint": "eslint -c .eslintrc.cjs --ext .ts,.tsx,.vue --ignore-path .gitignore .", + "lint:fix": "eslint -c .eslintrc.cjs --ext .ts,.tsx,.vue --ignore-path .gitignore . --fix", + "test": "", + "test:all": "", + "test:coverage": "", + "prettier": "prettier . --write", + "prepare": "cd .. && husky install" + }, + "dependencies": { + "@vicons/ionicons5": "^0.12.0", + "@vueuse/core": "^10.2.1", + "axios": "^1.4.0", + "pinia": "^2.1.4", + "vue": "^3.3.4", + "vue-router": "^4.2.4" + }, + "devDependencies": { + "@intlify/unplugin-vue-i18n": "^0.12.0", + "@types/lodash-es": "^4.17.8", + "@types/node": "^20.4.2", + "@typescript-eslint/eslint-plugin": "^6.1.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/eslint-config-prettier": "^7.1.0", + "eslint": "^8.39.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-vue": "^9.11.0", + "husky": "^8.0.3", + "lodash-es": "^4.17.21", + "msw": "^1.2.2", + "naive-ui": "^2.34.4", + "prettier": "3.0.0", + "typescript": "^5.0.2", + "vite": "^4.4.0", + "vitest": "^0.33.0", + "vue-i18n": "^9.2.2", + "vue-tsc": "^1.8.3" + }, + "msw": { + "workerDirectory": "public" + } +} \ No newline at end of file diff --git a/contact-frontend/packages/apps/web/README.md b/contact-frontend/packages/apps/web/README.md new file mode 100644 index 00000000..182922b4 --- /dev/null +++ b/contact-frontend/packages/apps/web/README.md @@ -0,0 +1,3 @@ +# 项目入口 + +> 多模块集约化入口 \ No newline at end of file diff --git a/contact-frontend/packages/apps/web/index.html b/contact-frontend/packages/apps/web/index.html new file mode 100644 index 00000000..3b4c48c5 --- /dev/null +++ b/contact-frontend/packages/apps/web/index.html @@ -0,0 +1,13 @@ + + + + + + + 春松客服 + + +
+ + + diff --git a/contact-frontend/packages/apps/web/package.json b/contact-frontend/packages/apps/web/package.json new file mode 100644 index 00000000..9dd87192 --- /dev/null +++ b/contact-frontend/packages/apps/web/package.json @@ -0,0 +1,33 @@ +{ + "name": "@cskefu/web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/i18n": "*", + "@cskefu/models": "*", + "@cskefu/services-auth": "*", + "@cskefu/services-chat": "*", + "@cskefu/services-dashboard": "*", + "@cskefu/services-seats": "*", + "@cskefu/services-organization": "*", + "@cskefu/services-setting": "*", + "@cskefu/services-system": "*", + "@cskefu/services-enterprise": "*", + "@cskefu/services-work-order": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + } +} diff --git a/contact-frontend/packages/apps/web/postcss.config.cjs b/contact-frontend/packages/apps/web/postcss.config.cjs new file mode 100644 index 00000000..33ad091d --- /dev/null +++ b/contact-frontend/packages/apps/web/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/contact-frontend/packages/apps/web/src/App.vue b/contact-frontend/packages/apps/web/src/App.vue new file mode 100644 index 00000000..ffc448e0 --- /dev/null +++ b/contact-frontend/packages/apps/web/src/App.vue @@ -0,0 +1,6 @@ + + diff --git a/contact-frontend/packages/apps/web/src/index.css b/contact-frontend/packages/apps/web/src/index.css new file mode 100644 index 00000000..b5c61c95 --- /dev/null +++ b/contact-frontend/packages/apps/web/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/contact-frontend/packages/apps/web/src/layouts/NavLayout.vue b/contact-frontend/packages/apps/web/src/layouts/NavLayout.vue new file mode 100644 index 00000000..21d34ba4 --- /dev/null +++ b/contact-frontend/packages/apps/web/src/layouts/NavLayout.vue @@ -0,0 +1,74 @@ + + diff --git a/contact-frontend/packages/apps/web/src/main.ts b/contact-frontend/packages/apps/web/src/main.ts new file mode 100644 index 00000000..ac20af6c --- /dev/null +++ b/contact-frontend/packages/apps/web/src/main.ts @@ -0,0 +1,7 @@ +import { createApp } from 'vue' +import App from './App.vue' +import './index.css' +import router from './router' +import i18n from '@cskefu/i18n' + +createApp(App).use(router).use(i18n).mount('#app') diff --git a/contact-frontend/packages/apps/web/src/router/index.ts b/contact-frontend/packages/apps/web/src/router/index.ts new file mode 100644 index 00000000..90fbeeeb --- /dev/null +++ b/contact-frontend/packages/apps/web/src/router/index.ts @@ -0,0 +1,48 @@ +import { RouteRecordRaw, createRouter, createWebHashHistory } from 'vue-router' + +import { ROUTE_NAME } from '@cskefu/models' + +import { routes as authRoutes } from '@cskefu/services-auth' +import { routes as dashboardRoutes } from '@cskefu/services-dashboard' +import { routes as settingRoutes } from '@cskefu/services-setting' +import { routes as systemRoutes } from '@cskefu/services-system' +import { routes as seatsRoutes } from '@cskefu/services-seats' +import { routes as organizationRoutes } from '@cskefu/services-organization' +import { routes as chatRoutes } from '@cskefu/services-chat' +import { routes as workOrderRoutes } from '@cskefu/services-work-order' +import { routes as enterpriseRoutes } from '@cskefu/services-enterprise' + +import NavLayout from '../layouts/NavLayout.vue' + +const routes: RouteRecordRaw[] = [ + { + path: '/', + component: () => import('../views/HomeView.vue'), + }, + { + path: '/login', + redirect: { name: ROUTE_NAME.AUTH_LOGIN }, + }, + { + path: '/index', + component: NavLayout, + children: [ + ...dashboardRoutes, + ...chatRoutes, + ...workOrderRoutes, + ...seatsRoutes, + ...organizationRoutes, + ...settingRoutes, + ...systemRoutes, + ...enterpriseRoutes, + ], + }, + ...authRoutes, +] + +const router = createRouter({ + history: createWebHashHistory(), + routes, +}) + +export default router diff --git a/contact-frontend/packages/apps/web/src/shims-vue-global.d.ts b/contact-frontend/packages/apps/web/src/shims-vue-global.d.ts new file mode 100644 index 00000000..058c8de4 --- /dev/null +++ b/contact-frontend/packages/apps/web/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global.d'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/apps/web/src/views/HomeView.vue b/contact-frontend/packages/apps/web/src/views/HomeView.vue new file mode 100644 index 00000000..5fdb1b38 --- /dev/null +++ b/contact-frontend/packages/apps/web/src/views/HomeView.vue @@ -0,0 +1,3 @@ + diff --git a/contact-frontend/packages/apps/web/tailwind.config.cjs b/contact-frontend/packages/apps/web/tailwind.config.cjs new file mode 100644 index 00000000..fbc793b4 --- /dev/null +++ b/contact-frontend/packages/apps/web/tailwind.config.cjs @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +// eslint-disable-next-line no-undef +import base from '@cskefu/setup-tailwind' + +export default { + ...base, + content: [ + './index.html', + './src/**/*.{vue,js,ts,jsx,tsx}', + './node_modules/@cskefu/**/*.{vue,js,ts,jsx,tsx}', + ], +} diff --git a/contact-frontend/packages/apps/web/tsconfig.json b/contact-frontend/packages/apps/web/tsconfig.json new file mode 100644 index 00000000..5fe77344 --- /dev/null +++ b/contact-frontend/packages/apps/web/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"] + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/apps/web/tsconfig.node.json b/contact-frontend/packages/apps/web/tsconfig.node.json new file mode 100644 index 00000000..a645f8f9 --- /dev/null +++ b/contact-frontend/packages/apps/web/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/apps/web/vite.config.ts b/contact-frontend/packages/apps/web/vite.config.ts new file mode 100644 index 00000000..e2e24fe3 --- /dev/null +++ b/contact-frontend/packages/apps/web/vite.config.ts @@ -0,0 +1,20 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [ + resolve(__dirname, 'node_modules/@cskefu/locales/src/locales/**'), + ], + }), + ], +}) diff --git a/contact-frontend/packages/assets/README.md b/contact-frontend/packages/assets/README.md new file mode 100644 index 00000000..56b1f0d2 --- /dev/null +++ b/contact-frontend/packages/assets/README.md @@ -0,0 +1 @@ +# 项目资源 \ No newline at end of file diff --git a/contact-frontend/packages/assets/img/login-bg.svg b/contact-frontend/packages/assets/img/login-bg.svg new file mode 100644 index 00000000..41e29583 --- /dev/null +++ b/contact-frontend/packages/assets/img/login-bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/contact-frontend/packages/assets/img/logo.png b/contact-frontend/packages/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c819a0d636a0e333a7b9fa13263101aab54474b8 GIT binary patch literal 26749 zcmY(r1yq!6_dR?ME!{1Qpn^0AA~{0|3P^XClmgP}3?R~_gn)FTNK3;23Mf(n(lC^C zN!QGG^E~hS{oenq6s9F^Gm>CGwYDNJTy^#^w0;5%r~D{RSn~Kaa#$q`-fkegkj;#eW~dC;<5P_gbU{ z>Ke!h@WK6@uV)SyN?}QWk}ub6a`1kns3>Iv{PQ~p!W5f9^l=D`!m?~N`viD@g3wn~ z?0US%2qx2J--z#CQ(t;~2@54qR5Yn%4Pa*RIiZLV z`ibL0=oA@&6A1x0^4umi^4y78Ml>moF0sRNu3I;lKaCRKF)yIj+A@kW>&RTc%$Ky3 z@NU%SPR8%%;P@3%46Z;}7h6Zw`y23On!c)&5?y!VBE4QdO!FVT2M{VPs4y-vf}8cW z&z1px4@Vwb2J^Rmc;Q=(pMkMXRjNXZbr|4cC=w*3Gmc(OMj!c58}Pql0<`47p+j8d}&@aaC_dK zfv@Lt^%)NpKH2qNLW<*nq^~5}#P~-uyWTe0-?s6mw2pSY8X)C7x^D0u;pZtff;P3E z_gbIv_sn(STUjO#d;E$*-UAMtOn<>QN=A_^>kg0UhIpQ6+$~CR4*S)z{#eBt+;i?z zMXBS14^G61m*iO4;Mm~c9Y+RUH(Z>)S;2TaJZ-rKX`m>KP_taK%s4KHm_*4xrM(JaCD`1^W6n^y39%9xv8RJ05|EC`+|MacP1C`c2$jR<*teGJg= zegY-LaY_Xlw#3e3LoWiNpkw}NYR${pXDqXV9KUseX9&;8>;;78+Q(SJHFbcd(f5# zj^J^*CXYg!#S^2hNC8Dfg{6CdA}zD9%pYR~< z@w+7~C5}a?q1^f8XM{nz^dTv4&@-!u?%TkxTNt3LPRohe**BY+PV z9M`-2&j@@5HJ;Dd!s=Eze?lPB~h(E*b2wn?vG zoYWovBq02-!#H0(-WW4BYO|$JvFm4*_O!D1t=3R^yQ*`UA7=yb^jrpgX1s$_4YECF{zL3 ziPqMznz)NsYV#)j2w9?vtYK{?vXpo0jY1m+jS&~>^;H=_J${bAUYYo2oU2R47#$Je zpvre0Gn9HHe2tWUZMc$pdDjmS?Qx&q1_sfAnTdmABbo`I61|$j9_&tozk*@c7TDis zkx-G9b3fFd?FpkCRuT2Yp4?y4gShEBd@|~*Dh^sRgRYBOCnPJesNp`e_NP`9l_UT- zy4|$}=^q4GZ)nMt zI;t+!u)AgON~WBZiGT)6x*9z3nmlq#CYLXrB1pYw%2ZmW!T{y16r0rH8j@kgzJV>6 zk2PjinOyLF1|1cdT=kg+c<8{534R8K6Vj;TmU`ga<17Lph&Z%!@J0NnnAS<7SS|+f zWpy4>|JsTP#e=jPb4ZEc{>2DH5Y>73D&MsB;JcXpem|Pah!{>wtcERaxJMkndU0T` zz=Q(lv8PyAO7SZr*Fw`0p9cyg3!`F4Iijeua42skzd}qty)#m7daj{FI z?yI?JebSZKBbxbFCktKke_t9aihjsL8>(T);hB0Chx-Edw+X6Pn|Xu>=>I5}7wSiw ze$QgK%iy32#F4~_QxNPw(hGYoMCX=WOt&B$84+U%K$msXr)#8wENu8rW|q^wwcFhT zwDw9Q*DBdU>A6M{$_-AU2PAg)-KO(KZ`0ZgUR-aV`<7C#mvVL;tJGln;euhDS+ME7 zM-?{DnN<|EIskY?sc8KV==}8KyVPa0Xu0xt93qMb0>v&Pol7eU7+(jlxc@C$g&T*M zM?*?R%tN;J9qa(Vj(rYwv8$1n(zB&db}to0Q9c5ovpnY3FRqNnpSTxuzU#{Y7J(Z# zf^;}U?#4*fG^xows7qHd*7B8JG77qO>iP{p)v<5ta1ed3 zA|h&SXiy2-b?>B#Fs{F6l4V5wy!WZdbij~cPFhY(b%t#CX;HCN@JX95mwaot#fE*B zL|OwPsu2;2;Ng<*DgfUGPN?53jlFLG%#990P91kA3(7ejrWnvI?8lY3-`G&N8T{$v znN6Y>Rxy|BmzuZ}BS2J4ENv=XC$cVcJ%fT7Pw=e-cN;G#@VJ4TUq>1@C`{>ur9IpgZN~uj zfy!gz2)%}ETuJkGQ7E`Gb~i!<-+N1nec3G*G?>5WwD?oleH+X#%3Z?*kG>$f}+F0bRw1B{a{_JuS%n9+qu%oUxe18PJTUaWrAeL!zo-K(HZXt z8*s}CEMcOo9>2j@ewrn-UvSs}rq+z4u%3~zOLcjC7Y4t_b_@IRg~ih_A9CgUBxr`~ zVi%*$p+gVFVoG$De^k7OP~td^7kqNQ?Djog0VCHn3$fLk{`msRk$0+{ZKDiUO-|%G z*32o@`9?MD;1ifeAO0>ji8FiD;7uC3WdtboRrP^2xmQjUMyqE*ZB`@}chmURPaI1C z8B+qc`P!WMq-Z*Alo}b@v=bT;VO`EAJ*Q1HU@xff07U(EeN|n1HPK)+;+*ve@7x8X zE2>qag$4K*4t{(P!UxKVxS+9j07!A(++ry5Nsg3ACnQ{iH(6Lumw$(FJ@ zb6PfU;=i%9xZvrQ0Vf$6Et*+`J|-+F8^4z*s7tAHex((zqea>v0#I6(MSpZ1uKHtm z-2Bd-{!TMJ4HZ>#SdY}ryhqRI$ZQ6bgQ|)?BT_mzTP`~>fUP{^6U|Pcp4=)t=mgKJ zIU}iLwR-n;aftNV>J>GWmgqOHllG7L+)myrO#c~XeEz=Syb5uw;ZTz##d z4?5kezie~m5d0Tvc!Ow#$99mwBBnEK?3Q*gtPX^+&6%oaZ_$Ps+oPpHYRev-i{c&NnA&48?TmJjg#ZxPu(O0P{PYN zORKsWW2{&Xt`004oj!UeS0$@aj5;LGlDqj^-;yGrlk`jx&TM8QW$* zkfA6fN3R>_CdL0|3N@5xYqU*qtRh@x*MrV83REA zTI`F1=~>DK9tOul%ah-f)doYkf9leRu9NWYV3d>m+ZZWuNQl1fw69E@0bXK)&dl}H zIoU6vJn&j#bizVuLi46k%y}FazVX=Vg-LJ#-oglQ{F}J2v4QWhc>)&-9SyHvCz>G0 zwB;C{Nj?)swid0*(^}j0?z({IFCX2Tk%crUi+rIeVx9u18O8-Yxx&6J4U6kG2WGXA zs9p4Nl7#yLJ1Yp;9E+c2DNdD)02>L7`WyYV#^1KvWb^=rGgBWh4YShW3E_WEe!M$* z(yhuhf3c{e0fHB;iIPuj>vtUzWm4V%zEV^D57n6jId?Hj$EzE+j=W~Ta@7zF(8!&L zENkEaGup^PXuJ4nV2eeP_Ehwck4PuU%jvTM)DPSVT+8HG?jswJp6l|MTIMgr?$69D zPts^)ArAK_)CR-2ZNbDE^FxXMC^eOB$bBo!ICpvc;871wh4kX~Uz5u#DnNNOPDh*< zm1>Fnf%6bwCi^T{nhx%DYJm*=)AckZ^w^M86<^(xAER-0+6J%X-}!kFEd!8}$d6;? zM7u@a+H2D&Wfh68DLv}WSLILg+=`Rs4XU+-rH4$KOJaAE)P*5FFTH-bZ-MZSVRRQR zZWjId9^RV2yx18SA}km|3{=Lmg5&FSGkcp2F9DkqQD~1f6 zz}}ISSt9XCe((aFa~IIWmtOa2lskZ(6`As@@BO5*`sq1Q0v?@o7 z1127}r5(ibIw_zA82*~zZ^JpW{E|A0Z3(~FCL`c8iIb@a@qhbgLEx+B9`Cya@{Q3j zyN2j-=yR9X0z@GH!D%?<;)tEVMNxVQYdw&T%@yme5!CoUz!{dOVD=$wgYn~w%RVsIUMYOljq5g8ikNfX3f1;1yDmIW;t}T7 zE$VmC$GCeha*O9Oeh~dB>c*R~92k*v^|hDq#y@w$G)E(T8_yq;0g~+TOly9zG=7}` zQi2YTQ&Kj`n@9ec=x-B@ zygx@w+1RwTj4CEI9d?$2+CYgKeBJyOlBJ;peo#s+lfl$PU;Z`@Toh0W_))}Fo#ua2 zFISwXcL}po`{`hrw6DsGOnv!=DnP2Kg&h*`X11A3yIOr(>A^>p$O?pS5 z{4EjJWm5VT?POMrM=KUf($JAr9TyBjBmL&FcKAbjteG-@&u=5*`=UpIW?^&R5a=5A zh+Y^eaH`fiobf!0GfyJrYG*l3>1H#%qGDAZJ?ATS{7pZq0^#?qYcCC+Dhny80`RL3 z#hx+cta^8tIdo$Y_zNbdCz7v`hxnTPn6jY^svqBAR4-7}09H>;11|sn*B1wWkO1FW zUEM*94l>3C$2%$@pE2taezndCKpf9INh4Hzw8``bS3vX}fL z9=AA%t6Fj|GV55IrJt+UmRk`8U)_}iX z6$#+u!&c{zl1x=IFRU{T*_8Y{%)F|Yopia?8eK!?JRycjHwZE5z7_2jpMU?135$aq zL|sXEO5mI%(QV&>l&#x0 zajy6t{2o5|{9+-u&?9rp81tqPYyjOt3S31Z>{eV*4Qs%F`_`R?qbp^rW4}fMv?`ce z&Fx+Be3k)qMet%74{?bnNoDmOe1toayTx*Xc6I zwdE`4kBEpj_U<4en5M8aNgw2ftsFfRQ17R`GQL#c_w1AJYSrXT`a_`ZY+wYXJDrcI z&Sn699?G(h4ki*-mYlW48^`gdljVd2ejLJ1{9YgkEKA=F=iX`RKn^{_1$BtDbIqXN zhti(TJ3rXcrJGM9*8M1M*@6@}e7LNHewSq#cen#xCI zN=u}NJJq|k_$ax$O@uN!PoLZD6WtS~H3}S7B>Vw<@H6)D+F+4k7v&_I;%$!F3ULBJ zbfYvmrUhJ4hn*jn6JRookiSjTjBWk0NvIjt7M7}u`=!zgJO6|#KNTm&^kQ45EC}WW z^f-n6`Uxd5q{H)-yZAIS-nAhlBhnN&b3`~ZKMs$-NflWd;ArR!?wG%xW!sk#@p3hP z3RMV*_~~l_0L{kaqYOiW5UGsbJUe)+@u>LDMsimcX1-719&)wY)hRWI;M`}j`Duq) zOG&=^@iMT6Z_C?~lQUE6fmR?`%Sgr$W#?6ZxBNHUON4?utyFKeK{) zsj=~U4ObS38#wZyBej;vLSZk`f0w~gtVqF*i>Fn(8?YR%_tiO8KZ8rOkybeTd1muL zDs>jY)1O>iM$JTz4rC#d-H|2|IF@=|`@5=F(;}AvW)x$q!4Zmj>KZ5#aM>c<|E*I! z>Vv@%+~}wxuF6=2X?{Od&YZb8 z{1xZX%S#N0$sun5gRTN3m8?>(62~HkKBv24p4s6M>0&aFDE^UbiY)Lzgnz#ORv|a@ zY3%mJdY|6N0jO(K=B?k@LZ8V==6=lFa3r;$cY9LSCi`R^+d4Y1^E5ctCOtkdBV0`b zDT%ZJiV9ah;)spxRrtu&^W~I1?e--*kL#ZKL|(6D{jKB1#6@s(-QI$BP{{)qL+fW*0-p440y z6uqn38k#k?C7!qx+qjNHS%Be0jK#3fpCJ(9j=68y0CC4>t2$l32jbnZ3}d@>QN!6a z(ZCN$mS?4_=$JqGJmMK)?c)K(5TTXq-j=$`c5)_w(iW5|mIwC8TK^yVvfij!i4Pt7 zB3M^bQbTTdf#32-uTCgo$}bbytU|Qi*rdRno`ph^qk=FDglEs{3^Ri-BpPP->wiTv zt^=qi33KnjK^e9F_GifWC6~0lgU#D;u8mo!W~mdr6#ocD&9wlZryu3Z_cfbNQA-Eh zkqSc`=*JMoVvqoXI>xrz4`1dx!`#=5HAt$i%?#zN`}+CzHl!|;!Aog`hOv{XuPQq9 zRm}zmjH3RrW&3Kk_-%&q^j}y|4SM{(tGlOWZIxVikSaLT5N|KdIQRDCl9eTo3 z>6@f8wP%%*WcBv)=&X1}VT0>=G6Ix2+H4nNt5nGUa44U$8+VA`-dQudgxxHlwGkYZ zU&dds%4fynW^T}^kjkZDw9@)i4f%r>U^YM>pC{gXqrRz$v+cg3$~IoJuVA3U9_Qu}+Jrj`8uwIeCu zTcC~Y8tR`cc_wgx!i;MKUd)D5Ao>nXBfcyu5IUMQ=g4WkzUbgin`5hkA`|C>$~BF_ zo`YzM#VIRTRh>Al0!e!0mALBLPc$;JdW67aS^eX;DH2hPN4kmMpiUE7sltJS zJlnZwC2qiUb{Ucs&0FZ**C7Bvh@deV$Do5H9A)g2>Cpy=Il$Uv7}rYL%J9ZZF=q$C z>(uk42S=QG1t_af97fX?yb@R4u)l$`zG{-=gZ<8;N3Dsshi99S>aRz*S7@9o%04zo zNDNC}Un=~drre%lwSwPWLL6fS%JiJt3~;)U1EP2Tsi(mUI$bc7*=2=O8%4gZr$rMx zkP`wxjD6#*$q6#Br9gikN|S~NWuHCOpG?lZDgF0d$P!107ZnUrKl~@KcYcZcyan$u z1=+NkK5m6vL~@B~k1!zABobnwO8>Cm^iMEYKbPz1lT}{FM`Md|lOB{OOX56LUft#d z%5Js61v0XLnVTMwnS%-`HW>nTpsrZo-L&Zd%DoN}-gGGE1eoNnkGMba?<%x^cUCS`D32o1dSaXwtI9H)E*^el-6`v8lj$80W@19!P|G z+*c)7_On>CbzaM}bat1HLV?!qne|p1r_SAO0F^Mhqhp%|+y!Z{qKCns9uV^HuPiMh zw6-I9qKq8|D$N{jTmZ?$aPbceW9++Bh+ zP^qE%1O2D}r8e@%ZN+*KH65Lw7Z<+h@IYNc#y_R|Cy6}rB}VP>2pRS;(SgNvuua@t z@@$SF+rJac*XCe6bk1%cEO`ZjYFLi<2l5(FwfLq%DAU}zq~*msL{q@iHA{B1fdu6y zf)G=sg?;+TK>kaA<`)B;A4o9UY90O3L0|_#tbqlLi_~&o@;8QYvx)Cje)4tj8!+in z$rk@2Da0x}9i%b=3YyL2avxbp%Da7CT>frFa;Xo7E-Kud_G2YoRQk40`GHcCZQr{% zXZ@!wooM35$lj-HDM_b9t}6*sDz^AQFu#9TnNW4}xyV*Nq{n7>g+gY3B8dYC5-fC? zkg0?5oCN8RCwQftbO6{;MNS-9#CIG1d58qndO{_W!Oc`i%bG-9-bJvKot)WnOgf|* zul4AyT|@uSZLlO|?K?8Ga!bz{C;gIKl5hPJy}>&GnZ4JrE3C}dLokC{phh|k%~9Ob z=GptLkxztBUAm29s~0Sc6UqdHn#i}nY-=6~SX z7VhQI)px1Tqt_cf%Y=~^k-FzF6o87;CAOd36XmE7&IGvgZ#1GHO4Jm1g{!EJPxX{L74sb312o|JW{A z;<;-1!tH7pCj($ffy~rH;lK9Y))ko@C`bWVMP(R>#q0JyA{k;{dIK(@pKLZJq%8bq zt}4cf?>L2A>rMZ90bqg;=+XR!!_GK69A?tx<}yXUxSVuf_vBL@jUEo(VwJiqMhjT} zfu5Z2Pk%a>EITLsKu}34?(8CgCxiF5h>Ozxy5IG*fbr-^(oVwL+=C(|55<_MiX~(O zCQ>#S2SyRuqW_AF?-3`7U7x-eB$l{migfx3Kl&S2R(qH?*kk8sM5&9nT9prq{8~Z3 z{Um;uI#=m)ulr+D1OzP)V4=EjE{c;A9;0i4U35t?s49W_yB;jEW8a&f ze>J8XlF5LRPBZ7*^GiE0OSEZRG$d%mQi7iwk(D+>ZCU0)ij ziE?IK4NO~$bkqf) z@OW!{=4MG}2aEwBY^hG?sNQeJ{4ji9#=kEN0RvYbN1QSt{34y$B*%t}aCH1uiMmK% z)n>y@N<;k0AJ2n*HJNOq_w=*$-emD1ulL6E5|

Ec|uL2=-j%TK2-q3=UKws` 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 { + app.use(i18n) +} + +export default install diff --git a/contact-frontend/packages/modules/i18n/src/locales/en-US.json b/contact-frontend/packages/modules/i18n/src/locales/en-US.json new file mode 100644 index 00000000..66f4ba7a --- /dev/null +++ b/contact-frontend/packages/modules/i18n/src/locales/en-US.json @@ -0,0 +1,5 @@ +{ + "message": { + "hello": "hello world" + } +} \ No newline at end of file diff --git a/contact-frontend/packages/modules/i18n/src/locales/zh-CN.json b/contact-frontend/packages/modules/i18n/src/locales/zh-CN.json new file mode 100644 index 00000000..77edcc88 --- /dev/null +++ b/contact-frontend/packages/modules/i18n/src/locales/zh-CN.json @@ -0,0 +1,5 @@ +{ + "message": { + "hello": "你好" + } +} \ No newline at end of file diff --git a/contact-frontend/packages/modules/i18n/tsconfig.json b/contact-frontend/packages/modules/i18n/tsconfig.json new file mode 100644 index 00000000..f745880d --- /dev/null +++ b/contact-frontend/packages/modules/i18n/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../tsconfig.json", + "include": ["src/**/*.ts"], + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "resolvePackageJsonExports": false, + "allowSyntheticDefaultImports": true, + } +} diff --git a/contact-frontend/packages/modules/mocks/README.md b/contact-frontend/packages/modules/mocks/README.md new file mode 100644 index 00000000..4f5081f6 --- /dev/null +++ b/contact-frontend/packages/modules/mocks/README.md @@ -0,0 +1 @@ +# Mock 模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/mocks/package.json b/contact-frontend/packages/modules/mocks/package.json new file mode 100644 index 00000000..efd1f05e --- /dev/null +++ b/contact-frontend/packages/modules/mocks/package.json @@ -0,0 +1,14 @@ +{ + "name": "@cskefu/mocks", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/models/README.md b/contact-frontend/packages/modules/models/README.md new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/modules/models/package.json b/contact-frontend/packages/modules/models/package.json new file mode 100644 index 00000000..57046812 --- /dev/null +++ b/contact-frontend/packages/modules/models/package.json @@ -0,0 +1,14 @@ +{ + "name": "@cskefu/models", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/models/src/index.ts b/contact-frontend/packages/modules/models/src/index.ts new file mode 100644 index 00000000..49800c7a --- /dev/null +++ b/contact-frontend/packages/modules/models/src/index.ts @@ -0,0 +1 @@ +export * from './routes' diff --git a/contact-frontend/packages/modules/models/src/routes.ts b/contact-frontend/packages/modules/models/src/routes.ts new file mode 100644 index 00000000..4e7f15b7 --- /dev/null +++ b/contact-frontend/packages/modules/models/src/routes.ts @@ -0,0 +1,59 @@ +export enum ROUTE_NAME { + // ================================================================================== + // 公共路由 + // ================================================================================== + PROFILE_INDEX = 'PROFILE_INDEX', // 个人中心 + NOT_FOUND = 'NOT_FOUND', // 404 + FORBIDDEN = 'FORBIDDEN', // 403 + SERVER_ERROR = 'SERVER_ERROR', // 500 + REDIRECT = 'REDIRECT', // 302 + + // ================================================================================== + // 模块路由 + // ================================================================================== + // 认证模块 + AUTH_LOGIN = 'AUTH_LOGIN', + // 看板模块 + DASHBOARD_INDEX = 'DASHBOARD_INDEX', + // 对话模块 + CHAT_INDEX = 'CHAT_INDEX', + // 工单模块 + WORK_ORDER_INDEX = 'WORK_ORDER_INDEX', + // 坐席模块 + SEATS_INDEX = 'SEATS_INDEX', + SEATS_DASHBOARD_INDEX = 'SEATS_DASHBOARD_INDEX', // 坐席看板 + SEATS_CHATMANAGE_INDEX = 'SEATS_CHATMANAGE_INDEX', // 会话管理 + SEATS_LEAVEMANAGE_INDEX = 'SEATS_LEAVEMANAGE_INDEX', // 留言管理 + SEATS_SEATSMANAGE_INDEX = 'SEATS_SEATSMANAGE_INDEX', // 坐席管理 + SEATS_ROBOTMANAGE_INDEX = 'SEATS_ROBOTMANAGE_INDEX', // 机器人管理 + // 组织管理模块 + ORGANIZATION_INDEX = 'ORGANIZATION_INDEX', + ORGANIZATION_ADMIN_INDEX = 'ORGANIZATION_ADMIN_INDEX', // 管理员 - 组织管理设置 + ORGANIZATION_USERS_INDEX = 'ORGANIZATION_USERS_INDEX', // 账号管理 + ORGANIZATION_ROLES_INDEX = 'ORGANIZATION_ROLES_INDEX', // 角色管理 + // 设置模块 + SETTING_INDEX = 'SETTING_INDEX', + SETTING_KNOWLEDGE_INDEX = 'SETTING_KNOWLEDGE_INDEX', // 知识库 + SETTING_WORKORDER_INDEX = 'SETTING_WORKORDER_INDEX', // 工单 + SETTING_LEAVEMESSAGE_INDEX = 'ENTERPRISE_LEAVEMESSAGE_INDEX', // 留言 + // 企业设置模块 + ENTERPRISE_INDEX = 'ENTERPRISE_INDEX', + ENTERPRISE_KEFU_INDEX = 'ENTERPRISE_KEFU_INDEX', // 客服设置 + ENTERPRISE_CHANNEL_INDEX = 'ENTERPRISE_CHANNEL_INDEX', // 接入 + ENTERPRISE_CHAT_INDEX = 'ENTERPRISE_CHAT_INDEX', // 对话 + ENTERPRISE_CUSTOMER_INDEX = 'ENTERPRISE_CUSTOMER_INDEX', // 客户 + + // 系统设置模块 + SYSTEM_INDEX = 'SYSTEM_INDEX', + SYSTEM_INFO_INDEX = 'SYSTEM_INFO_INDEX', // 系统信息 + SYSTEM_SOURCE_INDEX = 'SYSTEM_SOURCE_INDEX', // 源数据 + SYSTEM_NOTIFICATION_INDEX = 'SYSTEM_NOTIFICATION_INDEX', // 通知 + SYSTEM_SOCIAL_INDEX = 'SYSTEM_SOCIAL_INDEX', // 三方登录 + SYSTEM_OSS_INDEX = 'SYSTEM_OSS_INDEX', // OSS + SYSTEM_CDN_INDEX = 'SYSTEM_CDN_INDEX', // CDN + SYSTEM_GPT_INDEX = 'SYSTEM_GPT_INDEX', // GPT + SYSTEM_SMS_INDEX = 'SYSTEM_SMS_INDEX', // 短信 + SYSTEM_CALL_INDEX = 'SYSTEM_CALL_INDEX', // 呼叫 + SYSTEM_LOG_INDEX = 'SYSTEM_LOG_INDEX', // 日志 + // ================================================================================= +} diff --git a/contact-frontend/packages/modules/models/tsconfig.json b/contact-frontend/packages/modules/models/tsconfig.json new file mode 100644 index 00000000..6f8fe384 --- /dev/null +++ b/contact-frontend/packages/modules/models/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + } +} diff --git a/contact-frontend/packages/modules/services/auth/README.md b/contact-frontend/packages/modules/services/auth/README.md new file mode 100644 index 00000000..8a03ad50 --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/README.md @@ -0,0 +1 @@ +# 登录/认证模块 diff --git a/contact-frontend/packages/modules/services/auth/package.json b/contact-frontend/packages/modules/services/auth/package.json new file mode 100644 index 00000000..b7c0f8ec --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-auth", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/auth/src/index.ts b/contact-frontend/packages/modules/services/auth/src/index.ts new file mode 100644 index 00000000..e15d5640 --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/src/index.ts @@ -0,0 +1,4 @@ +import LoginView from './views/LoginView.vue' +import routes from './routes/index.ts' + +export { LoginView, routes } diff --git a/contact-frontend/packages/modules/services/auth/src/routes/index.ts b/contact-frontend/packages/modules/services/auth/src/routes/index.ts new file mode 100644 index 00000000..a7542c11 --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/src/routes/index.ts @@ -0,0 +1,25 @@ +import { RouteRecordRaw } from 'vue-router' + +import { IndexLayout } from '@cskefu/shared-ui' +import { ROUTE_NAME } from '@cskefu/models' + +const routes: RouteRecordRaw[] = [ + { + path: '/auth', + component: IndexLayout, + redirect: { name: ROUTE_NAME.AUTH_LOGIN }, + children: [ + { + path: 'login', + name: ROUTE_NAME.AUTH_LOGIN, + component: () => import('../views/LoginView.vue'), + meta: { + title: '登录', + auth: false, + }, + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/auth/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/auth/src/shims-vue-global.d.ts new file mode 100644 index 00000000..058c8de4 --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global.d'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/auth/src/views/LoginView.vue b/contact-frontend/packages/modules/services/auth/src/views/LoginView.vue new file mode 100644 index 00000000..1e92bf1b --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/src/views/LoginView.vue @@ -0,0 +1,49 @@ + + diff --git a/contact-frontend/packages/modules/services/auth/tsconfig.json b/contact-frontend/packages/modules/services/auth/tsconfig.json new file mode 100644 index 00000000..6ddcd64d --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/auth/tsconfig.node.json b/contact-frontend/packages/modules/services/auth/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/auth/vite.config.ts b/contact-frontend/packages/modules/services/auth/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/auth/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/modules/services/chat/README.md b/contact-frontend/packages/modules/services/chat/README.md new file mode 100644 index 00000000..afe1fe26 --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/README.md @@ -0,0 +1 @@ +# 聊天模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/services/chat/package.json b/contact-frontend/packages/modules/services/chat/package.json new file mode 100644 index 00000000..81c713c3 --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-chat", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/chat/src/index.ts b/contact-frontend/packages/modules/services/chat/src/index.ts new file mode 100644 index 00000000..ed8c60b5 --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/src/index.ts @@ -0,0 +1,3 @@ +import routes from './routes' + +export { routes } diff --git a/contact-frontend/packages/modules/services/chat/src/layouts/MenusLayout.vue b/contact-frontend/packages/modules/services/chat/src/layouts/MenusLayout.vue new file mode 100644 index 00000000..2dce4e74 --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/src/layouts/MenusLayout.vue @@ -0,0 +1,123 @@ + + diff --git a/contact-frontend/packages/modules/services/chat/src/routes/index.ts b/contact-frontend/packages/modules/services/chat/src/routes/index.ts new file mode 100644 index 00000000..624e046c --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/src/routes/index.ts @@ -0,0 +1,22 @@ +import { RouteRecordRaw } from 'vue-router' +import { ROUTE_NAME } from '@cskefu/models' + +import Layout from '../layouts/MenusLayout.vue' + +const routes: RouteRecordRaw[] = [ + { + path: '/chat', + name: 'chat', + component: Layout, + redirect: '/chat/index', + children: [ + { + path: 'index', + name: ROUTE_NAME.CHAT_INDEX, + component: () => import('../views/HomeView.vue'), + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/chat/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/chat/src/shims-vue-global.d.ts new file mode 100644 index 00000000..058c8de4 --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global.d'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/chat/src/views/HomeView.vue b/contact-frontend/packages/modules/services/chat/src/views/HomeView.vue new file mode 100644 index 00000000..d7522b9d --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/src/views/HomeView.vue @@ -0,0 +1,3 @@ + diff --git a/contact-frontend/packages/modules/services/chat/tsconfig.json b/contact-frontend/packages/modules/services/chat/tsconfig.json new file mode 100644 index 00000000..6ddcd64d --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/chat/tsconfig.node.json b/contact-frontend/packages/modules/services/chat/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/chat/vite.config.ts b/contact-frontend/packages/modules/services/chat/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/chat/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/modules/services/dashboard/README.md b/contact-frontend/packages/modules/services/dashboard/README.md new file mode 100644 index 00000000..b5aec68d --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/README.md @@ -0,0 +1 @@ +# 看板模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/services/dashboard/package.json b/contact-frontend/packages/modules/services/dashboard/package.json new file mode 100644 index 00000000..7b0dea6f --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-dashboard", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/dashboard/src/index.ts b/contact-frontend/packages/modules/services/dashboard/src/index.ts new file mode 100644 index 00000000..ed8c60b5 --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/src/index.ts @@ -0,0 +1,3 @@ +import routes from './routes' + +export { routes } diff --git a/contact-frontend/packages/modules/services/dashboard/src/routes/index.ts b/contact-frontend/packages/modules/services/dashboard/src/routes/index.ts new file mode 100644 index 00000000..76a41b27 --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/src/routes/index.ts @@ -0,0 +1,26 @@ +import { RouteRecordRaw } from 'vue-router' + +import { IndexLayout } from '@cskefu/shared-ui' +import { ROUTE_NAME } from '@cskefu/models' + +const routes: RouteRecordRaw[] = [ + { + path: '/dashboard', + name: 'dashboard', + component: IndexLayout, + redirect: { name: ROUTE_NAME.DASHBOARD_INDEX }, + children: [ + { + path: 'index', + name: ROUTE_NAME.DASHBOARD_INDEX, + component: () => import('../views/DashboardView.vue'), + meta: { + title: '数据看板', + auth: true, + }, + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/dashboard/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/dashboard/src/shims-vue-global.d.ts new file mode 100644 index 00000000..058c8de4 --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global.d'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/dashboard/src/views/DashboardView.vue b/contact-frontend/packages/modules/services/dashboard/src/views/DashboardView.vue new file mode 100644 index 00000000..1ff70189 --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/src/views/DashboardView.vue @@ -0,0 +1,5 @@ + diff --git a/contact-frontend/packages/modules/services/dashboard/tsconfig.json b/contact-frontend/packages/modules/services/dashboard/tsconfig.json new file mode 100644 index 00000000..6ddcd64d --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/dashboard/tsconfig.node.json b/contact-frontend/packages/modules/services/dashboard/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/dashboard/vite.config.ts b/contact-frontend/packages/modules/services/dashboard/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/dashboard/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/modules/services/enterprise/README.md b/contact-frontend/packages/modules/services/enterprise/README.md new file mode 100644 index 00000000..8190c1dd --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/README.md @@ -0,0 +1 @@ +# 坐席模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/services/enterprise/package.json b/contact-frontend/packages/modules/services/enterprise/package.json new file mode 100644 index 00000000..b1db8870 --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-enterprise", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/enterprise/src/index.ts b/contact-frontend/packages/modules/services/enterprise/src/index.ts new file mode 100644 index 00000000..ed8c60b5 --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/src/index.ts @@ -0,0 +1,3 @@ +import routes from './routes' + +export { routes } diff --git a/contact-frontend/packages/modules/services/enterprise/src/layouts/MenusLayout.vue b/contact-frontend/packages/modules/services/enterprise/src/layouts/MenusLayout.vue new file mode 100644 index 00000000..2dce4e74 --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/src/layouts/MenusLayout.vue @@ -0,0 +1,123 @@ + + diff --git a/contact-frontend/packages/modules/services/enterprise/src/routes/index.ts b/contact-frontend/packages/modules/services/enterprise/src/routes/index.ts new file mode 100644 index 00000000..fbab1e07 --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/src/routes/index.ts @@ -0,0 +1,22 @@ +import { RouteRecordRaw } from 'vue-router' +import { ROUTE_NAME } from '@cskefu/models' + +import Layout from '../layouts/MenusLayout.vue' + +const routes: RouteRecordRaw[] = [ + { + path: '/organization', + name: 'organization', + component: Layout, + redirect: '/organization/index', + children: [ + { + path: 'index', + name: ROUTE_NAME.ENTERPRISE_INDEX, + component: () => import('../views/HomeView.vue'), + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/enterprise/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/enterprise/src/shims-vue-global.d.ts new file mode 100644 index 00000000..431e298f --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/enterprise/src/views/HomeView.vue b/contact-frontend/packages/modules/services/enterprise/src/views/HomeView.vue new file mode 100644 index 00000000..f5f65c0a --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/src/views/HomeView.vue @@ -0,0 +1,3 @@ + diff --git a/contact-frontend/packages/modules/services/enterprise/tsconfig.json b/contact-frontend/packages/modules/services/enterprise/tsconfig.json new file mode 100644 index 00000000..6ddcd64d --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/enterprise/tsconfig.node.json b/contact-frontend/packages/modules/services/enterprise/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/enterprise/vite.config.ts b/contact-frontend/packages/modules/services/enterprise/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/enterprise/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/modules/services/organization/README.md b/contact-frontend/packages/modules/services/organization/README.md new file mode 100644 index 00000000..8190c1dd --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/README.md @@ -0,0 +1 @@ +# 坐席模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/services/organization/package.json b/contact-frontend/packages/modules/services/organization/package.json new file mode 100644 index 00000000..dc2c67f9 --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-organization", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/organization/src/index.ts b/contact-frontend/packages/modules/services/organization/src/index.ts new file mode 100644 index 00000000..ed8c60b5 --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/src/index.ts @@ -0,0 +1,3 @@ +import routes from './routes' + +export { routes } diff --git a/contact-frontend/packages/modules/services/organization/src/layouts/MenusLayout.vue b/contact-frontend/packages/modules/services/organization/src/layouts/MenusLayout.vue new file mode 100644 index 00000000..2dce4e74 --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/src/layouts/MenusLayout.vue @@ -0,0 +1,123 @@ + + diff --git a/contact-frontend/packages/modules/services/organization/src/routes/index.ts b/contact-frontend/packages/modules/services/organization/src/routes/index.ts new file mode 100644 index 00000000..fb237ea9 --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/src/routes/index.ts @@ -0,0 +1,22 @@ +import { RouteRecordRaw } from 'vue-router' +import { ROUTE_NAME } from '@cskefu/models' + +import Layout from '../layouts/MenusLayout.vue' + +const routes: RouteRecordRaw[] = [ + { + path: '/organization', + name: 'organization', + component: Layout, + redirect: '/organization/index', + children: [ + { + path: 'index', + name: ROUTE_NAME.ORGANIZATION_INDEX, + component: () => import('../views/HomeView.vue'), + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/organization/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/organization/src/shims-vue-global.d.ts new file mode 100644 index 00000000..431e298f --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/organization/src/views/HomeView.vue b/contact-frontend/packages/modules/services/organization/src/views/HomeView.vue new file mode 100644 index 00000000..f22d7d9d --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/src/views/HomeView.vue @@ -0,0 +1,3 @@ + diff --git a/contact-frontend/packages/modules/services/organization/tsconfig.json b/contact-frontend/packages/modules/services/organization/tsconfig.json new file mode 100644 index 00000000..6ddcd64d --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/organization/tsconfig.node.json b/contact-frontend/packages/modules/services/organization/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/organization/vite.config.ts b/contact-frontend/packages/modules/services/organization/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/organization/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/modules/services/seats/README.md b/contact-frontend/packages/modules/services/seats/README.md new file mode 100644 index 00000000..8190c1dd --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/README.md @@ -0,0 +1 @@ +# 坐席模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/services/seats/package.json b/contact-frontend/packages/modules/services/seats/package.json new file mode 100644 index 00000000..8fb98d7c --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-seats", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/seats/src/index.ts b/contact-frontend/packages/modules/services/seats/src/index.ts new file mode 100644 index 00000000..ed8c60b5 --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/src/index.ts @@ -0,0 +1,3 @@ +import routes from './routes' + +export { routes } diff --git a/contact-frontend/packages/modules/services/seats/src/layouts/MenusLayout.vue b/contact-frontend/packages/modules/services/seats/src/layouts/MenusLayout.vue new file mode 100644 index 00000000..2dce4e74 --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/src/layouts/MenusLayout.vue @@ -0,0 +1,123 @@ + + diff --git a/contact-frontend/packages/modules/services/seats/src/routes/index.ts b/contact-frontend/packages/modules/services/seats/src/routes/index.ts new file mode 100644 index 00000000..9979ccfa --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/src/routes/index.ts @@ -0,0 +1,22 @@ +import { RouteRecordRaw } from 'vue-router' +import { ROUTE_NAME } from '@cskefu/models' + +import Layout from '../layouts/MenusLayout.vue' + +const routes: RouteRecordRaw[] = [ + { + path: '/seats', + name: 'seats', + component: Layout, + redirect: '/seats/index', + children: [ + { + path: 'index', + name: ROUTE_NAME.SEATS_INDEX, + component: () => import('../views/HomeView.vue'), + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/seats/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/seats/src/shims-vue-global.d.ts new file mode 100644 index 00000000..058c8de4 --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global.d'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/seats/src/views/HomeView.vue b/contact-frontend/packages/modules/services/seats/src/views/HomeView.vue new file mode 100644 index 00000000..d8ef020b --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/src/views/HomeView.vue @@ -0,0 +1,3 @@ + diff --git a/contact-frontend/packages/modules/services/seats/tsconfig.json b/contact-frontend/packages/modules/services/seats/tsconfig.json new file mode 100644 index 00000000..6ddcd64d --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/seats/tsconfig.node.json b/contact-frontend/packages/modules/services/seats/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/seats/vite.config.ts b/contact-frontend/packages/modules/services/seats/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/seats/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/modules/services/setting/README.md b/contact-frontend/packages/modules/services/setting/README.md new file mode 100644 index 00000000..d7f2746a --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/README.md @@ -0,0 +1 @@ +# (组织)设置模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/services/setting/package.json b/contact-frontend/packages/modules/services/setting/package.json new file mode 100644 index 00000000..fb499835 --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-setting", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/setting/src/index.ts b/contact-frontend/packages/modules/services/setting/src/index.ts new file mode 100644 index 00000000..ed8c60b5 --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/src/index.ts @@ -0,0 +1,3 @@ +import routes from './routes' + +export { routes } diff --git a/contact-frontend/packages/modules/services/setting/src/layouts/MenusLayout.vue b/contact-frontend/packages/modules/services/setting/src/layouts/MenusLayout.vue new file mode 100644 index 00000000..2dce4e74 --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/src/layouts/MenusLayout.vue @@ -0,0 +1,123 @@ + + diff --git a/contact-frontend/packages/modules/services/setting/src/routes/index.ts b/contact-frontend/packages/modules/services/setting/src/routes/index.ts new file mode 100644 index 00000000..7aff383a --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/src/routes/index.ts @@ -0,0 +1,22 @@ +import { RouteRecordRaw } from 'vue-router' +import { ROUTE_NAME } from '@cskefu/models' + +import Layout from '../layouts/MenusLayout.vue' + +const routes: RouteRecordRaw[] = [ + { + path: '/setting', + name: 'setting', + component: Layout, + redirect: { name: ROUTE_NAME.SETTING_INDEX }, + children: [ + { + path: 'index', + name: ROUTE_NAME.SETTING_INDEX, + component: () => import('../views/HomeView.vue'), + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/setting/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/setting/src/shims-vue-global.d.ts new file mode 100644 index 00000000..058c8de4 --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global.d'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/setting/src/views/HomeView.vue b/contact-frontend/packages/modules/services/setting/src/views/HomeView.vue new file mode 100644 index 00000000..1bc5f3a0 --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/src/views/HomeView.vue @@ -0,0 +1,3 @@ + diff --git a/contact-frontend/packages/modules/services/setting/tsconfig.json b/contact-frontend/packages/modules/services/setting/tsconfig.json new file mode 100644 index 00000000..2177a457 --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"] + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/setting/tsconfig.node.json b/contact-frontend/packages/modules/services/setting/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/setting/vite.config.ts b/contact-frontend/packages/modules/services/setting/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/setting/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/modules/services/system/README.md b/contact-frontend/packages/modules/services/system/README.md new file mode 100644 index 00000000..15adb21d --- /dev/null +++ b/contact-frontend/packages/modules/services/system/README.md @@ -0,0 +1 @@ +# 系统设置模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/services/system/package.json b/contact-frontend/packages/modules/services/system/package.json new file mode 100644 index 00000000..84d5c4e9 --- /dev/null +++ b/contact-frontend/packages/modules/services/system/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-system", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/system/src/index.ts b/contact-frontend/packages/modules/services/system/src/index.ts new file mode 100644 index 00000000..ed8c60b5 --- /dev/null +++ b/contact-frontend/packages/modules/services/system/src/index.ts @@ -0,0 +1,3 @@ +import routes from './routes' + +export { routes } diff --git a/contact-frontend/packages/modules/services/system/src/layouts/MenusLayout.vue b/contact-frontend/packages/modules/services/system/src/layouts/MenusLayout.vue new file mode 100644 index 00000000..a0c59d60 --- /dev/null +++ b/contact-frontend/packages/modules/services/system/src/layouts/MenusLayout.vue @@ -0,0 +1,11 @@ + + diff --git a/contact-frontend/packages/modules/services/system/src/routes/index.ts b/contact-frontend/packages/modules/services/system/src/routes/index.ts new file mode 100644 index 00000000..3333615b --- /dev/null +++ b/contact-frontend/packages/modules/services/system/src/routes/index.ts @@ -0,0 +1,62 @@ +import { RouteRecordRaw } from 'vue-router' +import { ROUTE_NAME } from '@cskefu/models' + +import Layout from '../layouts/MenusLayout.vue' + +const routes: RouteRecordRaw[] = [ + { + path: '/system', + name: 'system', + component: Layout, + redirect: '/system/index', + children: [ + { + path: 'index', + name: ROUTE_NAME.SYSTEM_INDEX, + component: () => import('../views/HomeView.vue'), + }, + { + path: 'social', + name: ROUTE_NAME.SYSTEM_SOCIAL_INDEX, + component: () => import('../views/HomeView.vue'), + }, + { + path: 'oss', + name: ROUTE_NAME.SYSTEM_OSS_INDEX, + component: () => import('../views/HomeView.vue'), + }, + { + path: 'cdn', + name: ROUTE_NAME.SYSTEM_CDN_INDEX, + component: () => import('../views/HomeView.vue'), + }, + { + path: 'sms', + name: ROUTE_NAME.SYSTEM_SMS_INDEX, + component: () => import('../views/HomeView.vue'), + }, + { + path: 'call', + name: ROUTE_NAME.SYSTEM_CALL_INDEX, + component: () => import('../views/HomeView.vue'), + }, + { + path: 'gpt', + name: ROUTE_NAME.SYSTEM_GPT_INDEX, + component: () => import('../views/HomeView.vue'), + }, + { + path: 'source', + name: ROUTE_NAME.SYSTEM_SOURCE_INDEX, + component: () => import('../views/HomeView.vue'), + }, + { + path: 'notification', + name: ROUTE_NAME.SYSTEM_NOTIFICATION_INDEX, + component: () => import('../views/HomeView.vue'), + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/system/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/system/src/shims-vue-global.d.ts new file mode 100644 index 00000000..058c8de4 --- /dev/null +++ b/contact-frontend/packages/modules/services/system/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global.d'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/system/src/views/HomeView.vue b/contact-frontend/packages/modules/services/system/src/views/HomeView.vue new file mode 100644 index 00000000..86a98f46 --- /dev/null +++ b/contact-frontend/packages/modules/services/system/src/views/HomeView.vue @@ -0,0 +1,3 @@ + diff --git a/contact-frontend/packages/modules/services/system/tsconfig.json b/contact-frontend/packages/modules/services/system/tsconfig.json new file mode 100644 index 00000000..6ddcd64d --- /dev/null +++ b/contact-frontend/packages/modules/services/system/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/system/tsconfig.node.json b/contact-frontend/packages/modules/services/system/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/system/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/system/vite.config.ts b/contact-frontend/packages/modules/services/system/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/system/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/modules/services/work-order/README.md b/contact-frontend/packages/modules/services/work-order/README.md new file mode 100644 index 00000000..7720970e --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/README.md @@ -0,0 +1 @@ +# 工单模块 \ No newline at end of file diff --git a/contact-frontend/packages/modules/services/work-order/package.json b/contact-frontend/packages/modules/services/work-order/package.json new file mode 100644 index 00000000..dc820916 --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/package.json @@ -0,0 +1,29 @@ +{ + "name": "@cskefu/services-work-order", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/mocks": "*", + "@cskefu/models": "*", + "@cskefu/i18n": "*", + "@cskefu/composables": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/modules/services/work-order/src/index.ts b/contact-frontend/packages/modules/services/work-order/src/index.ts new file mode 100644 index 00000000..ed8c60b5 --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/src/index.ts @@ -0,0 +1,3 @@ +import routes from './routes' + +export { routes } diff --git a/contact-frontend/packages/modules/services/work-order/src/layouts/MenusLayout.vue b/contact-frontend/packages/modules/services/work-order/src/layouts/MenusLayout.vue new file mode 100644 index 00000000..2dce4e74 --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/src/layouts/MenusLayout.vue @@ -0,0 +1,123 @@ + + diff --git a/contact-frontend/packages/modules/services/work-order/src/routes/index.ts b/contact-frontend/packages/modules/services/work-order/src/routes/index.ts new file mode 100644 index 00000000..9c8f560a --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/src/routes/index.ts @@ -0,0 +1,22 @@ +import { RouteRecordRaw } from 'vue-router' +import { ROUTE_NAME } from '@cskefu/models' + +import Layout from '../layouts/MenusLayout.vue' + +const routes: RouteRecordRaw[] = [ + { + path: '/work-order', + name: 'work-order', + component: Layout, + redirect: { name: ROUTE_NAME.WORK_ORDER_INDEX }, + children: [ + { + path: 'index', + name: ROUTE_NAME.WORK_ORDER_INDEX, + component: () => import('../views/HomeView.vue'), + }, + ], + }, +] + +export default routes diff --git a/contact-frontend/packages/modules/services/work-order/src/shims-vue-global.d.ts b/contact-frontend/packages/modules/services/work-order/src/shims-vue-global.d.ts new file mode 100644 index 00000000..058c8de4 --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/src/shims-vue-global.d.ts @@ -0,0 +1,7 @@ +import { ComponentCustomProperties } from './shims-vue-global.d'; + +declare module "vue" { + export interface ComponentCustomProperties { + $t: (key: string) => string; + } +} diff --git a/contact-frontend/packages/modules/services/work-order/src/views/HomeView.vue b/contact-frontend/packages/modules/services/work-order/src/views/HomeView.vue new file mode 100644 index 00000000..f98da937 --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/src/views/HomeView.vue @@ -0,0 +1,3 @@ + diff --git a/contact-frontend/packages/modules/services/work-order/tsconfig.json b/contact-frontend/packages/modules/services/work-order/tsconfig.json new file mode 100644 index 00000000..6ddcd64d --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/modules/services/work-order/tsconfig.node.json b/contact-frontend/packages/modules/services/work-order/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/modules/services/work-order/vite.config.ts b/contact-frontend/packages/modules/services/work-order/vite.config.ts new file mode 100644 index 00000000..4b291650 --- /dev/null +++ b/contact-frontend/packages/modules/services/work-order/vite.config.ts @@ -0,0 +1,18 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + publicDir: resolve(__dirname, '../../../../public'), + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/plugins/README.md b/contact-frontend/packages/plugins/README.md new file mode 100644 index 00000000..3bfdcb90 --- /dev/null +++ b/contact-frontend/packages/plugins/README.md @@ -0,0 +1 @@ +# 开发模式下的插件 \ No newline at end of file diff --git a/contact-frontend/packages/plugins/index.ts b/contact-frontend/packages/plugins/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/plugins/package.json b/contact-frontend/packages/plugins/package.json new file mode 100644 index 00000000..67486975 --- /dev/null +++ b/contact-frontend/packages/plugins/package.json @@ -0,0 +1,31 @@ +{ + "name": "@cskefu/plugins", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@cskefu/assets": "*", + "@cskefu/i18n": "*", + "@cskefu/shared-utils": "*", + "@cskefu/shared-ui": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/plugins/src/vue-directive/permission.ts b/contact-frontend/packages/plugins/src/vue-directive/permission.ts new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/shared/ui/README.md b/contact-frontend/packages/shared/ui/README.md new file mode 100644 index 00000000..36fa6956 --- /dev/null +++ b/contact-frontend/packages/shared/ui/README.md @@ -0,0 +1 @@ +# 组件库 \ No newline at end of file diff --git a/contact-frontend/packages/shared/ui/package.json b/contact-frontend/packages/shared/ui/package.json new file mode 100644 index 00000000..81019691 --- /dev/null +++ b/contact-frontend/packages/shared/ui/package.json @@ -0,0 +1,24 @@ +{ + "name": "@cskefu/shared-ui", + "private": true, + "version": "0.0.0", + "type": "module", + "dependencies": { + "@cskefu/i18n": "*", + "@cskefu/assets": "*" + }, + "devDependencies": { + "@cskefu/setup-tailwind": "*", + "tailwindcss": "^3.3.3", + "autoprefixer": "^10.4.14", + "postcss": "^8.4.26" + }, + "exports": { + ".": { + "import": { + "node": "./src/index.ts", + "default": "./src/index.ts" + } + } + } +} diff --git a/contact-frontend/packages/shared/ui/src/components/Nav.vue b/contact-frontend/packages/shared/ui/src/components/Nav.vue new file mode 100644 index 00000000..b427db57 --- /dev/null +++ b/contact-frontend/packages/shared/ui/src/components/Nav.vue @@ -0,0 +1,152 @@ + + diff --git a/contact-frontend/packages/shared/ui/src/index.ts b/contact-frontend/packages/shared/ui/src/index.ts new file mode 100644 index 00000000..c25c535f --- /dev/null +++ b/contact-frontend/packages/shared/ui/src/index.ts @@ -0,0 +1,5 @@ +import IndexLayout from './layouts/IndexLayout.vue' +import MenusLayout from './layouts/MenusLayout.vue' +import Nav from './components/Nav.vue' + +export { IndexLayout, MenusLayout, Nav } diff --git a/contact-frontend/packages/shared/ui/src/layouts/IndexLayout.vue b/contact-frontend/packages/shared/ui/src/layouts/IndexLayout.vue new file mode 100644 index 00000000..81665da9 --- /dev/null +++ b/contact-frontend/packages/shared/ui/src/layouts/IndexLayout.vue @@ -0,0 +1,8 @@ + + diff --git a/contact-frontend/packages/shared/ui/src/layouts/MenusLayout.vue b/contact-frontend/packages/shared/ui/src/layouts/MenusLayout.vue new file mode 100644 index 00000000..249e56e9 --- /dev/null +++ b/contact-frontend/packages/shared/ui/src/layouts/MenusLayout.vue @@ -0,0 +1,13 @@ + + diff --git a/contact-frontend/packages/shared/ui/src/pages/Page403.vue b/contact-frontend/packages/shared/ui/src/pages/Page403.vue new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/shared/ui/src/pages/Page404.vue b/contact-frontend/packages/shared/ui/src/pages/Page404.vue new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/shared/ui/src/pages/Page500.vue b/contact-frontend/packages/shared/ui/src/pages/Page500.vue new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/shared/ui/tsconfig.json b/contact-frontend/packages/shared/ui/tsconfig.json new file mode 100644 index 00000000..e539f1d4 --- /dev/null +++ b/contact-frontend/packages/shared/ui/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.ts"], + "compilerOptions": { + "baseUrl": "./", + "types": ["vite/client", "naive-ui/volar"], + }, + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/contact-frontend/packages/shared/ui/tsconfig.node.json b/contact-frontend/packages/shared/ui/tsconfig.node.json new file mode 100644 index 00000000..42872c59 --- /dev/null +++ b/contact-frontend/packages/shared/ui/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/contact-frontend/packages/shared/ui/vite.config.ts b/contact-frontend/packages/shared/ui/vite.config.ts new file mode 100644 index 00000000..5316a9ab --- /dev/null +++ b/contact-frontend/packages/shared/ui/vite.config.ts @@ -0,0 +1,17 @@ +import { resolve } from 'path' +import { defineConfig } from 'vite' + +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueJsx(), + VueI18nPlugin({ + include: [resolve(__dirname, 'node_modules/@cskefu/locales/**')], + }), + ], +}) diff --git a/contact-frontend/packages/shared/utils/README.md b/contact-frontend/packages/shared/utils/README.md new file mode 100644 index 00000000..fb79fd12 --- /dev/null +++ b/contact-frontend/packages/shared/utils/README.md @@ -0,0 +1 @@ +# 工具库 \ No newline at end of file diff --git a/contact-frontend/packages/shared/utils/index.ts b/contact-frontend/packages/shared/utils/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/shared/utils/package.json b/contact-frontend/packages/shared/utils/package.json new file mode 100644 index 00000000..af483d55 --- /dev/null +++ b/contact-frontend/packages/shared/utils/package.json @@ -0,0 +1,6 @@ +{ + "name": "@cskefu/shared-utils", + "private": true, + "version": "0.0.0", + "type": "module" +} diff --git a/contact-frontend/packages/widgets/cli/README.md b/contact-frontend/packages/widgets/cli/README.md new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/widgets/cli/package.json b/contact-frontend/packages/widgets/cli/package.json new file mode 100644 index 00000000..c7beddbc --- /dev/null +++ b/contact-frontend/packages/widgets/cli/package.json @@ -0,0 +1,6 @@ +{ + "name": "@cskefu/widgets-cli", + "private": true, + "version": "0.0.0", + "type": "module" +} diff --git a/contact-frontend/packages/widgets/core/README.md b/contact-frontend/packages/widgets/core/README.md new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/widgets/core/package.json b/contact-frontend/packages/widgets/core/package.json new file mode 100644 index 00000000..51835fce --- /dev/null +++ b/contact-frontend/packages/widgets/core/package.json @@ -0,0 +1,6 @@ +{ + "name": "@cskefu/widgets-core", + "private": true, + "version": "0.0.0", + "type": "module" +} diff --git a/contact-frontend/packages/widgets/sdk/README.md b/contact-frontend/packages/widgets/sdk/README.md new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/packages/widgets/sdk/package.json b/contact-frontend/packages/widgets/sdk/package.json new file mode 100644 index 00000000..d5607852 --- /dev/null +++ b/contact-frontend/packages/widgets/sdk/package.json @@ -0,0 +1,6 @@ +{ + "name": "@cskefu/widgets-sdk", + "private": true, + "version": "0.0.0", + "type": "module" +} diff --git a/contact-frontend/pnpm-lock.yaml b/contact-frontend/pnpm-lock.yaml new file mode 100644 index 00000000..c00c532d --- /dev/null +++ b/contact-frontend/pnpm-lock.yaml @@ -0,0 +1,4666 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@vicons/ionicons5': + specifier: ^0.12.0 + version: 0.12.0 + '@vueuse/core': + specifier: ^10.2.1 + version: 10.2.1(vue@3.3.4) + axios: + specifier: ^1.4.0 + version: 1.4.0 + pinia: + specifier: ^2.1.4 + version: 2.1.4(typescript@5.1.6)(vue@3.3.4) + vue: + specifier: ^3.3.4 + version: 3.3.4 + vue-router: + specifier: ^4.2.4 + version: 4.2.4(vue@3.3.4) + devDependencies: + '@intlify/unplugin-vue-i18n': + specifier: ^0.12.0 + version: 0.12.0(vue-i18n@9.2.2) + '@types/lodash-es': + specifier: ^4.17.8 + version: 4.17.8 + '@types/node': + specifier: ^20.4.2 + version: 20.4.2 + '@typescript-eslint/eslint-plugin': + specifier: ^6.1.0 + version: 6.1.0(@typescript-eslint/parser@6.0.0)(eslint@8.39.0)(typescript@5.1.6) + '@typescript-eslint/parser': + specifier: ^6.0.0 + version: 6.0.0(eslint@8.39.0)(typescript@5.1.6) + '@vitejs/plugin-vue': + specifier: ^4.2.3 + version: 4.2.3(vite@4.4.2)(vue@3.3.4) + '@vitejs/plugin-vue-jsx': + specifier: ^3.0.1 + version: 3.0.1(vite@4.4.2)(vue@3.3.4) + '@vue/eslint-config-prettier': + specifier: ^7.1.0 + version: 7.1.0(eslint@8.39.0)(prettier@3.0.0) + eslint: + specifier: ^8.39.0 + version: 8.39.0 + eslint-plugin-prettier: + specifier: ^5.0.0 + version: 5.0.0(eslint@8.39.0)(prettier@3.0.0) + eslint-plugin-vue: + specifier: ^9.11.0 + version: 9.11.0(eslint@8.39.0) + husky: + specifier: ^8.0.3 + version: 8.0.3 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + msw: + specifier: ^1.2.2 + version: 1.2.2(typescript@5.1.6) + naive-ui: + specifier: ^2.34.4 + version: 2.34.4(vue@3.3.4) + prettier: + specifier: 3.0.0 + version: 3.0.0 + typescript: + specifier: ^5.0.2 + version: 5.1.6 + vite: + specifier: ^4.4.0 + version: 4.4.2(@types/node@20.4.2) + vitest: + specifier: ^0.33.0 + version: 0.33.0 + vue-i18n: + specifier: ^9.2.2 + version: 9.2.2(vue@3.3.4) + vue-tsc: + specifier: ^1.8.3 + version: 1.8.3(typescript@5.1.6) + + packages/apps/web: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../assets + '@cskefu/i18n': + specifier: '*' + version: link:../../modules/i18n + '@cskefu/models': + specifier: '*' + version: link:../../modules/models + '@cskefu/services-auth': + specifier: '*' + version: link:../../modules/services/auth + '@cskefu/services-chat': + specifier: '*' + version: link:../../modules/services/chat + '@cskefu/services-dashboard': + specifier: '*' + version: link:../../modules/services/dashboard + '@cskefu/services-enterprise': + specifier: '*' + version: link:../../modules/services/enterprise + '@cskefu/services-organization': + specifier: '*' + version: link:../../modules/services/organization + '@cskefu/services-seats': + specifier: '*' + version: link:../../modules/services/seats + '@cskefu/services-setting': + specifier: '*' + version: link:../../modules/services/setting + '@cskefu/services-system': + specifier: '*' + version: link:../../modules/services/system + '@cskefu/services-work-order': + specifier: '*' + version: link:../../modules/services/work-order + '@cskefu/shared-ui': + specifier: '*' + version: link:../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/assets: {} + + packages/modules/composables: {} + + packages/modules/i18n: {} + + packages/modules/mocks: {} + + packages/modules/models: {} + + packages/modules/services/auth: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/modules/services/chat: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/modules/services/dashboard: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/modules/services/enterprise: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/modules/services/organization: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/modules/services/seats: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/modules/services/setting: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/modules/services/system: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/modules/services/work-order: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../../assets + '@cskefu/composables': + specifier: '*' + version: link:../../composables + '@cskefu/i18n': + specifier: '*' + version: link:../../i18n + '@cskefu/mocks': + specifier: '*' + version: link:../../mocks + '@cskefu/models': + specifier: '*' + version: link:../../models + '@cskefu/shared-ui': + specifier: '*' + version: link:../../../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../../../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/plugins: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../assets + '@cskefu/i18n': + specifier: '*' + version: link:../modules/i18n + '@cskefu/shared-ui': + specifier: '*' + version: link:../shared/ui + '@cskefu/shared-utils': + specifier: '*' + version: link:../shared/utils + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/shared/ui: + dependencies: + '@cskefu/assets': + specifier: '*' + version: link:../../assets + '@cskefu/i18n': + specifier: '*' + version: link:../../modules/i18n + devDependencies: + '@cskefu/setup-tailwind': + specifier: '*' + version: link:../../../tools/setup-tailwind + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + + packages/shared/utils: {} + + packages/widgets/cli: {} + + packages/widgets/core: {} + + packages/widgets/sdk: {} + + tools/setup-naiveui: {} + + tools/setup-tailwind: {} + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.5 + dev: true + + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.22.9: + resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.22.9: + resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.9 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-member-expression-to-functions@7.22.5: + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.22.6: + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.22.7: + resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typescript@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.9) + dev: true + + /@babel/runtime@7.22.6: + resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: true + + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + dev: true + + /@babel/traverse@7.22.8: + resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + + /@css-render/plugin-bem@0.15.12(css-render@0.15.12): + resolution: {integrity: sha512-Lq2jSOZn+wYQtsyaFj6QRz2EzAnd3iW5fZeHO1WSXQdVYwvwGX0ZiH3X2JQgtgYLT1yeGtrwrqJdNdMEUD2xTw==} + peerDependencies: + css-render: ~0.15.12 + dependencies: + css-render: 0.15.12 + dev: true + + /@css-render/vue3-ssr@0.15.12(vue@3.3.4): + resolution: {integrity: sha512-AQLGhhaE0F+rwybRCkKUdzBdTEM/5PZBYy+fSYe1T9z9+yxMuV/k7ZRqa4M69X+EI1W8pa4kc9Iq2VjQkZx4rg==} + peerDependencies: + vue: ^3.0.11 + dependencies: + vue: 3.3.4 + dev: true + + /@emotion/hash@0.8.0: + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + dev: true + + /@esbuild/android-arm64@0.18.11: + resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.11: + resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.11: + resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.11: + resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.11: + resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.11: + resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.11: + resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.11: + resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.11: + resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.11: + resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.11: + resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.11: + resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.11: + resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.11: + resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.11: + resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.11: + resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.11: + resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.11: + resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.11: + resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.11: + resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.11: + resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.11: + resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.39.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 + dependencies: + eslint: 8.39.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@eslint-community/regexpp@4.5.1: + resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.0: + resolution: {integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.0 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.39.0: + resolution: {integrity: sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@intlify/bundle-utils@7.0.2(vue-i18n@9.2.2): + resolution: {integrity: sha512-8wbx9xhbawBFTE5LPTECiK26RRqrNS31jyWSur72ZXZZ4it5jiZTcG6eUJlNirr4+jXYio2DGY299JsGVT4cpw==} + engines: {node: '>= 14.16'} + peerDependencies: + petite-vue-i18n: '*' + vue-i18n: '*' + peerDependenciesMeta: + petite-vue-i18n: + optional: true + vue-i18n: + optional: true + dependencies: + '@intlify/message-compiler': 9.3.0-beta.24 + '@intlify/shared': 9.3.0-beta.24 + acorn: 8.10.0 + escodegen: 2.1.0 + estree-walker: 2.0.2 + jsonc-eslint-parser: 1.4.1 + magic-string: 0.30.1 + mlly: 1.4.0 + source-map-js: 1.0.2 + vue-i18n: 9.2.2(vue@3.3.4) + yaml-eslint-parser: 0.3.2 + dev: true + + /@intlify/core-base@9.2.2: + resolution: {integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==} + engines: {node: '>= 14'} + dependencies: + '@intlify/devtools-if': 9.2.2 + '@intlify/message-compiler': 9.2.2 + '@intlify/shared': 9.2.2 + '@intlify/vue-devtools': 9.2.2 + dev: true + + /@intlify/devtools-if@9.2.2: + resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==} + engines: {node: '>= 14'} + dependencies: + '@intlify/shared': 9.2.2 + dev: true + + /@intlify/message-compiler@9.2.2: + resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==} + engines: {node: '>= 14'} + dependencies: + '@intlify/shared': 9.2.2 + source-map: 0.6.1 + dev: true + + /@intlify/message-compiler@9.3.0-beta.24: + resolution: {integrity: sha512-prhHATkgp0mpPqoVgiAtLmUc1JMvs8fMH6w53AVEBn+VF87dLhzanfmWY5FoZWORG51ag54gBDBOoM/VFv3m3A==} + engines: {node: '>= 16'} + dependencies: + '@intlify/shared': 9.3.0-beta.24 + source-map-js: 1.0.2 + dev: true + + /@intlify/shared@9.2.2: + resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==} + engines: {node: '>= 14'} + dev: true + + /@intlify/shared@9.3.0-beta.20: + resolution: {integrity: sha512-RucSPqh8O9FFxlYUysQTerSw0b9HIRpyoN1Zjogpm0qLiHK+lBNSa5sh1nCJ4wSsNcjphzgpLQCyR60GZlRV8g==} + engines: {node: '>= 16'} + dev: true + + /@intlify/shared@9.3.0-beta.24: + resolution: {integrity: sha512-AKxJ8s7eKIQWkNaf4wyyoLRwf4puCuQgjSChlDJm5JBEt6T8HGgnYTJLRXu6LD/JACn3Qwu6hM/XRX1c9yvjmQ==} + engines: {node: '>= 16'} + dev: true + + /@intlify/unplugin-vue-i18n@0.12.0(vue-i18n@9.2.2): + resolution: {integrity: sha512-L155p03eZpzYUIU1YKbb38xq++GcaW6bsqo800GdonmkQXY8nc4/HsKQRQY5lRoAOkbhO0Vyt7yrsU11vVrqnw==} + 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 + dependencies: + '@intlify/bundle-utils': 7.0.2(vue-i18n@9.2.2) + '@intlify/shared': 9.3.0-beta.20 + '@rollup/pluginutils': 5.0.2 + '@vue/compiler-sfc': 3.3.4 + debug: 4.3.4 + fast-glob: 3.3.0 + js-yaml: 4.1.0 + json5: 2.2.3 + pathe: 1.1.1 + picocolors: 1.0.0 + source-map-js: 1.0.2 + unplugin: 1.3.2 + vue-i18n: 9.2.2(vue@3.3.4) + transitivePeerDependencies: + - rollup + - supports-color + dev: true + + /@intlify/vue-devtools@9.2.2: + resolution: {integrity: sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==} + engines: {node: '>= 14'} + dependencies: + '@intlify/core-base': 9.2.2 + '@intlify/shared': 9.2.2 + dev: true + + /@jest/schemas@29.6.0: + resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@juggle/resize-observer@3.4.0: + resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} + dev: true + + /@mswjs/cookies@0.2.2: + resolution: {integrity: sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==} + engines: {node: '>=14'} + dependencies: + '@types/set-cookie-parser': 2.4.2 + set-cookie-parser: 2.6.0 + dev: true + + /@mswjs/interceptors@0.17.9: + resolution: {integrity: sha512-4LVGt03RobMH/7ZrbHqRxQrS9cc2uh+iNKSj8UWr8M26A2i793ju+csaB5zaqYltqJmA2jUq4VeYfKmVqvsXQg==} + engines: {node: '>=14'} + dependencies: + '@open-draft/until': 1.0.3 + '@types/debug': 4.1.8 + '@xmldom/xmldom': 0.8.9 + debug: 4.3.4 + headers-polyfill: 3.1.2 + outvariant: 1.4.0 + strict-event-emitter: 0.2.8 + web-encoding: 1.1.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@open-draft/until@1.0.3: + resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} + dev: true + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.0 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.0 + dev: true + + /@rollup/pluginutils@5.0.2: + resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.1 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@types/chai-subset@1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.5 + dev: true + + /@types/chai@4.3.5: + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + dev: true + + /@types/cookie@0.4.1: + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + dev: true + + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + dependencies: + '@types/ms': 0.7.31 + dev: true + + /@types/estree@1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + dev: true + + /@types/js-levenshtein@1.1.1: + resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} + dev: true + + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true + + /@types/katex@0.14.0: + resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==} + dev: true + + /@types/lodash-es@4.17.8: + resolution: {integrity: sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==} + dependencies: + '@types/lodash': 4.14.195 + dev: true + + /@types/lodash@4.14.195: + resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} + dev: true + + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true + + /@types/node@20.4.2: + resolution: {integrity: sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==} + dev: true + + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/set-cookie-parser@2.4.2: + resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} + dependencies: + '@types/node': 20.4.2 + dev: true + + /@types/web-bluetooth@0.0.17: + resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} + dev: false + + /@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.0.0)(eslint@8.39.0)(typescript@5.1.6): + resolution: {integrity: sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 6.0.0(eslint@8.39.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.1.0 + '@typescript-eslint/type-utils': 6.1.0(eslint@8.39.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.1.0(eslint@8.39.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.1.0 + debug: 4.3.4 + eslint: 8.39.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.0.0(eslint@8.39.0)(typescript@5.1.6): + resolution: {integrity: sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.0.0 + '@typescript-eslint/types': 6.0.0 + '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.0.0 + debug: 4.3.4 + eslint: 8.39.0 + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.0.0: + resolution: {integrity: sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.0.0 + '@typescript-eslint/visitor-keys': 6.0.0 + dev: true + + /@typescript-eslint/scope-manager@6.1.0: + resolution: {integrity: sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.1.0 + '@typescript-eslint/visitor-keys': 6.1.0 + dev: true + + /@typescript-eslint/type-utils@6.1.0(eslint@8.39.0)(typescript@5.1.6): + resolution: {integrity: sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.1.6) + '@typescript-eslint/utils': 6.1.0(eslint@8.39.0)(typescript@5.1.6) + debug: 4.3.4 + eslint: 8.39.0 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.0.0: + resolution: {integrity: sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/types@6.1.0: + resolution: {integrity: sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.0.0(typescript@5.1.6): + resolution: {integrity: sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.0.0 + '@typescript-eslint/visitor-keys': 6.0.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.3 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.1.0(typescript@5.1.6): + resolution: {integrity: sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.1.0 + '@typescript-eslint/visitor-keys': 6.1.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.1.0(eslint@8.39.0)(typescript@5.1.6): + resolution: {integrity: sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.1.0 + '@typescript-eslint/types': 6.1.0 + '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.1.6) + eslint: 8.39.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.0.0: + resolution: {integrity: sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.0.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@typescript-eslint/visitor-keys@6.1.0: + resolution: {integrity: sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.1.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@vicons/ionicons5@0.12.0: + resolution: {integrity: sha512-Iy1EUVRpX0WWxeu1VIReR1zsZLMc4fqpt223czR+Rpnrwu7pt46nbnC2ycO7ItI/uqDLJxnbcMC7FujKs9IfFA==} + dev: false + + /@vitejs/plugin-vue-jsx@3.0.1(vite@4.4.2)(vue@3.3.4): + resolution: {integrity: sha512-+Jb7ggL48FSPS1uhPnJbJwWa9Sr90vQ+d0InW+AhBM22n+cfuYqJZDckBc+W3QSHe1WDvewMZfa4wZOtk5pRgw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/plugin-transform-typescript': 7.22.9(@babel/core@7.22.9) + '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.9) + vite: 4.4.2(@types/node@20.4.2) + vue: 3.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@vitejs/plugin-vue@4.2.3(vite@4.4.2)(vue@3.3.4): + resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.2.25 + dependencies: + vite: 4.4.2(@types/node@20.4.2) + vue: 3.3.4 + dev: true + + /@vitest/expect@0.33.0: + resolution: {integrity: sha512-sVNf+Gla3mhTCxNJx+wJLDPp/WcstOe0Ksqz4Vec51MmgMth/ia0MGFEkIZmVGeTL5HtjYR4Wl/ZxBxBXZJTzQ==} + dependencies: + '@vitest/spy': 0.33.0 + '@vitest/utils': 0.33.0 + chai: 4.3.7 + dev: true + + /@vitest/runner@0.33.0: + resolution: {integrity: sha512-UPfACnmCB6HKRHTlcgCoBh6ppl6fDn+J/xR8dTufWiKt/74Y9bHci5CKB8tESSV82zKYtkBJo9whU3mNvfaisg==} + dependencies: + '@vitest/utils': 0.33.0 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@0.33.0: + resolution: {integrity: sha512-tJjrl//qAHbyHajpFvr8Wsk8DIOODEebTu7pgBrP07iOepR5jYkLFiqLq2Ltxv+r0uptUb4izv1J8XBOwKkVYA==} + dependencies: + magic-string: 0.30.1 + pathe: 1.1.1 + pretty-format: 29.6.1 + dev: true + + /@vitest/spy@0.33.0: + resolution: {integrity: sha512-Kv+yZ4hnH1WdiAkPUQTpRxW8kGtH8VRTnus7ZTGovFYM1ZezJpvGtb9nPIjPnptHbsyIAxYZsEpVPYgtpjGnrg==} + dependencies: + tinyspy: 2.1.1 + dev: true + + /@vitest/utils@0.33.0: + resolution: {integrity: sha512-pF1w22ic965sv+EN6uoePkAOTkAPWM03Ri/jXNyMIKBb/XHLDPfhLvf/Fa9g0YECevAIz56oVYXhodLvLQ/awA==} + dependencies: + diff-sequences: 29.4.3 + loupe: 2.3.6 + pretty-format: 29.6.1 + dev: true + + /@volar/language-core@1.7.10: + resolution: {integrity: sha512-18Gmth5M0UI3hDDqhZngjMnb6WCslcfglkOdepRIhGxRYe7xR7DRRzciisYDMZsvOQxDYme+uaohg0dKUxLV2Q==} + dependencies: + '@volar/source-map': 1.7.10 + dev: true + + /@volar/source-map@1.7.10: + resolution: {integrity: sha512-FBpLEOKJpRxeh2nYbw1mTI5sZOPXYU8LlsCz6xuBY3yNtAizDTTIZtBHe1V8BaMpoSMgRysZe4gVxMEi3rDGVA==} + dependencies: + muggle-string: 0.3.1 + dev: true + + /@volar/typescript@1.7.10: + resolution: {integrity: sha512-yqIov4wndLU3GE1iE25bU5W6T+P+exPePcE1dFPPBKzQIBki1KvmdQN5jBlJp3Wo+wp7UIxa/RsdNkXT+iFBjg==} + dependencies: + '@volar/language-core': 1.7.10 + dev: true + + /@vue/babel-helper-vue-transform-on@1.1.5: + resolution: {integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==} + dev: true + + /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.22.9): + resolution: {integrity: sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-imports': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + '@vue/babel-helper-vue-transform-on': 1.1.5 + camelcase: 6.3.0 + html-tags: 3.3.1 + svg-tags: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vue/compiler-core@3.3.4: + resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} + dependencies: + '@babel/parser': 7.22.7 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + + /@vue/compiler-dom@3.3.4: + resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} + dependencies: + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + + /@vue/compiler-sfc@3.3.4: + resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} + dependencies: + '@babel/parser': 7.22.7 + '@vue/compiler-core': 3.3.4 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-ssr': 3.3.4 + '@vue/reactivity-transform': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.1 + postcss: 8.4.26 + source-map-js: 1.0.2 + + /@vue/compiler-ssr@3.3.4: + resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/shared': 3.3.4 + + /@vue/devtools-api@6.5.0: + resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} + + /@vue/eslint-config-prettier@7.1.0(eslint@8.39.0)(prettier@3.0.0): + resolution: {integrity: sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==} + peerDependencies: + eslint: '>= 7.28.0' + prettier: '>= 2.0.0' + dependencies: + eslint: 8.39.0 + eslint-config-prettier: 8.8.0(eslint@8.39.0) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@3.0.0) + prettier: 3.0.0 + dev: true + + /@vue/language-core@1.8.3(typescript@5.1.6): + resolution: {integrity: sha512-AzhvMYoQkK/tg8CpAAttO19kx1zjS3+weYIr2AhlH/M5HebVzfftQoq4jZNFifjq+hyLKi8j9FiDMS8oqA89+A==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.7.10 + '@volar/source-map': 1.7.10 + '@vue/compiler-dom': 3.3.4 + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + minimatch: 9.0.3 + muggle-string: 0.3.1 + typescript: 5.1.6 + vue-template-compiler: 2.7.14 + dev: true + + /@vue/reactivity-transform@3.3.4: + resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} + dependencies: + '@babel/parser': 7.22.7 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.1 + + /@vue/reactivity@3.3.4: + resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} + dependencies: + '@vue/shared': 3.3.4 + + /@vue/runtime-core@3.3.4: + resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} + dependencies: + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + + /@vue/runtime-dom@3.3.4: + resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} + dependencies: + '@vue/runtime-core': 3.3.4 + '@vue/shared': 3.3.4 + csstype: 3.1.2 + + /@vue/server-renderer@3.3.4(vue@3.3.4): + resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} + peerDependencies: + vue: 3.3.4 + dependencies: + '@vue/compiler-ssr': 3.3.4 + '@vue/shared': 3.3.4 + vue: 3.3.4 + + /@vue/shared@3.3.4: + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + + /@vue/typescript@1.8.3(typescript@5.1.6): + resolution: {integrity: sha512-6bdgSnIFpRYHlt70pHmnmNksPU00bfXgqAISeaNz3W6d2cH0OTfH8h/IhligQ82sJIhsuyfftQJ5518ZuKIhtA==} + dependencies: + '@volar/typescript': 1.7.10 + '@vue/language-core': 1.8.3(typescript@5.1.6) + transitivePeerDependencies: + - typescript + dev: true + + /@vueuse/core@10.2.1(vue@3.3.4): + resolution: {integrity: sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==} + dependencies: + '@types/web-bluetooth': 0.0.17 + '@vueuse/metadata': 10.2.1 + '@vueuse/shared': 10.2.1(vue@3.3.4) + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@vueuse/metadata@10.2.1: + resolution: {integrity: sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==} + dev: false + + /@vueuse/shared@10.2.1(vue@3.3.4): + resolution: {integrity: sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==} + dependencies: + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@xmldom/xmldom@0.8.9: + resolution: {integrity: sha512-4VSbbcMoxc4KLjb1gs96SRmi7w4h1SF+fCoiK0XaQX62buCc1G5d0DC5bJ9xJBNPDSVCmIrcl8BiYxzjrqaaJA==} + engines: {node: '>=10.0.0'} + dev: true + + /@zxing/text-encoding@0.9.0: + resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + requiresBuild: true + dev: true + optional: true + + /acorn-jsx@5.3.2(acorn@7.4.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 7.4.1 + dev: true + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: true + + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + 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 + dev: true + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /autoprefixer@10.4.14(postcss@8.4.26): + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.9 + caniuse-lite: 1.0.30001515 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.26 + postcss-value-parser: 4.2.0 + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axios@1.4.0: + resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} + dependencies: + follow-redirects: 1.15.2 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001515 + electron-to-chromium: 1.4.460 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.9) + dev: true + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-lite@1.0.30001515: + resolution: {integrity: sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==} + dev: true + + /chai@4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 4.1.3 + get-func-name: 2.0.0 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.1: + resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /check-error@1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + 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.2 + dev: true + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-spinners@2.9.0: + resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} + engines: {node: '>=6'} + dev: true + + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /css-render@0.15.12: + resolution: {integrity: sha512-eWzS66patiGkTTik+ipO9qNGZ+uNuGyTmnz6/+EJIiFg8+3yZRpnMwgFo8YdXhQRsiePzehnusrxVvugNjXzbw==} + dependencies: + '@emotion/hash': 0.8.0 + csstype: 3.0.11 + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csstype@3.0.11: + resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} + dev: true + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + /date-fns-tz@1.3.8(date-fns@2.30.0): + resolution: {integrity: sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==} + peerDependencies: + date-fns: '>=2.0.0' + dependencies: + date-fns: 2.30.0 + dev: true + + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.22.6 + dev: true + + /de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.1.1 + titleize: 3.0.0 + dev: true + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /diff-sequences@29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /electron-to-chromium@1.4.460: + resolution: {integrity: sha512-kKiHnbrHME7z8E6AYaw0ehyxY5+hdaRmeUbjBO22LZMdqTYCO29EvF0T1cQ3pJ1RN5fyMcHl1Lmcsdt9WWJpJQ==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /esbuild@0.18.11: + resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.11 + '@esbuild/android-arm64': 0.18.11 + '@esbuild/android-x64': 0.18.11 + '@esbuild/darwin-arm64': 0.18.11 + '@esbuild/darwin-x64': 0.18.11 + '@esbuild/freebsd-arm64': 0.18.11 + '@esbuild/freebsd-x64': 0.18.11 + '@esbuild/linux-arm': 0.18.11 + '@esbuild/linux-arm64': 0.18.11 + '@esbuild/linux-ia32': 0.18.11 + '@esbuild/linux-loong64': 0.18.11 + '@esbuild/linux-mips64el': 0.18.11 + '@esbuild/linux-ppc64': 0.18.11 + '@esbuild/linux-riscv64': 0.18.11 + '@esbuild/linux-s390x': 0.18.11 + '@esbuild/linux-x64': 0.18.11 + '@esbuild/netbsd-x64': 0.18.11 + '@esbuild/openbsd-x64': 0.18.11 + '@esbuild/sunos-x64': 0.18.11 + '@esbuild/win32-arm64': 0.18.11 + '@esbuild/win32-ia32': 0.18.11 + '@esbuild/win32-x64': 0.18.11 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + + /eslint-config-prettier@8.8.0(eslint@8.39.0): + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.39.0 + dev: true + + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@3.0.0): + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.39.0 + eslint-config-prettier: 8.8.0(eslint@8.39.0) + prettier: 3.0.0 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-plugin-prettier@5.0.0(eslint@8.39.0)(prettier@3.0.0): + resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==} + 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 + dependencies: + eslint: 8.39.0 + prettier: 3.0.0 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.5 + dev: true + + /eslint-plugin-vue@9.11.0(eslint@8.39.0): + resolution: {integrity: sha512-bBCJAZnkBV7ATH4Z1E7CvN3nmtS4H7QUU3UBxPdo8WohRU+yHjnQRALpTbxMVcz0e4Mx3IyxIdP5HYODMxK9cQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) + eslint: 8.39.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.0.13 + semver: 7.5.3 + vue-eslint-parser: 9.3.1(eslint@8.39.0) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-scope@7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.39.0: + resolution: {integrity: sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) + '@eslint-community/regexpp': 4.5.1 + '@eslint/eslintrc': 2.1.0 + '@eslint/js': 8.39.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.6.0 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.4.1 + js-yaml: 4.1.0 + 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.3 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@6.2.1: + resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} + engines: {node: '>=6.0.0'} + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + eslint-visitor-keys: 1.3.0 + dev: true + + /espree@9.6.0: + resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.1 + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /evtd@0.2.4: + resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + 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 + dev: true + + /execa@7.1.1: + resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-glob@3.3.0: + resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} + engines: {node: '>=8.6.0'} + 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.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /follow-redirects@1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /fraction.js@4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name@2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + 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 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.0 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + + /grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /graphql@16.7.1: + resolution: {integrity: sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /headers-polyfill@3.1.2: + resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} + dev: true + + /highlight.js@11.8.0: + resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==} + engines: {node: '>=12.0.0'} + dev: true + + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /inquirer@8.2.5: + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + dependencies: + has: 1.0.3 + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-typed-array@1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jiti@1.19.1: + resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==} + hasBin: true + dev: true + + /js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + dev: true + + /js-sdsl@4.4.1: + resolution: {integrity: sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonc-eslint-parser@1.4.1: + resolution: {integrity: sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg==} + engines: {node: '>=8.10.0'} + dependencies: + acorn: 7.4.1 + eslint-utils: 2.1.0 + eslint-visitor-keys: 1.3.0 + espree: 6.2.1 + semver: 6.3.1 + dev: true + + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.0 + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /magic-string@0.30.1: + resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /mlly@1.4.0: + resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} + dependencies: + acorn: 8.10.0 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.1.2 + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /msw@1.2.2(typescript@5.1.6): + resolution: {integrity: sha512-GsW3PE/Es/a1tYThXcM8YHOZ1S1MtivcS3He/LQbbTCx3rbWJYCtWD5XXyJ53KlNPT7O1VI9sCW3xMtgFe8XpQ==} + engines: {node: '>=14'} + hasBin: true + requiresBuild: true + peerDependencies: + typescript: '>= 4.4.x <= 5.1.x' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@mswjs/cookies': 0.2.2 + '@mswjs/interceptors': 0.17.9 + '@open-draft/until': 1.0.3 + '@types/cookie': 0.4.1 + '@types/js-levenshtein': 1.1.1 + chalk: 4.1.1 + chokidar: 3.5.3 + cookie: 0.4.2 + graphql: 16.7.1 + headers-polyfill: 3.1.2 + inquirer: 8.2.5 + is-node-process: 1.2.0 + js-levenshtein: 1.1.6 + node-fetch: 2.6.12 + outvariant: 1.4.0 + path-to-regexp: 6.2.1 + strict-event-emitter: 0.4.6 + type-fest: 2.19.0 + typescript: 5.1.6 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: true + + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /naive-ui@2.34.4(vue@3.3.4): + resolution: {integrity: sha512-aPG8PDfhSzIzn/jSC9y3Jb3Pe2wHJ7F0cFV1EWlbImSrZECeUmoc+fIcOSWbizoztkKfaUAeKwYdMl09MKkj1g==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@css-render/plugin-bem': 0.15.12(css-render@0.15.12) + '@css-render/vue3-ssr': 0.15.12(vue@3.3.4) + '@types/katex': 0.14.0 + '@types/lodash': 4.14.195 + '@types/lodash-es': 4.17.8 + async-validator: 4.2.5 + css-render: 0.15.12 + date-fns: 2.30.0 + date-fns-tz: 1.3.8(date-fns@2.30.0) + evtd: 0.2.4 + highlight.js: 11.8.0 + lodash: 4.17.21 + lodash-es: 4.17.21 + seemly: 0.3.6 + treemate: 0.3.11 + vdirs: 0.1.8(vue@3.3.4) + vooks: 0.2.12(vue@3.3.4) + vue: 3.3.4 + vueuc: 0.4.51(vue@3.3.4) + dev: true + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /node-fetch@2.6.12: + resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.0 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /outvariant@1.4.0: + resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pinia@2.1.4(typescript@5.1.6)(vue@3.3.4): + resolution: {integrity: sha512-vYlnDu+Y/FXxv1ABo1vhjC+IbqvzUdiUC3sfDRrRyY2CQSrqqaa+iiHmqtARFxJVqWQMCJfXx1PBvFs9aJVLXQ==} + 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 + dependencies: + '@vue/devtools-api': 6.5.0 + typescript: 5.1.6 + vue: 3.3.4 + vue-demi: 0.14.5(vue@3.3.4) + dev: false + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.0 + pathe: 1.1.1 + dev: true + + /postcss-import@15.1.0(postcss@8.4.26): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.26 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.2 + dev: true + + /postcss-js@4.0.1(postcss@8.4.26): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.26 + dev: true + + /postcss-load-config@4.0.1(postcss@8.4.26): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.26 + yaml: 2.3.1 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.26): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.26 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.26: + resolution: {integrity: sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier@3.0.0: + resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /pretty-format@29.6.1: + resolution: {integrity: sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.0 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.1.6 + dev: true + + /rollup@3.26.2: + resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.0 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /seemly@0.3.6: + resolution: {integrity: sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==} + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.5.3: + resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + + /std-env@3.3.3: + resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + dev: true + + /strict-event-emitter@0.2.8: + resolution: {integrity: sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==} + dependencies: + events: 3.3.0 + dev: true + + /strict-event-emitter@0.4.6: + resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /strip-literal@1.0.1: + resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} + dependencies: + acorn: 8.10.0 + dev: true + + /sucrase@3.32.0: + resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + dev: true + + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.0 + dev: true + + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.0 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.19.1 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.26 + postcss-import: 15.1.0(postcss@8.4.26) + postcss-js: 4.0.1(postcss@8.4.26) + postcss-load-config: 4.0.1(postcss@8.4.26) + postcss-nested: 6.0.1(postcss@8.4.26) + postcss-selector-parser: 6.0.13 + resolve: 1.22.2 + sucrase: 3.32.0 + transitivePeerDependencies: + - ts-node + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /tinybench@2.5.0: + resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + dev: true + + /tinypool@0.6.0: + resolution: {integrity: sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + engines: {node: '>=14.0.0'} + dev: true + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /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'} + dependencies: + is-number: 7.0.0 + dev: true + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /treemate@0.3.11: + resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==} + dev: true + + /ts-api-utils@1.0.1(typescript@5.1.6): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.1.6 + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tslib@2.6.0: + resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + + /typescript@5.1.6: + resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + engines: {node: '>=14.17'} + hasBin: true + + /ufo@1.1.2: + resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + dev: true + + /unplugin@1.3.2: + resolution: {integrity: sha512-Lh7/2SryjXe/IyWqx9K7IKwuKhuOFZEhotiBquOODsv2IVyDkI9lv/XhgfjdXf/xdbv32txmnBNnC/JVTDJlsA==} + dependencies: + acorn: 8.10.0 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + dev: true + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.10 + which-typed-array: 1.1.10 + dev: true + + /vdirs@0.1.8(vue@3.3.4): + resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==} + peerDependencies: + vue: ^3.0.11 + dependencies: + evtd: 0.2.4 + vue: 3.3.4 + dev: true + + /vite-node@0.33.0(@types/node@20.4.2): + resolution: {integrity: sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.0 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.4.2(@types/node@20.4.2) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@4.4.2(@types/node@20.4.2): + resolution: {integrity: sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.4.2 + esbuild: 0.18.11 + postcss: 8.4.26 + rollup: 3.26.2 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vitest@0.33.0: + resolution: {integrity: sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 20.4.2 + '@vitest/expect': 0.33.0 + '@vitest/runner': 0.33.0 + '@vitest/snapshot': 0.33.0 + '@vitest/spy': 0.33.0 + '@vitest/utils': 0.33.0 + acorn: 8.10.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.1 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.3.3 + strip-literal: 1.0.1 + tinybench: 2.5.0 + tinypool: 0.6.0 + vite: 4.4.2(@types/node@20.4.2) + vite-node: 0.33.0(@types/node@20.4.2) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vooks@0.2.12(vue@3.3.4): + resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==} + peerDependencies: + vue: ^3.0.0 + dependencies: + evtd: 0.2.4 + vue: 3.3.4 + dev: true + + /vue-demi@0.14.5(vue@3.3.4): + resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.3.4 + dev: false + + /vue-eslint-parser@9.3.1(eslint@8.39.0): + resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 8.39.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.6.0 + esquery: 1.5.0 + lodash: 4.17.21 + semver: 7.5.3 + transitivePeerDependencies: + - supports-color + dev: true + + /vue-i18n@9.2.2(vue@3.3.4): + resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==} + engines: {node: '>= 14'} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@intlify/core-base': 9.2.2 + '@intlify/shared': 9.2.2 + '@intlify/vue-devtools': 9.2.2 + '@vue/devtools-api': 6.5.0 + vue: 3.3.4 + dev: true + + /vue-router@4.2.4(vue@3.3.4): + resolution: {integrity: sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@vue/devtools-api': 6.5.0 + vue: 3.3.4 + dev: false + + /vue-template-compiler@2.7.14: + resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + dev: true + + /vue-tsc@1.8.3(typescript@5.1.6): + resolution: {integrity: sha512-Ua4DHuYxjudlhCW2nRZtaXbhIDVncRGIbDjZhHpF8Z8vklct/G/35/kAPuGNSOmq0JcvhPAe28Oa7LWaUerZVA==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@vue/language-core': 1.8.3(typescript@5.1.6) + '@vue/typescript': 1.8.3(typescript@5.1.6) + semver: 7.5.3 + typescript: 5.1.6 + dev: true + + /vue@3.3.4: + resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-sfc': 3.3.4 + '@vue/runtime-dom': 3.3.4 + '@vue/server-renderer': 3.3.4(vue@3.3.4) + '@vue/shared': 3.3.4 + + /vueuc@0.4.51(vue@3.3.4): + resolution: {integrity: sha512-pLiMChM4f+W8czlIClGvGBYo656lc2Y0/mXFSCydcSmnCR1izlKPGMgiYBGjbY9FDkFG8a2HEVz7t0DNzBWbDw==} + peerDependencies: + vue: ^3.0.11 + dependencies: + '@css-render/vue3-ssr': 0.15.12(vue@3.3.4) + '@juggle/resize-observer': 3.4.0 + css-render: 0.15.12 + evtd: 0.2.4 + seemly: 0.3.6 + vdirs: 0.1.8(vue@3.3.4) + vooks: 0.2.12(vue@3.3.4) + vue: 3.3.4 + dev: true + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /web-encoding@1.1.5: + resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} + dependencies: + util: 0.12.5 + optionalDependencies: + '@zxing/text-encoding': 0.9.0 + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /which-typed-array@1.1.10: + resolution: {integrity: sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml-eslint-parser@0.3.2: + resolution: {integrity: sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg==} + dependencies: + eslint-visitor-keys: 1.3.0 + lodash: 4.17.21 + yaml: 1.10.2 + dev: true + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + 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 + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true diff --git a/contact-frontend/pnpm-workspace.yaml b/contact-frontend/pnpm-workspace.yaml new file mode 100644 index 00000000..ce7594b8 --- /dev/null +++ b/contact-frontend/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - 'packages/**/*' + - 'tools/**/*' diff --git a/contact-frontend/prettier.config.cjs b/contact-frontend/prettier.config.cjs new file mode 100644 index 00000000..05d706ab --- /dev/null +++ b/contact-frontend/prettier.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + useTabs: false, + trailingComma: 'es5', + tabWidth: 2, + semi: false, + singleQuote: true, +} diff --git a/contact-frontend/public/mockServiceWorker.js b/contact-frontend/public/mockServiceWorker.js new file mode 100644 index 00000000..8ee70b3e --- /dev/null +++ b/contact-frontend/public/mockServiceWorker.js @@ -0,0 +1,303 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker (1.2.2). + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ + +const INTEGRITY_CHECKSUM = '3d6b9f06410d179a7f7404d4bf4c3c70' +const activeClientIds = new Set() + +self.addEventListener('install', function () { + self.skipWaiting() +}) + +self.addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) + +self.addEventListener('message', async function (event) { + const clientId = event.source.id + + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + switch (event.data) { + case 'KEEPALIVE_REQUEST': { + sendToClient(client, { + type: 'KEEPALIVE_RESPONSE', + }) + break + } + + case 'INTEGRITY_CHECK_REQUEST': { + sendToClient(client, { + type: 'INTEGRITY_CHECK_RESPONSE', + payload: INTEGRITY_CHECKSUM, + }) + break + } + + case 'MOCK_ACTIVATE': { + activeClientIds.add(clientId) + + sendToClient(client, { + type: 'MOCKING_ENABLED', + payload: true, + }) + break + } + + case 'MOCK_DEACTIVATE': { + activeClientIds.delete(clientId) + break + } + + case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + + const remainingClients = allClients.filter((client) => { + return client.id !== clientId + }) + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister() + } + + break + } + } +}) + +self.addEventListener('fetch', function (event) { + const { request } = event + const accept = request.headers.get('accept') || '' + + // Bypass server-sent events. + if (accept.includes('text/event-stream')) { + return + } + + // Bypass navigation requests. + if (request.mode === 'navigate') { + return + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + return + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been deleted (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } + + // Generate unique request ID. + const requestId = Math.random().toString(16).slice(2) + + event.respondWith( + handleRequest(event, requestId).catch((error) => { + if (error.name === 'NetworkError') { + console.warn( + '[MSW] Successfully emulated a network error for the "%s %s" request.', + request.method, + request.url, + ) + return + } + + // At this point, any exception indicates an issue with the original request/response. + console.error( + `\ +[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`, + request.method, + request.url, + `${error.name}: ${error.message}`, + ) + }), + ) +}) + +async function handleRequest(event, requestId) { + const client = await resolveMainClient(event) + const response = await getResponse(event, client, requestId) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + ;(async function () { + const clonedResponse = response.clone() + sendToClient(client, { + type: 'RESPONSE', + payload: { + requestId, + type: clonedResponse.type, + ok: clonedResponse.ok, + status: clonedResponse.status, + statusText: clonedResponse.statusText, + body: + clonedResponse.body === null ? null : await clonedResponse.text(), + headers: Object.fromEntries(clonedResponse.headers.entries()), + redirected: clonedResponse.redirected, + }, + }) + })() + } + + return response +} + +// Resolve the main client for the given event. +// Client that issues a request doesn't necessarily equal the client +// that registered the worker. It's with the latter the worker should +// communicate with during the response resolving phase. +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) + + if (client?.frameType === 'top-level') { + return client + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +async function getResponse(event, client, requestId) { + const { request } = event + const clonedRequest = request.clone() + + function passthrough() { + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const headers = Object.fromEntries(clonedRequest.headers.entries()) + + // Remove MSW-specific request headers so the bypassed requests + // comply with the server's CORS preflight check. + // Operate with the headers as an object because request "Headers" + // are immutable. + delete headers['x-msw-bypass'] + + return fetch(clonedRequest, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Bypass requests with the explicit bypass header. + // Such requests can be issued by "ctx.fetch()". + if (request.headers.get('x-msw-bypass') === 'true') { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const clientMessage = await sendToClient(client, { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + mode: request.mode, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.text(), + bodyUsed: request.bodyUsed, + keepalive: request.keepalive, + }, + }) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'MOCK_NOT_FOUND': { + return passthrough() + } + + case 'NETWORK_ERROR': { + const { name, message } = clientMessage.data + const networkError = new Error(message) + networkError.name = name + + // Rejecting a "respondWith" promise emulates a network error. + throw networkError + } + } + + return passthrough() +} + +function sendToClient(client, message) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel() + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + return reject(event.data.error) + } + + resolve(event.data) + } + + client.postMessage(message, [channel.port2]) + }) +} + +function sleep(timeMs) { + return new Promise((resolve) => { + setTimeout(resolve, timeMs) + }) +} + +async function respondWithMock(response) { + await sleep(response.delay) + return new Response(response.body, response) +} diff --git a/contact-frontend/scripts/.gitkeep b/contact-frontend/scripts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/contact-frontend/tools/setup-naiveui/index.ts b/contact-frontend/tools/setup-naiveui/index.ts new file mode 100644 index 00000000..b0742667 --- /dev/null +++ b/contact-frontend/tools/setup-naiveui/index.ts @@ -0,0 +1,4 @@ +import { GlobalThemeOverrides } from 'naive-ui' + +// Naivui Theme Overrides +export const themeOverrides: GlobalThemeOverrides = {} diff --git a/contact-frontend/tools/setup-naiveui/package.json b/contact-frontend/tools/setup-naiveui/package.json new file mode 100644 index 00000000..9a7bacac --- /dev/null +++ b/contact-frontend/tools/setup-naiveui/package.json @@ -0,0 +1,6 @@ +{ + "name": "@cskefu/setup-naiveui", + "private": true, + "version": "0.0.0", + "type": "module" +} diff --git a/contact-frontend/tools/setup-tailwind/index.ts b/contact-frontend/tools/setup-tailwind/index.ts new file mode 100644 index 00000000..91f1fd34 --- /dev/null +++ b/contact-frontend/tools/setup-tailwind/index.ts @@ -0,0 +1,7 @@ +/** @type {import('tailwindcss').Config} */ +export default { + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/contact-frontend/tools/setup-tailwind/package.json b/contact-frontend/tools/setup-tailwind/package.json new file mode 100644 index 00000000..3f918e98 --- /dev/null +++ b/contact-frontend/tools/setup-tailwind/package.json @@ -0,0 +1,6 @@ +{ + "name": "@cskefu/setup-tailwind", + "private": true, + "version": "0.0.0", + "type": "module" +} diff --git a/contact-frontend/tsconfig.json b/contact-frontend/tsconfig.json new file mode 100644 index 00000000..cebf4231 --- /dev/null +++ b/contact-frontend/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + } +}