commit edf182422950a1df9451ed72bd5f20dec059de1c Author: MojtabaSoumi Date: Sat Jan 24 17:45:54 2026 +0330 1404/11/04- first diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json new file mode 100644 index 0000000..82772e0 --- /dev/null +++ b/.eslintrc-auto-import.json @@ -0,0 +1,84 @@ +{ + "globals": { + "Component": true, + "ComponentPublicInstance": true, + "ComputedRef": true, + "EffectScope": true, + "ExtractDefaultPropTypes": true, + "ExtractPropTypes": true, + "ExtractPublicPropTypes": true, + "InjectionKey": true, + "PropType": true, + "Ref": true, + "VNode": true, + "WritableComputedRef": true, + "acceptHMRUpdate": true, + "computed": true, + "createApp": true, + "createPinia": true, + "customRef": true, + "defineAsyncComponent": true, + "defineComponent": true, + "defineStore": true, + "effectScope": true, + "getActivePinia": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "inject": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "mapActions": true, + "mapGetters": true, + "mapState": true, + "mapStores": true, + "mapWritableState": true, + "markRaw": true, + "nextTick": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeRouteLeave": true, + "onBeforeRouteUpdate": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onDeactivated": true, + "onErrorCaptured": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onUnmounted": true, + "onUpdated": true, + "provide": true, + "reactive": true, + "readonly": true, + "ref": true, + "resolveComponent": true, + "setActivePinia": true, + "setMapStoreSuffix": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "storeToRefs": true, + "toRaw": true, + "toRef": true, + "toRefs": true, + "toValue": true, + "triggerRef": true, + "unref": true, + "useAttrs": true, + "useCssModule": true, + "useCssVars": true, + "useLink": true, + "useRoute": true, + "useRouter": true, + "useSlots": true, + "watch": true, + "watchEffect": true, + "watchPostEffect": true, + "watchSyncEffect": true + } +} \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..8848317 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,23 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier', + './.eslintrc-auto-import.json', + ], + rules: { + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/ban-ts-comment": "off" + }, + env: { + "vue/setup-compiler-macros": true + }, + parserOptions: { + ecmaVersion: 'latest' + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38adffa --- /dev/null +++ b/.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/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..66e2335 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..fcd13ee --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# admin-vue3 + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. + +If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: + +1. Disable the built-in TypeScript Extension + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` +2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Customer Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/auto-imports.d.ts b/auto-imports.d.ts new file mode 100644 index 0000000..03c8775 --- /dev/null +++ b/auto-imports.d.ts @@ -0,0 +1,82 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-auto-import +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] + const computed: typeof import('vue')['computed'] + const createApp: typeof import('vue')['createApp'] + const createPinia: typeof import('pinia')['createPinia'] + const customRef: typeof import('vue')['customRef'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const defineStore: typeof import('pinia')['defineStore'] + const effectScope: typeof import('vue')['effectScope'] + const getActivePinia: typeof import('pinia')['getActivePinia'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const inject: typeof import('vue')['inject'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const mapActions: typeof import('pinia')['mapActions'] + const mapGetters: typeof import('pinia')['mapGetters'] + const mapState: typeof import('pinia')['mapState'] + const mapStores: typeof import('pinia')['mapStores'] + const mapWritableState: typeof import('pinia')['mapWritableState'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const provide: typeof import('vue')['provide'] + const reactive: typeof import('vue')['reactive'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const setActivePinia: typeof import('pinia')['setActivePinia'] + const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const storeToRefs: typeof import('pinia')['storeToRefs'] + const toRaw: typeof import('vue')['toRaw'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const unref: typeof import('vue')['unref'] + const useAttrs: typeof import('vue')['useAttrs'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVars: typeof import('vue')['useCssVars'] + const useLink: typeof import('vue-router')['useLink'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useSlots: typeof import('vue')['useSlots'] + const watch: typeof import('vue')['watch'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/components.d.ts b/components.d.ts new file mode 100644 index 0000000..ab8d35f --- /dev/null +++ b/components.d.ts @@ -0,0 +1,75 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +import '@vue/runtime-core' + +export {} + +declare module '@vue/runtime-core' { + export interface GlobalComponents { + _index: typeof import('./src/core/components/_sample/_index.vue')['default'] + AAffix: typeof import('ant-design-vue/es')['Affix'] + AAvatar: typeof import('ant-design-vue/es')['Avatar'] + ABadge: typeof import('ant-design-vue/es')['Badge'] + AButton: typeof import('ant-design-vue/es')['Button'] + ACard: typeof import('ant-design-vue/es')['Card'] + AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'] + ADivider: typeof import('ant-design-vue/es')['Divider'] + ADrawer: typeof import('ant-design-vue/es')['Drawer'] + ADropdown: typeof import('ant-design-vue/es')['Dropdown'] + AForm: typeof import('ant-design-vue/es')['Form'] + AFormItem: typeof import('ant-design-vue/es')['FormItem'] + AInput: typeof import('ant-design-vue/es')['Input'] + AInputPassword: typeof import('ant-design-vue/es')['InputPassword'] + ALayout: typeof import('ant-design-vue/es')['Layout'] + ALayoutContent: typeof import('ant-design-vue/es')['LayoutContent'] + ALayoutHeader: typeof import('ant-design-vue/es')['LayoutHeader'] + ALayoutSider: typeof import('ant-design-vue/es')['LayoutSider'] + AMenu: typeof import('ant-design-vue/es')['Menu'] + AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider'] + AMenuItem: typeof import('ant-design-vue/es')['MenuItem'] + AModal: typeof import('ant-design-vue/es')['Modal'] + APagination: typeof import('ant-design-vue/es')['Pagination'] + APopconfirm: typeof import('ant-design-vue/es')['Popconfirm'] + APopover: typeof import('ant-design-vue/es')['Popover'] + ARadio: typeof import('ant-design-vue/es')['Radio'] + ARadioButton: typeof import('ant-design-vue/es')['RadioButton'] + ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup'] + ASelect: typeof import('ant-design-vue/es')['Select'] + ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] + ASpin: typeof import('ant-design-vue/es')['Spin'] + ASubMenu: typeof import('ant-design-vue/es')['SubMenu'] + ASwitch: typeof import('ant-design-vue/es')['Switch'] + ATable: typeof import('ant-design-vue/es')['Table'] + ATabPane: typeof import('ant-design-vue/es')['TabPane'] + ATabs: typeof import('ant-design-vue/es')['Tabs'] + ATextarea: typeof import('ant-design-vue/es')['Textarea'] + ATooltip: typeof import('ant-design-vue/es')['Tooltip'] + AUpload: typeof import('ant-design-vue/es')['Upload'] + BaseButton: typeof import('./src/core/components/BaseButton/index.ts')['default'] + BaseCard: typeof import('./src/core/components/BaseCard/index.ts')['default'] + BaseDatePicker: typeof import('./src/core/components/BaseDatePicker/index.ts')['default'] + BaseIcon: typeof import('./src/core/components/BaseIcon/index.ts')['default'] + BaseInputNumber: typeof import('./src/core/components/BaseInputNumber/index.ts')['default'] + BaseModal: typeof import('./src/core/components/BaseModal/index.ts')['default'] + BaseSwitch: typeof import('./src/core/components/BaseSwitch/index.ts')['default'] + BaseTable: typeof import('./src/core/components/BaseTable/index.ts')['default'] + BaseTableOld: typeof import('./src/core/components/BaseTableOld/index.ts')['default'] + BasicCard: typeof import('./src/components/BasicCard.vue')['default'] + BasicInfoItem: typeof import('./src/components/BasicInfoItem.vue')['default'] + BasicInput: typeof import('./src/components/BasicInput.vue')['default'] + BasicMainCard: typeof import('./src/components/BasicMainCard.vue')['default'] + BasicMainCardFull: typeof import('./src/components/BasicMainCardFull.vue')['default'] + BasicMobileHeader: typeof import('./src/components/BasicMobileHeader.vue')['default'] + BasicModal: typeof import('./src/components/BasicModal.vue')['default'] + BasicSelect: typeof import('./src/components/BasicSelect.vue')['default'] + BasicShowContext: typeof import('./src/components/BasicShowContext.vue')['default'] + BasicTextArea: typeof import('./src/components/BasicTextArea.vue')['default'] + BudgetSelect: typeof import('./src/components/BudgetSelect.vue')['default'] + CustomTag: typeof import('./src/components/CustomTag.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + } +} diff --git a/config.ts b/config.ts new file mode 100644 index 0000000..2e14a70 --- /dev/null +++ b/config.ts @@ -0,0 +1,35 @@ +import pkg from './package.json' +import {getConfigApp} from "@/utils/config"; +//import colors from './baseColor.json' +/** base config **/ +/** api document http://omde.feep.ir/docu **/ +const projectBase = getConfigApp('node_server') +const baseURL: string = projectBase + +const uploadURL = `${baseURL}/site/file` +const baseURLStorage = baseURL +const prefixCls = 'hr-tamin' +const version = pkg.version +const tokenName = 'peransa_token' +const appName = { fa: 'داشبورد مدیریتی', en: 'Admin Dashboard' } +/** Defining the secret key for crypto-js **/ +const secretKey = 'pwd@1234' + +const baseIconSize = '24' +const baseButtonIconSize = '24' +const menuIconSize = '20' + +export { + baseURL, + prefixCls, + //colors, + version, + tokenName, + appName, + secretKey, + uploadURL, + baseURLStorage, + baseIconSize, + baseButtonIconSize, + menuIconSize +} diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 0000000..8b063a4 --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + + + + admin + + +
+ + + + + diff --git a/my-uno.config.ts b/my-uno.config.ts new file mode 100644 index 0000000..8934ed6 --- /dev/null +++ b/my-uno.config.ts @@ -0,0 +1,34 @@ +import { + defineConfig, + presetAttributify, + presetIcons, + presetTypography, + presetUno, + presetWebFonts, + transformerDirectives, + transformerVariantGroup +} from 'unocss' + +export default defineConfig({ + shortcuts: [ + // ... + ], + theme: { + colors: { + // ... + primary: '#0A1B37' + } + }, + presets: [ + presetUno(), + presetAttributify(), + presetIcons(), + presetTypography(), + presetWebFonts({ + fonts: { + // ... + } + }) + ], + transformers: [transformerDirectives(), transformerVariantGroup()] +}) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..00e31d9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10198 @@ +{ + "name": "admin-vue3", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "admin-vue3", + "version": "0.0.1", + "dependencies": { + "@vueuse/core": "^10.1.2", + "@vueuse/head": "^1.1.26", + "ant-design-vue": "^3.2.19", + "apexcharts": "^3.45.1", + "axios": "^1.3.6", + "crypto-js": "^4.1.1", + "dayjalali": "^1.0.1", + "echarts": "^5.4.3", + "jalaliday": "^2.3.0", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-jalaali": "^0.10.0", + "pinia": "^2.0.33", + "vue": "3.3.13", + "vue-content-loader": "^2.0.1", + "vue-echarts": "^6.6.8", + "vue-router": "^4.1.6", + "vue3-apexcharts": "^1.4.4", + "vue3-otp-input": "^0.4.1" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.2.0", + "@types/crypto-js": "^4.1.1", + "@types/lodash": "^4.14.195", + "@types/node": "^18.15.13", + "@unocss/preset-attributify": "^0.50.8", + "@unocss/preset-uno": "^0.50.8", + "@unocss/transformer-compile-class": "^0.50.8", + "@unocss/transformer-directives": "^0.50.8", + "@unocss/transformer-variant-group": "^0.50.8", + "@vitejs/plugin-vue": "^4.1.0", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.2", + "@vue/tsconfig": "^0.1.3", + "eslint": "^8.36.0", + "eslint-plugin-vue": "^9.9.0", + "less": "^4.1.3", + "less-loader": "^11.1.2", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.8", + "typescript": "~4.9.5", + "unocss": "^0.50.8", + "unplugin-auto-import": "^0.15.3", + "unplugin-vue-components": "^0.24.1", + "vite": "^4.5.5", + "vite-plugin-pwa": "^0.14.7", + "vue-tsc": "^1.2.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ant-design/colors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz", + "integrity": "sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==" + }, + "node_modules/@ant-design/icons-vue": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz", + "integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.2.1" + }, + "peerDependencies": { + "vue": ">=3.0.3" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.1.1.tgz", + "integrity": "sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==", + "dev": true, + "dependencies": { + "execa": "^5.1.1", + "find-up": "^5.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.7.tgz", + "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", + "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", + "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.7", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.7", + "babel-plugin-polyfill-corejs3": "^0.8.7", + "babel-plugin-polyfill-regenerator": "^0.5.4", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true + }, + "node_modules/@iconify/utils": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.15.tgz", + "integrity": "sha512-8chdk3NhkYiqIVxPRBPN5wGnVYaTqc8XUagCNez84Ex7yK/oNrj1XINVn7zv+JljqZbF6r5B/bd1gRNlMSwYhg==", + "dev": true, + "dependencies": { + "@antfu/install-pkg": "^0.1.1", + "@antfu/utils": "^0.7.5", + "@iconify/types": "^2.0.0", + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "local-pkg": "^0.4.3" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "dev": true + }, + "node_modules/@rollup/plugin-replace": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz", + "integrity": "sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.0.tgz", + "integrity": "sha512-Jh4t/593gxs0lJZ/z3NnasKlplXT2f+4y/LZYuaKZW5KAaiVFL/fThhs+17EbUd53jUVJ0QudYCBGbN/psvaqg==", + "dev": true + }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz", + "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@types/crypto-js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.1.tgz", + "integrity": "sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz", + "integrity": "sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@unhead/dom": { + "version": "1.8.10", + "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.8.10.tgz", + "integrity": "sha512-dBeDbHrBjeU+eVgMsD91TGEazb1dwLrY0x/ve01CldMCmm+WcRu++SUW7s1QX84mzGH2EgFz78o1OPn6jpV3zw==", + "dependencies": { + "@unhead/schema": "1.8.10", + "@unhead/shared": "1.8.10" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/@unhead/schema": { + "version": "1.8.10", + "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.8.10.tgz", + "integrity": "sha512-cy8RGOPkwOVY5EmRoCgGV8AqLjy/226xBVTY54kBct02Om3hBdpB9FZa9frM910pPUXMI8PNmFgABO23O7IdJA==", + "dependencies": { + "hookable": "^5.5.3", + "zhead": "^2.2.4" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/@unhead/shared": { + "version": "1.8.10", + "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.8.10.tgz", + "integrity": "sha512-pEFryAs3EmV+ShDQx2ZBwUnt5l3RrMrXSMZ50oFf+MImKZNARVvD4+3I8fEI9wZh+Zq0JYG3UAfzo51MUP+Juw==", + "dependencies": { + "@unhead/schema": "1.8.10" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/@unhead/ssr": { + "version": "1.8.10", + "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.8.10.tgz", + "integrity": "sha512-7wKRKDd8c2NFmMyPetj8Ah5u2hXunDBZT5Y2DH83O16PiMxx4/uobGamTV1EfcqjTvOKJvAqkrYZNYSWss99NQ==", + "dependencies": { + "@unhead/schema": "1.8.10", + "@unhead/shared": "1.8.10" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/@unhead/vue": { + "version": "1.8.10", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.8.10.tgz", + "integrity": "sha512-KF8pftHnxnlBlgNpKXWLTg3ZUtkuDCxRPUFSDBy9CtqRSX/qvAhLZ26mbqRVmHj8KigiRHP/wnPWNyGnUx20Bg==", + "dependencies": { + "@unhead/schema": "1.8.10", + "@unhead/shared": "1.8.10", + "hookable": "^5.5.3", + "unhead": "1.8.10" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=2.7 || >=3" + } + }, + "node_modules/@unocss/astro": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/astro/-/astro-0.50.8.tgz", + "integrity": "sha512-kphNlr0PWGzvkCgKx7RaZWQ45khieCCt9OffUnxbRRft+jodsVXIwzHn+bOhGtIKpEpZiOzxRzTYjfW/R6XnTw==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8", + "@unocss/reset": "0.50.8", + "@unocss/vite": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/cli": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/cli/-/cli-0.50.8.tgz", + "integrity": "sha512-LBLt8oxGQSfTubOreXs8L7cxHvuYt4wA1MZ45jf4GT/C4moS8cqL7QFX66+MN/cNwvojqXSXQ2HtRJ1IZojfgA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@rollup/pluginutils": "^5.0.2", + "@unocss/config": "0.50.8", + "@unocss/core": "0.50.8", + "@unocss/preset-uno": "0.50.8", + "cac": "^6.7.14", + "chokidar": "^3.5.3", + "colorette": "^2.0.19", + "consola": "^2.15.3", + "fast-glob": "^3.2.12", + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "perfect-debounce": "^0.1.3" + }, + "bin": { + "unocss": "bin/unocss.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/config": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/config/-/config-0.50.8.tgz", + "integrity": "sha512-+Hzl99klLiIq7Lcc5EirTSfBqUH+5NOCmEkXXWcYKYyAk3BLnBU9Fk76P7HxchDwQ5zdwpC4Cq++LQlqbAw/Uw==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8", + "unconfig": "^0.3.7" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/core": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/core/-/core-0.50.8.tgz", + "integrity": "sha512-rWmyeNE0Na8dJPDynLVar0X22qMHFNhO+/F2FZDpG4tubTavXJJo9uvhZr/D381kiWxt+XZ38y6EAD4UMdBqMA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/inspector": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/inspector/-/inspector-0.50.8.tgz", + "integrity": "sha512-M963+B9iYGDI7m8KONppJ9EvrDowKWnzzmMLGf+D+qEXmXdnSztMZxEnOdg/caYyHJMw+4jlftyYRZB0VXnAGA==", + "dev": true, + "dependencies": { + "gzip-size": "^6.0.0", + "sirv": "^2.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/postcss": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/postcss/-/postcss-0.50.8.tgz", + "integrity": "sha512-UbFD+25EkmBonZggKuQdunAU+1O6O83NcnMqSalhn4vhsr4yHeD4P+Omr+CnBcuOxkP4h2JYHzfzdpe4DZxKYg==", + "dev": true, + "dependencies": { + "@unocss/config": "0.50.8", + "@unocss/core": "0.50.8", + "css-tree": "^2.3.1", + "fast-glob": "^3.2.12", + "magic-string": "^0.30.0", + "postcss": "^8.4.21" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/@unocss/preset-attributify": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/preset-attributify/-/preset-attributify-0.50.8.tgz", + "integrity": "sha512-aSL+I8OSjnom4RpvUcxIRjYETFhW5n51TA56yB9+ex78z5/EhIzOSS5PytGxJWj4hKUY5W9cZ7sCuUs0eaQ6VA==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-icons": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/preset-icons/-/preset-icons-0.50.8.tgz", + "integrity": "sha512-tQ05aP7ZRRP39+egB16gFMK6fkEdS8ob4rJeqUG6vEXiiAFWVbotI/NbHQapqk3wRthmyI3d9rUtxClJ2micvw==", + "dev": true, + "dependencies": { + "@iconify/utils": "^2.1.5", + "@unocss/core": "0.50.8", + "ofetch": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-mini": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/preset-mini/-/preset-mini-0.50.8.tgz", + "integrity": "sha512-/4sbOdyaqJMvFkw1xzo2+h6bZJHw6WCYw1mF+f0ydHzj8ruvwaj9ClDDOweW5cdrk3wzDzRZ6NPRahKqLwv6/Q==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-tagify": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/preset-tagify/-/preset-tagify-0.50.8.tgz", + "integrity": "sha512-CNm9wEmDGEsCvBgWTBOPhH5ts5iobQh5mBeZyH2uCKuQNX+Vc21tXLX78bCk2V4yJ7mpqUWokDNqgTaNhTZjnw==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-typography": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/preset-typography/-/preset-typography-0.50.8.tgz", + "integrity": "sha512-jraHusTmbJq9UHgQ43ifzVJobTyoJLuGzeGqBzgLNac+V4BltzqHghup6obA09asQio7xe+crFkTV4IXWNK1lA==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8", + "@unocss/preset-mini": "0.50.8" + } + }, + "node_modules/@unocss/preset-uno": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/preset-uno/-/preset-uno-0.50.8.tgz", + "integrity": "sha512-BVgGpv+G9dauX6oRuno8ATOx6bjykiTGuy9NWZCG+/0vux0wplylQm/nSWYsEZZoxRwGOaAoNx93TeOPoofrXQ==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8", + "@unocss/preset-mini": "0.50.8", + "@unocss/preset-wind": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-web-fonts": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/preset-web-fonts/-/preset-web-fonts-0.50.8.tgz", + "integrity": "sha512-diGJVTC3W2lovRL9hlV7h4mdzKjoyJD1rlLai2QMZP/+UCsEwDcL9JFF0lZTlEN5GtcbgvcyPRZKB1/ituvjdg==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8", + "ofetch": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-wind": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/preset-wind/-/preset-wind-0.50.8.tgz", + "integrity": "sha512-lF6MAJm2HVF8GJoBIIus1cpZL1ybisj8fl3KYEzVUFUWCwmNnxG4rr+CGnck3bDRYk2zmEvTwX+cISTCwq2u1Q==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8", + "@unocss/preset-mini": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/reset": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/reset/-/reset-0.50.8.tgz", + "integrity": "sha512-2WoM6O9VyuHDPAnvCXr7LBJQ8ZRHDnuQAFsL1dWXp561Iq2l9whdNtPuMcozLGJGUUrFfVBXIrHY4sfxxScgWg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/scope": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/scope/-/scope-0.50.8.tgz", + "integrity": "sha512-QA4G9JYK8jrnU02qi1WBi45S+V0HKNUY0u6h5drYqRkcUho2YrpcfMagYi1A5XGg5ykmtP9e6vx1D9lij+JGnQ==", + "dev": true + }, + "node_modules/@unocss/transformer-attributify-jsx": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.50.8.tgz", + "integrity": "sha512-Ht2SfxWbkkFgZQE8KEicmOvxk2INQccuiH4gdyycj3y1tkOXU+Xm1QFruJT7+BPHr0QJp257nA0XmQD/Bhd1kA==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-attributify-jsx-babel": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx-babel/-/transformer-attributify-jsx-babel-0.50.8.tgz", + "integrity": "sha512-Eyt0irFRspHpngj+mDbREuVoqJ49csIhcls6NqerqrZKAI4/jYGNLFy99jyM1ry2L3sHwLP7rbT7AoFrWuLnvA==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-compile-class": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/transformer-compile-class/-/transformer-compile-class-0.50.8.tgz", + "integrity": "sha512-2himb5VinZcx7d72nauoqLGk4niC0sFFK/09lmJxFj1jnZqqYBMS48V0PyUypabA5W+bHQ1TJwqcv95wMHIIzA==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-directives": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/transformer-directives/-/transformer-directives-0.50.8.tgz", + "integrity": "sha512-x/OdR5lK7Gy1Y4r6cOLG2LccWGWDyflz9cDv4DkZKg7pQShcjNFZ3UMAO+74fJO6Jvhvl9iDYpeTZo8009wr7A==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8", + "css-tree": "^2.3.1" + } + }, + "node_modules/@unocss/transformer-variant-group": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/transformer-variant-group/-/transformer-variant-group-0.50.8.tgz", + "integrity": "sha512-UjDsa3K3Bv11u3q8BYZ4ZrdMhlu937hiQct6sXzFIQcSnOwqOokr/h6V/8aB3hFiPWX/yQuIIQnQJjYTVWZYxw==", + "dev": true, + "dependencies": { + "@unocss/core": "0.50.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/vite": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/@unocss/vite/-/vite-0.50.8.tgz", + "integrity": "sha512-pHk7D0jHAlBUKSp0y0dMuKesLSSv1O0fTNewUAz1NUpISTno3zizuKSpRs8OzCFInta6QeAVSaWe8K69PcfFog==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@rollup/pluginutils": "^5.0.2", + "@unocss/config": "0.50.8", + "@unocss/core": "0.50.8", + "@unocss/inspector": "0.50.8", + "@unocss/scope": "0.50.8", + "@unocss/transformer-directives": "0.50.8", + "chokidar": "^3.5.3", + "fast-glob": "^3.2.12", + "magic-string": "^0.30.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz", + "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3", + "@vue/babel-plugin-jsx": "^1.1.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.0.tgz", + "integrity": "sha512-Zn6iRYAVvWl835GCcNsLUroy+jwNjH1yd83hvKNSgbiCkzeZwXvEFCC1u0lVKwoqL7z0IcrtY3dkBMuMxwB1fw==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.0.tgz", + "integrity": "sha512-z0t7fjk03TqncyWYoChKQ4rWx1LXJaw1kNEDrUU5tbPWI2zkCPv2imQJOYlJ8GyTDoQ6/nD82asFcSxDRJ8YgQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "@vue/babel-helper-vue-transform-on": "1.2.0", + "@vue/babel-plugin-resolve-type": "1.2.0-beta.0", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.2.0-beta.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.0-beta.0.tgz", + "integrity": "sha512-zG5nXU+89UjXHVvvf0yehU0MDF1caJssCUF+bU5HWevEoR5qoRLt7wX6rNTtG/ZKHFUvB8BibIKL62Ix167Wxg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.10", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/parser": "^7.22.11", + "@vue/compiler-sfc": "^3.4.15" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.15.tgz", + "integrity": "sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/shared": "3.4.15", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz", + "integrity": "sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz", + "integrity": "sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/compiler-core": "3.4.15", + "@vue/compiler-dom": "3.4.15", + "@vue/compiler-ssr": "3.4.15", + "@vue/shared": "3.4.15", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.33", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz", + "integrity": "sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + }, + "peerDependencies": { + "eslint": ">= 7.28.0", + "prettier": ">= 2.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", + "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "vue-eslint-parser": "^9.1.1" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "dependencies": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.15.tgz", + "integrity": "sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==", + "optional": true, + "peer": true, + "dependencies": { + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.13.tgz", + "integrity": "sha512-oWnydGH0bBauhXvh5KXUy61xr9gKaMbtsMHk40IK9M4gMuKPJ342tKFarY0eQ6jef8906m35q37wwA8DMZOm5Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.5", + "@vue/compiler-core": "3.3.13", + "@vue/shared": "3.3.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5" + } + }, + "node_modules/@vue/reactivity-transform/node_modules/@vue/compiler-core": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.13.tgz", + "integrity": "sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.5", + "@vue/shared": "3.3.13", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/reactivity-transform/node_modules/@vue/shared": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.13.tgz", + "integrity": "sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==", + "license": "MIT" + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.15.tgz", + "integrity": "sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==", + "optional": true, + "peer": true, + "dependencies": { + "@vue/reactivity": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.13.tgz", + "integrity": "sha512-JJkpE8R/hJKXqVTgUoODwS5wqKtOsmJPEqmp90PDVGygtJ4C0PtOkcEYXwhiVEmef6xeXcIlrT3Yo5aQ4qkHhQ==", + "license": "MIT", + "dependencies": { + "@vue/runtime-core": "3.3.13", + "@vue/shared": "3.3.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/runtime-dom/node_modules/@vue/reactivity": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.13.tgz", + "integrity": "sha512-fjzCxceMahHhi4AxUBzQqqVhuA21RJ0COaWTbIBl1PruGW1CeY97louZzLi4smpYx+CHfFPPU/CS8NybbGvPKQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.3.13" + } + }, + "node_modules/@vue/runtime-dom/node_modules/@vue/runtime-core": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.13.tgz", + "integrity": "sha512-1TzA5TvGuh2zUwMJgdfvrBABWZ7y8kBwBhm7BXk8rvdx2SsgcGfz2ruv2GzuGZNvL1aKnK8CQMV/jFOrxNQUMA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.3.13", + "@vue/shared": "3.3.13" + } + }, + "node_modules/@vue/runtime-dom/node_modules/@vue/shared": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.13.tgz", + "integrity": "sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==", + "license": "MIT" + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.13.tgz", + "integrity": "sha512-vSnN+nuf6iSqTL3Qgx/9A+BT+0Zf/VJOgF5uMZrKjYPs38GMYyAU1coDyBNHauehXDaP+zl73VhwWv0vBRBHcg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.3.13", + "@vue/shared": "3.3.13" + }, + "peerDependencies": { + "vue": "3.3.13" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-core": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.13.tgz", + "integrity": "sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.5", + "@vue/shared": "3.3.13", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-dom": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.13.tgz", + "integrity": "sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.3.13", + "@vue/shared": "3.3.13" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-ssr": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.13.tgz", + "integrity": "sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.13", + "@vue/shared": "3.3.13" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/shared": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.13.tgz", + "integrity": "sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==", + "license": "MIT" + }, + "node_modules/@vue/shared": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", + "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==", + "devOptional": true + }, + "node_modules/@vue/tsconfig": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.1.3.tgz", + "integrity": "sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==", + "dev": true, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.2.tgz", + "integrity": "sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.7.2", + "@vueuse/shared": "10.7.2", + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/head": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vueuse/head/-/head-1.3.1.tgz", + "integrity": "sha512-XCcHGfDzkGlHS7KIPJVYN//L7jpfASLsN7MUE19ndHVQLnPIDxqFLDl7IROsY81PKzawVAUe4OYVWcGixseWxA==", + "dependencies": { + "@unhead/dom": "^1.3.1", + "@unhead/schema": "^1.3.1", + "@unhead/ssr": "^1.3.1", + "@unhead/vue": "^1.3.1" + }, + "peerDependencies": { + "vue": ">=2.7 || >=3" + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.2.tgz", + "integrity": "sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.2.tgz", + "integrity": "sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==", + "dependencies": { + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==" + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ant-design-vue": { + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-3.2.20.tgz", + "integrity": "sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-vue": "^6.1.0", + "@babel/runtime": "^7.10.5", + "@ctrl/tinycolor": "^3.4.0", + "@simonwep/pickr": "~1.8.0", + "array-tree-filter": "^2.1.0", + "async-validator": "^4.0.0", + "dayjs": "^1.10.5", + "dom-align": "^1.12.1", + "dom-scroll-into-view": "^2.0.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.15", + "resize-observer-polyfill": "^1.5.1", + "scroll-into-view-if-needed": "^2.2.25", + "shallow-equal": "^1.0.0", + "vue-types": "^3.0.0", + "warning": "^4.0.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design-vue" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apexcharts": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.45.1.tgz", + "integrity": "sha512-pPjj/SA6dfPvR/IKRZF0STdfBGpBh3WRt7K0DFuW9P8erypYkX17EHu3/molPRfo2zSiQwTVpshHC5ncysqfkA==", + "dependencies": { + "@yr/monotone-cubic-spline": "^1.0.3", + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.4", + "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-js": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz", + "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", + "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/dayjalali": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dayjalali/-/dayjalali-1.0.1.tgz", + "integrity": "sha512-f+uDwP9kQSjlDdGTJjMpWaHe9BaIkQjZRkk32SNj6pRNkJRc2bTmIW5AbEwVX3vwa5INDwi6K7+Cik67/PzWqA==", + "license": "MIT", + "dependencies": { + "jalaali-js": "^1.2.8" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/destr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.2.tgz", + "integrity": "sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-align": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", + "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" + }, + "node_modules/dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.640", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.640.tgz", + "integrity": "sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", + "dev": true, + "peer": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "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", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.20.1.tgz", + "integrity": "sha512-GyCs8K3lkEvoyC1VV97GJhP1SvqsKCiWGHnbn0gVUYiUhaH2+nB+Dv1uekv1THFMPbBfYxukrzQdltw950k+LQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.4.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jalaali-js": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.2.8.tgz", + "integrity": "sha512-Jl/EwY84JwjW2wsWqeU4pNd22VNQ7EkjI36bDuLw31wH98WQW4fPjD0+mG7cdCK+Y8D6s9R3zLiQ3LaKu6bD8A==", + "license": "MIT" + }, + "node_modules/jalaliday": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/jalaliday/-/jalaliday-2.3.0.tgz", + "integrity": "sha512-B/m3TqsRrTFED/HBDqON6rPKe0MpoLxNICZ5uZeZ/scHJUHKQNr1n+wdZSj8MxrY1Bmo05gllZeNEw4beXd2oQ==" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.4", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.4.tgz", + "integrity": "sha512-6/GrYaB6QcW6Vj+/9ZPgKKs6G10YZai/l/eJ4SLwbzqNTBsAqt5hSLVF47TgsiBxV1P6eAU0GYRH3YRuQU9V3A==", + "dev": true, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mlly": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-jalaali": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/moment-jalaali/-/moment-jalaali-0.10.0.tgz", + "integrity": "sha512-XICH1+UHd3zyaE1bXWQBlhoXBqbzEyFfT0TrifNobHxLALRuTSwXn376bX8FmkYg9mZimevwwdd6EB57s5wuFA==", + "dependencies": { + "jalaali-js": "^1.1.0", + "moment": "^2.22.2", + "moment-timezone": "^0.5.21", + "rimraf": "^3.0.2" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.44", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.44.tgz", + "integrity": "sha512-nv3YpzI/8lkQn0U6RkLd+f0W/zy/JnoR5/EyPz/dNkPTBjA2jNLCVxaiQ8QpeLymhSZvX0wCL5s27NQWdOPwAw==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanopop": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.4.1.tgz", + "integrity": "sha512-hhtYHTaQPmclHHCWmh2EJpWQ9FCA47kj2r/vXqI0ACeMi/qR9qFYDQRSx+luami7qw1OkBR4luJqS6ADoC3FPQ==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-fetch-native": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.1.tgz", + "integrity": "sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ofetch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz", + "integrity": "sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==", + "dev": true, + "dependencies": { + "destr": "^2.0.1", + "node-fetch-native": "^1.4.0", + "ufo": "^1.3.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/perfect-debounce": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-0.1.3.tgz", + "integrity": "sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinia": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "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 + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resize-detector": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/resize-detector/-/resize-detector-0.3.0.tgz", + "integrity": "sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "node_modules/scule": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.2.0.tgz", + "integrity": "sha512-CRCmi5zHQnSoeCik9565PONMg0kfkvYmcSqrbOJY4txFfy1wvVULV4FDaiXhUblUgahdqz3F2NwHZ8i4eBTwUw==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", + "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "dependencies": { + "svg.js": "^2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", + "dependencies": { + "svg.js": ">=2.3.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "node_modules/svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "dependencies": { + "svg.js": "^2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "dependencies": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js/node_modules/svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "dependencies": { + "svg.js": "^2.6.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unconfig": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.3.11.tgz", + "integrity": "sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.6", + "defu": "^6.1.2", + "jiti": "^1.20.0", + "mlly": "^1.4.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unhead": { + "version": "1.8.10", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.8.10.tgz", + "integrity": "sha512-dth8FvZkLriO5ZWWOBIYBNSfGiwJtKcqpPWpSOk/Z0e2jdlgwoZEWZHFyte0EKvmbZxKcsWNMqIuv7dEmS5yZQ==", + "dependencies": { + "@unhead/dom": "1.8.10", + "@unhead/schema": "1.8.10", + "@unhead/shared": "1.8.10", + "hookable": "^5.5.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unimport": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.7.1.tgz", + "integrity": "sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "acorn": "^8.11.2", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "mlly": "^1.4.2", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "scule": "^1.1.1", + "strip-literal": "^1.3.0", + "unplugin": "^1.5.1" + } + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unimport/node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unocss": { + "version": "0.50.8", + "resolved": "https://registry.npmjs.org/unocss/-/unocss-0.50.8.tgz", + "integrity": "sha512-3yqKkSm/SKCKxFolXNR12Mi64lr4PW95LSHKZ/a9Yzlf2PT1NirAn8/uJ8KoJJBNR2YWobtkLi4UplFz/8IAYA==", + "dev": true, + "dependencies": { + "@unocss/astro": "0.50.8", + "@unocss/cli": "0.50.8", + "@unocss/core": "0.50.8", + "@unocss/postcss": "0.50.8", + "@unocss/preset-attributify": "0.50.8", + "@unocss/preset-icons": "0.50.8", + "@unocss/preset-mini": "0.50.8", + "@unocss/preset-tagify": "0.50.8", + "@unocss/preset-typography": "0.50.8", + "@unocss/preset-uno": "0.50.8", + "@unocss/preset-web-fonts": "0.50.8", + "@unocss/preset-wind": "0.50.8", + "@unocss/reset": "0.50.8", + "@unocss/transformer-attributify-jsx": "0.50.8", + "@unocss/transformer-attributify-jsx-babel": "0.50.8", + "@unocss/transformer-compile-class": "0.50.8", + "@unocss/transformer-directives": "0.50.8", + "@unocss/transformer-variant-group": "0.50.8", + "@unocss/vite": "0.50.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@unocss/webpack": "0.50.8" + }, + "peerDependenciesMeta": { + "@unocss/webpack": { + "optional": true + } + } + }, + "node_modules/unplugin": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.6.0.tgz", + "integrity": "sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==", + "dev": true, + "dependencies": { + "acorn": "^8.11.2", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.6.1" + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.15.3.tgz", + "integrity": "sha512-RLT8SqbPn4bT7yBshZId0uPSofKWnwr66RyDaxWaFb/+f7OTDOWAsVNz+hOQLBWSjvbekr2xZY9ccS8TDHJbCQ==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.2", + "@rollup/pluginutils": "^5.0.2", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "minimatch": "^9.0.0", + "unimport": "^3.0.6", + "unplugin": "^1.3.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unplugin-auto-import/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unplugin-vue-components": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.24.1.tgz", + "integrity": "sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.2", + "@rollup/pluginutils": "^5.0.2", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "minimatch": "^7.4.2", + "resolve": "^1.22.1", + "unplugin": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-components/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unplugin-vue-components/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vite": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz", + "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "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 + } + } + }, + "node_modules/vite-plugin-pwa": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.7.tgz", + "integrity": "sha512-dNJaf0fYOWncmjxv9HiSa2xrSjipjff7IkYE5oIUJ2x5HKu3cXgA8LRgzOwTc5MhwyFYRSU0xyN0Phbx3NsQYw==", + "dev": true, + "dependencies": { + "@rollup/plugin-replace": "^5.0.1", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "pretty-bytes": "^6.0.0", + "rollup": "^3.7.2", + "workbox-build": "^6.5.4", + "workbox-window": "^6.5.4" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0", + "workbox-build": "^6.5.4", + "workbox-window": "^6.5.4" + } + }, + "node_modules/vue": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.13.tgz", + "integrity": "sha512-LDnUpQvDgsfc0u/YgtAgTMXJlJQqjkxW1PVcOnJA5cshPleULDjHi7U45pl2VJYazSSvLH8UKcid/kzH8I0a0Q==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.13", + "@vue/compiler-sfc": "3.3.13", + "@vue/runtime-dom": "3.3.13", + "@vue/server-renderer": "3.3.13", + "@vue/shared": "3.3.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-content-loader": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vue-content-loader/-/vue-content-loader-2.0.1.tgz", + "integrity": "sha512-pkof4+q2xmzNEdhqelxtJejeP/vQUJtLle4/v2ueG+HURqM9Q/GIGC8GJ2bVVWeLfTDET51jqimwQdmxJTlu0g==", + "peerDependencies": { + "vue": "^3" + } + }, + "node_modules/vue-echarts": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/vue-echarts/-/vue-echarts-6.6.8.tgz", + "integrity": "sha512-3EGrxKGCGjHnkhudRQQ4fkK5iJxxXNQ1fXvSWA/7mzR/oV7BBSHYvC3gDbG/WIW0A/Fcx2H8k5H3NDyWgjyi8g==", + "hasInstallScript": true, + "dependencies": { + "resize-detector": "^0.3.0", + "vue-demi": "^0.13.11" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.5", + "@vue/runtime-core": "^3.0.0", + "echarts": "^5.4.1", + "vue": "^2.6.12 || ^3.1.1" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "@vue/runtime-core": { + "optional": true + } + } + }, + "node_modules/vue-echarts/node_modules/vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.0.tgz", + "integrity": "sha512-7KsNBb6gHFA75BtneJsoK/dbZ281whUIwFYdQxA68QrCrGMXYzUMbPDHGcOQ0OocIVKrWSKWXZ4mL7tonCXoUw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/vue-tsc/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-tsc/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-tsc/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/vue-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz", + "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==", + "dependencies": { + "is-plain-object": "3.0.1" + }, + "engines": { + "node": ">=10.15.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue/node_modules/@vue/compiler-core": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.13.tgz", + "integrity": "sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.5", + "@vue/shared": "3.3.13", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/vue/node_modules/@vue/compiler-dom": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.13.tgz", + "integrity": "sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.3.13", + "@vue/shared": "3.3.13" + } + }, + "node_modules/vue/node_modules/@vue/compiler-sfc": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.13.tgz", + "integrity": "sha512-DQVmHEy/EKIgggvnGRLx21hSqnr1smUS9Aq8tfxiiot8UR0/pXKHN9k78/qQ7etyQTFj5em5nruODON7dBeumw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.5", + "@vue/compiler-core": "3.3.13", + "@vue/compiler-dom": "3.3.13", + "@vue/compiler-ssr": "3.3.13", + "@vue/reactivity-transform": "3.3.13", + "@vue/shared": "3.3.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.32", + "source-map-js": "^1.0.2" + } + }, + "node_modules/vue/node_modules/@vue/compiler-ssr": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.13.tgz", + "integrity": "sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.13", + "@vue/shared": "3.3.13" + } + }, + "node_modules/vue/node_modules/@vue/shared": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.13.tgz", + "integrity": "sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==", + "license": "MIT" + }, + "node_modules/vue3-apexcharts": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/vue3-apexcharts/-/vue3-apexcharts-1.4.4.tgz", + "integrity": "sha512-TH89uZrxGjaDvkaYAISvj8+k6Bf1rUKFillc8oJirs5XZEPiwM1ELKZQ786wz0rfPqkSHHny2lqqUCK7Rw+LcQ==", + "peerDependencies": { + "apexcharts": "> 3.0.0", + "vue": "> 3.0.0" + } + }, + "node_modules/vue3-otp-input": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/vue3-otp-input/-/vue3-otp-input-0.4.1.tgz", + "integrity": "sha512-wVl9i3DcWlO0C7fBI9V+RIP3crm/1tY72fuhvb3YM2JfbLoYofB96aPl5AgFhA0Cse5bQEMYtIvOeiqW3rfbAw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "vue": "^3.0.*" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.16.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz", + "integrity": "sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz", + "integrity": "sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-build": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.1.tgz", + "integrity": "sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.1", + "workbox-broadcast-update": "6.6.1", + "workbox-cacheable-response": "6.6.1", + "workbox-core": "6.6.1", + "workbox-expiration": "6.6.1", + "workbox-google-analytics": "6.6.1", + "workbox-navigation-preload": "6.6.1", + "workbox-precaching": "6.6.1", + "workbox-range-requests": "6.6.1", + "workbox-recipes": "6.6.1", + "workbox-routing": "6.6.1", + "workbox-strategies": "6.6.1", + "workbox-streams": "6.6.1", + "workbox-sw": "6.6.1", + "workbox-window": "6.6.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workbox-build/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-build/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/workbox-build/node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz", + "integrity": "sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag==", + "deprecated": "workbox-background-sync@6.6.1", + "dev": true, + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-core": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.1.tgz", + "integrity": "sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw==", + "deprecated": "this package has been deprecated", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.1.tgz", + "integrity": "sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz", + "integrity": "sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.6.1", + "workbox-core": "6.6.1", + "workbox-routing": "6.6.1", + "workbox-strategies": "6.6.1" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz", + "integrity": "sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.1.tgz", + "integrity": "sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "workbox-core": "6.6.1", + "workbox-routing": "6.6.1", + "workbox-strategies": "6.6.1" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz", + "integrity": "sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.1.tgz", + "integrity": "sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.6.1", + "workbox-core": "6.6.1", + "workbox-expiration": "6.6.1", + "workbox-precaching": "6.6.1", + "workbox-routing": "6.6.1", + "workbox-strategies": "6.6.1" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.1.tgz", + "integrity": "sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.1.tgz", + "integrity": "sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "workbox-core": "6.6.1" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.1.tgz", + "integrity": "sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "workbox-core": "6.6.1", + "workbox-routing": "6.6.1" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.1.tgz", + "integrity": "sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ==", + "deprecated": "this package has been deprecated", + "dev": true + }, + "node_modules/workbox-window": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.1.tgz", + "integrity": "sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ==", + "deprecated": "this package has been deprecated", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zhead": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz", + "integrity": "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==", + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "dependencies": { + "tslib": "2.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9fbd03c --- /dev/null +++ b/package.json @@ -0,0 +1,70 @@ +{ + "name": "admin-vue3", + "version": "0.0.1", + "author": { + "name": "Ali Ghasami", + "email": "alighassami@yahoo.com", + "url": "alighasami.ir" + }, + "private": true, + "scripts": { + "dev": "vite", + "build": "run-p build-only", + "build-type-check": "run-p type-check build-only", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --noEmit", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "format": "prettier --write src/" + }, + "dependencies": { + "@vueuse/core": "^10.1.2", + "@vueuse/head": "^1.1.26", + "ant-design-vue": "^3.2.19", + "apexcharts": "^3.45.1", + "axios": "^1.3.6", + "crypto-js": "^4.1.1", + "dayjalali": "^1.0.1", + "echarts": "^5.4.3", + "jalaliday": "^2.3.0", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-jalaali": "^0.10.0", + "pinia": "^2.0.33", + "vue": "3.3.13", + "vue-content-loader": "^2.0.1", + "vue-echarts": "^6.6.8", + "vue-router": "^4.1.6", + "vue3-apexcharts": "^1.4.4", + "vue3-otp-input": "^0.4.1" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.2.0", + "@types/crypto-js": "^4.1.1", + "@types/lodash": "^4.14.195", + "@types/node": "^18.15.13", + "@unocss/preset-attributify": "^0.50.8", + "@unocss/preset-uno": "^0.50.8", + "@unocss/transformer-compile-class": "^0.50.8", + "@unocss/transformer-directives": "^0.50.8", + "@unocss/transformer-variant-group": "^0.50.8", + "@vitejs/plugin-vue": "^4.1.0", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.2", + "@vue/tsconfig": "^0.1.3", + "eslint": "^8.36.0", + "eslint-plugin-vue": "^9.9.0", + "less": "^4.1.3", + "less-loader": "^11.1.2", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.8", + "typescript": "~4.9.5", + "unocss": "^0.50.8", + "unplugin-auto-import": "^0.15.3", + "unplugin-vue-components": "^0.24.1", + "vite": "^4.5.5", + "vite-plugin-pwa": "^0.14.7", + "vue-tsc": "^1.2.1" + } +} diff --git a/preDependency.md b/preDependency.md new file mode 100644 index 0000000..3ad0d38 --- /dev/null +++ b/preDependency.md @@ -0,0 +1,21 @@ +## Pre Dependency For Panel +### html - css +### js and type script +### vue 3 +### vue 3 script setup +### pinia for store +### vite and plugin for vite +### less +### uno css +- https://github.com/unocss/unocss +- https://github.com/unocss/unocss/tree/main/packages/preset-attributify/ +- https://github.com/unocss/unocss/tree/main/packages/transformer-variant-group +- https://github.com/unocss/unocss/tree/main/packages/transformer-directives +- https://github.com/unocss/unocss/tree/main/packages/transformer-compile-class/ +- https://github.com/unocss/unocss/tree/main/packages/preset-uno +- https://github.com/reslear/unocss-preset-scrollbar-hide +### git and git Submodules +### vue use +### axios +### @vueuse/head +- https://github.com/vueuse/head \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..a187001 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/api/accounting.ts b/src/api/accounting.ts new file mode 100644 index 0000000..cc123ab --- /dev/null +++ b/src/api/accounting.ts @@ -0,0 +1,9 @@ +import useAxios from "@core/utils/useAxios"; +import type {Accounting, TotalAccounting} from "@/model/accounting"; + +export const getAccountingTable = async (start: string,end: string) => + await useAxios.post('/admin/dashboard/finance', {startDate: start, endDate: end}); + +//Accounting Tab +export const getTotalAccountingTable = async () => + await useAxios.post('/admin/finance'); \ No newline at end of file diff --git a/src/api/card.ts b/src/api/card.ts new file mode 100644 index 0000000..677f66d --- /dev/null +++ b/src/api/card.ts @@ -0,0 +1,10 @@ +import useAxios from '@core/utils/useAxios' +import type { AddId, Customer } from '@/model/customer' +import type { TableInput } from '@core/type/baseTable' +import type { Card, cardSts } from '@/model/card' + +export const changeAccountSts = async (obj: cardSts) => + await useAxios.post(`/admin/account/sts`, obj) + +export const getAccountTable = async (params: TableInput) => + await useAxios.post>('/admin/account/table', params) diff --git a/src/api/city.ts b/src/api/city.ts new file mode 100644 index 0000000..4b807e1 --- /dev/null +++ b/src/api/city.ts @@ -0,0 +1,16 @@ +import useAxios from '@core/utils/useAxios' +import type { City, Province } from '@/model/city' +import type { TableInput } from '@core/type/baseTable' + +export const getProvinces = async () => await useAxios.get>(`/api/city/state`) + +export const getAllCities = async () => await useAxios.get>(`/api/city/all`) + +export const getCitiesList = async (id: number) => + await useAxios.get>(`/api/city/${id}`) + +export const getCitiesTable = async (params: TableInput) => + await useAxios.post>(`/api/city/table`, params) + +export const addCity = async (id?: number, title?: string) => + await useAxios.post(`/api/city`, { parent_id: id, title: title }) diff --git a/src/api/consts.ts b/src/api/consts.ts new file mode 100644 index 0000000..4bc754a --- /dev/null +++ b/src/api/consts.ts @@ -0,0 +1,21 @@ +import useAxios from '@core/utils/useAxios' +import type { Const } from '@/model/const' + +export const getNatureConst = async () => await useAxios.get>('/api/const/key/nature') + +export const getBudgetConst = async () => await useAxios.get>('/api/const/key/budget') + +export const getProjectConst = async () => await useAxios.get>('/api/const/key/type') + +export const getUserTypeConst = async () => + await useAxios.get>('/api/const/key/user_type') + +export const getSectionConst = async () => + await useAxios.get>('/api/const/key/section') + +export const updateEditConst = async (obj: Const) => + await useAxios.put(`/admin/const/1`, obj) + +export const createAddConst = async (obj: Const) => await useAxios.post(`/admin/const`, obj) + +export const deleteConst = async (id: number) => await useAxios.delete(`/api/const/${id}`) diff --git a/src/api/customer.ts b/src/api/customer.ts new file mode 100644 index 0000000..ea2a234 --- /dev/null +++ b/src/api/customer.ts @@ -0,0 +1,36 @@ +import useAxios from '@core/utils/useAxios' +import type { AddId, Customer } from '@/model/customer' +import type { TableInput } from '@core/type/baseTable' + +export const createCustomer = async (obj: Customer) => + await useAxios.post(`/admin/customer`, obj) + +export const deleteCustomer = async (id: number) => await useAxios.delete(`/admin/customer/${id}`) +export const updateCustomer = async (id: number, obj: Customer) => + await useAxios.put(`/admin/customer/${id}`, obj) + +export const getCustomerTable = async (params: TableInput) => + await useAxios.post>('/admin/customer/table', params) + +export const getCustomersList = async () => await useAxios.get(`/admin/customer/list`) + +export const changeCustomerActivation = async (id: number) => + await useAxios.get(`/admin/customer/active/${id}`) + +export const changeCustomerOrderActivation = async (id: number) => + await useAxios.get(`/admin/customer/trade/${id}`) + +export const changeCustomerArchive = async (id: number) => + await useAxios.get(`/admin/customer/archive/${id}`) + +export const confirmUser = async (id: number) => + await useAxios.get(`/admin/customer/is_valid/${id}`) + +export const getCustomerArchiveTable = async (params: TableInput) => + await useAxios.post>('/admin/customer/archive/table', params) + +export const getSingleTable = async (params: TableInput) => + await useAxios.post>('/admin/customer/single/table', params) + +export const getSingleArchiveTable = async (params: TableInput) => + await useAxios.post>('/admin/customer/single/archive/table', params) diff --git a/src/api/dashboard.ts b/src/api/dashboard.ts new file mode 100644 index 0000000..23ad20c --- /dev/null +++ b/src/api/dashboard.ts @@ -0,0 +1,13 @@ +import useAxios from '@core/utils/useAxios' +import type { AddId, User } from '@/model/user' +import type { TableInput } from '@core/type/baseTable' +import type {Dashboard} from '@/model/dashboard' +import type {PriceChart} from "@/model/priceChart"; + +export const getDashboard = async () => await useAxios.get('/admin/dashboard') + +export const updateMyInformation = async (val: User) => + await useAxios.post('/admin/me/update', val) + +//priceChart +export const getAllPrices = async () => await useAxios.post('/admin/prices') diff --git a/src/api/login.ts b/src/api/login.ts new file mode 100644 index 0000000..d5af445 --- /dev/null +++ b/src/api/login.ts @@ -0,0 +1,8 @@ +import useAxios from '@core/utils/useAxios' +import type { Token, UserLoginState } from '@/model/login' + +export const Login = async (values: UserLoginState) => + await useAxios.post('/auth/login', values) + +export const Verify = async (values: UserLoginState) => + await useAxios.post('/auth/verify', values) diff --git a/src/api/order.ts b/src/api/order.ts new file mode 100644 index 0000000..44318ee --- /dev/null +++ b/src/api/order.ts @@ -0,0 +1,23 @@ +import type { TableInput,TableOutput } from '@core/type/baseTable' +import useAxios from '@core/utils/useAxios' +import type { Order,OrderSts } from '@/model/order' +import type { AddId, Customer } from '@/model/customer' + +export const getOrderTable = async (params: TableInput) => + await useAxios.post>('/admin/order/table', params) + +export const createOrder = async (obj: Order) => + await useAxios.post(`/admin/single/order`, obj) + +export const getSingleOrder = async (id: number) => + await useAxios.get(`/admin/order/single/${id}`) + +export const getNewOrderTable = async (params: TableInput) => + await useAxios.post>('/admin/order/table/new', params) + + +export const getSingleTable = async (params: TableInput) => + await useAxios.post>('/admin/customer/single/table', params) + +export const changeOrderSts = async (params: OrderSts) => + await useAxios.post('/admin/order/sts', params) diff --git a/src/api/othersPrices.ts b/src/api/othersPrices.ts new file mode 100644 index 0000000..60493fe --- /dev/null +++ b/src/api/othersPrices.ts @@ -0,0 +1,4 @@ +import useAxios from "@core/utils/useAxios"; +import type {OthersPrices} from "@/model/othersPrices"; + +export const getOthersPrices = async () => await useAxios.get('api/price/last') \ No newline at end of file diff --git a/src/api/permission.ts b/src/api/permission.ts new file mode 100644 index 0000000..ccfe284 --- /dev/null +++ b/src/api/permission.ts @@ -0,0 +1,19 @@ +import useAxios from '@core/utils/useAxios' +import type { Permission, UserPermission } from '@/model/permission' + +export const getTreeData = async () => await useAxios.get('/api/permission/show/rid') + +export const updatePermission = async (obj: Permission) => + await useAxios.post('/api/permission', obj) + +export const getSelectedData = async (user_type_id?: number, section_id?: number) => + await useAxios.get(`/api/permission/${user_type_id}/${section_id}`) + +export const updateUserPermission = async (obj: UserPermission) => + await useAxios.post('/api/exclude', obj) + +export const getUserSelectedData = async (id?: number) => await useAxios.get(`/api/exclude/${id}`) + +export async function getUserPermissions(user_id: number) { + return await useAxios.get(`/api/exclude/user/permission/${user_id}`) +} diff --git a/src/api/price.ts b/src/api/price.ts new file mode 100644 index 0000000..d6a5b49 --- /dev/null +++ b/src/api/price.ts @@ -0,0 +1,14 @@ +import type { AddId } from '@/model/customer' +import useAxios from '@core/utils/useAxios' +import type { last, Price } from "@/model/price"; +import type { TableInput } from '@core/type/baseTable' +import type { MethodePrices } from "@/model/product"; + +export const createPrice = async (obj: Price) => await useAxios.post(`/admin/price`, obj) + +export const getPriceTable = async (params: TableInput) => + await useAxios.post>('/admin/price/table', params) + +export const getLastPrice = async () => await useAxios.get(`/api/price/last`) + +export const methodePrices = async () => await useAxios.get('/admin/p') diff --git a/src/api/priceTriggers.ts b/src/api/priceTriggers.ts new file mode 100644 index 0000000..7f5b8af --- /dev/null +++ b/src/api/priceTriggers.ts @@ -0,0 +1,6 @@ +import type {TableInput} from "@core/type/baseTable"; +import useAxios from "@core/utils/useAxios"; +import type {PriceTriggers} from "@/model/priceTriggers"; + +export const getPriceTriggersTable = async (params: TableInput) => + await useAxios.post>('/admin/price_triggers/table', params) \ No newline at end of file diff --git a/src/api/product.ts b/src/api/product.ts new file mode 100644 index 0000000..c92f188 --- /dev/null +++ b/src/api/product.ts @@ -0,0 +1,61 @@ +import useAxios from '@core/utils/useAxios' +import type { AddId, Customer } from '@/model/customer' +import type { TableInput } from '@core/type/baseTable' +import type { Accounting } from "@/model/accounting" +import type { Balance, SetActiveTime } from "@/model/product"; + +export const createProduct = async (obj: Customer) => + await useAxios.post(`/admin/product`, obj) + +export const deleteCustomer = async (id: number) => await useAxios.delete(`/admin/product/${id}`) +export const updateCustomer = async (id: number, obj: Customer) => + await useAxios.put(`/admin/product/${id}`, obj) + +export const getCustomerTable = async (params: TableInput) => + await useAxios.post>('/admin/product/table', params) + +export const getCustomersList = async () => await useAxios.get(`/admin/product/list`) + +export const changeProductActivation = async (id: number) => + await useAxios.get(`/admin/product/active/${id}`) + +export const changeCustomerOrderActivation = async (id: number) => + await useAxios.get(`/admin/product/trade/${id}`) + +export const changeCustomerArchive = async (id: number) => + await useAxios.get(`/admin/product/archive/${id}`) + +export const confirmUser = async (id: number) => + await useAxios.get(`/admin/product/is_valid/${id}`) + +export const getCustomerArchiveTable = async (params: TableInput) => + await useAxios.post>('/admin/product/archive/table', params) + +export const getSingleTable = async (params: TableInput) => + await useAxios.post>('/admin/product/single/table', params) + +export const getSingleArchiveTable = async (params: TableInput) => + await useAxios.post>('/admin/product/single/archive/table', params) + +export const getCustomerById = async (id: number) => { + return await useAxios.get(`/admin/product/${id}`) +} +export const changeBuyActiveProduct = async (id?: number) => { + return await useAxios.get(`/admin/product/open_buy/${id}`) +} +export const changeSellActiveProduct = async (id?: number) => { + return await useAxios.get(`/admin/product/open_sell/${id}`) +} +export const changeActiveProduct = async (id: number) => { + return await useAxios.get(`/admin/product/active/${id}`) +} +export const changeVisibilityProduct = async (id: number) => { + return await useAxios.get(`/admin/product/hide/${id}`) +} +export const setActiveTime = async (open: string, close: string) =>{ + await useAxios.put(`/admin/products`, {auto_open_at: open, auto_close_at: close}) +} + +export const getBalance = async (startDate: string, endDate: string) => { + return await useAxios.post('/admin/getBalance', {startDate, endDate}) +} \ No newline at end of file diff --git a/src/api/sms.ts b/src/api/sms.ts new file mode 100644 index 0000000..bf4a08f --- /dev/null +++ b/src/api/sms.ts @@ -0,0 +1,25 @@ +import type { AddId, Customer } from '@/model/customer' +import useAxios from '@core/utils/useAxios' +import type { last, Price } from '@/model/price' +import type { TableInput } from '@core/type/baseTable' +import type { Order } from '@/model/order' +import type { FunctionItem } from '@/model/Item' +import sms from '@/router/routes/sms' +import type { Sms } from '@/model/sms' + +export const getSMSTable = async (params: TableInput) => + await useAxios.post>('/admin/messages/table', params) + +export const getNumbersTable = async (params: TableInput) => + await useAxios.post>('/admin/messages/get_customer_list/table', params) + +export const getGroupsList = async () => + await useAxios.get(`/admin/messages/functions`) + +export const getCustomerList = async (obj: string[]) => + await useAxios.post<{ customers: Customer[] }>(`/admin/messages/get_customer_list`, { + functions: obj + }) + +export const createSMS = async (obj: Sms) => + await useAxios.post(`/admin/messages/send_message`, obj) diff --git a/src/api/transaction.ts b/src/api/transaction.ts new file mode 100644 index 0000000..3932f0a --- /dev/null +++ b/src/api/transaction.ts @@ -0,0 +1,8 @@ +import type { TableInput } from '@core/type/baseTable' +import useAxios from '@core/utils/useAxios' +// import { Customer } from '@/model/customer' +import type { Wallet } from '@/model/wallet' +import type { Transaction } from '@/model/transaction' + +export const getTransactionTable = async (params: TableInput) => + await useAxios.post>('/admin/wallet/transaction/table', params) diff --git a/src/api/user.ts b/src/api/user.ts new file mode 100644 index 0000000..28431d4 --- /dev/null +++ b/src/api/user.ts @@ -0,0 +1,30 @@ +import useAxios from '@core/utils/useAxios' +import type { AddId, User } from '@/model/user' +import type { TableInput } from '@core/type/baseTable' +import type {Referrals} from '@/model/referrals' +import type {Funds} from "@/model/funds"; + +//referrals +export const getReferralsTable = async (params: TableInput,customer_id: number) => await useAxios.post>(`/admin/customers/${customer_id}/referrals`, params) +//funds +export const getFundsTable = async (params: TableInput,customer_id: number) => await useAxios.post>(`/admin/customers/${customer_id}/funds`, params) + +export const getReferrals = async (val: Referrals) => await useAxios.post(`/admin/customers/4/referrals`, val) +//me +export const getMyInformation = async () => await useAxios.get('/admin/me') + +export const updateMyInformation = async (val: User) => await useAxios.post('/admin/me/update', val) + +//users +export const createUser = async (obj: User) => await useAxios.post(`/admin/user`, obj) + +export const updateUser = async (id: number, obj: User) => + await useAxios.put(`/admin/user/${id}`, obj) + +export const deleteUser = async (id: number) => await useAxios.delete(`/admin/user/${id}`) + +export const getUserTable = async (params: TableInput) => + await useAxios.post>('/admin/user/table', params) + +export const changeUserActivation = async (id: number) => + await useAxios.get(`/admin/user/active/${id}`) diff --git a/src/api/wallet.ts b/src/api/wallet.ts new file mode 100644 index 0000000..68cf83a --- /dev/null +++ b/src/api/wallet.ts @@ -0,0 +1,29 @@ +import type { TableInput } from '@core/type/baseTable' +import useAxios from '@core/utils/useAxios' +// import { Customer } from '@/model/customer' +import type { Charge, Wallet, Withdraw, SendWeight } from '@/model/wallet' + +export const getWalletTable = async (params?: TableInput) => + await useAxios.post>('/admin/wallet/table', params) +export const chargeWallet = async (params: Charge, type: 'gold' | 'money') => + type === 'money' + ? await useAxios.post('/admin/wallet/charge', params) + : await useAxios.post('/admin/wallet/charge_gold', params) + +export const getWithdrawTable = async (params: TableInput) => + await useAxios.post>('/admin/wallet/withdraw/table', params) + +export const completeWithdraw = async (params: Withdraw) => + await useAxios.post('/admin/wallet/withdraw/complete', params) + +export const updateSts = async (id: number, sts: Object) => { + return await useAxios.put(`/admin/wallet/withdraw/${id}`, sts) +} + +export const getWithdrawById = async (id: number) => { + return await useAxios.get(`/admin/wallet/withdraw/${id}`) +} + +export const sendWeights = async (params: SendWeight ) => { + return await useAxios.put(`/admin/wallet/transaction/reprice`, params) +} diff --git a/src/assets/img/henzaLogo.png b/src/assets/img/henzaLogo.png new file mode 100644 index 0000000..ed74ba9 Binary files /dev/null and b/src/assets/img/henzaLogo.png differ diff --git a/src/assets/img/icon.png b/src/assets/img/icon.png new file mode 100644 index 0000000..7dac7fc Binary files /dev/null and b/src/assets/img/icon.png differ diff --git a/src/assets/img/logo_full_.png b/src/assets/img/logo_full_.png new file mode 100644 index 0000000..909036c Binary files /dev/null and b/src/assets/img/logo_full_.png differ diff --git a/src/assets/img/milliLogo.png b/src/assets/img/milliLogo.png new file mode 100644 index 0000000..794c399 Binary files /dev/null and b/src/assets/img/milliLogo.png differ diff --git a/src/assets/img/saminLogo.png b/src/assets/img/saminLogo.png new file mode 100644 index 0000000..da853a8 Binary files /dev/null and b/src/assets/img/saminLogo.png differ diff --git a/src/assets/img/saminLogo_.png b/src/assets/img/saminLogo_.png new file mode 100644 index 0000000..7c5cde5 Binary files /dev/null and b/src/assets/img/saminLogo_.png differ diff --git a/src/assets/img/talaLogo.png b/src/assets/img/talaLogo.png new file mode 100644 index 0000000..3c50070 Binary files /dev/null and b/src/assets/img/talaLogo.png differ diff --git a/src/assets/style.less b/src/assets/style.less new file mode 100644 index 0000000..c146f67 --- /dev/null +++ b/src/assets/style.less @@ -0,0 +1,95 @@ + + +.v-enter-active, +.v-leave-active { + transition: opacity 0.5s ease; +} + +.v-enter-from, +.v-leave-to { + opacity: 0; +} +/*::-webkit-scrollbar-track { + background-color: #f2f6ff !important; +} + +::-webkit-scrollbar { + width: 7px !important; + background-color: @primary-color !important; +} + +::-webkit-scrollbar-thumb { + background-color: @second-color !important; + border-radius: @primary-color !important; +}*/ + +@media (max-width: 376px ) { + .ant-card-body { + padding: 5px; + } +} + +.ant-form-item { + display: block; + margin-bottom: 0px; +} + +.ant-select-selector{ + border-radius: @border-radius-base !important; +} +.ant-input { + border-radius: @border-radius-base; +} + +.ant-picker{ + border-radius: @border-radius-base; + @apply w-full; +} +.ant-card-body{ + @apply h-full; +} +.ant-table-tbody{ + max-height: 50vh; +} +.ant-popover-buttons{ + direction: ltr; +} +.ant-popover-title{ + text-align: right; +} + +//Todo Mohammad(this style change all tbody in project event in datepicker) +/*tbody { + display: block; + overflow: auto; +}*/ + +//Todo Mohammad(this style change all tbody in project event in datepicker) +/*thead, tbody tr { + display: table; + width: 100%; + table-layout: fixed;!* even columns width , fix width of table too*! +}*/ +/* +.ant-message-notice{ + z-index: 1000000000000000; +}*/ +.otp-input { + width: 52px; + height: 52px; + padding: 3px; + margin: 0 8px; + font-size: 20px; + text-align: center; + border: 1px solid #d1d5db; + border-radius: 4px; + background-color: white; + //@apply bg-gray-50; + + &:focus-visible { + background-color: #fff; + //display: none; + outline: none; + border: 1px solid @primary-color !important; + } +} \ No newline at end of file diff --git a/src/components/BasicCard.vue b/src/components/BasicCard.vue new file mode 100644 index 0000000..7974052 --- /dev/null +++ b/src/components/BasicCard.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/components/BasicInfoItem.vue b/src/components/BasicInfoItem.vue new file mode 100644 index 0000000..d4fa3da --- /dev/null +++ b/src/components/BasicInfoItem.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/components/BasicInfoModal/index.vue b/src/components/BasicInfoModal/index.vue new file mode 100644 index 0000000..2c18957 --- /dev/null +++ b/src/components/BasicInfoModal/index.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/components/BasicInfoModal/model/Info.ts b/src/components/BasicInfoModal/model/Info.ts new file mode 100644 index 0000000..737c2ba --- /dev/null +++ b/src/components/BasicInfoModal/model/Info.ts @@ -0,0 +1,16 @@ +export interface Info { + title?: string + date?: string + time?: string + type?: string | number + typeColor?: string + mobile?: number + name?: string + itemsTitle?: string + items?: Array + description?: string +} +export interface KeyVal { + key: string + value?: string | number +} diff --git a/src/components/BasicInput.vue b/src/components/BasicInput.vue new file mode 100644 index 0000000..c728193 --- /dev/null +++ b/src/components/BasicInput.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/components/BasicMainCard.vue b/src/components/BasicMainCard.vue new file mode 100644 index 0000000..0031e6d --- /dev/null +++ b/src/components/BasicMainCard.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/components/BasicMainCardFull.vue b/src/components/BasicMainCardFull.vue new file mode 100644 index 0000000..cb8008f --- /dev/null +++ b/src/components/BasicMainCardFull.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/components/BasicMenu/components/BasicMenuItem.vue b/src/components/BasicMenu/components/BasicMenuItem.vue new file mode 100644 index 0000000..8999d6e --- /dev/null +++ b/src/components/BasicMenu/components/BasicMenuItem.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/BasicMenu/index.vue b/src/components/BasicMenu/index.vue new file mode 100644 index 0000000..8dbe1c8 --- /dev/null +++ b/src/components/BasicMenu/index.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/components/BasicMobileHeader.vue b/src/components/BasicMobileHeader.vue new file mode 100644 index 0000000..aa142af --- /dev/null +++ b/src/components/BasicMobileHeader.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/src/components/BasicModal.vue b/src/components/BasicModal.vue new file mode 100644 index 0000000..113bb67 --- /dev/null +++ b/src/components/BasicModal.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/components/BasicSelect.vue b/src/components/BasicSelect.vue new file mode 100644 index 0000000..adf79ff --- /dev/null +++ b/src/components/BasicSelect.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/components/BasicShowContext.vue b/src/components/BasicShowContext.vue new file mode 100644 index 0000000..bb800c0 --- /dev/null +++ b/src/components/BasicShowContext.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/src/components/BasicTags/index.vue b/src/components/BasicTags/index.vue new file mode 100644 index 0000000..4a6ff33 --- /dev/null +++ b/src/components/BasicTags/index.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/components/BasicTags/model/index.ts b/src/components/BasicTags/model/index.ts new file mode 100644 index 0000000..fcb32a0 --- /dev/null +++ b/src/components/BasicTags/model/index.ts @@ -0,0 +1,4 @@ +export interface TagItem { + id: number | undefined + name: string | undefined +} diff --git a/src/components/BasicTextArea.vue b/src/components/BasicTextArea.vue new file mode 100644 index 0000000..a80cc8d --- /dev/null +++ b/src/components/BasicTextArea.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/components/BasicUploads/BasicDraggableFileUpload.vue b/src/components/BasicUploads/BasicDraggableFileUpload.vue new file mode 100644 index 0000000..331f399 --- /dev/null +++ b/src/components/BasicUploads/BasicDraggableFileUpload.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/components/BasicUploads/model/index.ts b/src/components/BasicUploads/model/index.ts new file mode 100644 index 0000000..b545490 --- /dev/null +++ b/src/components/BasicUploads/model/index.ts @@ -0,0 +1,4 @@ +export interface FileList { + uid?: any | null | undefined + name?: any | null | undefined +} diff --git a/src/components/BudgetSelect.vue b/src/components/BudgetSelect.vue new file mode 100644 index 0000000..4d7febd --- /dev/null +++ b/src/components/BudgetSelect.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/CustomTag.vue b/src/components/CustomTag.vue new file mode 100644 index 0000000..a1b68b3 --- /dev/null +++ b/src/components/CustomTag.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/components/ProductUploader/IndexImageUploader.vue b/src/components/ProductUploader/IndexImageUploader.vue new file mode 100644 index 0000000..09103b8 --- /dev/null +++ b/src/components/ProductUploader/IndexImageUploader.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/src/components/ProductUploader/ProductImageUploader.vue b/src/components/ProductUploader/ProductImageUploader.vue new file mode 100644 index 0000000..fca4613 --- /dev/null +++ b/src/components/ProductUploader/ProductImageUploader.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/components/ProductUploader/UploaderImage.vue b/src/components/ProductUploader/UploaderImage.vue new file mode 100644 index 0000000..054e98f --- /dev/null +++ b/src/components/ProductUploader/UploaderImage.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/components/SelectCompany/ReadyCitySelect.vue b/src/components/SelectCompany/ReadyCitySelect.vue new file mode 100644 index 0000000..7faaddd --- /dev/null +++ b/src/components/SelectCompany/ReadyCitySelect.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/components/SelectCompany/ReadyProvinceSelect.vue b/src/components/SelectCompany/ReadyProvinceSelect.vue new file mode 100644 index 0000000..cee7f50 --- /dev/null +++ b/src/components/SelectCompany/ReadyProvinceSelect.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/config-loader.js b/src/config-loader.js new file mode 100644 index 0000000..788aae1 --- /dev/null +++ b/src/config-loader.js @@ -0,0 +1,181 @@ +(function() { + 'use strict'; + //debugger + + + // Store config in window object + window.__APP_CONFIG__ = window.__APP_CONFIG__ || {}; + window.__CONFIG_READY__ = false; + + // Create a promise that will be resolved when config is loaded + let configResolve; + let configReject; + window.__CONFIG_PROMISE__ = new Promise((resolve, reject) => { + configResolve = resolve; + configReject = reject; + }); + + // API endpoint for config - you can change this URL + // You can also set it via a data attribute: + //const scriptTag = document.currentScript || document.querySelector('script[src*="config-loader.js"]'); + //const customUrl = scriptTag ? scriptTag.getAttribute('data-config-url') : null; + const CONFIG_URL = 'https://nerkh.gold/get_user' //customUrl || window.location.origin + '/api/config'; + + // Timeout to ensure main.ts loads even if config fails (5 seconds) + const CONFIG_TIMEOUT = 5000; + let configTimeoutId; + let mainScriptLoaded = false; + + // Fetch config from server + async function loadConfig() { + try { + const response = await fetch(CONFIG_URL, { + method: 'GET', + headers: { + 'Accept': 'application/json', + }, + cache: 'no-cache' + }); + + if (!response.ok) { + throw new Error('Failed to fetch config: ' + response.status); + } + + // Check if response is actually JSON + const contentType = response.headers.get('content-type'); + if (!contentType || !contentType.includes('application/json')) { + const text = await response.text(); + throw new Error('Response is not JSON. Received: ' + text.substring(0, 100)); + } + + const config = await response.json(); + + // Store config in window object + window.__APP_CONFIG__ = config; + window.__CONFIG_READY__ = true; + if (config?.user?.name_fa) { + document.title = 'پنل مدیریت '+ '-'+config.user.name_fa; + } + // ---------- Dynamic Favicon ---------- + if (config?.user?.avatar) { + const faviconUrl = config.user.avatar; + + // remove existing favicon(s) + const existingIcons = document.querySelectorAll('link[rel*="icon"]'); + existingIcons.forEach(icon => icon.remove()); + + // create new favicon + const link = document.createElement('link'); + link.rel = 'icon'; + link.type = 'image/png'; // یا image/x-icon + link.href = faviconUrl + '?v=' + Date.now(); + + document.head.appendChild(link); + } + // Resolve the promise + if (configResolve) { + configResolve(config); + } + + // Dispatch custom event to notify that config is ready + window.dispatchEvent(new CustomEvent('configReady', { detail: config })); + + console.log('Config loaded successfully:', config); + + // Clear timeout if config loaded successfully + if (configTimeoutId) { + clearTimeout(configTimeoutId); + configTimeoutId = null; + } + + // Load main.ts after config is ready + loadMainScript(); + } catch (error) { + console.warn('Config loader: Could not fetch config from', CONFIG_URL); + console.warn('Error details:', error.message); + console.warn('This is normal if the endpoint does not exist yet. App will continue with empty config.'); + // Set default empty config on error + window.__APP_CONFIG__ = {}; + window.__CONFIG_READY__ = true; + + // Resolve the promise even on error (with empty config) + if (configResolve) { + configResolve({}); + } + + window.dispatchEvent(new CustomEvent('configError', { detail: error })); + + // Clear timeout if error occurred + if (configTimeoutId) { + clearTimeout(configTimeoutId); + configTimeoutId = null; + } + + // Load main.ts even on error (with empty config) + loadMainScript(); + } + } + + // Function to dynamically load main.ts script + function loadMainScript() { + //const config= window.__APP_CONFIG__ + // Check if main.ts is already loaded + if (mainScriptLoaded || document.querySelector('script[src="/src/main.ts"]')) { + return; + } + + mainScriptLoaded = true; + + /*const manifestLink = document.createElement("link") + manifestLink.rel = "manifest" + manifestLink.id= "manifestsdfsdfsdfsdfsdfsdf" + manifestLink.href = `https://nerkh.gold/get_user/${config.user.id}/monifist.json` + + document.head.appendChild(manifestLink)*/ + + + import('/src/main.ts').then(() => { + console.log('Main script loaded and executed'); + }); + + /*const script = document.createElement('script'); + script.type = 'module'; + script.src = '/src/main.ts'; + script.async = true;*/ + + // Handle script load errors + /*script.onerror = function() { + console.error('Failed to load main.ts script'); + mainScriptLoaded = false; + }; + + script.onload = function() { + console.log('Main script loaded successfully'); + }; + + document.body.appendChild(script);*/ + + //console.log('Main script loading started...'); + } + + // Set timeout to ensure main.ts loads even if config fails + configTimeoutId = setTimeout(function() { + if (!mainScriptLoaded) { + console.warn('Config loader: Timeout reached. Loading main.ts with empty config.'); + // Set default empty config + window.__APP_CONFIG__ = window.__APP_CONFIG__ || {}; + window.__CONFIG_READY__ = true; + + // Resolve promise with empty config + if (configResolve) { + configResolve({}); + } + + loadMainScript(); + } + }, CONFIG_TIMEOUT); + + // Start loading config immediately + loadConfig(); +})(); + diff --git a/src/core/README.md b/src/core/README.md new file mode 100644 index 0000000..d069431 --- /dev/null +++ b/src/core/README.md @@ -0,0 +1,22 @@ +# Admin-Vue3-Core + +This is core admin vue 3 contains +- basic components +- composable +- utils +- base +- config of project +and ... +## How use Core +load component and other from /core/ folder and use (very easy) +## How get update core +```git +git submodule update --remote --recursive +``` +#### run top command in root of project + +#### The above Link describe about git submodule + +https://www.devroom.io/2020/03/09/the-git-submodule-cheat-sheet/ + + diff --git a/src/core/assets/css/ant-override.less b/src/core/assets/css/ant-override.less new file mode 100644 index 0000000..7784e87 --- /dev/null +++ b/src/core/assets/css/ant-override.less @@ -0,0 +1,75 @@ +@import (less) "./var.less"; + +.ant-input-affix-wrapper, +.ant-dropdown-menu, +.ant-menu-submenu > .ant-menu, +.ant-tag, +.ant-card, +.ant-btn, +.ant-picker, +.ant-picker-panel-container, +.ant-modal-content +{ + border-radius: var(--border-radius-base); +} + +.ant-modal-header{ + border-radius: var(--border-radius-base) var(--border-radius-base) 0 0; +} + +.ant-modal-header{ + padding: 16px; +} + +.ant-modal-header{ + border-bottom:none; +} + +.ant-modal-footer{ + border-top:none; +} + +.ant-modal-close{ + left: 0 !important; + right: unset; +} + +.ant-modal-body{ + padding: 12px; +} + + + +.ant-drawer-header{ + padding: 12px; +} +.ant-drawer-body{ + padding: 12px; +} + +.ant-card-body{ + padding: 12px; +} + +.ant-pagination-prev .ant-pagination-item-link, .ant-pagination-next .ant-pagination-item-link,.ant-pagination-item{ + font-family: var(--font-family-base); + border-radius: var(--border-radius-base) !important; +} + +.ant-input-group > .ant-input-rtl:first-child, .ant-input-group-rtl .ant-input-group-addon:first-child { + border-radius: 0 var(--border-radius-base) var(--border-radius-base) 0; +} + +.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button { + border-radius: var(--border-radius-base) 0 0 var(--border-radius-base); +} + + +.ant-drawer-header{ + @apply px-1 py-3; +} + + + + + diff --git a/src/core/assets/css/dark.less b/src/core/assets/css/dark.less new file mode 100644 index 0000000..e69de29 diff --git a/src/core/assets/css/fonts.less b/src/core/assets/css/fonts.less new file mode 100644 index 0000000..377a88a --- /dev/null +++ b/src/core/assets/css/fonts.less @@ -0,0 +1,68 @@ +@import (less) './var.less'; + +@font-face { + font-family: @prefixCls-font-family; + src: url("../fonts/iranSans/woff2/IRANSansWeb(FaNum).woff2") format("woff2"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: @prefixCls-font-family; + src: url("../fonts/iranSans/woff2/IRANSansWeb(FaNum)_Light.woff2") format("woff2"); + font-weight: 100; + font-style: normal; +} + +@font-face { + font-family: @prefixCls-font-family; + src: url("../fonts/iranSans/woff2/IRANSansWeb(FaNum)_UltraLight.woff2") format("woff2"); + font-weight: 300; + font-style: normal; +} + +@font-face { + font-family: @prefixCls-font-family; + src: url("../fonts/iranSans/woff2/IRANSansWeb(FaNum)_Medium.woff2") format("woff2"); + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: @prefixCls-font-family; + src: url("../fonts/iranSans/woff2/IRANSansWeb(FaNum)_Bold.woff2") format("woff"); + font-weight: 700; + font-style: normal; +} + +/*@font-face { + font-family: @prefixCls-font-family; + src: url("/fonts/iranYekan/woff/iranyekanwebextraboldfanum.woff") format("woff"); + font-weight: 800; + font-style: normal; +}*/ + +@font-face { + font-family: @prefixCls-font-family; + src: url("../fonts/iranSans/woff2/IRANSansWeb(FaNum)_Black.woff2") format("woff"); + font-weight: 900; + font-style: normal; +} + +/* +.font-iran-yekan{ + font-family: 'iran-yekan' !important; +} +*/ +/* +.font-100{ + //font-family:'iran-yekan-thin'; + font-weight:100 ; +} +*/ + + + + + + diff --git a/src/core/assets/css/main.less b/src/core/assets/css/main.less new file mode 100644 index 0000000..99f7561 --- /dev/null +++ b/src/core/assets/css/main.less @@ -0,0 +1,27 @@ +//@import (css) 'ant-design-vue/lib/style/ +//@import '~ant-design-vue/dist/antd.dark.css'; +@import 'ant-design-vue/dist/antd.variable.css'; +@import (less) './scroll.less'; +@import (less) "./fonts.less"; +@import (less) './var.less'; +@import (less) './ant-override.less'; + + +html { + scroll-behavior: smooth; +} + +body { + font-family: @prefixCls-font-family !important; + //background-color: @prefixCls-background-color !important; + //color:#555 !important; +} + +/*pre{ + font-family: @prefixCls-font-family !important; +}*/ + +.en-font { + font-family: Arial !important; + direction: rtl !important; +} \ No newline at end of file diff --git a/src/core/assets/css/scroll.less b/src/core/assets/css/scroll.less new file mode 100644 index 0000000..be40d48 --- /dev/null +++ b/src/core/assets/css/scroll.less @@ -0,0 +1,142 @@ +//ok Code +/*html { + overflow: scroll; + overflow-x: hidden; +}*/ + +.scroll-none{ + &::-webkit-scrollbar { + width: 0; /* Remove scrollbar space */ + background: transparent; /* Optional: just make scrollbar invisible */ + } + /* Optional: show position indicator in red */ + &::-webkit-scrollbar-thumb { + //background: #FF0000; + } +} + + +//scroll style + +::-webkit-scrollbar { + background-color: initial; + //background-color: red; +} + +::-webkit-scrollbar { + width: 0.4rem !important; + height: 0.4rem !important; +} + +::-webkit-scrollbar-thumb { + --tw-bg-opacity: 1 !important; + background-color: rgb(203 213 225/var(--tw-bg-opacity))!important; +} + +::-webkit-scrollbar-thumb { + border-radius: 0.25rem !important; +} + +.scrollbar-track\:\!bg-slate-100::-webkit-scrollbar-track { + --tw-bg-opacity: 1!important; + background-color: rgb(241 245 249/var(--tw-bg-opacity))!important; +} + +::-webkit-scrollbar-track { + border-radius: 0.25rem!important; +} + + + + + + + + +/* +.beauty-scroll{ + scrollbar-color: red green; + scrollbar-width: thin; + -ms-overflow-style:none; + position: relative; + &::-webkit-scrollbar{ + width: 3px; + height: 1px; + } + &::-webkit-scrollbar-thumb { + border-radius: 3px; + background: burlywood; + } + &::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 1px rgba(0,0,0,0); + border-radius: 3px; + background: aqua; + } +} +*/ + +/*&::-webkit-scrollbar{ + width: 3px; + height: 1px; +} +&::-webkit-scrollbar-thumb { + border-radius: 3px; + background: burlywood; +} +&::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 1px rgba(0,0,0,0); + border-radius: 3px; + background: aqua; +}*/ + +/* custom scrollbar */ +/*::-webkit-scrollbar { + width: 17px; +} + +::-webkit-scrollbar-track { + background-color: transparent; +} + +::-webkit-scrollbar-thumb { + background-color: #d6dee1; + border-radius: 20px; + border: 6px solid transparent; + background-clip: content-box; +} + +::-webkit-scrollbar-thumb:hover { + background-color: #a8bbbf; +}*/ + + + +//ok Code +/* +html { + overflow: scroll; + overflow-x: hidden; +} +::-webkit-scrollbar { + width: 0; !* Remove scrollbar space *! + background: transparent; !* Optional: just make scrollbar invisible *! +} +!* Optional: show position indicator in red *! +::-webkit-scrollbar-thumb { + //background: #FF0000; +} +*/ + + +//ok code +/*html { + overflow: scroll; +} +::-webkit-scrollbar { + width: 0px; + background: transparent; !* make scrollbar transparent *! +}*/ + + + + diff --git a/src/core/assets/css/var.less b/src/core/assets/css/var.less new file mode 100644 index 0000000..4862a77 --- /dev/null +++ b/src/core/assets/css/var.less @@ -0,0 +1,71 @@ +//old method +//override ant less variable +//https://github.com/vueComponent/ant-design-vue/blob/main/components/style/themes/default.less +// The prefix to use on all css classes from ant. +/*@prefixCls: 'adminV3'; +!* Theme Config *! +@header-height:56px; +@prefixCls-font-family: 'iran-sans'; +@ant-prefix: @prefixCls; +@primary-color:#0052d9; // #727071; //#abc2f7; //#f4474d; +@border-radius-base: 4px; + +html{ + --ant-primary-color:@primary-color; + --ant-primary-1:#f2f3ff;//#f6f6f4; + --border-radius-base:@border-radius-base; +}*/ + + + +//todo change var +//new method + +@prefixCls: 'hr-tamin'; +/* Theme Config */ +@header-height:56px; +@prefixCls-font-family: 'iran-sans'; +@ant-prefix: @prefixCls; +@primary-color:#2563eb; // #727071; //#abc2f7; //#f4474d; +@second-color: #3b82f6; // #727071; //#abc2f7; //#f4474d; +@third-color: #B2B2B2; // #727071; //#abc2f7; //#f4474d; + +@bg-color-1: #F9FAFB; +@bg-color-2: #F6F6F4; +@border-color-1: #B2B2B2; + +@border-radius-base: 4px; + +html{ + --ant-primary-color:@primary-color; + --ant-primary-color-hover:@second-color; + --ant-primary-color-active:@third-color; + --ant-primary-1:#f2f3ff;//#f6f6f4; + --border-radius-base:@border-radius-base; +} + + + +/* +@ant-prefix: @prefixCls; +@border-radius-base: 8px; // major border radius +@primary-color:#2b55e2; //#abc2f7; //#f4474d; +// Border color +@border-color-base: @gray-100; // base border outline a component +// Form +@form-item-label-font-size: 14px; +//variables +@prefixCls-font-family: 'iran-sans'; +@prefixCls-background-color: #fff; +@gray-50: #f6f7f9; +@gray-100: #e8eaee; +@gray-900: #656f87; +@prefixCls-secondary:#abc2f7; // #0072e9; +@prefixCls-primary-rgba: #fce6e6; +@prefixCls-secondary-rgb: #0072E914; +@prefixCls-tertiary: #feb701; +@prefixCls-tertiary-rgba: #fec94114; +@prefixCls-green: #0f7f36; +@prefixCls-green-rgba: #ecf5ef; +@prefixCls-red: #f4474d; +@prefixCls-red-rgba: #fce6e6;*/ diff --git a/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum).eot b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum).eot new file mode 100644 index 0000000..389ec4b Binary files /dev/null and b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum).eot differ diff --git a/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Black.eot b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Black.eot new file mode 100644 index 0000000..a9c2bef Binary files /dev/null and b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Black.eot differ diff --git a/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Bold.eot b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Bold.eot new file mode 100644 index 0000000..7ce9b1b Binary files /dev/null and b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Bold.eot differ diff --git a/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Light.eot b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Light.eot new file mode 100644 index 0000000..ee72989 Binary files /dev/null and b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Light.eot differ diff --git a/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Medium.eot b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Medium.eot new file mode 100644 index 0000000..3c20c14 Binary files /dev/null and b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_Medium.eot differ diff --git a/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_UltraLight.eot b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_UltraLight.eot new file mode 100644 index 0000000..c789bb3 Binary files /dev/null and b/src/core/assets/fonts/iranSans/eot/IRANSansWeb(FaNum)_UltraLight.eot differ diff --git a/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum).ttf b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum).ttf new file mode 100644 index 0000000..3835c1d Binary files /dev/null and b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum).ttf differ diff --git a/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Black.ttf b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Black.ttf new file mode 100644 index 0000000..42af658 Binary files /dev/null and b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Black.ttf differ diff --git a/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Bold.ttf b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Bold.ttf new file mode 100644 index 0000000..adbf9e4 Binary files /dev/null and b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Bold.ttf differ diff --git a/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Light.ttf b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Light.ttf new file mode 100644 index 0000000..fae92bd Binary files /dev/null and b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Light.ttf differ diff --git a/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Medium.ttf b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Medium.ttf new file mode 100644 index 0000000..9622928 Binary files /dev/null and b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_Medium.ttf differ diff --git a/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_UltraLight.ttf b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_UltraLight.ttf new file mode 100644 index 0000000..59dfb58 Binary files /dev/null and b/src/core/assets/fonts/iranSans/ttf/IRANSansWeb(FaNum)_UltraLight.ttf differ diff --git a/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum).woff b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum).woff new file mode 100644 index 0000000..1e6eb36 Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum).woff differ diff --git a/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Black.woff b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Black.woff new file mode 100644 index 0000000..019c556 Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Black.woff differ diff --git a/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Bold.woff b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Bold.woff new file mode 100644 index 0000000..7008b60 Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Bold.woff differ diff --git a/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Light.woff b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Light.woff new file mode 100644 index 0000000..ecea926 Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Light.woff differ diff --git a/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Medium.woff b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Medium.woff new file mode 100644 index 0000000..587883a Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_Medium.woff differ diff --git a/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_UltraLight.woff b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_UltraLight.woff new file mode 100644 index 0000000..c815b45 Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff/IRANSansWeb(FaNum)_UltraLight.woff differ diff --git a/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum).woff2 b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum).woff2 new file mode 100644 index 0000000..c3dcbab Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum).woff2 differ diff --git a/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Black.woff2 b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Black.woff2 new file mode 100644 index 0000000..fc008ef Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Black.woff2 differ diff --git a/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Bold.woff2 b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Bold.woff2 new file mode 100644 index 0000000..69f7c66 Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Bold.woff2 differ diff --git a/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Light.woff2 b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Light.woff2 new file mode 100644 index 0000000..40f5b09 Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Light.woff2 differ diff --git a/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Medium.woff2 b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Medium.woff2 new file mode 100644 index 0000000..8273b0a Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_Medium.woff2 differ diff --git a/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_UltraLight.woff2 b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_UltraLight.woff2 new file mode 100644 index 0000000..8b77d17 Binary files /dev/null and b/src/core/assets/fonts/iranSans/woff2/IRANSansWeb(FaNum)_UltraLight.woff2 differ diff --git a/src/core/assets/icons/icon.json b/src/core/assets/icons/icon.json new file mode 100644 index 0000000..e1050d9 --- /dev/null +++ b/src/core/assets/icons/icon.json @@ -0,0 +1,1022 @@ +{ + "vuesax-linear:24-support": "\n\n\n\n\n", + "vuesax-linear:3d-cube-scan": "\n\n\n\n\n\n\n", + "vuesax-linear:3d-rotate": "\n\n\n\n\n\n\n", + "vuesax-linear:3d-square": "\n\n\n\n\n\n", + "vuesax-linear:3dcube": "\n\n\n\n\n", + "vuesax-linear:3full": "\n\n\n\n\n\n", + "vuesax-linear:3square": "\n\n\n\n\n", + "vuesax-linear:aave-(aave)": "\n\n\n\n\n", + "vuesax-linear:activity": "\n\n\n\n", + "vuesax-linear:add-circle": "\n\n\n\n\n", + "vuesax-linear:add-square": "\n\n\n\n\n", + "vuesax-linear:add": "\n\n\n\n", + "vuesax-linear:additem": "\n\n\n\n\n\n", + "vuesax-linear:airdrop": "\n\n\n\n\n\n", + "vuesax-linear:airplane-square": "\n\n\n\n", + "vuesax-linear:airplane": "\n\n\n", + "vuesax-linear:airpod": "\n\n\n\n\n\n", + "vuesax-linear:airpods": "\n\n\n\n\n\n\n\n", + "vuesax-linear:alarm": "\n\n\n\n\n\n\n", + "vuesax-linear:align-bottom": "\n\n\n\n\n", + "vuesax-linear:align-horizontally": "\n\n\n\n\n\n\n", + "vuesax-linear:align-left": "\n\n\n\n\n", + "vuesax-linear:align-right": "\n\n\n\n\n", + "vuesax-linear:align-vertically": "\n\n\n\n\n\n\n", + "vuesax-linear:android": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:ankr-(ankr)": "\n\n\n\n\n\n", + "vuesax-linear:apple": "\n\n\n", + "vuesax-linear:aquarius": "\n\n\n\n\n", + "vuesax-linear:archive-1": "\n\n\n\n\n", + "vuesax-linear:archive-add": "\n\n\n\n\n", + "vuesax-linear:archive-book": "\n\n\n\n\n\n", + "vuesax-linear:archive-minus": "\n\n\n\n", + "vuesax-linear:archive-slash": "\n\n\n\n\n", + "vuesax-linear:archive-tick": "\n\n\n\n", + "vuesax-linear:archive": "\n\n\n\n\n\n\n\n", + "vuesax-linear:arrange-circle-2": "\n\n\n\n\n\n\n", + "vuesax-linear:arrange-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:arrange-square-2": "\n\n\n\n\n\n\n", + "vuesax-linear:arrange-square": "\n\n\n\n\n\n\n", + "vuesax-linear:arrow-2": "\n\n\n\n\n\n", + "vuesax-linear:arrow-3": "\n\n\n\n\n\n", + "vuesax-linear:arrow-bottom": "\n\n\n", + "vuesax-linear:arrow-circle-down": "\n\n\n\n", + "vuesax-linear:arrow-circle-left": "\n\n\n\n", + "vuesax-linear:arrow-circle-right": "\n\n\n\n", + "vuesax-linear:arrow-down-1": "\n\n\n\n", + "vuesax-linear:arrow-down-2": "\n\n\n\n\n", + "vuesax-linear:arrow-down": "\n\n\n", + "vuesax-linear:arrow-left-1": "\n\n\n", + "vuesax-linear:arrow-left-2": "\n\n\n\n\n", + "vuesax-linear:arrow-left-3": "\n\n\n", + "vuesax-linear:arrow-left": "\n\n\n\n", + "vuesax-linear:arrow-right-1": "\n\n\n", + "vuesax-linear:arrow-right-2": "\n\n\n\n\n", + "vuesax-linear:arrow-right-3": "\n\n\n", + "vuesax-linear:arrow-right": "\n\n\n\n", + "vuesax-linear:arrow-square-down": "\n\n\n\n", + "vuesax-linear:arrow-square-left": "\n\n\n\n", + "vuesax-linear:arrow-square-right": "\n\n\n\n", + "vuesax-linear:arrow-square-up": "\n\n\n\n", + "vuesax-linear:arrow-square": "\n\n\n\n\n\n\n", + "vuesax-linear:arrow-swap-horizontal": "\n\n\n\n\n\n", + "vuesax-linear:arrow-up-1": "\n\n\n", + "vuesax-linear:arrow-up-2": "\n\n\n\n\n", + "vuesax-linear:arrow-up-3": "\n\n\n", + "vuesax-linear:arrow-up": "\n\n\n\n", + "vuesax-linear:arrow": "\n\n\n\n\n\n\n\n", + "vuesax-linear:attach-circle": "\n\n\n\n", + "vuesax-linear:attach-square": "\n\n\n\n", + "vuesax-linear:audio-square": "\n\n\n\n\n\n", + "vuesax-linear:augur-(rep)": "\n\n\n\n\n", + "vuesax-linear:autobrightness": "\n\n\n\n\n", + "vuesax-linear:autonio-(niox)": "\n\n\n\n\n\n", + "vuesax-linear:avalanche-(avax)": "\n\n\n\n\n", + "vuesax-linear:award": "\n\n\n\n\n", + "vuesax-linear:back-square": "\n\n\n\n\n", + "vuesax-linear:backward-10-seconds": "\n\n\n\n\n\n", + "vuesax-linear:backward-15-seconds": "\n\n\n\n\n\n", + "vuesax-linear:backward-5-seconds": "\n\n\n\n\n", + "vuesax-linear:backward-item-1": "\n\n\n\n\n", + "vuesax-linear:backward-item": "\n\n\n\n\n", + "vuesax-linear:backward": "\n\n\n\n", + "vuesax-linear:bag-2": "\n\n\n\n\n\n", + "vuesax-linear:bag-cross-1": "\n\n\n\n\n\n\n", + "vuesax-linear:bag-cross": "\n\n\n\n\n\n\n\n", + "vuesax-linear:bag-happy": "\n\n\n\n\n\n\n", + "vuesax-linear:bag-tick-2": "\n\n\n\n\n\n", + "vuesax-linear:bag-tick": "\n\n\n\n\n\n\n", + "vuesax-linear:bag-timer": "\n\n\n\n\n\n", + "vuesax-linear:bag": "\n\n\n\n\n\n\n\n", + "vuesax-linear:bank": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:barcode": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:battery-3full": "\n\n\n\n\n\n", + "vuesax-linear:battery-charging": "\n\n\n\n\n\n", + "vuesax-linear:battery-disable": "\n\n\n\n\n\n", + "vuesax-linear:battery-empty-1": "\n\n\n\n\n", + "vuesax-linear:battery-empty": "\n\n\n\n", + "vuesax-linear:battery-full": "\n\n\n\n\n\n\n", + "vuesax-linear:be": "\n\n\n\n\n", + "vuesax-linear:bezier-1": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:bezier": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:bill": "\n\n\n\n\n\n", + "vuesax-linear:binance-coin-(bnb)": "\n\n\n\n\n\n\n", + "vuesax-linear:binance-usd-(busd)": "\n\n\n\n\n\n", + "vuesax-linear:bitcoin-(btc)": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:bitcoin-card": "\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:bitcoin-convert": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:bitcoin-refresh": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:blend-2": "\n\n\n\n\n\n\n", + "vuesax-linear:blend": "\n\n\n\n", + "vuesax-linear:blogger": "\n\n\n\n\n\n", + "vuesax-linear:bluetooth-2": "\n\n\n\n\n", + "vuesax-linear:bluetooth-circle": "\n\n\n\n", + "vuesax-linear:bluetooth-rectangle": "\n\n\n\n", + "vuesax-linear:bluetooth": "\n\n\n", + "vuesax-linear:blur-1": "\n\n\n\n\n\n\n", + "vuesax-linear:blur": "\n\n\n\n\n\n\n", + "vuesax-linear:book-1": "\n\n\n\n\n\n", + "vuesax-linear:book-saved": "\n\n\n\n\n", + "vuesax-linear:book-square": "\n\n\n\n\n", + "vuesax-linear:book": "\n\n\n\n\n\n", + "vuesax-linear:bookmark-2": "\n\n\n\n", + "vuesax-linear:bookmark": "\n\n\n\n\n\n", + "vuesax-linear:bootsrap": "\n\n\n\n", + "vuesax-linear:box-1": "\n\n\n\n\n", + "vuesax-linear:box-2": "\n\n\n", + "vuesax-linear:box-add": "\n\n\n\n\n\n\n\n", + "vuesax-linear:box-remove": "\n\n\n\n\n\n\n\n", + "vuesax-linear:box-search": "\n\n\n\n\n\n\n", + "vuesax-linear:box-tick": "\n\n\n\n\n\n\n", + "vuesax-linear:box-time": "\n\n\n\n\n\n\n", + "vuesax-linear:box": "\n\n\n\n\n\n", + "vuesax-linear:briefcase": "\n\n\n\n\n\n\n", + "vuesax-linear:brifecase-cross": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:brifecase-tick": "\n\n\n\n\n\n\n\n", + "vuesax-linear:brifecase-timer": "\n\n\n\n\n\n\n\n", + "vuesax-linear:broom": "\n\n\n\n\n\n\n\n", + "vuesax-linear:brush-1": "\n\n\n\n\n\n", + "vuesax-linear:brush-2": "\n\n\n\n\n\n", + "vuesax-linear:brush-3": "\n\n\n\n\n\n\n", + "vuesax-linear:brush": "\n\n\n\n\n", + "vuesax-linear:bubble": "\n\n\n\n\n", + "vuesax-linear:bucket-circle-1": "\n\n\n\n\n\n\n", + "vuesax-linear:bucket-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:bucket-square-1": "\n\n\n\n\n\n\n", + "vuesax-linear:bucket-square": "\n\n\n\n\n\n\n", + "vuesax-linear:building-3": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:building-4": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:building": "\n\n\n\n\n\n\n\n", + "vuesax-linear:buildings-2": "\n\n\n\n\n\n\n\n", + "vuesax-linear:buildings": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:buliding": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:bus": "\n\n\n\n\n\n\n", + "vuesax-linear:buy-crypto": "\n\n\n\n\n", + "vuesax-linear:cake": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:calculator": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:calendar-1": "\n\n\n\n\n\n\n", + "vuesax-linear:calendar-2": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:calendar-add": "\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:calendar-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:calendar-edit": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:calendar-remove": "\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:calendar-search": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:calendar-tick": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:calendar": "\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:call-add": "\n\n\n\n\n", + "vuesax-linear:call-calling": "\n\n\n\n\n", + "vuesax-linear:call-incoming": "\n\n\n\n", + "vuesax-linear:call-minus": "\n\n\n\n", + "vuesax-linear:call-outgoing": "\n\n\n\n", + "vuesax-linear:call-received": "\n\n\n\n", + "vuesax-linear:call-remove": "\n\n\n\n\n", + "vuesax-linear:call-slash": "\n\n\n\n\n", + "vuesax-linear:call": "\n\n\n", + "vuesax-linear:camera-slash": "\n\n\n\n\n\n\n", + "vuesax-linear:camera": "\n\n\n\n\n", + "vuesax-linear:candle-2": "\n\n\n\n\n\n\n\n", + "vuesax-linear:candle": "\n\n\n\n\n\n\n\n", + "vuesax-linear:car": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:card-add": "\n\n\n\n\n\n\n\n", + "vuesax-linear:card-coin": "\n\n\n\n\n\n\n", + "vuesax-linear:card-edit": "\n\n\n\n\n\n\n\n", + "vuesax-linear:card-pos": "\n\n\n\n\n\n\n", + "vuesax-linear:card-receive": "\n\n\n\n\n\n\n\n", + "vuesax-linear:card-remove-1": "\n\n\n\n\n\n\n\n", + "vuesax-linear:card-remove": "\n\n\n\n\n\n\n\n", + "vuesax-linear:card-send": "\n\n\n\n\n\n\n\n", + "vuesax-linear:card-slash": "\n\n\n\n\n\n\n\n", + "vuesax-linear:card-tick-1": "\n\n\n\n\n\n\n", + "vuesax-linear:card-tick": "\n\n\n\n\n\n\n", + "vuesax-linear:card": "\n\n\n\n\n\n", + "vuesax-linear:cardano-(ada)": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:cards": "\n\n\n\n\n\n\n", + "vuesax-linear:category-2": "\n\n\n\n\n\n", + "vuesax-linear:category": "\n\n\n\n\n\n", + "vuesax-linear:cd": "\n\n\n\n", + "vuesax-linear:celo-(celo)": "\n\n\n\n", + "vuesax-linear:celsius-(cel)-": "\n\n\n\n\n", + "vuesax-linear:chainlink-(link)": "\n\n\n", + "vuesax-linear:chart-1": "\n\n\n\n\n\n", + "vuesax-linear:chart-2": "\n\n\n\n\n", + "vuesax-linear:chart-21": "\n\n\n\n\n\n", + "vuesax-linear:chart-3": "\n\n\n\n\n", + "vuesax-linear:chart-square": "\n\n\n\n\n\n", + "vuesax-linear:chart-success": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:chart": "\n\n\n\n\n\n", + "vuesax-linear:check": "\n\n\n\n\n\n", + "vuesax-linear:chrome": "\n\n\n\n\n\n\n", + "vuesax-linear:civic-(cvc)": "\n\n\n\n", + "vuesax-linear:clipboard-close": "\n\n\n\n\n\n", + "vuesax-linear:clipboard-export": "\n\n\n\n\n\n\n", + "vuesax-linear:clipboard-import": "\n\n\n\n\n\n\n", + "vuesax-linear:clipboard-text": "\n\n\n\n\n\n", + "vuesax-linear:clipboard-tick": "\n\n\n\n\n", + "vuesax-linear:clipboard": "\n\n\n\n\n", + "vuesax-linear:clock-1": "\n\n\n\n", + "vuesax-linear:clock": "\n\n\n\n\n\n", + "vuesax-linear:close-circle": "\n\n\n\n\n", + "vuesax-linear:close-square": "\n\n\n\n\n", + "vuesax-linear:cloud-add": "\n\n\n\n\n\n", + "vuesax-linear:cloud-change": "\n\n\n\n\n", + "vuesax-linear:cloud-connection": "\n\n\n\n\n\n\n", + "vuesax-linear:cloud-cross": "\n\n\n\n\n\n\n", + "vuesax-linear:cloud-drizzle": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:cloud-fog": "\n\n\n\n\n\n\n", + "vuesax-linear:cloud-lightning": "\n\n\n\n\n\n", + "vuesax-linear:cloud-minus": "\n\n\n\n\n\n", + "vuesax-linear:cloud-notif": "\n\n\n\n\n", + "vuesax-linear:cloud-plus": "\n\n\n\n\n\n\n", + "vuesax-linear:cloud-remove": "\n\n\n\n\n\n\n", + "vuesax-linear:cloud-snow": "\n\n\n\n\n\n\n\n", + "vuesax-linear:cloud-sunny": "\n\n\n\n\n\n", + "vuesax-linear:cloud": "\n\n\n\n", + "vuesax-linear:code-1": "\n\n\n\n\n", + "vuesax-linear:code-circle": "\n\n\n\n\n\n", + "vuesax-linear:code": "\n\n\n\n\n\n", + "vuesax-linear:coffee": "\n\n\n\n\n\n\n\n", + "vuesax-linear:coin-1": "\n\n\n\n\n\n\n", + "vuesax-linear:coin": "\n\n\n\n\n", + "vuesax-linear:color-swatch": "\n\n\n\n\n\n\n", + "vuesax-linear:colorfilter": "\n\n\n\n\n", + "vuesax-linear:colors-square-1": "\n\n\n\n\n\n", + "vuesax-linear:colors-square": "\n\n\n\n\n\n", + "vuesax-linear:command-square": "\n\n\n\n\n\n\n\n", + "vuesax-linear:command": "\n\n\n\n\n\n\n", + "vuesax-linear:component-1": "\n\n\n", + "vuesax-linear:component": "\n\n\n", + "vuesax-linear:computing": "\n\n\n\n\n\n\n", + "vuesax-linear:convert-3d-cube": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:convert": "\n\n\n\n\n", + "vuesax-linear:convertshape-2": "\n\n\n\n\n\n", + "vuesax-linear:convertshape": "\n\n\n\n\n\n", + "vuesax-linear:copy-success": "\n\n\n\n\n", + "vuesax-linear:copy": "\n\n\n\n", + "vuesax-linear:copyright": "\n\n\n\n", + "vuesax-linear:courthouse": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:cpu-charge": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:cpu-setting": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:cpu": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:creative-commons": "\n\n\n\n\n", + "vuesax-linear:crop": "\n\n\n\n\n\n\n", + "vuesax-linear:crown-1": "\n\n\n\n\n", + "vuesax-linear:crown": "\n\n\n", + "vuesax-linear:cup": "\n\n\n\n\n\n\n\n", + "vuesax-linear:dai-(dai)": "\n\n\n\n\n\n", + "vuesax-linear:danger": "\n\n\n\n\n", + "vuesax-linear:dash-(dash)": "\n\n\n\n", + "vuesax-linear:data-2": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:data": "\n\n\n\n\n\n\n\n", + "vuesax-linear:decred-(dcr)": "\n\n\n\n", + "vuesax-linear:dent-(dent)": "\n\n\n\n\n\n", + "vuesax-linear:designtools": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:device-message": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:devices-1": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:devices": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:diagram": "\n\n\n\n", + "vuesax-linear:diamonds": "\n\n\n\n", + "vuesax-linear:direct-down": "\n\n\n", + "vuesax-linear:direct-inbox": "\n\n\n\n\n\n", + "vuesax-linear:direct-left": "\n\n\n", + "vuesax-linear:direct-normal": "\n\n\n\n", + "vuesax-linear:direct-notification": "\n\n\n\n\n", + "vuesax-linear:direct-right": "\n\n\n", + "vuesax-linear:direct-send": "\n\n\n\n\n\n", + "vuesax-linear:direct-up": "\n\n\n", + "vuesax-linear:direct": "\n\n\n\n\n\n", + "vuesax-linear:directbox-default": "\n\n\n\n", + "vuesax-linear:directbox-notif": "\n\n\n\n\n\n", + "vuesax-linear:directbox-receive": "\n\n\n\n\n\n\n", + "vuesax-linear:directbox-send": "\n\n\n\n\n\n\n", + "vuesax-linear:discount-circle": "\n\n\n\n\n\n", + "vuesax-linear:discount-shape": "\n\n\n\n\n\n", + "vuesax-linear:discover-1": "\n\n\n\n", + "vuesax-linear:discover": "\n\n\n\n", + "vuesax-linear:dislike": "\n\n\n\n", + "vuesax-linear:document-1": "\n\n\n\n", + "vuesax-linear:document-cloud": "\n\n\n\n\n\n", + "vuesax-linear:document-code-2": "\n\n\n\n\n\n", + "vuesax-linear:document-code": "\n\n\n\n\n\n", + "vuesax-linear:document-copy": "\n\n\n\n\n\n\n\n", + "vuesax-linear:document-download": "\n\n\n\n\n\n", + "vuesax-linear:document-favorite": "\n\n\n\n\n", + "vuesax-linear:document-filter": "\n\n\n\n\n\n", + "vuesax-linear:document-forward": "\n\n\n\n\n", + "vuesax-linear:document-like": "\n\n\n\n\n", + "vuesax-linear:document-normal": "\n\n\n\n", + "vuesax-linear:document-previous": "\n\n\n\n\n\n", + "vuesax-linear:document-sketch": "\n\n\n\n\n", + "vuesax-linear:document-text-1": "\n\n\n\n\n\n", + "vuesax-linear:document-text": "\n\n\n\n\n\n", + "vuesax-linear:document-upload": "\n\n\n\n\n\n", + "vuesax-linear:document": "\n\n\n\n\n", + "vuesax-linear:dollar-circle": "\n\n\n\n\n", + "vuesax-linear:dollar-square": "\n\n\n\n\n", + "vuesax-linear:dribbble": "\n\n\n\n\n\n", + "vuesax-linear:driver-2": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:driver-refresh": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:driver": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:driving": "\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:drop": "\n\n\n", + "vuesax-linear:dropbox": "\n\n\n\n\n\n\n", + "vuesax-linear:edit-2": "\n\n\n\n\n", + "vuesax-linear:edit": "\n\n\n\n\n", + "vuesax-linear:educare-(ekt)": "\n\n\n\n\n\n", + "vuesax-linear:electricity": "\n\n\n\n\n\n", + "vuesax-linear:element-1": "\n\n\n\n\n", + "vuesax-linear:element-2": "\n\n\n\n\n", + "vuesax-linear:element-3": "\n\n\n\n\n\n", + "vuesax-linear:element-4": "\n\n\n\n\n\n", + "vuesax-linear:element-equal": "\n\n\n\n\n\n\n", + "vuesax-linear:element-plus": "\n\n\n\n\n\n\n", + "vuesax-linear:emercoin-(emc)": "\n\n\n\n\n", + "vuesax-linear:emoji-happy": "\n\n\n\n\n\n", + "vuesax-linear:emoji-normal": "\n\n\n\n\n\n", + "vuesax-linear:emoji-sad": "\n\n\n\n\n\n", + "vuesax-linear:empty-wallet-add": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:empty-wallet-change": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:empty-wallet-remove": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:empty-wallet-tick": "\n\n\n\n\n\n\n\n", + "vuesax-linear:empty-wallet-time": "\n\n\n\n\n\n\n\n", + "vuesax-linear:empty-wallet": "\n\n\n\n\n\n", + "vuesax-linear:enjin-coin-(enj)": "\n\n\n\n\n", + "vuesax-linear:eos-(eos)": "\n\n\n\n", + "vuesax-linear:eraser-1": "\n\n\n\n\n\n\n", + "vuesax-linear:eraser-2": "\n\n\n\n\n\n\n", + "vuesax-linear:eraser": "\n\n\n\n\n", + "vuesax-linear:ethereum-(eth)": "\n\n\n\n\n\n", + "vuesax-linear:ethereum-classic-(etc)": "\n\n\n\n\n", + "vuesax-linear:export-1": "\n\n\n\n\n", + "vuesax-linear:export-2": "\n\n\n\n\n", + "vuesax-linear:export-3": "\n\n\n\n\n", + "vuesax-linear:export": "\n\n\n\n\n", + "vuesax-linear:external-drive": "\n\n\n\n\n\n\n\n", + "vuesax-linear:eye-slash": "\n\n\n\n\n\n\n\n", + "vuesax-linear:eye": "\n\n\n\n", + "vuesax-linear:facebook": "\n\n\n\n", + "vuesax-linear:fatrows": "\n\n\n\n", + "vuesax-linear:favorite-chart": "\n\n\n\n\n", + "vuesax-linear:figma-1": "\n\n\n\n\n\n\n\n", + "vuesax-linear:figma": "\n\n\n\n\n\n\n", + "vuesax-linear:filter-add": "\n\n\n\n\n\n", + "vuesax-linear:filter-edit": "\n\n\n\n\n", + "vuesax-linear:filter-remove": "\n\n\n\n\n\n\n", + "vuesax-linear:filter-search": "\n\n\n\n\n", + "vuesax-linear:filter-square": "\n\n\n\n", + "vuesax-linear:filter-tick": "\n\n\n\n\n", + "vuesax-linear:filter": "\n\n\n\n", + "vuesax-linear:finger-cricle": "\n\n\n\n\n", + "vuesax-linear:finger-scan": "\n\n\n\n\n\n\n\n", + "vuesax-linear:firstline": "\n\n\n\n\n\n\n", + "vuesax-linear:flag-2": "\n\n\n\n", + "vuesax-linear:flag": "\n\n\n\n", + "vuesax-linear:flash-1": "\n\n\n", + "vuesax-linear:flash-circle-1": "\n\n\n\n", + "vuesax-linear:flash-circle-2": "\n\n\n\n", + "vuesax-linear:flash-circle": "\n\n\n\n", + "vuesax-linear:flash-slash": "\n\n\n\n\n", + "vuesax-linear:flash": "\n\n\n\n\n\n", + "vuesax-linear:folder-2": "\n\n\n\n", + "vuesax-linear:folder-add": "\n\n\n\n\n", + "vuesax-linear:folder-cloud": "\n\n\n\n", + "vuesax-linear:folder-connection": "\n\n\n\n\n\n\n", + "vuesax-linear:folder-cross": "\n\n\n\n\n", + "vuesax-linear:folder-favorite": "\n\n\n\n", + "vuesax-linear:folder-minus": "\n\n\n\n", + "vuesax-linear:folder-open": "\n\n\n\n\n", + "vuesax-linear:folder": "\n\n\n", + "vuesax-linear:format-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:format-square": "\n\n\n\n\n\n\n", + "vuesax-linear:forward-10-seconds": "\n\n\n\n\n\n", + "vuesax-linear:forward-15-seconds": "\n\n\n\n\n\n", + "vuesax-linear:forward-5-seconds": "\n\n\n\n\n", + "vuesax-linear:forward-item-1": "\n\n\n\n\n", + "vuesax-linear:forward-item": "\n\n\n\n\n", + "vuesax-linear:forward-square": "\n\n\n\n\n", + "vuesax-linear:forward": "\n\n\n\n", + "vuesax-linear:frame-1": "\n\n\n\n\n\n", + "vuesax-linear:frame-2": "\n\n\n\n\n", + "vuesax-linear:frame-3": "\n\n\n\n\n\n\n\n", + "vuesax-linear:frame-4": "\n\n\n\n\n", + "vuesax-linear:frame-5": "\n\n\n\n\n", + "vuesax-linear:frame": "\n\n\n\n", + "vuesax-linear:framer": "\n\n\n\n", + "vuesax-linear:ftx-token-(ftt)": "\n\n\n\n\n\n", + "vuesax-linear:gallery-add": "\n\n\n\n\n\n\n", + "vuesax-linear:gallery-edit": "\n\n\n\n\n\n\n", + "vuesax-linear:gallery-export": "\n\n\n\n\n\n\n", + "vuesax-linear:gallery-favorite": "\n\n\n\n\n\n", + "vuesax-linear:gallery-import": "\n\n\n\n\n\n\n", + "vuesax-linear:gallery-remove": "\n\n\n\n\n\n\n", + "vuesax-linear:gallery-slash": "\n\n\n\n\n\n\n", + "vuesax-linear:gallery-tick": "\n\n\n\n\n\n", + "vuesax-linear:gallery": "\n\n\n\n\n", + "vuesax-linear:game": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:gameboy": "\n\n\n\n\n\n\n\n", + "vuesax-linear:gas-station": "\n\n\n\n\n\n\n", + "vuesax-linear:gemini-2": "\n\n\n\n\n\n\n\n", + "vuesax-linear:gemini": "\n\n\n\n\n\n", + "vuesax-linear:ghost": "\n\n\n\n\n", + "vuesax-linear:gift": "\n\n\n\n\n\n\n", + "vuesax-linear:glass-1": "\n\n\n\n\n\n\n", + "vuesax-linear:glass": "\n\n\n\n", + "vuesax-linear:global-edit": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:global-refresh": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:global-search": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:global": "\n\n\n\n\n\n\n", + "vuesax-linear:google-1": "\n\n\n", + "vuesax-linear:google-play": "\n\n\n\n\n\n", + "vuesax-linear:google": "\n\n\n\n\n\n", + "vuesax-linear:gps-slash": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:gps": "\n\n\n\n\n\n\n\n", + "vuesax-linear:grammerly": "\n\n\n\n", + "vuesax-linear:graph": "\n\n\n\n", + "vuesax-linear:grid-1": "\n\n\n\n\n\n\n", + "vuesax-linear:grid-2": "\n\n\n\n\n", + "vuesax-linear:grid-3": "\n\n\n\n\n\n", + "vuesax-linear:grid-4": "\n\n\n\n", + "vuesax-linear:grid-5": "\n\n\n\n\n", + "vuesax-linear:grid-6": "\n\n\n\n\n\n", + "vuesax-linear:grid-7": "\n\n\n\n\n", + "vuesax-linear:grid-8": "\n\n\n\n\n\n\n\n", + "vuesax-linear:grid-9": "\n\n\n\n", + "vuesax-linear:grid-edit": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:grid-eraser": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:grid-lock": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:group-1": "\n\n\n\n\n\n\n\n", + "vuesax-linear:group-10": "\n\n\n\n", + "vuesax-linear:group-11": "\n\n\n\n\n\n\n", + "vuesax-linear:group-2": "\n\n\n\n\n\n\n", + "vuesax-linear:group-3": "\n\n\n\n", + "vuesax-linear:group-4": "\n\n\n\n\n\n\n", + "vuesax-linear:group-5": "\n\n\n\n", + "vuesax-linear:group-6": "\n\n\n\n\n\n\n", + "vuesax-linear:group-7": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:group-8": "\n\n\n\n", + "vuesax-linear:group-9": "\n\n\n\n\n", + "vuesax-linear:group": "\n\n\n\n\n\n", + "vuesax-linear:happyemoji": "\n\n\n\n", + "vuesax-linear:harmony-(one)": "\n\n\n\n\n\n\n", + "vuesax-linear:hashtag-1": "\n\n\n\n\n\n", + "vuesax-linear:hashtag-down": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:hashtag-up": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:hashtag": "\n\n\n\n\n\n", + "vuesax-linear:headphone": "\n\n\n", + "vuesax-linear:headphones": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:health": "\n\n\n\n", + "vuesax-linear:heart-add": "\n\n\n\n\n\n", + "vuesax-linear:heart-circle": "\n\n\n\n", + "vuesax-linear:heart-edit": "\n\n\n\n\n", + "vuesax-linear:heart-remove": "\n\n\n\n\n\n", + "vuesax-linear:heart-search": "\n\n\n\n\n", + "vuesax-linear:heart-slash": "\n\n\n\n\n", + "vuesax-linear:heart-tick": "\n\n\n\n\n", + "vuesax-linear:heart": "\n\n\n", + "vuesax-linear:hedera-hashgraph-(hbar)": "\n\n\n\n\n\n\n", + "vuesax-linear:hex-(hex)": "\n\n\n\n\n", + "vuesax-linear:hierarchy-2": "\n\n\n\n\n\n\n", + "vuesax-linear:hierarchy-3": "\n\n\n\n\n\n", + "vuesax-linear:hierarchy-square-2": "\n\n\n\n\n\n\n\n", + "vuesax-linear:hierarchy-square-3": "\n\n\n\n\n\n\n\n", + "vuesax-linear:hierarchy-square": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:hierarchy": "\n\n\n\n\n\n\n", + "vuesax-linear:home-2": "\n\n\n\n", + "vuesax-linear:home-hashtag": "\n\n\n\n\n\n", + "vuesax-linear:home-trend-down": "\n\n\n\n\n", + "vuesax-linear:home-trend-up": "\n\n\n\n\n", + "vuesax-linear:home-wifi": "\n\n\n\n\n\n", + "vuesax-linear:home": "\n\n\n\n", + "vuesax-linear:hospital": "\n\n\n\n\n\n\n", + "vuesax-linear:house-2": "\n\n\n\n\n\n\n", + "vuesax-linear:house": "\n\n\n\n\n\n\n\n", + "vuesax-linear:html-3": "\n\n\n\n\n", + "vuesax-linear:html-5": "\n\n\n\n", + "vuesax-linear:huobi-token-(ht)": "\n\n\n\n", + "vuesax-linear:icon-(icx)": "\n\n\n\n\n\n", + "vuesax-linear:illustrator": "\n\n\n\n\n\n\n", + "vuesax-linear:image": "\n\n\n\n", + "vuesax-linear:import-1": "\n\n\n\n\n", + "vuesax-linear:import-2": "\n\n\n\n\n", + "vuesax-linear:import": "\n\n\n\n\n", + "vuesax-linear:info-circle": "\n\n\n\n\n", + "vuesax-linear:information": "\n\n\n\n\n", + "vuesax-linear:instagram": "\n\n\n\n\n", + "vuesax-linear:iost-(iost)": "\n\n\n\n\n\n", + "vuesax-linear:java-script": "\n\n\n\n\n", + "vuesax-linear:js": "\n\n\n\n", + "vuesax-linear:judge": "\n\n\n\n\n\n", + "vuesax-linear:kanban": "\n\n\n\n", + "vuesax-linear:key-square": "\n\n\n\n\n\n", + "vuesax-linear:key": "\n\n\n\n\n", + "vuesax-linear:keyboard-open": "\n\n\n\n\n\n\n\n", + "vuesax-linear:keyboard": "\n\n\n\n\n\n\n", + "vuesax-linear:kyber-network-(knc)": "\n\n\n\n\n", + "vuesax-linear:lamp-1": "\n\n\n\n\n", + "vuesax-linear:lamp-charge": "\n\n\n\n\n", + "vuesax-linear:lamp-on": "\n\n\n\n", + "vuesax-linear:lamp-slash": "\n\n\n\n\n\n", + "vuesax-linear:lamp": "\n\n\n\n\n", + "vuesax-linear:language-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:language-square": "\n\n\n\n\n\n\n", + "vuesax-linear:layer": "\n\n\n\n\n", + "vuesax-linear:level": "\n\n\n\n\n", + "vuesax-linear:lifebuoy": "\n\n\n\n\n\n\n\n", + "vuesax-linear:like-1": "\n\n\n\n", + "vuesax-linear:like-dislike": "\n\n\n\n\n\n", + "vuesax-linear:like-shapes": "\n\n\n\n\n", + "vuesax-linear:like-tag": "\n\n\n\n\n", + "vuesax-linear:like": "\n\n\n\n", + "vuesax-linear:link-1": "\n\n\n\n\n", + "vuesax-linear:link-2": "\n\n\n\n", + "vuesax-linear:link-21": "\n\n\n\n", + "vuesax-linear:link-circle": "\n\n\n\n\n", + "vuesax-linear:link-square": "\n\n\n\n\n", + "vuesax-linear:link": "\n\n\n\n", + "vuesax-linear:litecoin(ltc)": "\n\n\n\n\n", + "vuesax-linear:location-add": "\n\n\n\n\n", + "vuesax-linear:location-cross": "\n\n\n\n\n", + "vuesax-linear:location-minus": "\n\n\n\n", + "vuesax-linear:location-slash": "\n\n\n\n\n\n", + "vuesax-linear:location-tick": "\n\n\n\n", + "vuesax-linear:location": "\n\n\n\n", + "vuesax-linear:lock-1": "\n\n\n\n\n", + "vuesax-linear:lock-circle": "\n\n\n\n\n\n", + "vuesax-linear:lock-slash": "\n\n\n\n\n\n", + "vuesax-linear:lock": "\n\n\n\n\n\n\n", + "vuesax-linear:login-1": "\n\n\n\n\n", + "vuesax-linear:login": "\n\n\n\n\n", + "vuesax-linear:logout-1": "\n\n\n\n\n", + "vuesax-linear:logout": "\n\n\n\n\n", + "vuesax-linear:lovely": "\n\n\n\n", + "vuesax-linear:magic-star": "\n\n\n\n", + "vuesax-linear:magicpen": "\n\n\n\n\n\n\n", + "vuesax-linear:main-component-1": "\n\n\n\n\n", + "vuesax-linear:main-component": "\n\n\n\n\n", + "vuesax-linear:maker-(mkr)": "\n\n\n\n\n", + "vuesax-linear:man": "\n\n\n\n\n", + "vuesax-linear:map-1": "\n\n\n\n\n", + "vuesax-linear:map": "\n\n\n\n\n\n\n", + "vuesax-linear:mask-1": "\n\n\n\n\n\n\n", + "vuesax-linear:mask-2": "\n\n\n\n\n\n\n", + "vuesax-linear:mask-3": "\n\n\n\n", + "vuesax-linear:mask": "\n\n\n\n\n\n\n", + "vuesax-linear:math": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:maximize-1": "\n\n\n\n\n\n", + "vuesax-linear:maximize-2": "\n\n\n\n\n\n\n\n", + "vuesax-linear:maximize-21": "\n\n\n\n\n\n", + "vuesax-linear:maximize-3": "\n\n\n\n\n\n", + "vuesax-linear:maximize-4": "\n\n\n\n\n\n", + "vuesax-linear:maximize-circle": "\n\n\n\n\n\n\n\n", + "vuesax-linear:maximize": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:medal-star": "\n\n\n\n\n", + "vuesax-linear:medal": "\n\n\n\n", + "vuesax-linear:menu-1": "\n\n\n\n\n\n", + "vuesax-linear:menu-board": "\n\n\n\n\n\n\n\n", + "vuesax-linear:menu": "\n\n\n\n\n", + "vuesax-linear:message-2": "\n\n\n\n", + "vuesax-linear:message-add-1": "\n\n\n\n\n", + "vuesax-linear:message-add": "\n\n\n\n\n\n\n", + "vuesax-linear:message-circle": "\n\n\n\n", + "vuesax-linear:message-edit": "\n\n\n\n\n", + "vuesax-linear:message-favorite": "\n\n\n\n\n\n\n", + "vuesax-linear:message-minus": "\n\n\n\n", + "vuesax-linear:message-notif": "\n\n\n\n\n\n\n", + "vuesax-linear:message-programming": "\n\n\n\n\n\n", + "vuesax-linear:message-question": "\n\n\n\n\n", + "vuesax-linear:message-remove": "\n\n\n\n\n\n\n", + "vuesax-linear:message-search": "\n\n\n\n\n\n\n\n", + "vuesax-linear:message-square": "\n\n\n\n", + "vuesax-linear:message-text-1": "\n\n\n\n\n", + "vuesax-linear:message-text": "\n\n\n\n\n", + "vuesax-linear:message-tick": "\n\n\n\n\n\n", + "vuesax-linear:message-time": "\n\n\n\n\n\n", + "vuesax-linear:message": "\n\n\n\n\n\n", + "vuesax-linear:messages-1": "\n\n\n\n\n\n\n", + "vuesax-linear:messages-2": "\n\n\n\n", + "vuesax-linear:messages-3": "\n\n\n\n", + "vuesax-linear:messages": "\n\n\n\n\n", + "vuesax-linear:messenger": "\n\n\n\n", + "vuesax-linear:microphone-2": "\n\n\n\n\n\n\n", + "vuesax-linear:microphone-slash-1": "\n\n\n\n\n\n\n\n", + "vuesax-linear:microphone-slash": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:microphone": "\n\n\n\n\n\n", + "vuesax-linear:microscope": "\n\n\n\n\n\n\n", + "vuesax-linear:milk": "\n\n\n\n\n\n\n", + "vuesax-linear:mini-music-sqaure": "\n\n\n\n\n\n\n", + "vuesax-linear:minus-cirlce": "\n\n\n\n", + "vuesax-linear:minus-square": "\n\n\n\n", + "vuesax-linear:minus": "\n\n\n", + "vuesax-linear:mirror": "\n\n\n\n", + "vuesax-linear:mirroring-screen": "\n\n\n\n\n\n", + "vuesax-linear:mobile-programming": "\n\n\n\n\n\n", + "vuesax-linear:mobile": "\n\n\n\n\n", + "vuesax-linear:monero-(xmr)": "\n\n\n\n", + "vuesax-linear:money-2": "\n\n\n\n\n\n\n\n", + "vuesax-linear:money-3": "\n\n\n\n\n\n", + "vuesax-linear:money-4": "\n\n\n\n\n\n\n\n", + "vuesax-linear:money-add": "\n\n\n\n\n\n\n\n", + "vuesax-linear:money-change": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:money-forbidden": "\n\n\n\n\n\n\n", + "vuesax-linear:money-receive": "\n\n\n\n\n\n\n", + "vuesax-linear:money-remove": "\n\n\n\n\n\n\n\n", + "vuesax-linear:money-send": "\n\n\n\n\n\n\n", + "vuesax-linear:money-tick": "\n\n\n\n\n\n\n", + "vuesax-linear:money-time": "\n\n\n\n\n\n\n", + "vuesax-linear:money": "\n\n\n\n\n\n", + "vuesax-linear:moneys": "\n\n\n\n\n\n\n", + "vuesax-linear:monitor-mobbile": "\n\n\n\n\n\n\n\n", + "vuesax-linear:monitor-recorder": "\n\n\n\n\n\n\n\n", + "vuesax-linear:monitor": "\n\n\n\n\n\n", + "vuesax-linear:moon": "\n\n\n", + "vuesax-linear:more-2": "\n\n\n\n\n", + "vuesax-linear:more-circle": "\n\n\n\n\n\n", + "vuesax-linear:more-square": "\n\n\n\n\n\n", + "vuesax-linear:more": "\n\n\n\n\n", + "vuesax-linear:mouse-1": "\n\n\n\n", + "vuesax-linear:mouse-circle": "\n\n\n\n", + "vuesax-linear:mouse-square": "\n\n\n\n", + "vuesax-linear:mouse": "\n\n\n\n\n", + "vuesax-linear:music-circle": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:music-dashboard": "\n\n\n\n\n\n\n\n", + "vuesax-linear:music-filter": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:music-library-2": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:music-play": "\n\n\n\n", + "vuesax-linear:music-playlist": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:music-square-add": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:music-square-remove": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:music-square-search": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:music-square": "\n\n\n\n\n\n\n", + "vuesax-linear:music": "\n\n\n\n\n\n", + "vuesax-linear:musicnote": "\n\n\n\n\n", + "vuesax-linear:nebulas-(nas)": "\n\n\n\n\n\n", + "vuesax-linear:nem-(xem)": "\n\n\n\n\n", + "vuesax-linear:nexo-(nexo)": "\n\n\n\n", + "vuesax-linear:next": "\n\n\n\n", + "vuesax-linear:note-1": "\n\n\n\n\n\n\n", + "vuesax-linear:note-2": "\n\n\n\n\n\n", + "vuesax-linear:note-21": "\n\n\n\n", + "vuesax-linear:note-add": "\n\n\n\n\n\n\n", + "vuesax-linear:note-favorite": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:note-remove": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:note-square": "\n\n\n\n\n\n", + "vuesax-linear:note-text": "\n\n\n\n\n\n\n", + "vuesax-linear:note": "\n\n\n\n\n\n", + "vuesax-linear:notification-1": "\n\n\n\n", + "vuesax-linear:notification-bing": "\n\n\n\n\n", + "vuesax-linear:notification-circle": "\n\n\n\n", + "vuesax-linear:notification-favorite": "\n\n\n\n\n", + "vuesax-linear:notification-status": "\n\n\n\n\n\n", + "vuesax-linear:notification": "\n\n\n\n\n", + "vuesax-linear:ocean-protocol-(ocean)": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:okb-(okb)": "\n\n\n\n\n\n", + "vuesax-linear:omega-circle-1": "\n\n\n\n", + "vuesax-linear:omega-circle": "\n\n\n\n", + "vuesax-linear:omega-square-1": "\n\n\n\n", + "vuesax-linear:omega-square": "\n\n\n\n", + "vuesax-linear:ontology-(ont)": "\n\n\n\n", + "vuesax-linear:paintbucket": "\n\n\n\n\n", + "vuesax-linear:paperclip-2": "\n\n\n", + "vuesax-linear:paperclip": "\n\n\n", + "vuesax-linear:password-check": "\n\n\n\n\n\n\n", + "vuesax-linear:path-2": "\n\n\n\n\n", + "vuesax-linear:path-square": "\n\n\n\n\n\n", + "vuesax-linear:path": "\n\n\n\n\n", + "vuesax-linear:pause-circle": "\n\n\n\n\n", + "vuesax-linear:pause": "\n\n\n\n", + "vuesax-linear:paypal": "\n\n\n\n", + "vuesax-linear:pen-add-1": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-add": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-close-1": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-close": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-remove-1": "\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-remove": "\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-tool-1": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-tool-2-1": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-tool-2": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:pen-tool": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:people": "\n\n\n\n\n\n\n\n", + "vuesax-linear:percentage-square": "\n\n\n\n\n\n", + "vuesax-linear:personalcard": "\n\n\n\n\n\n\n\n", + "vuesax-linear:pet": "\n\n\n\n\n\n\n", + "vuesax-linear:pharagraphspacing": "\n\n\n\n\n\n\n", + "vuesax-linear:photoshop": "\n\n\n\n\n", + "vuesax-linear:picture-frame": "\n\n\n\n\n", + "vuesax-linear:play-add": "\n\n\n\n\n\n\n", + "vuesax-linear:play-circle": "\n\n\n\n", + "vuesax-linear:play-cricle": "\n\n\n\n\n\n\n", + "vuesax-linear:play-remove": "\n\n\n\n\n\n\n", + "vuesax-linear:play": "\n\n\n", + "vuesax-linear:polkadot-(dot)": "\n\n\n\n", + "vuesax-linear:polygon-(matic)": "\n\n\n\n", + "vuesax-linear:polyswarm-(nct)": "\n\n\n\n\n\n", + "vuesax-linear:presention-chart": "\n\n\n\n\n\n\n", + "vuesax-linear:previous": "\n\n\n\n", + "vuesax-linear:printer-slash": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:printer": "\n\n\n\n\n\n\n", + "vuesax-linear:profile-2user": "\n\n\n\n\n\n", + "vuesax-linear:profile-add": "\n\n\n\n\n\n", + "vuesax-linear:profile-circle": "\n\n\n\n\n", + "vuesax-linear:profile-delete": "\n\n\n\n\n\n", + "vuesax-linear:profile-remove": "\n\n\n\n\n", + "vuesax-linear:profile-tick": "\n\n\n\n\n", + "vuesax-linear:profile": "\n\n\n\n", + "vuesax-linear:programming-arrow": "\n\n\n\n\n\n\n\n", + "vuesax-linear:programming-arrows": "\n\n\n\n\n\n\n\n", + "vuesax-linear:python": "\n\n\n\n\n\n\n", + "vuesax-linear:quant-(qnt)": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:quote-down-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:quote-down-square": "\n\n\n\n\n\n\n", + "vuesax-linear:quote-down": "\n\n\n\n\n\n", + "vuesax-linear:quote-up-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:quote-up-square": "\n\n\n\n\n\n\n", + "vuesax-linear:quote-up": "\n\n\n\n\n\n", + "vuesax-linear:radar-1": "\n\n\n\n\n\n\n", + "vuesax-linear:radar-2": "\n\n\n\n", + "vuesax-linear:radar": "\n\n\n", + "vuesax-linear:radio": "\n\n\n\n\n\n\n\n", + "vuesax-linear:ram-2": "\n\n\n\n\n\n\n", + "vuesax-linear:ram": "\n\n\n\n\n", + "vuesax-linear:ranking-1": "\n\n\n\n\n\n", + "vuesax-linear:ranking": "\n\n\n\n\n\n", + "vuesax-linear:receipt-1": "\n\n\n\n\n", + "vuesax-linear:receipt-2-1": "\n\n\n\n\n\n\n", + "vuesax-linear:receipt-2": "\n\n\n\n\n", + "vuesax-linear:receipt-add": "\n\n\n\n\n\n", + "vuesax-linear:receipt-discount": "\n\n\n\n\n\n\n", + "vuesax-linear:receipt-disscount": "\n\n\n\n\n\n", + "vuesax-linear:receipt-edit": "\n\n\n\n\n\n\n", + "vuesax-linear:receipt-item": "\n\n\n\n\n\n\n\n", + "vuesax-linear:receipt-minus": "\n\n\n\n\n", + "vuesax-linear:receipt-search": "\n\n\n\n\n\n\n", + "vuesax-linear:receipt-square": "\n\n\n\n", + "vuesax-linear:receipt-text": "\n\n\n\n\n\n", + "vuesax-linear:receipt": "\n\n\n\n", + "vuesax-linear:receive-square-2": "\n\n\n\n\n\n", + "vuesax-linear:receive-square": "\n\n\n\n\n\n", + "vuesax-linear:received": "\n\n\n\n\n", + "vuesax-linear:record-circle": "\n\n\n\n", + "vuesax-linear:record": "\n\n\n", + "vuesax-linear:recovery-convert": "\n\n\n\n\n\n", + "vuesax-linear:redo": "\n\n\n\n", + "vuesax-linear:refresh-2": "\n\n\n", + "vuesax-linear:refresh-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:refresh-left-square": "\n\n\n\n\n\n", + "vuesax-linear:refresh-right-square": "\n\n\n\n\n\n", + "vuesax-linear:refresh-square-2": "\n\n\n\n", + "vuesax-linear:refresh": "\n\n\n\n", + "vuesax-linear:repeat-circle": "\n\n\n\n\n\n\n", + "vuesax-linear:repeat": "\n\n\n\n\n\n", + "vuesax-linear:repeate-music": "\n\n\n\n\n", + "vuesax-linear:repeate-one": "\n\n\n\n\n", + "vuesax-linear:reserve": "\n\n\n\n\n\n", + "vuesax-linear:rotate-left-1": "\n\n\n\n", + "vuesax-linear:rotate-left": "\n\n\n\n\n", + "vuesax-linear:rotate-right-1": "\n\n\n\n", + "vuesax-linear:rotate-right": "\n\n\n\n\n", + "vuesax-linear:route-square": "\n\n\n\n", + "vuesax-linear:routing-2": "\n\n\n\n\n\n\n", + "vuesax-linear:routing": "\n\n\n\n\n\n\n", + "vuesax-linear:row-horizontal": "\n\n\n\n", + "vuesax-linear:row-vertical": "\n\n\n\n", + "vuesax-linear:ruler&pen": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:ruler": "\n\n\n\n\n\n\n", + "vuesax-linear:safe-home": "\n\n\n\n", + "vuesax-linear:sagittarius": "\n\n\n\n\n", + "vuesax-linear:save-2": "\n\n\n\n\n", + "vuesax-linear:save-add": "\n\n\n\n\n\n", + "vuesax-linear:save-minus": "\n\n\n\n\n", + "vuesax-linear:save-remove": "\n\n\n\n\n\n", + "vuesax-linear:scan-barcode": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:scan": "\n\n\n\n\n\n\n\n", + "vuesax-linear:scanner": "\n\n\n\n\n", + "vuesax-linear:scanning": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:scissor-1": "\n\n\n\n\n\n", + "vuesax-linear:scissor-2": "\n\n\n\n\n\n\n", + "vuesax-linear:scissor": "\n\n\n\n\n\n", + "vuesax-linear:screenmirroring": "\n\n\n\n", + "vuesax-linear:scroll": "\n\n\n\n\n", + "vuesax-linear:search-favorite-1": "\n\n\n\n\n", + "vuesax-linear:search-favorite": "\n\n\n\n\n", + "vuesax-linear:search-normal-1": "\n\n\n\n", + "vuesax-linear:search-normal": "\n\n\n\n", + "vuesax-linear:search-status-1": "\n\n\n\n\n\n", + "vuesax-linear:search-status": "\n\n\n\n\n\n", + "vuesax-linear:search-zoom-in-1": "\n\n\n\n\n\n", + "vuesax-linear:search-zoom-in": "\n\n\n\n\n\n", + "vuesax-linear:search-zoom-out-1": "\n\n\n\n\n", + "vuesax-linear:search-zoom-out": "\n\n\n\n\n", + "vuesax-linear:security-card": "\n\n\n\n\n\n\n", + "vuesax-linear:security-safe": "\n\n\n\n\n", + "vuesax-linear:security-time": "\n\n\n\n\n", + "vuesax-linear:security-user": "\n\n\n\n\n", + "vuesax-linear:security": "\n\n\n", + "vuesax-linear:send-1": "\n\n\n\n", + "vuesax-linear:send-2": "\n\n\n\n", + "vuesax-linear:send-sqaure-2": "\n\n\n\n\n\n", + "vuesax-linear:send-square": "\n\n\n\n\n\n", + "vuesax-linear:send": "\n\n\n\n\n", + "vuesax-linear:setting-2": "\n\n\n\n", + "vuesax-linear:setting-3": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:setting-4": "\n\n\n\n\n\n\n\n", + "vuesax-linear:setting-5": "\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:setting": "\n\n\n\n", + "vuesax-linear:settings": "\n\n\n\n\n", + "vuesax-linear:shapes-1": "\n\n\n\n", + "vuesax-linear:shapes-2": "\n\n\n\n", + "vuesax-linear:shapes": "\n\n\n\n", + "vuesax-linear:share": "\n\n\n\n\n\n\n\n", + "vuesax-linear:shield-cross": "\n\n\n\n\n", + "vuesax-linear:shield-search": "\n\n\n\n\n", + "vuesax-linear:shield-security": "\n\n\n\n\n", + "vuesax-linear:shield-slash": "\n\n\n\n\n", + "vuesax-linear:shield-tick": "\n\n\n\n", + "vuesax-linear:shield": "\n\n\n", + "vuesax-linear:ship": "\n\n\n\n\n\n", + "vuesax-linear:shop-add": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:shop-remove": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:shop": "\n\n\n\n\n\n\n", + "vuesax-linear:shopping-bag": "\n\n\n\n\n", + "vuesax-linear:shopping-cart": "\n\n\n\n\n\n", + "vuesax-linear:siacoin-(sc)": "\n\n\n\n\n", + "vuesax-linear:sidebar-bottom": "\n\n\n\n\n", + "vuesax-linear:sidebar-left": "\n\n\n\n\n", + "vuesax-linear:sidebar-right": "\n\n\n\n\n", + "vuesax-linear:sidebar-top": "\n\n\n\n\n", + "vuesax-linear:signpost": "\n\n\n\n\n\n\n", + "vuesax-linear:simcard-1": "\n\n\n\n\n\n", + "vuesax-linear:simcard-2": "\n\n\n\n", + "vuesax-linear:simcard": "\n\n\n\n\n", + "vuesax-linear:size": "\n\n\n\n", + "vuesax-linear:slack": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:slash": "\n\n\n\n", + "vuesax-linear:slider-horizontal-1": "\n\n\n\n\n", + "vuesax-linear:slider-horizontal": "\n\n\n\n\n", + "vuesax-linear:slider-vertical-1": "\n\n\n\n\n", + "vuesax-linear:slider-vertical": "\n\n\n\n\n", + "vuesax-linear:slider": "\n\n\n\n\n\n", + "vuesax-linear:smallcaps": "\n\n\n\n\n\n\n\n", + "vuesax-linear:smart-car": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:smart-home": "\n\n\n\n\n\n", + "vuesax-linear:smileys": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:sms-edit": "\n\n\n\n\n\n", + "vuesax-linear:sms-notification": "\n\n\n\n\n", + "vuesax-linear:sms-search": "\n\n\n\n\n\n", + "vuesax-linear:sms-star": "\n\n\n\n\n", + "vuesax-linear:sms-tracking": "\n\n\n\n\n\n", + "vuesax-linear:sms": "\n\n\n\n", + "vuesax-linear:snapchat": "\n\n\n\n", + "vuesax-linear:solana-(sol)": "\n\n\n\n\n", + "vuesax-linear:sort": "\n\n\n\n\n", + "vuesax-linear:sound": "\n\n\n\n\n\n\n", + "vuesax-linear:speaker": "\n\n\n\n\n", + "vuesax-linear:speedometer": "\n\n\n\n\n", + "vuesax-linear:spotify": "\n\n\n\n\n\n", + "vuesax-linear:stacks-(stx)": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:star-1": "\n\n\n", + "vuesax-linear:star-slash": "\n\n\n\n\n", + "vuesax-linear:star": "\n\n\n\n\n\n", + "vuesax-linear:status-up": "\n\n\n\n\n\n\n\n", + "vuesax-linear:status": "\n\n\n\n\n", + "vuesax-linear:stellar-(xlm)": "\n\n\n\n\n\n", + "vuesax-linear:sticker": "\n\n\n\n", + "vuesax-linear:stickynote": "\n\n\n\n\n\n\n\n", + "vuesax-linear:stop-circle": "\n\n\n\n", + "vuesax-linear:stop": "\n\n\n", + "vuesax-linear:story": "\n\n\n\n\n\n", + "vuesax-linear:strongbox-2": "\n\n\n\n\n\n\n\n", + "vuesax-linear:strongbox": "\n\n\n\n\n\n", + "vuesax-linear:subtitle": "\n\n\n\n\n\n\n", + "vuesax-linear:sun-1": "\n\n\n\n", + "vuesax-linear:sun-fog": "\n\n\n\n\n\n\n", + "vuesax-linear:sun": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:tag-2": "\n\n\n\n\n", + "vuesax-linear:tag-cross": "\n\n\n\n\n", + "vuesax-linear:tag-right": "\n\n\n", + "vuesax-linear:tag-user": "\n\n\n\n\n", + "vuesax-linear:tag": "\n\n\n\n", + "vuesax-linear:task-square": "\n\n\n\n\n\n\n", + "vuesax-linear:task": "\n\n\n\n\n\n\n\n", + "vuesax-linear:teacher": "\n\n\n\n\n", + "vuesax-linear:tenx-(pay)": "\n\n\n\n", + "vuesax-linear:tether-(usdt)": "\n\n\n\n\n", + "vuesax-linear:text-block": "\n\n\n\n\n", + "vuesax-linear:text-bold": "\n\n\n\n", + "vuesax-linear:text-italic": "\n\n\n\n\n", + "vuesax-linear:text-underline": "\n\n\n\n", + "vuesax-linear:text": "\n\n\n\n\n", + "vuesax-linear:textalign-center": "\n\n\n\n\n\n", + "vuesax-linear:textalign-justifycenter": "\n\n\n\n\n\n", + "vuesax-linear:textalign-justifyleft": "\n\n\n\n\n\n", + "vuesax-linear:textalign-justifyright": "\n\n\n\n\n\n", + "vuesax-linear:textalign-left": "\n\n\n\n\n\n", + "vuesax-linear:textalign-right": "\n\n\n\n\n\n", + "vuesax-linear:the-graph-(grt)": "\n\n\n\n\n\n", + "vuesax-linear:theta-(theta)": "\n\n\n\n\n\n\n\n", + "vuesax-linear:thorchain-(rune)": "\n\n\n", + "vuesax-linear:tick-circle": "\n\n\n\n", + "vuesax-linear:tick-square": "\n\n\n\n", + "vuesax-linear:ticket-2": "\n\n\n\n\n", + "vuesax-linear:ticket-discount": "\n\n\n\n\n\n", + "vuesax-linear:ticket-expired": "\n\n\n\n\n", + "vuesax-linear:ticket-star": "\n\n\n\n\n\n", + "vuesax-linear:ticket": "\n\n\n\n", + "vuesax-linear:timer-1": "\n\n\n\n\n", + "vuesax-linear:timer-pause": "\n\n\n\n\n\n\n", + "vuesax-linear:timer-start": "\n\n\n\n\n\n", + "vuesax-linear:timer": "\n\n\n", + "vuesax-linear:toggle-off-circle": "\n\n\n\n", + "vuesax-linear:toggle-off": "\n\n\n\n", + "vuesax-linear:toggle-on-circle": "\n\n\n\n", + "vuesax-linear:toggle-on": "\n\n\n\n", + "vuesax-linear:trade": "\n\n\n\n\n\n", + "vuesax-linear:transaction-minus": "\n\n\n\n", + "vuesax-linear:translate": "\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:trash": "\n\n\n\n\n\n\n", + "vuesax-linear:tree": "\n\n\n\n\n", + "vuesax-linear:trello": "\n\n\n\n\n", + "vuesax-linear:trend-down": "\n\n\n\n\n", + "vuesax-linear:trend-up": "\n\n\n\n\n", + "vuesax-linear:triangle": "\n\n\n\n\n", + "vuesax-linear:trontron-(trx)": "\n\n\n\n\n", + "vuesax-linear:truck-remove": "\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:truck-tick": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:truck-time": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:trush-square": "\n\n\n\n\n\n", + "vuesax-linear:twitch": "\n\n\n\n\n", + "vuesax-linear:ui8": "\n\n\n\n\n\n\n", + "vuesax-linear:undo": "\n\n\n\n", + "vuesax-linear:unlimited": "\n\n\n", + "vuesax-linear:unlock": "\n\n\n\n\n", + "vuesax-linear:usd-coin-(usdc)": "\n\n\n\n\n\n\n", + "vuesax-linear:user-add": "\n\n\n\n\n\n\n", + "vuesax-linear:user-cirlce-add": "\n\n\n\n\n\n\n\n", + "vuesax-linear:user-edit": "\n\n\n\n\n\n", + "vuesax-linear:user-minus": "\n\n\n\n\n\n", + "vuesax-linear:user-octagon": "\n\n\n\n\n", + "vuesax-linear:user-remove": "\n\n\n\n\n\n\n", + "vuesax-linear:user-search": "\n\n\n\n\n\n", + "vuesax-linear:user-square": "\n\n\n\n\n", + "vuesax-linear:user-tag": "\n\n\n\n\n", + "vuesax-linear:user-tick": "\n\n\n\n\n\n", + "vuesax-linear:user": "\n\n\n\n", + "vuesax-linear:velas-(vlx)": "\n\n\n\n", + "vuesax-linear:verify": "\n\n\n\n", + "vuesax-linear:vibe-(vibe)": "\n\n\n\n\n", + "vuesax-linear:video-add": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:video-circle": "\n\n\n\n", + "vuesax-linear:video-horizontal": "\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:video-octagon": "\n\n\n\n", + "vuesax-linear:video-play": "\n\n\n\n\n\n\n", + "vuesax-linear:video-remove": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:video-slash": "\n\n\n\n\n\n", + "vuesax-linear:video-square": "\n\n\n\n", + "vuesax-linear:video-tick": "\n\n\n\n\n\n\n\n", + "vuesax-linear:video-time": "\n\n\n\n\n\n\n\n", + "vuesax-linear:video-vertical": "\n\n\n\n\n\n\n\n\n\n\n\n", + "vuesax-linear:video": "\n\n\n\n\n", + "vuesax-linear:voice-cricle": "\n\n\n\n\n\n\n\n", + "vuesax-linear:voice-square": "\n\n\n\n\n\n\n\n", + "vuesax-linear:volume-cross": "\n\n\n\n\n", + "vuesax-linear:volume-high": "\n\n\n\n\n", + "vuesax-linear:volume-low-1": "\n\n\n\n", + "vuesax-linear:volume-low": "\n\n\n\n", + "vuesax-linear:volume-mute": "\n\n\n", + "vuesax-linear:volume-slash": "\n\n\n\n\n\n\n", + "vuesax-linear:volume-up": "\n\n\n\n\n", + "vuesax-linear:vuesax": "\n\n\n\n\n", + "vuesax-linear:wallet-1": "\n\n\n\n\n\n\n", + "vuesax-linear:wallet-2": "\n\n\n\n\n", + "vuesax-linear:wallet-3": "\n\n\n\n\n\n", + "vuesax-linear:wallet-add-1": "\n\n\n\n\n\n\n\n\n", + "vuesax-linear:wallet-add": "\n\n\n\n\n\n\n\n", + "vuesax-linear:wallet-check": "\n\n\n\n\n\n\n", + "vuesax-linear:wallet-minus": "\n\n\n\n\n\n\n\n", + "vuesax-linear:wallet-money": "\n\n\n\n\n\n\n", + "vuesax-linear:wallet-remove": "\n\n\n\n\n\n\n\n", + "vuesax-linear:wallet-search": "\n\n\n\n\n\n\n", + "vuesax-linear:wallet": "\n\n\n\n\n", + "vuesax-linear:wanchain-(wan)-1": "\n\n\n", + "vuesax-linear:wanchain-(wan)": "\n\n\n\n\n\n", + "vuesax-linear:warning-2": "\n\n\n\n\n", + "vuesax-linear:watch-status": "\n\n\n\n\n\n\n\n", + "vuesax-linear:watch": "\n\n\n\n\n\n", + "vuesax-linear:weight-1": "\n\n\n\n\n\n\n", + "vuesax-linear:weight": "\n\n\n\n", + "vuesax-linear:whatsapp": "\n\n\n\n", + "vuesax-linear:wifi-square": "\n\n\n\n\n\n", + "vuesax-linear:wifi": "\n\n\n\n\n\n", + "vuesax-linear:wind-2": "\n\n\n\n\n", + "vuesax-linear:wind": "\n\n\n\n\n", + "vuesax-linear:windows": "\n\n\n\n\n\n", + "vuesax-linear:wing-(wing)": "\n\n\n\n\n", + "vuesax-linear:woman": "\n\n\n\n\n", + "vuesax-linear:xd": "\n\n\n\n\n\n", + "vuesax-linear:xiaomi": "\n\n\n\n\n\n", + "vuesax-linear:xrp-(xrp)": "\n\n\n\n", + "vuesax-linear:youtube": "\n\n\n\n", + "vuesax-linear:zel-(zel)": "\n\n\n\n\n\n", + "vuesax-linear:zoom": "\n\n\n\n\n", + "vuesax-linear:verify": "\n\n\n\n", + "vuesax-linear:chart-fail": "\n\n\n\n\n\n\n" +} \ No newline at end of file diff --git a/src/core/assets/img/avatars/placeholder-f.jpg b/src/core/assets/img/avatars/placeholder-f.jpg new file mode 100644 index 0000000..95da073 Binary files /dev/null and b/src/core/assets/img/avatars/placeholder-f.jpg differ diff --git a/src/core/assets/img/avatars/placeholder-m.jpg b/src/core/assets/img/avatars/placeholder-m.jpg new file mode 100644 index 0000000..6026c12 Binary files /dev/null and b/src/core/assets/img/avatars/placeholder-m.jpg differ diff --git a/src/core/assets/img/avatars/placeholder.jpg b/src/core/assets/img/avatars/placeholder.jpg new file mode 100644 index 0000000..65c9591 Binary files /dev/null and b/src/core/assets/img/avatars/placeholder.jpg differ diff --git a/src/core/assets/img/layout/mix.png b/src/core/assets/img/layout/mix.png new file mode 100644 index 0000000..f975a1d Binary files /dev/null and b/src/core/assets/img/layout/mix.png differ diff --git a/src/core/assets/img/layout/side.png b/src/core/assets/img/layout/side.png new file mode 100644 index 0000000..b0c3882 Binary files /dev/null and b/src/core/assets/img/layout/side.png differ diff --git a/src/core/assets/img/layout/top.png b/src/core/assets/img/layout/top.png new file mode 100644 index 0000000..3ed3e27 Binary files /dev/null and b/src/core/assets/img/layout/top.png differ diff --git a/src/core/assets/img/placeholders/placeholder.png b/src/core/assets/img/placeholders/placeholder.png new file mode 100644 index 0000000..e152538 Binary files /dev/null and b/src/core/assets/img/placeholders/placeholder.png differ diff --git a/src/core/assets/img/placeholders/video-placeholder.png b/src/core/assets/img/placeholders/video-placeholder.png new file mode 100644 index 0000000..58d0a7c Binary files /dev/null and b/src/core/assets/img/placeholders/video-placeholder.png differ diff --git a/src/core/basicMain.ts b/src/core/basicMain.ts new file mode 100644 index 0000000..b356a35 --- /dev/null +++ b/src/core/basicMain.ts @@ -0,0 +1,21 @@ +//import { setupPinia } from '@core/plugins/pinia' +import type { App } from 'vue' +import { setupRouter } from '@core/router' +import '@core/assets/css/main.less' +import 'uno.css' +import { setupPinia } from '@core/plugins/pinia' +//import { setupRoutes } from '@/router' + +export function basicMain(app: App) { + //setupRoutes() + const router = setupRouter(app) + /*router.addRoute({ + name: 'dashboard', + path: '/dashboard', + component: () => import('@/pages/dashboard/index.vue') + })*/ + + // console.log(router) + //router.addRoute() + return { router } +} diff --git a/src/core/components/BaseButton/index.ts b/src/core/components/BaseButton/index.ts new file mode 100644 index 0000000..7dfaf8e --- /dev/null +++ b/src/core/components/BaseButton/index.ts @@ -0,0 +1,2 @@ +import button from './src/button.vue' +export default button diff --git a/src/core/components/BaseButton/src/button.vue b/src/core/components/BaseButton/src/button.vue new file mode 100644 index 0000000..08ae3cb --- /dev/null +++ b/src/core/components/BaseButton/src/button.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/core/components/BaseCard/index.ts b/src/core/components/BaseCard/index.ts new file mode 100644 index 0000000..a2c9bf4 --- /dev/null +++ b/src/core/components/BaseCard/index.ts @@ -0,0 +1,2 @@ +import BaseCard from './src/BaseCard.vue' +export default BaseCard diff --git a/src/core/components/BaseCard/src/BaseCard.vue b/src/core/components/BaseCard/src/BaseCard.vue new file mode 100644 index 0000000..9d22ecb --- /dev/null +++ b/src/core/components/BaseCard/src/BaseCard.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/core/components/BaseDatePicker/index.ts b/src/core/components/BaseDatePicker/index.ts new file mode 100644 index 0000000..40211b5 --- /dev/null +++ b/src/core/components/BaseDatePicker/index.ts @@ -0,0 +1,2 @@ +import BaseDatePicker from './src/BaseDatePicker.vue' +export default BaseDatePicker diff --git a/src/core/components/BaseDatePicker/src/BaseDatePicker.vue b/src/core/components/BaseDatePicker/src/BaseDatePicker.vue new file mode 100644 index 0000000..339e1d7 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/BaseDatePicker.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/core/components/BaseDatePicker/src/configDayjs.ts b/src/core/components/BaseDatePicker/src/configDayjs.ts new file mode 100644 index 0000000..3bff94c --- /dev/null +++ b/src/core/components/BaseDatePicker/src/configDayjs.ts @@ -0,0 +1,26 @@ +/* +import dayjs from 'dayjs' +import updateLocale from 'dayjs/plugin/updateLocale' +import jalaliday from 'jalaliday' +dayjs.extend(jalaliday) +dayjs.extend(updateLocale) +dayjs.calendar('jalali') // Jalali Calendar +const months = [ + 'فروردین', + 'اردیبهشت', + 'خرداد', + 'تیر', + 'مرداد', + 'شهریور', + 'مهر', + 'آبان', + 'آذر', + 'دی', + 'بهمن', + 'اسفند', +] +dayjs.updateLocale('fa', { + monthsShort: months, + months, +}) +*/ diff --git a/src/core/components/BaseDatePicker/src/datePick/PickerButton.tsx b/src/core/components/BaseDatePicker/src/datePick/PickerButton.tsx new file mode 100644 index 0000000..ef8404f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/PickerButton.tsx @@ -0,0 +1,8 @@ +import type { FunctionalComponent } from 'vue'; +import type { ButtonProps } from 'ant-design-vue/es/button'; +import Button from 'ant-design-vue/es/button'; + +const PickerButton: FunctionalComponent = (props: ButtonProps, { attrs, slots }) => { + return ; +}; +export default PickerButton; diff --git a/src/core/components/BaseDatePicker/src/datePick/PickerTag.tsx b/src/core/components/BaseDatePicker/src/datePick/PickerTag.tsx new file mode 100644 index 0000000..eab4746 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/PickerTag.tsx @@ -0,0 +1,6 @@ +import type { TagProps } from 'ant-design-vue/es/tag'; +import Tag from 'ant-design-vue/es/tag'; + +export default function PickerTag(props: TagProps, { slots, attrs }) { + return ; +} diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/DatePicker.test.js b/src/core/components/BaseDatePicker/src/datePick/__tests__/DatePicker.test.js new file mode 100644 index 0000000..0a66f68 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/DatePicker.test.js @@ -0,0 +1,66 @@ +import { mount } from '@vue/test-utils' +import { asyncExpect } from '../../../tests/utils' +import dayjs from 'dayjs' +import MockDate from 'mockdate' +import DatePicker from '../index' +import focusTest from '../../../tests/shared/focusTest' +jest.mock('../../_util/Portal') +describe('DatePicker', () => { + focusTest(DatePicker) + + beforeEach(() => { + document.body.outerHTML = '' + MockDate.set(dayjs('2016-11-22')) + }) + + afterEach(() => { + MockDate.reset() + }) + + it('prop locale should works', async () => { + const locale = { + lang: { + locale: 'mk', + placeholder: 'Избери дата', + rangePlaceholder: ['Начална дата', 'Крайна дата'], + today: 'Днес', + now: 'Сега', + backToToday: 'Към днес', + ok: 'Добре', + clear: 'Изчистване', + month: 'Месец', + year: 'Година', + timeSelect: 'Избор на час', + dateSelect: 'Избор на дата', + monthSelect: 'Избор на месец', + yearSelect: 'Избор на година', + decadeSelect: 'Десетилетие', + previousMonth: 'Предишен месец (PageUp)', + nextMonth: 'Следващ месец (PageDown)', + previousYear: 'Последна година (Control + left)', + nextYear: 'Следваща година (Control + right)', + previousDecade: 'Предишно десетилетие', + nextDecade: 'Следващо десетилетие', + previousCentury: 'Последен век', + nextCentury: 'Следващ век', + yearFormat: 'YYYY', + dateFormat: 'D M YYYY', + dayFormat: 'D', + dateTimeFormat: 'D M YYYY HH:mm:ss', + monthBeforeYear: true + }, + timePickerLocale: { + placeholder: 'Избор на час' + } + } + const birthday = dayjs('2000-01-01', 'YYYY-MM-DD') + const wrapper = mount({ + render() { + return + } + }) + await asyncExpect(() => { + expect(wrapper.html()).toMatchSnapshot() + }) + }) +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/QuarterPicker.test.js b/src/core/components/BaseDatePicker/src/datePick/__tests__/QuarterPicker.test.js new file mode 100644 index 0000000..b77cabb --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/QuarterPicker.test.js @@ -0,0 +1,17 @@ +import { mount } from '@vue/test-utils' +import DatePicker from '../index' +import focusTest from '../../../tests/shared/focusTest' + +const { QuarterPicker } = DatePicker +jest.mock('../../_util/Portal') +describe('QuarterPicker', () => { + focusTest(QuarterPicker) + fit('reset select item when popup close', async () => { + const wrapper = mount(DatePicker, { + props: { style: { width: '400px' }, picker: 'quarter' }, + sync: false, + attachTo: 'body' + }) + expect(wrapper.html()).toMatchSnapshot() + }) +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/RangePicker.test.js b/src/core/components/BaseDatePicker/src/datePick/__tests__/RangePicker.test.js new file mode 100644 index 0000000..3afa4f2 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/RangePicker.test.js @@ -0,0 +1,72 @@ +import { mount } from '@vue/test-utils' +import { asyncExpect, setMockDate, resetMockDate, sleep } from '../../../tests/utils' +import dayjs from 'dayjs' +import DatePicker from '../index' +import { openPicker, selectCell, closePicker } from './utils' +import focusTest from '../../../tests/shared/focusTest' +jest.mock('../../_util/Portal') +const { RangePicker } = DatePicker + +describe('RangePicker', () => { + focusTest(RangePicker) + + beforeEach(() => { + document.body.outerHTML = '' + setMockDate() + }) + + afterEach(() => { + resetMockDate() + }) + // issue: https://github.com/ant-design/ant-design/issues/5872 + xit('should not throw error when value is reset to `[]`', async () => { + const birthday = dayjs('2000-01-01', 'YYYY-MM-DD') + const wrapper = mount( + { + props: ['value'], + setup(props) { + return () => + } + }, + { attachTo: 'body', sync: 'false' } + ) + wrapper.setProps({ value: [birthday, birthday] }) + wrapper.setProps({ value: [] }) + await sleep(0) + expect(() => { + openPicker(wrapper) + selectCell(wrapper, 3) + closePicker(wrapper) + + openPicker(wrapper, 1) + selectCell(wrapper, 5, 1) + closePicker(wrapper, 1) + }).not.toThrow() + }) + + it('show month panel according to value', async () => { + const birthday = dayjs('2000-01-01', 'YYYY-MM-DD').locale('zh-cn') + const wrapper = mount(RangePicker, { + props: { + getPopupContainer: (trigger) => trigger, + format: 'YYYY/MM/DD', + showTime: true, + open: true + }, + sync: false, + attachTo: 'body' + }) + await asyncExpect(() => { + wrapper.setProps({ value: [birthday, birthday] }) + }) + await asyncExpect(() => { + expect(document.body.innerHTML).toMatchSnapshot() + }) + }) + + fit('customize separator', async () => { + const wrapper = mount(RangePicker, { props: { separator: 'test' } }) + await sleep() + expect(wrapper.html()).toMatchSnapshot() + }) +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/WeekPicker.test.js b/src/core/components/BaseDatePicker/src/datePick/__tests__/WeekPicker.test.js new file mode 100644 index 0000000..7701b86 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/WeekPicker.test.js @@ -0,0 +1,27 @@ +import { mount } from '@vue/test-utils' +import { asyncExpect, setMockDate } from '../../../tests/utils' +import DatePicker from '../index' +import focusTest from '../../../tests/shared/focusTest' + +const { WeekPicker } = DatePicker +jest.mock('../../_util/Portal') +describe('WeekPicker', () => { + beforeEach(() => { + setMockDate() + }) + focusTest(WeekPicker) + + it('should support style prop', async () => { + const wrapper = mount( + { + render() { + return + } + }, + { sync: false } + ) + await asyncExpect(() => { + expect(wrapper.html()).toMatchSnapshot() + }) + }) +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/DatePicker.test.js.snap b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/DatePicker.test.js.snap new file mode 100644 index 0000000..6c3b99d --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/DatePicker.test.js.snap @@ -0,0 +1,180 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`DatePicker prop locale should works 1`] = ` +
+
+
+ + +
+
+`; diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/QuarterPicker.test.js.snap b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/QuarterPicker.test.js.snap new file mode 100644 index 0000000..b4f4686 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/QuarterPicker.test.js.snap @@ -0,0 +1,47 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`QuarterPicker reset select item when popup close 1`] = ` +
+
+ +
+
+ + +
+
+`; diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/RangePicker.test.js.snap b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/RangePicker.test.js.snap new file mode 100644 index 0000000..e4fc4f5 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/RangePicker.test.js.snap @@ -0,0 +1,557 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`RangePicker customize separator 1`] = ` +
+
+
test
+
+
+ +
+ + +
+
+`; + +exports[`RangePicker show month panel according to value 1`] = ` +
+
+ + +
+
+
+
+
+
+
+
+`; diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/WeekPicker.test.js.snap b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/WeekPicker.test.js.snap new file mode 100644 index 0000000..3e6a5f9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/WeekPicker.test.js.snap @@ -0,0 +1,186 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`WeekPicker should support style prop 1`] = ` +
+
+ +
+
+ + +
+
+`; diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/demo.test.js.snap b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/demo.test.js.snap new file mode 100644 index 0000000..bccf1ab --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/demo.test.js.snap @@ -0,0 +1,710 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders ./components/date-picker/demo/basic.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/bordered.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/date-render.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/disabled.vue correctly 1`] = ` +
+
+
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/disabled-date.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/extra-footer.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/format.vue correctly 1`] = ` +
+
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/mode.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/presetted-ranges.vue correctly 1`] = ` +
+
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/range-picker.vue correctly 1`] = ` +
+
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/select-in-range.vue correctly 1`] = ` +
+
+
+
+
+ + +
+`; + +exports[`renders ./components/date-picker/demo/size.vue correctly 1`] = ` +
+
+
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/start-end.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/suffix.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
ab + +
+ +
+
+ +
+
+
ab + +
+ +
+
+ +
+
+
+
+
+
ab + + +
+
+ +
+
+
ab + +
+ +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/switchable.vue correctly 1`] = ` +
+
+
+ + +
Time + +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/text.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+`; + +exports[`renders ./components/date-picker/demo/time.vue correctly 1`] = ` +
+
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ +
+`; diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/other.test.js.snap b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/other.test.js.snap new file mode 100644 index 0000000..2c5b62e --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/__snapshots__/other.test.js.snap @@ -0,0 +1,1077 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`MonthPicker and WeekPicker render MonthPicker 1`] = `""`; + +exports[`MonthPicker and WeekPicker render WeekPicker 1`] = `""`; + +exports[`Picker format by locale date 1`] = ` +
+
+
+ + +
+
+`; + +exports[`Picker format by locale dateTime 1`] = ` +
+
+
+ + +
+
+`; + +exports[`Picker format by locale month 1`] = ` +
+
+
+ + +
+
+`; + +exports[`Picker format by locale week 1`] = ` +
+
+
+ + +
+
+`; diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/demo.test.js b/src/core/components/BaseDatePicker/src/datePick/__tests__/demo.test.js new file mode 100644 index 0000000..a4e7a91 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/demo.test.js @@ -0,0 +1,3 @@ +import demoTest from '../../../tests/shared/demoTest'; + +demoTest('date-picker'); diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/mount.test.js b/src/core/components/BaseDatePicker/src/datePick/__tests__/mount.test.js new file mode 100644 index 0000000..6ed966b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/mount.test.js @@ -0,0 +1,11 @@ +import DatePicker from '../index' +import mountTest from '../../../tests/shared/mountTest' + +const { MonthPicker, WeekPicker, RangePicker } = DatePicker + +describe('mount', () => { + mountTest(DatePicker) + mountTest(MonthPicker) + mountTest(WeekPicker) + mountTest(RangePicker) +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/other.test.js b/src/core/components/BaseDatePicker/src/datePick/__tests__/other.test.js new file mode 100644 index 0000000..2e6260f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/other.test.js @@ -0,0 +1,73 @@ +import { mount } from '@vue/test-utils' +import { asyncExpect, sleep } from '../../../tests/utils' +import dayjs from 'dayjs' +import DatePicker from '../index' +import LocaleProvider from '../../locale-provider' +import locale from '../../locale-provider/zh_CN' +jest.mock('../../_util/Portal') +const { MonthPicker, WeekPicker } = DatePicker + +describe('Picker format by locale', () => { + const myLocale = { + ...locale, + DatePicker: { + ...locale.DatePicker, + dateFormat: 'YYYY 年 M 月 D 日', + dateTimeFormat: 'YYYY 年 M 月 D 日 H 时 m 分 s 秒', + weekFormat: 'YYYY 年 W 周', + monthFormat: 'YYYY 年 M 月' + } + } + + const date = dayjs('2000-01-01', 'YYYY-MM-DD') + function matchPicker(name, Picker, props) { + it(name, async () => { + const wrapper = mount( + { + render() { + return ( + + + + ) + } + }, + { sync: false } + ) + await asyncExpect(() => { + expect(wrapper.html()).toMatchSnapshot() + }) + }) + } + + matchPicker('date', DatePicker) + matchPicker('dateTime', DatePicker, { showTime: true }) + matchPicker('week', WeekPicker) + matchPicker('month', MonthPicker) +}) + +describe('MonthPicker and WeekPicker', () => { + beforeEach(() => { + document.body.innerHTML = '' + }) + it('render MonthPicker', async () => { + const birthday = dayjs('2000-01-01', 'YYYY-MM-DD').locale('zh-cn') + const wrapper = mount(MonthPicker, { props: { open: true }, sync: false }) + await asyncExpect(() => { + wrapper.setProps({ value: birthday }) + }) + + await asyncExpect(() => { + expect(document.body.innerHTML).toMatchSnapshot() + }) + }) + + it('render WeekPicker', async () => { + const birthday = dayjs('2000-01-01', 'YYYY-MM-DD').locale('zh-cn') + const wrapper = mount(WeekPicker, { props: { open: false }, sync: false }) + await sleep(10) + wrapper.setProps({ value: birthday, open: true }) + await sleep(1000) + expect(document.body.innerHTML).toMatchSnapshot() + }) +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/__tests__/utils.js b/src/core/components/BaseDatePicker/src/datePick/__tests__/utils.js new file mode 100644 index 0000000..55c1665 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/__tests__/utils.js @@ -0,0 +1,60 @@ +export function $$(className) { + return document.body.querySelectorAll(className); +} +export function hasSelected(wrapper, date) { + return document.body + .querySelector(`[title="${date.format('LL')}"][role="gridcell"]`) + .getAttribute('class') + .split(' ') + .includes('ant-calendar-selected-day'); +} + +export function openPanel(wrapper) { + wrapper.find('.ant-calendar-picker-input').trigger('click'); +} + +export function clearInput(wrapper) { + wrapper.find('.ant-calendar-picker-clear').trigger('click'); +} + +export function nextYear() { + $$('.ant-calendar-next-year-btn')[0].click(); +} + +export function nextMonth() { + $$('.ant-calendar-next-month-btn')[0].click(); +} + +export function selectDateFromBody(date, index) { + let calendar = document.body; + if (index !== undefined) { + calendar = document.body.querySelectorAll('.ant-calendar-range-part')[index]; + } + calendar.querySelector(`[title="${date.format('LL')}"][role="gridcell"]`).click(); +} + +export function openPicker(wrapper, index = 0) { + wrapper.findAll('input')[index].trigger('mousedown'); + wrapper.findAll('input')[index].trigger('focus'); +} +export function closePicker(wrapper, index = 0) { + wrapper.findAll('input')[index].trigger('blur'); +} + +export function selectCell(wrapper, text, index = 0) { + let matchCell; + $$('table') + [index].querySelectorAll('td') + .forEach(td => { + if (td.textContent === String(text) && td.className.includes('-in-view')) { + matchCell = td; + td.click('click'); + } + }); + + if (!matchCell) { + throw new Error('Cell not match in picker panel.'); + } + + return matchCell; +} diff --git a/src/core/components/BaseDatePicker/src/datePick/date-fns.tsx b/src/core/components/BaseDatePicker/src/datePick/date-fns.tsx new file mode 100644 index 0000000..5ab86df --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/date-fns.tsx @@ -0,0 +1,37 @@ +import type { App } from 'vue' +import dataFnsGenerateConfig from '@core/components/BaseDatePicker/src/vc-picker/generate/dateFns' +import type { + PickerProps, + PickerDateProps, + RangePickerProps as BaseRangePickerProps +} from './generatePicker' +import generatePicker from './generatePicker' +import type { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props' + +export type DatePickerProps = PickerProps & ExtraDatePickerProps +export type MonthPickerProps = Omit, 'picker'> & ExtraDatePickerProps +export type WeekPickerProps = Omit, 'picker'> & ExtraDatePickerProps +export type RangePickerProps = BaseRangePickerProps & ExtraRangePickerProps + +const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker, RangePicker } = + generatePicker(dataFnsGenerateConfig) + +/* istanbul ignore next */ +export { RangePicker, WeekPicker, MonthPicker, QuarterPicker } + +export default Object.assign(DatePicker, { + WeekPicker, + MonthPicker, + YearPicker, + RangePicker, + TimePicker, + QuarterPicker, + install: (app: App) => { + app.component(DatePicker.name, DatePicker) + app.component(RangePicker.name, RangePicker) + app.component(MonthPicker.name, MonthPicker) + app.component(WeekPicker.name, WeekPicker) + app.component(QuarterPicker.name, QuarterPicker) + return app + } +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/dayjs.tsx b/src/core/components/BaseDatePicker/src/datePick/dayjs.tsx new file mode 100644 index 0000000..ab48f42 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/dayjs.tsx @@ -0,0 +1,38 @@ +import type { Dayjs } from 'dayjs' +import type { App } from 'vue' +import dayjsGenerateConfig from '@core/components/BaseDatePicker/src/vc-picker/generate/dayjs' +import type { + PickerProps, + PickerDateProps, + RangePickerProps as BaseRangePickerProps +} from './generatePicker' +import generatePicker from './generatePicker' +import type { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props' + +export type DatePickerProps = PickerProps & ExtraDatePickerProps +export type MonthPickerProps = Omit, 'picker'> & ExtraDatePickerProps +export type WeekPickerProps = Omit, 'picker'> & ExtraDatePickerProps +export type RangePickerProps = BaseRangePickerProps & ExtraRangePickerProps + +const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker, RangePicker } = + generatePicker(dayjsGenerateConfig) + +/* istanbul ignore next */ +export { RangePicker, WeekPicker, MonthPicker, QuarterPicker } + +export default Object.assign(DatePicker, { + WeekPicker, + MonthPicker, + YearPicker, + RangePicker, + TimePicker, + QuarterPicker, + install: (app: App) => { + app.component(DatePicker.name, DatePicker) + app.component(RangePicker.name, RangePicker) + app.component(MonthPicker.name, MonthPicker) + app.component(WeekPicker.name, WeekPicker) + app.component(QuarterPicker.name, QuarterPicker) + return app + } +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/basic.vue b/src/core/components/BaseDatePicker/src/datePick/demo/basic.vue new file mode 100644 index 0000000..f51e4b7 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/basic.vue @@ -0,0 +1,42 @@ + +--- +order: 0 +title: + zh-CN: 基本用法 + en-US: Basic Usage +--- + +## zh-CN + +最简单的用法,在浮层中可以选择或者输入日期。 + +## en-US + +Basic use case. Users can select or input a date in panel. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/bordered.vue b/src/core/components/BaseDatePicker/src/datePick/demo/bordered.vue new file mode 100644 index 0000000..65a6e1b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/bordered.vue @@ -0,0 +1,51 @@ + +--- +order: 23 +title: + zh-CN: 无边框 + en-US: Bordered-less +--- + +## zh-CN + +无边框样式。 + +## en-US + +Bordered-less style component. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/date-render.vue b/src/core/components/BaseDatePicker/src/datePick/demo/date-render.vue new file mode 100644 index 0000000..939cc1a --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/date-render.vue @@ -0,0 +1,60 @@ + +--- +order: 9 +title: + zh-CN: 定制日期单元格 + en-US: Customized Date Rendering +--- + +## zh-CN + +使用 `dateRender` 可以自定义日期单元格的内容和样式。 + +## en-US + +We can customize the rendering of date cells in the calendar by providing a `dateRender` function to `DatePicker`. + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/disabled-date.vue b/src/core/components/BaseDatePicker/src/datePick/demo/disabled-date.vue new file mode 100644 index 0000000..7f21b53 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/disabled-date.vue @@ -0,0 +1,98 @@ + +--- +order: 4 +title: + zh-CN: 不可选择日期和时间 + en-US: Disabled Date & Time +--- + +## zh-CN + +可用 `disabledDate` 和 `disabledTime` 分别禁止选择部分日期和时间,其中 `disabledTime` 需要和 `showTime` 一起使用。 + +## en-US + +Disabled part of dates and time by `disabledDate` and `disabledTime` respectively, and `disabledTime` only works with `showTime`. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/disabled.vue b/src/core/components/BaseDatePicker/src/datePick/demo/disabled.vue new file mode 100644 index 0000000..9e14f78 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/disabled.vue @@ -0,0 +1,47 @@ + +--- +order: 3 +title: + zh-CN: 禁用 + en-US: Disabled +--- + +## zh-CN + +选择框的不可用状态。 + +## en-US + +A disabled state of the `DatePicker`. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/extra-footer.vue b/src/core/components/BaseDatePicker/src/datePick/demo/extra-footer.vue new file mode 100644 index 0000000..63be974 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/extra-footer.vue @@ -0,0 +1,37 @@ + +--- +order: 7 +title: + zh-CN: 额外的页脚 + en-US: Extra Footer +--- + +## zh-CN + +在浮层中加入额外的页脚,以满足某些定制信息的需求。 + +## en-US + +Render extra footer in panel for customized requirements. + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/format.vue b/src/core/components/BaseDatePicker/src/datePick/demo/format.vue new file mode 100644 index 0000000..9aef11c --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/format.vue @@ -0,0 +1,61 @@ + +--- +order: 1 +title: + zh-CN: 日期格式 + en-US: Date Format +--- + +## zh-CN + +使用 `format` 属性,可以自定义日期显示格式。 + +## en-US + +We can set the date format by `format`. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/index.vue b/src/core/components/BaseDatePicker/src/datePick/demo/index.vue new file mode 100644 index 0000000..3bfbe80 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/index.vue @@ -0,0 +1,66 @@ + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/mode.vue b/src/core/components/BaseDatePicker/src/datePick/demo/mode.vue new file mode 100644 index 0000000..f61482e --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/mode.vue @@ -0,0 +1,79 @@ + +--- +order: 10 +title: + zh-CN: 受控面板 + en-US: Controlled Panels +--- + +## zh-CN + +通过组合 `mode` 与 `onPanelChange` 控制要展示的面板。 + +## en-US + +Determing which panel to show with `mode` and `onPanelChange`. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/presetted-ranges.vue b/src/core/components/BaseDatePicker/src/datePick/demo/presetted-ranges.vue new file mode 100644 index 0000000..a825beb --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/presetted-ranges.vue @@ -0,0 +1,47 @@ + +--- +order: 6 +title: + zh-CN: 预设范围 + en-US: Preset Ranges +--- + +## zh-CN + +可以预设常用的日期范围以提高用户体验。 + +## en-US + +We can set presetted ranges to RangePicker to improve user experience. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/range-picker.vue b/src/core/components/BaseDatePicker/src/datePick/demo/range-picker.vue new file mode 100644 index 0000000..68f25e6 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/range-picker.vue @@ -0,0 +1,43 @@ + +--- +order: 1 +title: + zh-CN: 范围选择器 + en-US: Range Picker +--- + +## zh-CN + +通过设置 `picker` 属性,指定范围选择器类型。 + +## en-US + +Set range picker type by `picker` prop. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/select-in-range.vue b/src/core/components/BaseDatePicker/src/datePick/demo/select-in-range.vue new file mode 100644 index 0000000..be52039 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/select-in-range.vue @@ -0,0 +1,74 @@ + +--- +order: 5 +title: + zh-CN: 选择不超过七天的范围 + en-US: Select range dates in 7 days +--- + +## zh-CN + +这里举例如何用 `onCalendarChange` 和 `disabledDate` 来限制动态的日期区间选择。 + +## en-US + +A example shows how to select a dynamic range by using `onCalendarChange` and `disabledDate`. + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/size.vue b/src/core/components/BaseDatePicker/src/datePick/demo/size.vue new file mode 100644 index 0000000..120591f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/size.vue @@ -0,0 +1,41 @@ + +--- +order: 8 +title: + zh-CN: 三种大小 + en-US: Three Sizes +--- + +## zh-CN + +三种大小的输入框,若不设置,则为 `default`。 + +## en-US + +The input box comes in three sizes. `default` will be used if `size` is omitted. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/start-end.vue b/src/core/components/BaseDatePicker/src/datePick/demo/start-end.vue new file mode 100644 index 0000000..f1fe901 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/start-end.vue @@ -0,0 +1,98 @@ + +--- +order: 11 +title: + zh-CN: 自定义日期范围选择 + en-US: Customized Range Picker +--- + +## zh-CN + +当 `RangePicker` 无法满足业务需求时,可以使用两个 `DatePicker` 实现类似的功能。 +> - 通过设置 `disabledDate` 方法,来约束开始和结束日期。 +> - 通过 `open` `openChange` 来优化交互。 + +## en-US + +When `RangePicker` does not satisfied your requirements, try to implement similar functionality with two `DatePicker`. +> - Use the `disabledDate` property to limit the start and end dates. +> - Improve user experience with `open` and `openChange`. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/suffix.vue b/src/core/components/BaseDatePicker/src/datePick/demo/suffix.vue new file mode 100644 index 0000000..42ed119 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/suffix.vue @@ -0,0 +1,69 @@ + +--- +order: 13 +title: + zh-CN: 后缀图标 + en-US: Suffix +--- + +## zh-CN + +通过 `suffixIcon` 自定义后缀图标 + +## en-US + +Customize the suffix icon through `suffixIcon` + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/switchable.vue b/src/core/components/BaseDatePicker/src/datePick/demo/switchable.vue new file mode 100644 index 0000000..b396de9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/switchable.vue @@ -0,0 +1,44 @@ + +--- +order: 1.1 +title: + zh-CN: 切换不同的选择器 + en-US: Switchable picker +--- + +## zh-CN + +提供选择器,自由切换不同类型的日期选择器,常用于日期筛选场合。 + +## en-US + +Switch in different types of pickers by Select. + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/text.vue b/src/core/components/BaseDatePicker/src/datePick/demo/text.vue new file mode 100644 index 0000000..30baf83 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/text.vue @@ -0,0 +1,55 @@ + +--- +order: 12 +title: + zh-CN: 自定义渲染 + en-US: Custum Time +--- + +## zh-CN + +增加自定义渲染功能,在默认 `slot` 中,你可以设置任何你想渲染的组件。 + +## en-US + +Added custom rendering function, in the default `slot`, you can set any component you want to render. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/demo/time.vue b/src/core/components/BaseDatePicker/src/datePick/demo/time.vue new file mode 100644 index 0000000..41f64c0 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/demo/time.vue @@ -0,0 +1,62 @@ + +--- +order: 2 +title: + zh-CN: 日期时间选择 + en-US: Choose Time +--- + +## zh-CN + +增加选择时间功能,当 `showTime` 为一个对象时,其属性会传递给内建的 `TimePicker`。 + +## en-US + +This property provide an additional time selection. When `showTime` is an Object, its properties will be passed on to built-in `TimePicker`. + + + + + diff --git a/src/core/components/BaseDatePicker/src/datePick/generatePicker/generateRangePicker.tsx b/src/core/components/BaseDatePicker/src/datePick/generatePicker/generateRangePicker.tsx new file mode 100644 index 0000000..5a647ad --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/generatePicker/generateRangePicker.tsx @@ -0,0 +1,217 @@ +import CalendarOutlined from '@ant-design/icons-vue/CalendarOutlined' +import ClockCircleOutlined from '@ant-design/icons-vue/ClockCircleOutlined' +import CloseCircleFilled from '@ant-design/icons-vue/CloseCircleFilled' +import SwapRightOutlined from '@ant-design/icons-vue/SwapRightOutlined' +import { RangePicker as VCRangePicker } from '../../vc-picker' +import type { GenerateConfig } from '@core/components/BaseDatePicker/src/vc-picker/generate' +import enUS from '../locale/en_US' +import { useLocaleReceiver } from 'ant-design-vue/es/locale-provider/LocaleReceiver' +import { getRangePlaceholder } from '../util' +import { getTimeProps, Components } from './index' +import { computed, defineComponent, ref } from 'vue' +import useConfigInject from 'ant-design-vue/es/_util/hooks/useConfigInject' +import classNames from 'ant-design-vue/es/_util/classNames' +import type { CommonProps, RangePickerProps } from './props' +import { commonProps, rangePickerProps } from './props' +import type { PanelMode, RangeValue } from '@core/components/BaseDatePicker/src/vc-picker/interface' +import type { RangePickerSharedProps } from '@core/components/BaseDatePicker/src/vc-picker/RangePicker' +import devWarning from 'ant-design-vue/es/vc-util/devWarning' +import { useInjectFormItemContext } from 'ant-design-vue/es/form/FormItemContext' +import omit from 'ant-design-vue/es/_util/omit' + +export default function generateRangePicker( + generateConfig: GenerateConfig, + extraProps: ExtraProps +) { + const RangePicker = defineComponent({ + name: 'ARangePicker', + inheritAttrs: false, + props: { + ...commonProps(), + ...rangePickerProps(), + ...extraProps + }, + slots: [ + 'suffixIcon', + // 'clearIcon', + 'prevIcon', + 'nextIcon', + 'superPrevIcon', + 'superNextIcon', + // 'panelRender', + 'dateRender', + 'renderExtraFooter' + // 'separator', + ], + setup(_props, { expose, slots, attrs, emit }) { + const props = _props as unknown as CommonProps & RangePickerProps + const formItemContext = useInjectFormItemContext() + devWarning( + !attrs.getCalendarContainer, + 'DatePicker', + '`getCalendarContainer` is deprecated. Please use `getPopupContainer"` instead.' + ) + const { prefixCls, direction, getPopupContainer, size, rootPrefixCls } = useConfigInject( + 'picker', + props + ) + const pickerRef = ref() + expose({ + focus: () => { + pickerRef.value?.focus() + }, + blur: () => { + pickerRef.value?.blur() + } + }) + const maybeToStrings = (dates: DateType[]) => { + return props.valueFormat ? generateConfig.toString(dates, props.valueFormat) : dates + } + const onChange = (dates: [DateType, DateType], dateStrings: [string, string]) => { + const values = maybeToStrings(dates) + emit('update:value', values) + emit('change', values, dateStrings) + formItemContext.onFieldChange() + } + const onOpenChange = (open: boolean) => { + emit('update:open', open) + emit('openChange', open) + } + const onFocus = (e: FocusEvent) => { + emit('focus', e) + } + const onBlur = (e: FocusEvent) => { + emit('blur', e) + formItemContext.onFieldBlur() + } + const onPanelChange = (dates: RangeValue, modes: [PanelMode, PanelMode]) => { + const values = maybeToStrings(dates) + emit('panelChange', values, modes) + } + const onOk = (dates: DateType[]) => { + const value = maybeToStrings(dates) + emit('ok', value) + } + const onCalendarChange: RangePickerSharedProps['onCalendarChange'] = ( + dates: [DateType, DateType], + dateStrings: [string, string], + info + ) => { + const values = maybeToStrings(dates) + emit('calendarChange', values, dateStrings, info) + } + const [contextLocale] = useLocaleReceiver('DatePicker', enUS) + + const value = computed(() => { + if (props.value) { + return props.valueFormat + ? generateConfig.toDate(props.value, props.valueFormat) + : props.value + } + return props.value + }) + const defaultValue = computed(() => { + if (props.defaultValue) { + return props.valueFormat + ? generateConfig.toDate(props.defaultValue, props.valueFormat) + : props.defaultValue + } + return props.defaultValue + }) + const defaultPickerValue = computed(() => { + if (props.defaultPickerValue) { + return props.valueFormat + ? generateConfig.toDate(props.defaultPickerValue, props.valueFormat) + : props.defaultPickerValue + } + return props.defaultPickerValue + }) + return () => { + const locale = { ...contextLocale.value, ...props.locale } + const p = { ...props, ...attrs } + const { + prefixCls: customizePrefixCls, + bordered = true, + placeholder, + suffixIcon = slots.suffixIcon?.(), + picker = 'date', + transitionName, + allowClear = true, + dateRender = slots.dateRender, + renderExtraFooter = slots.renderExtraFooter, + separator = slots.separator?.(), + clearIcon = slots.clearIcon?.(), + id = formItemContext.id.value, + ...restProps + } = p + delete restProps['onUpdate:value'] + delete restProps['onUpdate:open'] + const { format, showTime } = p as any + + let additionalOverrideProps: any = {} + additionalOverrideProps = { + ...additionalOverrideProps, + ...(showTime ? getTimeProps({ format, picker, ...showTime }) : {}), + ...(picker === 'time' + ? getTimeProps({ format, ...omit(restProps, ['disabledTime']), picker }) + : {}) + } + const pre = prefixCls.value + return ( + + + + ) + } + ref={pickerRef} + placeholder={getRangePlaceholder(picker, locale, placeholder as [string, string])} + suffixIcon={ + suffixIcon || (picker === 'time' ? : ) + } + clearIcon={clearIcon || } + allowClear={allowClear} + transitionName={transitionName || `${rootPrefixCls.value}-slide-up`} + {...restProps} + {...additionalOverrideProps} + id={id} + value={value.value} + defaultValue={defaultValue.value} + defaultPickerValue={defaultPickerValue.value} + picker={picker} + class={classNames( + { + [`${pre}-${size.value}`]: size.value, + [`${pre}-borderless`]: !bordered + }, + attrs.class + )} + locale={locale!.lang} + prefixCls={pre} + getPopupContainer={attrs.getCalendarContainer || getPopupContainer.value} + generateConfig={generateConfig} + prevIcon={slots.prevIcon?.() || } + nextIcon={slots.nextIcon?.() || } + superPrevIcon={slots.superPrevIcon?.() || } + superNextIcon={slots.superNextIcon?.() || } + components={Components} + direction={direction.value} + onChange={onChange} + onOpenChange={onOpenChange} + onFocus={onFocus} + onBlur={onBlur} + onPanelChange={onPanelChange} + onOk={onOk} + onCalendarChange={onCalendarChange} + /> + ) + } + } + }) + + return RangePicker +} diff --git a/src/core/components/BaseDatePicker/src/datePick/generatePicker/generateSinglePicker.tsx b/src/core/components/BaseDatePicker/src/datePick/generatePicker/generateSinglePicker.tsx new file mode 100644 index 0000000..0d555df --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/generatePicker/generateSinglePicker.tsx @@ -0,0 +1,246 @@ +import CalendarOutlined from '@ant-design/icons-vue/CalendarOutlined' +import ClockCircleOutlined from '@ant-design/icons-vue/ClockCircleOutlined' +import CloseCircleFilled from '@ant-design/icons-vue/CloseCircleFilled' +import RCPicker from '../../vc-picker' +import type { PanelMode, PickerMode } from '@core/components/BaseDatePicker/src/vc-picker/interface' +import type { GenerateConfig } from '@core/components/BaseDatePicker/src/vc-picker/generate' +import enUS from '../locale/en_US' +import { getPlaceholder } from '../util' +import { useLocaleReceiver } from 'ant-design-vue/es/locale-provider/LocaleReceiver' +import { getTimeProps, Components } from './index' +import { computed, defineComponent, ref } from 'vue' +import useConfigInject from 'ant-design-vue/es/_util/hooks/useConfigInject' +import classNames from 'ant-design-vue/es/_util/classNames' +import type { CommonProps, DatePickerProps } from './props' +import { commonProps, datePickerProps } from './props' + +import devWarning from 'ant-design-vue/es/vc-util/devWarning' +import { useInjectFormItemContext } from 'ant-design-vue/es/form/FormItemContext' + +export default function generateSinglePicker( + generateConfig: GenerateConfig, + extraProps: ExtraProps +) { + function getPicker(picker?: PickerMode, displayName?: string) { + const comProps = { + ...commonProps(), + ...datePickerProps(), + ...extraProps + } + return defineComponent({ + name: displayName, + inheritAttrs: false, + props: comProps, + slots: [ + 'suffixIcon', + // 'clearIcon', + 'prevIcon', + 'nextIcon', + 'superPrevIcon', + 'superNextIcon', + // 'panelRender', + 'dateRender', + 'renderExtraFooter', + 'monthCellRender' + ], + setup(_props, { slots, expose, attrs, emit }) { + // 兼容 vue 3.2.7 + const props = _props as unknown as CommonProps & + DatePickerProps & + ExtraProps + const formItemContext = useInjectFormItemContext() + devWarning( + !(props.monthCellContentRender || slots.monthCellContentRender), + 'DatePicker', + '`monthCellContentRender` is deprecated. Please use `monthCellRender"` instead.' + ) + + devWarning( + !attrs.getCalendarContainer, + 'DatePicker', + '`getCalendarContainer` is deprecated. Please use `getPopupContainer"` instead.' + ) + const { prefixCls, direction, getPopupContainer, size, rootPrefixCls } = useConfigInject( + 'picker', + props + ) + const pickerRef = ref() + expose({ + focus: () => { + pickerRef.value?.focus() + }, + blur: () => { + pickerRef.value?.blur() + } + }) + const maybeToString = (date: DateType) => { + return props.valueFormat ? generateConfig.toString(date, props.valueFormat) : date + } + const onChange = (date: DateType, dateString: string) => { + const value = maybeToString(date) + emit('update:value', value) + emit('change', value, dateString) + formItemContext.onFieldChange() + } + const onOpenChange = (open: boolean) => { + emit('update:open', open) + emit('openChange', open) + } + const onFocus = (e: FocusEvent) => { + emit('focus', e) + } + const onBlur = (e: FocusEvent) => { + emit('blur', e) + formItemContext.onFieldBlur() + } + const onPanelChange = (date: DateType, mode: PanelMode | null) => { + const value = maybeToString(date) + emit('panelChange', value, mode) + } + const onOk = (date: DateType) => { + const value = maybeToString(date) + emit('ok', value) + } + + const [contextLocale] = useLocaleReceiver('DatePicker', enUS) + + const value = computed(() => { + if (props.value) { + return props.valueFormat + ? generateConfig.toDate(props.value as string | DateType, props.valueFormat) + : props.value + } + return (props.value === '' ? undefined : props.value) as DateType + }) + const defaultValue = computed(() => { + if (props.defaultValue) { + return props.valueFormat + ? generateConfig.toDate(props.defaultValue as string | DateType, props.valueFormat) + : props.defaultValue + } + return (props.defaultValue === '' ? undefined : props.defaultValue) as DateType + }) + const defaultPickerValue = computed(() => { + if (props.defaultPickerValue) { + return props.valueFormat + ? generateConfig.toDate( + props.defaultPickerValue as string | DateType, + props.valueFormat + ) + : props.defaultPickerValue + } + return ( + props.defaultPickerValue === '' ? undefined : props.defaultPickerValue + ) as DateType + }) + + return () => { + const locale = { ...contextLocale.value, ...props.locale } + const p = { ...props, ...attrs } + const { + bordered = true, + placeholder, + suffixIcon = slots.suffixIcon?.(), + showToday = true, + transitionName, + allowClear = true, + dateRender = slots.dateRender, + renderExtraFooter = slots.renderExtraFooter, + monthCellRender = slots.monthCellRender || + (props as any).monthCellContentRender || + slots.monthCellContentRender, + clearIcon = slots.clearIcon?.(), + id = formItemContext.id.value, + ...restProps + } = p + const showTime = p.showTime === '' ? true : p.showTime + const { format } = p as any + + let additionalOverrideProps: any = {} + if (picker) { + additionalOverrideProps.picker = picker + } + const mergedPicker = picker || p.picker || 'date' + + additionalOverrideProps = { + ...additionalOverrideProps, + ...(showTime + ? getTimeProps({ + format, + picker: mergedPicker, + ...(typeof showTime === 'object' ? showTime : {}) + }) + : {}), + ...(mergedPicker === 'time' + ? getTimeProps({ format, ...restProps, picker: mergedPicker }) + : {}) + } + const pre = prefixCls.value + return ( + : ) + } + clearIcon={clearIcon || } + allowClear={allowClear} + transitionName={transitionName || `${rootPrefixCls.value}-slide-up`} + {...restProps} + {...additionalOverrideProps} + id={id} + picker={mergedPicker} + value={value.value} + defaultValue={defaultValue.value} + defaultPickerValue={defaultPickerValue.value} + showToday={showToday} + locale={locale!.lang} + class={classNames( + { + [`${pre}-${size.value}`]: size.value, + [`${pre}-borderless`]: !bordered + }, + attrs.class + )} + prefixCls={pre} + getPopupContainer={attrs.getCalendarContainer || getPopupContainer.value} + generateConfig={generateConfig} + prevIcon={slots.prevIcon?.() || } + nextIcon={slots.nextIcon?.() || } + superPrevIcon={slots.superPrevIcon?.() || } + superNextIcon={slots.superNextIcon?.() || } + components={Components} + direction={direction.value} + onChange={onChange} + onOpenChange={onOpenChange} + onFocus={onFocus} + onBlur={onBlur} + onPanelChange={onPanelChange} + onOk={onOk} + /> + ) + } + } + }) + } + + const DatePicker = getPicker(undefined, 'ADatePicker') + const WeekPicker = getPicker('week', 'AWeekPicker') + const MonthPicker = getPicker('month', 'AMonthPicker') + const YearPicker = getPicker('year', 'AYearPicker') + const TimePicker = getPicker('time', 'TimePicker') // 给独立组件 TimePicker 使用,此处名称不用更改 + const QuarterPicker = getPicker('quarter', 'AQuarterPicker') + + return { + DatePicker, + WeekPicker, + MonthPicker, + YearPicker, + TimePicker, + QuarterPicker + } +} diff --git a/src/core/components/BaseDatePicker/src/datePick/generatePicker/index.tsx b/src/core/components/BaseDatePicker/src/datePick/generatePicker/index.tsx new file mode 100644 index 0000000..ef62e6a --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/generatePicker/index.tsx @@ -0,0 +1,80 @@ +import type { GenerateConfig } from '@core/components/BaseDatePicker/src/vc-picker/generate' +import type { SharedTimeProps } from '@core/components/BaseDatePicker/src/vc-picker/panels/TimePanel' +import type { PickerMode } from '@core/components/BaseDatePicker/src/vc-picker/interface' +import PickerButton from '../PickerButton' +import PickerTag from '../PickerTag' +import generateSinglePicker from './generateSinglePicker' +import generateRangePicker from './generateRangePicker' + +export * from './interface' + +export const Components = { button: PickerButton, rangeItem: PickerTag } + +function toArray(list: T | T[]): T[] { + if (!list) { + return [] + } + return Array.isArray(list) ? list : [list] +} + +export function getTimeProps( + props: { format?: string; picker?: PickerMode } & SharedTimeProps +) { + const { format, picker, showHour, showMinute, showSecond, use12Hours } = props + + const firstFormat = toArray(format)[0] + const showTimeObj: SharedTimeProps = { ...props } + + if (firstFormat && typeof firstFormat === 'string') { + if (!firstFormat.includes('s') && showSecond === undefined) { + showTimeObj.showSecond = false + } + if (!firstFormat.includes('m') && showMinute === undefined) { + showTimeObj.showMinute = false + } + if (!firstFormat.includes('H') && !firstFormat.includes('h') && showHour === undefined) { + showTimeObj.showHour = false + } + + if ((firstFormat.includes('a') || firstFormat.includes('A')) && use12Hours === undefined) { + showTimeObj.use12Hours = true + } + } + + if (picker === 'time') { + return showTimeObj + } + + if (typeof firstFormat === 'function') { + // format of showTime should use default when format is custom format function + delete showTimeObj.format + } + + return { + showTime: showTimeObj + } +} + +function generatePicker( + generateConfig: GenerateConfig, + extraProps?: ExtraProps +) { + // =========================== Picker =========================== + const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker } = + generateSinglePicker(generateConfig, extraProps) + + // ======================== Range Picker ======================== + const RangePicker = generateRangePicker(generateConfig, extraProps) + + return { + DatePicker, + WeekPicker, + MonthPicker, + YearPicker, + TimePicker, + QuarterPicker, + RangePicker + } +} + +export default generatePicker diff --git a/src/core/components/BaseDatePicker/src/datePick/generatePicker/interface.ts b/src/core/components/BaseDatePicker/src/datePick/generatePicker/interface.ts new file mode 100644 index 0000000..54ecdb9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/generatePicker/interface.ts @@ -0,0 +1,74 @@ +import type { + PickerBaseProps as RCPickerBaseProps, + PickerDateProps as RCPickerDateProps, + PickerTimeProps as RCPickerTimeProps +} from '@core/components/BaseDatePicker/src/vc-picker/Picker' +import type { + RangePickerBaseProps as RCRangePickerBaseProps, + RangePickerDateProps as RCRangePickerDateProps, + RangePickerTimeProps as RCRangePickerTimeProps +} from '@core/components/BaseDatePicker/src/vc-picker/RangePicker' +import type { Locale as RcPickerLocale } from '@core/components/BaseDatePicker/src/vc-picker/interface' +import type { TimePickerLocale } from 'ant-design-vue/es/time-picker' +import type { SizeType } from 'ant-design-vue/es/config-provider' + +type InjectDefaultProps = Omit< + Props, + | 'locale' + | 'generateConfig' + | 'prevIcon' + | 'nextIcon' + | 'superPrevIcon' + | 'superNextIcon' + | 'hideHeader' + | 'components' +> & { + locale?: PickerLocale + size?: SizeType + bordered?: boolean +} + +export type PickerLocale = { + lang: RcPickerLocale & AdditionalPickerLocaleLangProps + timePickerLocale: TimePickerLocale +} & AdditionalPickerLocaleProps + +export type AdditionalPickerLocaleProps = { + dateFormat?: string + dateTimeFormat?: string + weekFormat?: string + monthFormat?: string +} + +export type AdditionalPickerLocaleLangProps = { + placeholder: string + yearPlaceholder?: string + quarterPlaceholder?: string + monthPlaceholder?: string + weekPlaceholder?: string + rangeYearPlaceholder?: [string, string] + rangeQuarterPlaceholder?: [string, string] + rangeMonthPlaceholder?: [string, string] + rangeWeekPlaceholder?: [string, string] + rangePlaceholder?: [string, string] +} + +// Picker Props +export type PickerBaseProps = InjectDefaultProps> +export type PickerDateProps = InjectDefaultProps> +export type PickerTimeProps = InjectDefaultProps> + +export type PickerProps = + | PickerBaseProps + | PickerDateProps + | PickerTimeProps + +// Range Picker Props +export type RangePickerBaseProps = InjectDefaultProps> +export type RangePickerDateProps = InjectDefaultProps> +export type RangePickerTimeProps = InjectDefaultProps> + +export type RangePickerProps = + | RangePickerBaseProps + | RangePickerDateProps + | RangePickerTimeProps diff --git a/src/core/components/BaseDatePicker/src/datePick/generatePicker/props.ts b/src/core/components/BaseDatePicker/src/datePick/generatePicker/props.ts new file mode 100644 index 0000000..120905d --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/generatePicker/props.ts @@ -0,0 +1,289 @@ +import type { FocusEventHandler, MouseEventHandler } from 'ant-design-vue/es/_util/EventInterface' +import type { CSSProperties, PropType } from 'vue' +import type { PickerLocale } from './index' +import type { SizeType } from 'ant-design-vue/es/config-provider' +import type { AlignType } from 'ant-design-vue/es/vc-align/interface' +import type { + CustomFormat, + DisabledTime, + DisabledTimes, + EventValue, + PanelMode, + PickerMode, + RangeValue +} from '@core/components/BaseDatePicker/src/vc-picker/interface' +import type { DateRender } from '@core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/DateBody' +import type { MonthCellRender } from '@core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/MonthBody' +import type { SharedTimeProps } from '@core/components/BaseDatePicker/src/vc-picker/panels/TimePanel' +import type { + RangeDateRender, + RangeInfo, + RangeType +} from '@core/components/BaseDatePicker/src/vc-picker/RangePicker' +import type { VueNode } from 'ant-design-vue/es/_util/type' + +function commonProps() { + return { + id: String, + dropdownClassName: String, + dropdownAlign: { type: Object as PropType }, + popupStyle: { type: Object as PropType }, + transitionName: String, + placeholder: String, + allowClear: { type: Boolean, default: undefined }, + autofocus: { type: Boolean, default: undefined }, + disabled: { type: Boolean, default: undefined }, + tabindex: Number, + open: { type: Boolean, default: undefined }, + defaultOpen: { type: Boolean, default: undefined }, + /** Make input readOnly to avoid popup keyboard in mobile */ + inputReadOnly: { type: Boolean, default: undefined }, + // Value + // format: string | CustomFormat | (string | CustomFormat)[]; + // Render + // suffixIcon?: VueNode; + // clearIcon?: VueNode; + // prevIcon?: VueNode; + // nextIcon?: VueNode; + // superPrevIcon?: VueNode; + // superNextIcon?: VueNode; + getPopupContainer: { type: Function as PropType<(node: HTMLElement) => HTMLElement> }, + panelRender: { type: Function as PropType<(originPanel: VueNode) => VueNode> }, + // // Events + onChange: { + type: Function as PropType<(value: DateType | string | null, dateString: string) => void> + }, + 'onUpdate:value': { type: Function as PropType<(value: DateType | string | null) => void> }, + onOk: { type: Function as PropType<(value: DateType | string | null) => void> }, + onOpenChange: { type: Function as PropType<(open: boolean) => void> }, + 'onUpdate:open': { type: Function as PropType<(open: boolean) => void> }, + onFocus: { type: Function as PropType }, + onBlur: { type: Function as PropType }, + onMousedown: { type: Function as PropType }, + onMouseup: { type: Function as PropType }, + onMouseenter: { type: Function as PropType }, + onMouseleave: { type: Function as PropType }, + onClick: { type: Function as PropType }, + onContextmenu: { type: Function as PropType }, + onKeydown: { + type: Function as PropType<(event: KeyboardEvent, preventDefault: () => void) => void> + }, + // WAI-ARIA + role: String, + name: String, + autocomplete: String, + direction: { type: String as PropType<'ltr' | 'rtl'> }, + showToday: { type: Boolean, default: undefined }, + showTime: { + type: [Boolean, Object] as PropType>, + default: undefined + }, + locale: { type: Object as PropType }, + size: { type: String as PropType }, + bordered: { type: Boolean, default: undefined }, + dateRender: { type: Function as PropType> }, + disabledDate: { type: Function as PropType<(date: DateType) => boolean> }, + mode: { type: String as PropType }, + picker: { type: String as PropType }, + valueFormat: String, + + /** @deprecated Please use `disabledTime` instead. */ + disabledHours: Function as PropType, + /** @deprecated Please use `disabledTime` instead. */ + disabledMinutes: Function as PropType, + /** @deprecated Please use `disabledTime` instead. */ + disabledSeconds: Function as PropType + } +} + +export interface CommonProps { + id?: string + prefixCls?: string + dropdownClassName?: string + dropdownAlign?: AlignType + popupStyle?: CSSProperties + transitionName?: string + placeholder?: string + allowClear?: boolean + autofocus?: boolean + disabled?: boolean + tabindex?: number + open?: boolean + defaultOpen?: boolean + inputReadOnly?: boolean + suffixIcon?: VueNode + clearIcon?: VueNode + prevIcon?: VueNode + nextIcon?: VueNode + superPrevIcon?: VueNode + superNextIcon?: VueNode + getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement + panelRender?: (originPanel: VueNode) => VueNode + onChange?: (value: DateType | string | null, dateString: string) => void + 'onUpdate:value'?: (value: DateType | string | null) => void + onOk?: (value: DateType | string | null) => void + onOpenChange?: (open: boolean) => void + 'onUpdate:open'?: (open: boolean) => void + onFocus?: FocusEventHandler + onBlur?: FocusEventHandler + onMousedown?: MouseEventHandler + onMouseup?: MouseEventHandler + onMouseenter?: MouseEventHandler + onMouseleave?: MouseEventHandler + onClick?: MouseEventHandler + onContextmenu?: MouseEventHandler + onKeydown?: (event: KeyboardEvent, preventDefault: () => void) => void + role?: string + name?: string + autocomplete?: string + direction?: 'ltr' | 'rtl' + showToday?: boolean + showTime?: boolean | SharedTimeProps + locale?: PickerLocale + size?: SizeType + bordered?: boolean + dateRender?: DateRender + disabledDate?: (date: DateType) => boolean + mode?: PanelMode + picker?: PickerMode + valueFormat?: string +} + +function datePickerProps() { + return { + defaultPickerValue: { type: [String, Object] as PropType }, + defaultValue: { type: [String, Object] as PropType }, + value: { type: [String, Object] as PropType }, + disabledTime: { type: Function as PropType> }, + format: { + type: [String, Function, Array] as PropType< + string | CustomFormat | (string | CustomFormat)[] + > + }, + renderExtraFooter: { type: Function as PropType<(mode: PanelMode) => VueNode> }, + showNow: { type: Boolean, default: undefined }, + monthCellRender: { type: Function as PropType> }, + // deprecated Please use `monthCellRender"` instead.', + monthCellContentRender: { type: Function as PropType> } + } +} + +export interface DatePickerProps { + defaultPickerValue?: DateType | string + defaultValue?: DateType | string + value?: DateType | string + disabledTime?: DisabledTime + format?: string | CustomFormat | (string | CustomFormat)[] + renderExtraFooter?: (mode: PanelMode) => VueNode + showNow?: boolean + monthCellRender?: MonthCellRender + // deprecated Please use `monthCellRender"` instead.', + monthCellContentRender?: MonthCellRender +} + +function rangePickerProps() { + return { + allowEmpty: { type: Array as unknown as PropType<[boolean, boolean]> }, + dateRender: { type: Function as PropType> }, + defaultPickerValue: { + type: Array as unknown as PropType | RangeValue> + }, + defaultValue: { type: Array as unknown as PropType | RangeValue> }, + value: { type: Array as unknown as PropType | RangeValue> }, + disabledTime: { + type: Function as PropType<(date: EventValue, type: RangeType) => DisabledTimes> + }, + disabled: { type: [Boolean, Array] as unknown as PropType }, + format: String, + renderExtraFooter: { type: Function as PropType<() => VueNode> }, + separator: { type: String }, + ranges: { + type: Object as PropType< + Record< + string, + Exclude, null> | (() => Exclude, null>) + > + > + }, + placeholder: Array, + mode: { type: Array as unknown as PropType<[PanelMode, PanelMode]> }, + onChange: { + type: Function as PropType< + ( + value: RangeValue | RangeValue | null, + dateString: [string, string] + ) => void + > + }, + 'onUpdate:value': { + type: Function as PropType<(value: RangeValue | RangeValue | null) => void> + }, + onCalendarChange: { + type: Function as PropType< + ( + values: RangeValue | RangeValue, + formatString: [string, string], + info: RangeInfo + ) => void + > + }, + onPanelChange: { + type: Function as PropType< + (values: RangeValue | RangeValue, modes: [PanelMode, PanelMode]) => void + > + }, + onOk: { + type: Function as PropType<(dates: RangeValue | RangeValue) => void> + } + } +} + +export interface RangePickerProps { + allowEmpty?: [boolean, boolean] + dateRender?: RangeDateRender + defaultPickerValue?: RangeValue | RangeValue + defaultValue?: RangeValue | RangeValue + value?: RangeValue | RangeValue + disabledTime?: (date: EventValue, type: RangeType) => DisabledTimes + disabled?: [boolean, boolean] + format?: string + renderExtraFooter?: () => VueNode + separator?: string + ranges?: Record< + string, + Exclude, null> | (() => Exclude, null>) + > + placeholder?: [string, string] + mode?: [PanelMode, PanelMode] + onChange?: ( + value: RangeValue | RangeValue | null, + dateString: [string, string] + ) => void + 'onUpdate:value'?: (value: RangeValue | RangeValue | null) => void + onCalendarChange?: ( + values: RangeValue | RangeValue, + formatString: [string, string], + info: RangeInfo + ) => void + onPanelChange?: ( + values: RangeValue | RangeValue, + modes: [PanelMode, PanelMode] + ) => void + onOk?: (dates: RangeValue | RangeValue) => void +} + +export type ExtraDatePickerProps = { + valueFormat?: string + defaultPickerValue?: DateType | string + defaultValue?: DateType | string + value?: DateType | string +} + +export type ExtraRangePickerProps = { + valueFormat?: string + defaultPickerValue?: RangeValue | RangeValue + defaultValue?: RangeValue | RangeValue + value?: RangeValue | RangeValue +} + +export { commonProps, datePickerProps, rangePickerProps } diff --git a/src/core/components/BaseDatePicker/src/datePick/index.en-US.md b/src/core/components/BaseDatePicker/src/datePick/index.en-US.md new file mode 100644 index 0000000..094beb1 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/index.en-US.md @@ -0,0 +1,196 @@ +--- +category: Components +type: Data Entry +title: DatePicker +cover: https://gw.alipayobjects.com/zos/alicdn/RT_USzA48/DatePicker.svg +--- + +To select or input a date. + +## When To Use + +By clicking the input box, you can select a date from a popup calendar. + +## API + +There are five kinds of picker: + +- DatePicker +- DatePicker\[picker="month"] +- DatePicker\[picker="week"] +- DatePicker\[picker="year"] +- DatePicker\[picker="quarter"] +- RangePicker + +### Localization + +The default locale is en-US, if you need to use other languages, recommend to use internationalized components provided by us at the entrance. Look at: [ConfigProvider](/components/config-provider/). + +If there are special needs (only modifying single component language), Please use the property: local. Example: [default](https://github.com/vueComponent/ant-design-vue/blob/main/components/date-picker/locale/example.json). + +```html + + +``` + +```html + + +``` + +### Common API + +The following APIs are shared by DatePicker, RangePicker. + +| Property | Description | Type | Default | Version | +| --- | --- | --- | --- | --- | +| allowClear | Whether to show clear button | boolean | true | | +| autofocus | If get focus when component mounted | boolean | false | | +| bordered | Whether has border style | boolean | true | | +| dateRender | Custom rendering function for date cells | v-slot:dateRender="{current, today}" | - | | +| disabled | Determine whether the DatePicker is disabled | boolean | false | | +| disabledDate | Specify the date that cannot be selected | (currentDate: dayjs) => boolean | - | | +| dropdownClassName | To customize the className of the popup calendar | string | - | | +| getPopupContainer | To set the container of the floating layer, while the default is to create a `div` element in `body` | function(trigger) | - | | +| inputReadOnly | Set the `readonly` attribute of the input tag (avoids virtual keyboard on touch devices) | boolean | false | | +| locale | Localization configuration | object | [default](https://github.com/vueComponent/ant-design-vue/blob/main/components/date-picker/locale/example.json) | | +| mode | The picker panel mode | `time` \| `date` \| `month` \| `year` \| `decade` | - | | +| nextIcon | The custom next icon | slot | - | 3.0 | +| open | The open state of picker | boolean | - | | +| picker | Set picker type | `date` \| `week` \| `month` \| `quarter` \| `year` | `date` | `quarter` | +| placeholder | The placeholder of date input | string \| \[string,string] | - | | +| popupStyle | To customize the style of the popup calendar | CSSProperties | {} | | +| prevIcon | The custom prev icon | slot | - | 3.0 | +| size | To determine the size of the input box, the height of `large` and `small`, are 40px and 24px respectively, while default size is 32px | `large` \| `middle` \| `small` | - | | +| suffixIcon | The custom suffix icon | v-slot:suffixIcon | - | | +| superNextIcon | The custom super next icon | slot | - | 3.0 | +| superPrevIcon | The custom super prev icon | slot | - | 3.0 | +| valueFormat | optional, format of binding value. If not specified, the binding value will be a Date object | string,[date formats](https://day.js.org/docs/en/display/format) | - | | + +### Common Events + +| Events Name | Description | Arguments | Version | +| --- | --- | --- | --- | +| openChange | a callback function, can be executed whether the popup calendar is popped up or closed | function(status) | | +| panelChange | callback when picker panel mode is changed | function(value, mode) | | + +### Common Methods + +| Name | Description | Version | +| ------- | ------------ | ------- | +| blur() | remove focus | | +| focus() | get focus | | + +### DatePicker + +| Property | Description | Type | Default | Version | +| --- | --- | --- | --- | --- | +| defaultPickerValue | To set default picker date | [dayjs](https://day.js.org/) | - | | +| disabledTime | To specify the time that cannot be selected | function(date) | - | | +| format | To set the date format, refer to [dayjs](https://day.js.org/). When an array is provided, all values are used for parsing and first value is used for formatting, support [Custom Format](#components-date-picker-demo-format) | string \| (value: dayjs) => string \| (string \| (value: dayjs) => string)\[] | `YYYY-MM-DD` | | +| renderExtraFooter | Render extra footer in panel | v-slot:renderExtraFooter="mode" | - | | +| showNow | Whether to show 'Now' button on panel when `showTime` is set | boolean | - | | +| showTime | To provide an additional time selection | object \| boolean | [TimePicker Options](/components/time-picker/#API) | | +| showTime.defaultValue | To set default time of selected date, [demo](#components-date-picker-demo-disabled-date) | [dayjs](https://day.js.org/) | dayjs() | | +| showToday | Whether to show `Today` button | boolean | true | | +| value(v-model) | To set date | [dayjs](https://day.js.org/) | - | | + +### DatePicker Events + +| Events Name | Description | Arguments | Version | +| --- | --- | --- | --- | +| change | a callback function, can be executed when the selected time is changing | function(date: dayjs \| string, dateString: string) | | +| ok | callback when click ok button | function(date: dayjs \| string) | | + +### DatePicker\[picker=year] + +| Property | Description | Type | Default | Version | +| --- | --- | --- | --- | --- | +| format | To set the date format, refer to [dayjs](https://day.js.org/) | string | `YYYY` | | + +### DatePicker\[picker=quarter] + +| Property | Description | Type | Default | Version | +| --- | --- | --- | --- | --- | +| format | To set the date format, refer to [dayjs](https://day.js.org/) | string | `YYYY-\QQ` | | + +### DatePicker\[picker=month] + +| Property | Description | Type | Default | Version | +| --- | --- | --- | --- | --- | +| format | To set the date format, refer to [dayjs](https://day.js.org/) | string | `YYYY-MM` | | +| monthCellRender | Custom month cell content render method | v-slot:monthCellRender="{current, locale}" | - | | + +### DatePicker\[picker=week] + +| Property | Description | Type | Default | Version | +| --- | --- | --- | --- | --- | +| format | To set the date format, refer to [dayjs](https://day.js.org/) | string | `YYYY-wo` | | + +### RangePicker + +| Property | Description | Type | Default | Version | +| --- | --- | --- | --- | --- | +| allowEmpty | Allow start or end input leave empty | \[boolean, boolean] | \[false, false] | | +| dateRender | Customize date cell. | v-slot:dateRender="{current: dayjs, today: dayjs, info: { range: `start` \| `end` }}" | - | | +| defaultPickerValue | To set default picker date | \[[dayjs](https://day.js.org/), [dayjs](https://day.js.org/)] | - | | +| disabled | If disable start or end | \[boolean, boolean] | - | | +| disabledTime | To specify the time that cannot be selected | function(date: dayjs, partial: `start` \| `end`) | - | | +| format | To set the date format, refer to [dayjs](https://day.js.org/). When an array is provided, all values are used for parsing and first value is used for formatting | string \| string\[] | `YYYY-MM-DD HH:mm:ss` | | +| ranges | The preseted ranges for quick selection | { \[range: string]: [dayjs](https://day.js.org/)\[] } \| { \[range: string]: () => [dayjs](https://day.js.org/)\[] } | - | | +| renderExtraFooter | Render extra footer in panel | v-slot:renderExtraFooter | - | | +| separator | Set separator between inputs | string \| v-slot:separator | `` | | +| showTime | To provide an additional time selection | object \| boolean | [TimePicker Options](/components/time-picker/#API) | | +| showTime.defaultValue | To set default time of selected date, [demo](#components-date-picker-demo-disabled-date) | [dayjs](https://day.js.org/)\[] | \[dayjs(), dayjs()] | | +| value(v-model) | To set date | \[[dayjs](https://day.js.org/), [dayjs](https://day.js.org/)] | - | | + +### RangePicker Events + +| Events Name | Description | Arguments | Version | | +| --- | --- | --- | --- | --- | +| calendarChange | Callback function, can be executed when the start time or the end time of the range is changing. | function(dates: \[dayjs, dayjs], dateStrings: \[string, string], info: { range:`start`\|`end` }) | - | | +| change | a callback function, can be executed when the selected time is changing | function(dates: \[dayjs, dayjs] \| \[string, string], dateStrings: \[string, string]) | | | +| ok | callback when click ok button | function(dates: \[dayjs, dayjs] \| \[string, string]) | | | + +## FAQ + +### How to use DatePicker with customize date library(like moment.js \| dayjs \| date-fns)? + +Please refer [replace date](/docs/vue/replace-date) + +### Why config dayjs.locale globally not work? + +DatePicker default set `locale` as `en` in v4. You can config DatePicker `locale` prop or [ConfigProvider `locale`](/components/config-provider) prop instead. diff --git a/src/core/components/BaseDatePicker/src/datePick/index.tsx b/src/core/components/BaseDatePicker/src/datePick/index.tsx new file mode 100644 index 0000000..c5f053b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/index.tsx @@ -0,0 +1,4 @@ +import DatePicker from './dayjs'; +export * from './dayjs'; + +export default DatePicker; diff --git a/src/core/components/BaseDatePicker/src/datePick/index.zh-CN.md b/src/core/components/BaseDatePicker/src/datePick/index.zh-CN.md new file mode 100644 index 0000000..b1ff2a0 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/index.zh-CN.md @@ -0,0 +1,197 @@ +--- +category: Components +type: 数据录入 +title: DatePicker +subtitle: 日期选择框 +cover: https://gw.alipayobjects.com/zos/alicdn/RT_USzA48/DatePicker.svg +--- + +输入或选择日期的控件。 + +## 何时使用 + +当用户需要输入一个日期,可以点击标准输入框,弹出日期面板进行选择。 + +## API + +日期类组件包括以下五种形式。 + +- DatePicker +- DatePicker\[picker="month"] +- DatePicker\[picker="week"] +- DatePicker\[picker="year"] +- DatePicker\[picker="quarter"] +- RangePicker + +### 国际化配置 + +默认配置为 en-US,如果你需要设置其他语言,推荐在入口处使用我们提供的国际化组件,详见:[ConfigProvider 国际化](/components/config-provider-cn/)。 + +如有特殊需求(仅修改单一组件的语言),请使用 locale 参数,参考:[默认配置](https://github.com/vueComponent/ant-design-vue/blob/main/components/date-picker/locale/example.json)。 + +```html + + +``` + +```html + + +``` + +### 共同的 API + +以下 API 为 DatePicker、 RangePicker 共享的 API。 + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| allowClear | 是否显示清除按钮 | boolean | true | | +| autofocus | 自动获取焦点 | boolean | false | | +| bordered | 是否有边框 | boolean | true | | +| dateRender | 自定义日期单元格的内容 | v-slot:dateRender="{current, today}" | - | | +| disabled | 禁用 | boolean | false | | +| disabledDate | 不可选择的日期 | (currentDate: dayjs) => boolean | - | | +| dropdownClassName | 额外的弹出日历 className | string | - | | +| getPopupContainer | 定义浮层的容器,默认为 body 上新建 div | function(trigger) | - | | +| inputReadOnly | 设置输入框为只读(避免在移动设备上打开虚拟键盘) | boolean | false | | +| locale | 国际化配置 | object | [默认配置](https://github.com/vueComponent/ant-design-vue/blob/main/components/date-picker/locale/example.json) | - | +| mode | 日期面板的状态 | `time` \| `date` \| `month` \| `year` \| `decade` | - | | +| nextIcon | 自定义下一个图标 | slot | - | 3.0 | +| open | 控制弹层是否展开 | boolean | - | | +| picker | 设置选择器类型 | `date` \| `week` \| `month` \| `quarter` \| `year` | `date` | `quarter` | +| placeholder | 输入框提示文字 | string \| \[string, string] | - | | +| popupStyle | 额外的弹出日历样式 | CSSProperties | {} | | +| prevIcon | 自定义上一个图标 | slot | - | 3.0 | +| size | 输入框大小,`large` 高度为 40px,`small` 为 24px,默认是 32px | `large` \| `middle` \| `small` | - | | +| suffixIcon | 自定义的选择框后缀图标 | v-slot:suffixIcon | - | | +| superNextIcon | 自定义 `<<` 切换图标 | slot | - | 3.0 | +| superPrevIcon | 自定义 `>>` 切换图标 | slot | - | 3.0 | +| valueFormat | 可选,绑定值的格式,对 value、defaultValue、defaultPickerValue 起作用。不指定则绑定值为 dayjs 对象 | string,[具体格式](https://day.js.org/docs/zh-CN/display/format) | - | | + +### 共有的事件 + +| 事件名称 | 说明 | 回调参数 | | +| ----------- | ------------------------ | --------------------- | --- | +| openChange | 弹出日历和关闭日历的回调 | function(status) | | +| panelChange | 日期面板变化时的回调 | function(value, mode) | - | + +### 共同的方法 + +| 名称 | 描述 | +| ------- | -------- | +| blur() | 移除焦点 | +| focus() | 获取焦点 | + +### DatePicker + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| defaultPickerValue | 默认面板日期 | [dayjs](https://day.js.org/) | - | | +| disabledTime | 不可选择的时间 | function(date) | - | | +| format | 设置日期格式,为数组时支持多格式匹配,展示以第一个为准。配置参考 [dayjs](https://day.js.org/docs/zh-CN/display/format),支持[自定义格式](#components-date-picker-demo-format) | string \| (value: dayjs) => string \| (string \| (value: dayjs) => string)\[] | `YYYY-MM-DD` | | +| renderExtraFooter | 在面板中添加额外的页脚 | v-slot:renderExtraFooter="mode" | - | | +| showNow | 当设定了 `showTime` 的时候,面板是否显示“此刻”按钮 | boolean | - | | +| showTime | 增加时间选择功能 | Object \| boolean | [TimePicker Options](/components/time-picker/#API) | | +| showTime.defaultValue | 设置用户选择日期时默认的时分秒,[例子](#components-date-picker-demo-disabled-date) | [dayjs](https://day.js.org/) | dayjs() | | +| showToday | 是否展示“今天”按钮 | boolean | true | | +| value(v-model) | 日期 | [dayjs](https://day.js.org/) | - | | + +### DatePicker 事件 + +| 事件名称 | 说明 | 回调参数 | +| -------- | ------------------ | --------------------------------------------------- | +| change | 时间发生变化的回调 | function(date: dayjs \| string, dateString: string) | +| ok | 点击确定按钮的回调 | function(date: dayjs \| string) | + +### DatePicker\[picker=year] + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| format | 展示的日期格式,配置参考 [dayjs](https://day.js.org/docs/zh-CN/display/format) | string | `YYYY` | | + +### DatePicker\[picker=quarter] + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| format | 展示的日期格式,配置参考 [dayjs](https://day.js.org/docs/zh-CN/display/format) | string | `YYYY-\QQ` | | + +### DatePicker\[picker=month] + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| format | 展示的日期格式,配置参考 [dayjs](https://day.js.org/docs/zh-CN/display/format) | string | `YYYY-MM` | | +| monthCellRender | 自定义的月份内容渲染方法 | v-slot:monthCellRender="{current, locale}" | - | | + +### DatePicker\[picker=week] + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| format | 展示的日期格式,配置参考 [dayjs](https://day.js.org/docs/zh-CN/display/format) | string | `YYYY-wo` | | + +### RangePicker + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| allowEmpty | 允许起始项部分为空 | \[boolean, boolean] | \[false, false] | | +| dateRender | 自定义日期单元格的内容。 | v-slot:dateRender="{current: dayjs, today: dayjs, info: { range: `start` \| `end` }}" | - | | +| defaultPickerValue | 默认面板日期 | [dayjs](https://day.js.org/)\[] | - | | +| disabled | 禁用起始项 | \[boolean, boolean] | - | | +| disabledTime | 不可选择的时间 | function(date: dayjs, partial: `start` \| `end`) | - | | +| format | 展示的日期格式 | string | `YYYY-MM-DD HH:mm:ss` | | +| ranges | 预设时间范围快捷选择 | { \[range: string]: [dayjs](https://day.js.org/)\[] } \| { \[range: string]: () => [dayjs](https://day.js.org/)\[] } | - | | +| renderExtraFooter | 在面板中添加额外的页脚 | () => React.ReactNode | - | | +| separator | 设置分隔符 | string \| v-slot:separator | `` | | +| showTime | 增加时间选择功能 | Object\|boolean | [TimePicker Options](/components/time-picker/#API) | | +| showTime.defaultValue | 设置用户选择日期时默认的时分秒,[例子](#components-date-picker-demo-disabled-date) | [dayjs](https://day.js.org/)\[] | \[dayjs(), dayjs()] | | +| value(v-model) | 日期 | [dayjs](https://day.js.org/)\[] | - | | + +### RangePicker 事件 + +| 事件名称 | 说明 | 回调参数 | +| --- | --- | --- | +| calendarChange | 待选日期发生变化的回调 | function(dates: \[dayjs, dayjs] \| \[string, string], dateStrings: \[string, string], info: { range:`start`\|`end` }) | +| change | 日期范围发生变化的回调 | function(dates: \[dayjs, dayjs] \| \[string, string], dateStrings: \[string, string]) | +| ok | 点击确定按钮的回调 | function(dates: \[dayjs, dayjs] \| \[string, string]) | + +## FAQ + +### 如何在 DatePicker 中使用自定义日期库(如 moment.js \| dayjs \| date-fns)? + +请参考[《自定义日期库》](/docs/vue/replace-date-cn) + +### 为何全局修改 dayjs.locale 不生效? + +DatePicker 默认 `locale` 为 `en`。你可以通过 DatePicker 的 `locale` 属性来单独设置,也可以通过 [ConfigProvider `locale`](/components/config-provider-cn) 属性来配置。 diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ar_EG.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ar_EG.tsx new file mode 100644 index 0000000..ed6a129 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ar_EG.tsx @@ -0,0 +1,24 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ar_EG' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ar_EG' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'اختيار التاريخ', + rangePlaceholder: ['البداية', 'النهاية'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + }, + dateFormat: 'DD-MM-YYYY', + monthFormat: 'MM-YYYY', + dateTimeFormat: 'DD-MM-YYYY HH:mm:ss', + weekFormat: 'wo-YYYY' +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/az_AZ.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/az_AZ.tsx new file mode 100644 index 0000000..014e91d --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/az_AZ.tsx @@ -0,0 +1,16 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/az_AZ' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/az_AZ' +import type { PickerLocale } from '../generatePicker' + +const locale: PickerLocale = { + lang: { + placeholder: 'Tarix seçin', + rangePlaceholder: ['Başlama tarixi', 'Bitmə tarixi'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/bg_BG.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/bg_BG.tsx new file mode 100644 index 0000000..bd15134 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/bg_BG.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/bg_BG' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/bg_BG' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Избор на дата', + rangePlaceholder: ['Начална', 'Крайна'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/bn_BD.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/bn_BD.tsx new file mode 100644 index 0000000..51b60d4 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/bn_BD.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/bn_BD' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/bn_BD' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'তারিখ নির্বাচন', + yearPlaceholder: 'বছর নির্বাচন', + quarterPlaceholder: 'কোয়ার্টার নির্বাচন', + monthPlaceholder: 'মাস নির্বাচন', + weekPlaceholder: 'সপ্তাহ নির্বাচন', + rangePlaceholder: ['শুরুর তারিখ', 'শেষ তারিখ'], + rangeYearPlaceholder: ['শুরুর বছর', 'শেষ বছর'], + rangeMonthPlaceholder: ['শুরুর মাস', 'শেষ মাস'], + rangeWeekPlaceholder: ['শুরুর সপ্তাহ', 'শেষ সপ্তাহ'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/by_BY.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/by_BY.tsx new file mode 100644 index 0000000..4cbfb11 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/by_BY.tsx @@ -0,0 +1,23 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/by_BY' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/by_BY' +import type { PickerLocale } from '../generatePicker' + +const locale: PickerLocale = { + lang: { + placeholder: 'Выберыце дату', + yearPlaceholder: 'Выберыце год', + quarterPlaceholder: 'Выберыце квартал', + monthPlaceholder: 'Выберыце месяц', + weekPlaceholder: 'Выберыце тыдзень', + rangePlaceholder: ['Пачатковая дата', 'Канчатковая дата'], + rangeYearPlaceholder: ['Пачатковы год', 'Год заканчэння'], + rangeMonthPlaceholder: ['Пачатковы месяц', 'Канчатковы месяц'], + rangeWeekPlaceholder: ['Пачатковы тыдзень', 'Канчатковы тыдзень'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ca_ES.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ca_ES.tsx new file mode 100644 index 0000000..fcbc81f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ca_ES.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ca_ES' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ca_ES' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Seleccionar data', + rangePlaceholder: ['Data inicial', 'Data final'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/cs_CZ.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/cs_CZ.tsx new file mode 100644 index 0000000..9463232 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/cs_CZ.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/cs_CZ' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/cs_CZ' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Vybrat datum', + rangePlaceholder: ['Od', 'Do'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/da_DK.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/da_DK.tsx new file mode 100644 index 0000000..d4c9bb7 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/da_DK.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/da_DK' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/da_DK' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Vælg dato', + rangePlaceholder: ['Startdato', 'Slutdato'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/de_DE.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/de_DE.tsx new file mode 100644 index 0000000..c666ea8 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/de_DE.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/de_DE' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/de_DE' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Datum auswählen', + rangePlaceholder: ['Startdatum', 'Enddatum'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/issues/424 + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/el_GR.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/el_GR.tsx new file mode 100644 index 0000000..dd7c1ee --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/el_GR.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/el_GR' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/el_GR' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Επιλέξτε ημερομηνία', + rangePlaceholder: ['Αρχική ημερομηνία', 'Τελική ημερομηνία'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/issues/424 + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/en_GB.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/en_GB.tsx new file mode 100644 index 0000000..61769aa --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/en_GB.tsx @@ -0,0 +1,28 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/en_GB' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/en_GB' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Select date', + yearPlaceholder: 'Select year', + quarterPlaceholder: 'Select quarter', + monthPlaceholder: 'Select month', + weekPlaceholder: 'Select week', + rangePlaceholder: ['Start date', 'End date'], + rangeYearPlaceholder: ['Start year', 'End year'], + rangeQuarterPlaceholder: ['Start quarter', 'End quarter'], + rangeMonthPlaceholder: ['Start month', 'End month'], + rangeWeekPlaceholder: ['Start week', 'End week'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/en_US.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/en_US.tsx new file mode 100644 index 0000000..e4be5d5 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/en_US.tsx @@ -0,0 +1,28 @@ +import CalendarLocale from 'ant-design-vue/es/vc-picker/locale/en_US'; +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/en_US'; +import type { PickerLocale } from '../generatePicker'; + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Select date', + yearPlaceholder: 'Select year', + quarterPlaceholder: 'Select quarter', + monthPlaceholder: 'Select month', + weekPlaceholder: 'Select week', + rangePlaceholder: ['Start date', 'End date'], + rangeYearPlaceholder: ['Start year', 'End year'], + rangeQuarterPlaceholder: ['Start quarter', 'End quarter'], + rangeMonthPlaceholder: ['Start month', 'End month'], + rangeWeekPlaceholder: ['Start week', 'End week'], + ...CalendarLocale, + }, + timePickerLocale: { + ...TimePickerLocale, + }, +}; + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/es_ES.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/es_ES.tsx new file mode 100644 index 0000000..c1fe019 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/es_ES.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/es_ES' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/es_ES' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Seleccionar fecha', + rangePlaceholder: ['Fecha inicial', 'Fecha final'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/et_EE.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/et_EE.tsx new file mode 100644 index 0000000..9a2eb77 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/et_EE.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/et_EE' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/et_EE' +import type { PickerLocale } from '../generatePicker' + +// 统一合并为完整的 Locale +const locale: PickerLocale = { + lang: { + placeholder: 'Vali kuupäev', + rangePlaceholder: ['Algus kuupäev', 'Lõpu kuupäev'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/example.json b/src/core/components/BaseDatePicker/src/datePick/locale/example.json new file mode 100644 index 0000000..5a6fcf2 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/example.json @@ -0,0 +1,40 @@ +{ + "lang": { + "locale": "en_US", + "placeholder": "Select date", + "rangePlaceholder": ["Start date", "End date"], + "today": "Today", + "now": "Now", + "backToToday": "Back to today", + "ok": "OK", + "clear": "Clear", + "month": "Month", + "year": "Year", + "timeSelect": "Select time", + "dateSelect": "Select date", + "monthSelect": "Choose a month", + "yearSelect": "Choose a year", + "decadeSelect": "Choose a decade", + "yearFormat": "YYYY", + "dateFormat": "M/D/YYYY", + "dayFormat": "D", + "dateTimeFormat": "M/D/YYYY HH:mm:ss", + "monthFormat": "MMMM", + "monthBeforeYear": true, + "previousMonth": "Previous month (PageUp)", + "nextMonth": "Next month (PageDown)", + "previousYear": "Last year (Control + left)", + "nextYear": "Next year (Control + right)", + "previousDecade": "Last decade", + "nextDecade": "Next decade", + "previousCentury": "Last century", + "nextCentury": "Next century" + }, + "timePickerLocale": { + "placeholder": "Select time" + }, + "dateFormat": "YYYY-MM-DD", + "dateTimeFormat": "YYYY-MM-DD HH:mm:ss", + "weekFormat": "YYYY-wo", + "monthFormat": "YYYY-MM" +} diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/fa_IR.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/fa_IR.tsx new file mode 100644 index 0000000..01f8c1b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/fa_IR.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/fa_IR' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/fa_IR' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'انتخاب تاریخ', + yearPlaceholder: 'انتخاب سال', + quarterPlaceholder: 'انتخاب فصل', + monthPlaceholder: 'انتخاب ماه', + weekPlaceholder: 'انتخاب هفته', + rangePlaceholder: ['تاریخ شروع', 'تاریخ پایان'], + rangeYearPlaceholder: ['سال شروع', 'سال پایان'], + rangeMonthPlaceholder: ['ماه شروع', 'ماه پایان'], + rangeWeekPlaceholder: ['هفته شروع', 'هفته پایان'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/fi_FI.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/fi_FI.tsx new file mode 100644 index 0000000..d548890 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/fi_FI.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/fi_FI' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/fi_FI' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Valitse päivä', + rangePlaceholder: ['Alkamispäivä', 'Päättymispäivä'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/fr_BE.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/fr_BE.tsx new file mode 100644 index 0000000..7e98cd5 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/fr_BE.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/fr_BE' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/fr_BE' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Sélectionner une date', + rangePlaceholder: ['Date de début', 'Date de fin'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/issues/424 + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/fr_CA.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/fr_CA.tsx new file mode 100644 index 0000000..d8e7764 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/fr_CA.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/fr_CA' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/fr_CA' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Sélectionner une date', + yearPlaceholder: 'Sélectionner une année', + quarterPlaceholder: 'Sélectionner un trimestre', + monthPlaceholder: 'Sélectionner un mois', + weekPlaceholder: 'Sélectionner une semaine', + rangePlaceholder: ['Date de début', 'Date de fin'], + rangeYearPlaceholder: ['Année de début', 'Année de fin'], + rangeMonthPlaceholder: ['Mois de début', 'Mois de fin'], + rangeWeekPlaceholder: ['Semaine de début', 'Semaine de fin'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/issues/424 + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/fr_FR.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/fr_FR.tsx new file mode 100644 index 0000000..b9e6dc7 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/fr_FR.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/fr_FR' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/fr_FR' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Sélectionner une date', + yearPlaceholder: 'Sélectionner une année', + quarterPlaceholder: 'Sélectionner un trimestre', + monthPlaceholder: 'Sélectionner un mois', + weekPlaceholder: 'Sélectionner une semaine', + rangePlaceholder: ['Date de début', 'Date de fin'], + rangeYearPlaceholder: ['Année de début', 'Année de fin'], + rangeMonthPlaceholder: ['Mois de début', 'Mois de fin'], + rangeWeekPlaceholder: ['Semaine de début', 'Semaine de fin'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/issues/424 + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ga_IE.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ga_IE.tsx new file mode 100644 index 0000000..6a5c191 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ga_IE.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ga_IE' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ga_IE' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Roghnaigh dáta', + yearPlaceholder: 'Roghnaigh bliain', + quarterPlaceholder: 'Roghnaigh ráithe', + monthPlaceholder: 'Roghnaigh mí', + weekPlaceholder: 'Roghnaigh seachtain', + rangePlaceholder: ['Dáta tosaigh', 'Dáta deiridh'], + rangeYearPlaceholder: ['Tús na bliana', 'Deireadh na bliana'], + rangeMonthPlaceholder: ['Tosaigh mhí', 'Deireadh mhí'], + rangeWeekPlaceholder: ['Tosaigh an tseachtain', 'Deireadh na seachtaine'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/gl_ES.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/gl_ES.tsx new file mode 100644 index 0000000..0994d8b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/gl_ES.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/gl_ES' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/gl_ES' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Escolla data', + rangePlaceholder: ['Data inicial', 'Data final'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/he_IL.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/he_IL.tsx new file mode 100644 index 0000000..1d560ad --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/he_IL.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/he_IL' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/he_IL' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'בחר תאריך', + rangePlaceholder: ['תאריך התחלה', 'תאריך סיום'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/hi_IN.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/hi_IN.tsx new file mode 100644 index 0000000..2f83531 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/hi_IN.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/hi_IN' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/hi_IN' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'तारीख़ चुनें', + yearPlaceholder: 'वर्ष चुनें', + quarterPlaceholder: 'तिमाही चुनें', + monthPlaceholder: 'महीना चुनिए', + weekPlaceholder: 'सप्ताह चुनें', + rangePlaceholder: ['प्रारंभ तिथि', 'समाप्ति तिथि'], + rangeYearPlaceholder: ['आरंभिक वर्ष', 'अंत वर्ष'], + rangeMonthPlaceholder: ['आरंभिक महीना', 'अंत महीना'], + rangeWeekPlaceholder: ['आरंभिक सप्ताह', 'अंत सप्ताह'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/hr_HR.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/hr_HR.tsx new file mode 100644 index 0000000..e46a0c1 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/hr_HR.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/hr_HR' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/hr_HR' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Odaberite datum', + yearPlaceholder: 'Odaberite godinu', + quarterPlaceholder: 'Odaberite četvrtinu', + monthPlaceholder: 'Odaberite mjesec', + weekPlaceholder: 'Odaberite tjedan', + rangePlaceholder: ['Početni datum', 'Završni datum'], + rangeYearPlaceholder: ['Početna godina', 'Završna godina'], + rangeMonthPlaceholder: ['Početni mjesec', 'Završni mjesec'], + rangeWeekPlaceholder: ['Početni tjedan', 'Završni tjedan'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/hu_HU.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/hu_HU.tsx new file mode 100644 index 0000000..35194c9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/hu_HU.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/hu_HU' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/hu_HU' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Válasszon dátumot', + rangePlaceholder: ['Kezdő dátum', 'Befejezés dátuma'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/id_ID.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/id_ID.tsx new file mode 100644 index 0000000..c4d8a05 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/id_ID.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/id_ID' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/id_ID' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Pilih tanggal', + rangePlaceholder: ['Mulai tanggal', 'Tanggal akhir'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/is_IS.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/is_IS.tsx new file mode 100644 index 0000000..64115a9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/is_IS.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/is_IS' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/is_IS' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Veldu dag', + rangePlaceholder: ['Upphafsdagur', 'Lokadagur'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/it_IT.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/it_IT.tsx new file mode 100644 index 0000000..5b341a9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/it_IT.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/it_IT' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/it_IT' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Selezionare la data', + rangePlaceholder: ["Data d'inizio", 'Data di fine'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/issues/424 + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ja_JP.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ja_JP.tsx new file mode 100644 index 0000000..561c5e6 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ja_JP.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ja_JP' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ja_JP' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: '日付を選択', + rangePlaceholder: ['開始日付', '終了日付'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ka_GE.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ka_GE.tsx new file mode 100644 index 0000000..aee1fec --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ka_GE.tsx @@ -0,0 +1,23 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ka_GE' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ka_GE' +import type { PickerLocale } from '../generatePicker' + +const locale: PickerLocale = { + lang: { + placeholder: 'აირჩიეთ თარიღი', + yearPlaceholder: 'აირჩიეთ წელი', + quarterPlaceholder: 'აირჩიეთ მეოთხედი', + monthPlaceholder: 'აირჩიეთ თვე', + weekPlaceholder: 'აირჩიეთ კვირა', + rangePlaceholder: ['საწყისი თარიღი', 'საბოლოო თარიღი'], + rangeYearPlaceholder: ['საწყისი წელი', 'საბოლოო წელი'], + rangeMonthPlaceholder: ['საწყისი თვე', 'საბოლოო თვე'], + rangeWeekPlaceholder: ['საწყისი კვირა', 'საბოლოო კვირა'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/kk_KZ.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/kk_KZ.tsx new file mode 100644 index 0000000..f505d15 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/kk_KZ.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/kk_KZ' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/kk_KZ' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Күнді таңдаңыз', + yearPlaceholder: 'Жылды таңдаңыз', + quarterPlaceholder: 'Тоқсанды таңдаңыз', + monthPlaceholder: 'Айды таңдаңыз', + weekPlaceholder: 'Аптаны таңдаңыз', + rangePlaceholder: ['Бастау күні', 'Аяқталу күні'], + rangeYearPlaceholder: ['Бастау жылы', 'Аяқталу жылы'], + rangeMonthPlaceholder: ['Бастау айы', 'Аяқталу айы'], + rangeWeekPlaceholder: ['Бастау апта', 'Аяқталу апта'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/km_KH.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/km_KH.tsx new file mode 100644 index 0000000..6ae99d4 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/km_KH.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/km_KH' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/km_KH' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'រើសថ្ងៃ', + yearPlaceholder: 'រើសឆ្នាំ', + quarterPlaceholder: 'រើសត្រីមាស', + monthPlaceholder: 'រើសខែ', + weekPlaceholder: 'រើសសប្តាហ៍', + rangePlaceholder: ['ថ្ងៃចាប់ផ្ដើម', 'ថ្ងៃបញ្ចប់'], + rangeYearPlaceholder: ['ឆ្នាំចាប់ផ្ដើម', 'ឆ្នាំបញ្ចប់'], + rangeMonthPlaceholder: ['ខែចាប់ផ្ដើម', 'ខែបញ្ចប់'], + rangeWeekPlaceholder: ['សប្ដាហ៍ចាប់ផ្ដើម', 'សប្ដាហ៍បញ្ចប់'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/kmr_IQ.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/kmr_IQ.tsx new file mode 100644 index 0000000..9e1d38d --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/kmr_IQ.tsx @@ -0,0 +1,19 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/kmr_IQ' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/kmr_IQ' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Dîrok hilbijêre', + rangePlaceholder: ['Dîroka destpêkê', 'Dîroka dawîn'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/kn_IN.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/kn_IN.tsx new file mode 100644 index 0000000..c1afb3e --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/kn_IN.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/kn_IN' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/kn_IN' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'ದಿನಾಂಕ ಆಯ್ಕೆಮಾಡಿ', + rangePlaceholder: ['ಪ್ರಾರಂಭ ದಿನಾಂಕ', 'ಅಂತಿಮ ದಿನಾಂಕ'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ko_KR.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ko_KR.tsx new file mode 100644 index 0000000..ab3499f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ko_KR.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ko_KR' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ko_KR' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: '날짜 선택', + rangePlaceholder: ['시작일', '종료일'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/lt_LT.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/lt_LT.tsx new file mode 100644 index 0000000..a5e78aa --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/lt_LT.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/lt_LT' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/lt_LT' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Pasirinkite datą', + yearPlaceholder: 'Pasirinkite metus', + quarterPlaceholder: 'Pasirinkite ketvirtį', + monthPlaceholder: 'Pasirinkite mėnesį', + weekPlaceholder: 'Pasirinkite savaitę', + rangePlaceholder: ['Pradžios data', 'Pabaigos data'], + rangeYearPlaceholder: ['Pradžios metai', 'Pabaigos metai'], + rangeMonthPlaceholder: ['Pradžios mėnesis', 'Pabaigos mėnesis'], + rangeWeekPlaceholder: ['Pradžios savaitė', 'Pabaigos savaitė'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/lv_LV.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/lv_LV.tsx new file mode 100644 index 0000000..25e7351 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/lv_LV.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/lv_LV' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/lv_LV' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Izvēlieties datumu', + rangePlaceholder: ['Sākuma datums', 'Beigu datums'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/mk_MK.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/mk_MK.tsx new file mode 100644 index 0000000..ef8c7a3 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/mk_MK.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/mk_MK' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/mk_MK' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Избери датум', + rangePlaceholder: ['Од датум', 'До датум'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ml_IN.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ml_IN.tsx new file mode 100644 index 0000000..25d07cf --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ml_IN.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ml_IN' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ml_IN' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'തിയതി തിരഞ്ഞെടുക്കുക', + yearPlaceholder: 'വർഷം തിരഞ്ഞെടുക്കുക', + quarterPlaceholder: 'ത്രൈമാസം തിരഞ്ഞെടുക്കുക', + monthPlaceholder: 'മാസം തിരഞ്ഞെടുക്കുക', + weekPlaceholder: 'വാരം തിരഞ്ഞെടുക്കുക', + rangePlaceholder: ['ആരംഭ ദിനം', 'അവസാന ദിനം'], + rangeYearPlaceholder: ['ആരംഭ വർഷം', 'അവസാന വർഷം'], + rangeMonthPlaceholder: ['ആരംഭ മാസം', 'അവസാന മാസം'], + rangeWeekPlaceholder: ['ആരംഭ വാരം', 'അവസാന വാരം'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/mn_MN.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/mn_MN.tsx new file mode 100644 index 0000000..ff9f3e4 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/mn_MN.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/mn_MN' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/mn_MN' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Огноо сонгох', + rangePlaceholder: ['Эхлэх огноо', 'Дуусах огноо'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ms_MY.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ms_MY.tsx new file mode 100644 index 0000000..d21ab5f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ms_MY.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ms_MY' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ms_MY' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Pilih tarikh', + rangePlaceholder: ['Tarikh mula', 'Tarikh akhir'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/nb_NO.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/nb_NO.tsx new file mode 100644 index 0000000..1fc4afb --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/nb_NO.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/nb_NO' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/nb_NO' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Velg dato', + yearPlaceholder: 'Velg år', + quarterPlaceholder: 'Velg kvartal', + monthPlaceholder: 'Velg måned', + weekPlaceholder: 'Velg uke', + rangePlaceholder: ['Startdato', 'Sluttdato'], + rangeYearPlaceholder: ['Startår', 'Sluttår'], + rangeMonthPlaceholder: ['Startmåned', 'Sluttmåned'], + rangeWeekPlaceholder: ['Start uke', 'Sluttuke'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/nl_BE.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/nl_BE.tsx new file mode 100644 index 0000000..301aa92 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/nl_BE.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/nl_BE' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/nl_BE' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + monthPlaceholder: 'Selecteer maand', + placeholder: 'Selecteer datum', + quarterPlaceholder: 'Selecteer kwartaal', + rangeMonthPlaceholder: ['Begin maand', 'Eind maand'], + rangePlaceholder: ['Begin datum', 'Eind datum'], + rangeWeekPlaceholder: ['Begin week', 'Eind week'], + rangeYearPlaceholder: ['Begin jaar', 'Eind jaar'], + weekPlaceholder: 'Selecteer week', + yearPlaceholder: 'Selecteer jaar', + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/issues/424 + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/nl_NL.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/nl_NL.tsx new file mode 100644 index 0000000..297e629 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/nl_NL.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/nl_NL' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/nl_NL' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + monthPlaceholder: 'Selecteer maand', + placeholder: 'Selecteer datum', + quarterPlaceholder: 'Selecteer kwartaal', + rangeMonthPlaceholder: ['Begin maand', 'Eind maand'], + rangePlaceholder: ['Begin datum', 'Eind datum'], + rangeWeekPlaceholder: ['Begin week', 'Eind week'], + rangeYearPlaceholder: ['Begin jaar', 'Eind jaar'], + weekPlaceholder: 'Selecteer week', + yearPlaceholder: 'Selecteer jaar', + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/issues/424 + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/pl_PL.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/pl_PL.tsx new file mode 100644 index 0000000..e9c776f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/pl_PL.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/pl_PL' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/pl_PL' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Wybierz datę', + rangePlaceholder: ['Data początkowa', 'Data końcowa'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/pt_BR.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/pt_BR.tsx new file mode 100644 index 0000000..6e245df --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/pt_BR.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/pt_BR' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/pt_BR' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Selecionar data', + rangePlaceholder: ['Data inicial', 'Data final'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/pt_PT.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/pt_PT.tsx new file mode 100644 index 0000000..5a6d738 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/pt_PT.tsx @@ -0,0 +1,47 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/pt_PT' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/pt_PT' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + ...CalendarLocale, + placeholder: 'Data', + rangePlaceholder: ['Data inicial', 'Data final'], + today: 'Hoje', + now: 'Agora', + backToToday: 'Hoje', + ok: 'OK', + clear: 'Limpar', + month: 'Mês', + year: 'Ano', + timeSelect: 'Hora', + dateSelect: 'Selecionar data', + monthSelect: 'Selecionar mês', + yearSelect: 'Selecionar ano', + decadeSelect: 'Selecionar década', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthFormat: 'MMMM', + monthBeforeYear: false, + previousMonth: 'Mês anterior (PageUp)', + nextMonth: 'Mês seguinte (PageDown)', + previousYear: 'Ano anterior (Control + left)', + nextYear: 'Ano seguinte (Control + right)', + previousDecade: 'Última década', + nextDecade: 'Próxima década', + previousCentury: 'Último século', + nextCentury: 'Próximo século' + }, + timePickerLocale: { + ...TimePickerLocale, + placeholder: 'Hora' + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ro_RO.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ro_RO.tsx new file mode 100644 index 0000000..46bccd9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ro_RO.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ro_RO' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ro_RO' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Selectează data', + rangePlaceholder: ['Data start', 'Data sfârșit'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ru_RU.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ru_RU.tsx new file mode 100644 index 0000000..41006df --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ru_RU.tsx @@ -0,0 +1,29 @@ +/** Created by Andrey Gayvoronsky on 13/04/16. */ + +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ru_RU' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ru_RU' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Выберите дату', + yearPlaceholder: 'Выберите год', + quarterPlaceholder: 'Выберите квартал', + monthPlaceholder: 'Выберите месяц', + weekPlaceholder: 'Выберите неделю', + rangePlaceholder: ['Начальная дата', 'Конечная дата'], + rangeYearPlaceholder: ['Начальный год', 'Год окончания'], + rangeMonthPlaceholder: ['Начальный месяц', 'Конечный месяц'], + rangeWeekPlaceholder: ['Начальная неделя', 'Конечная неделя'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/sk_SK.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/sk_SK.tsx new file mode 100644 index 0000000..5691c97 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/sk_SK.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/sk_SK' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/sk_SK' +import type { PickerLocale } from '../generatePicker' + +// 统一合并为完整的 Locale +const locale: PickerLocale = { + lang: { + placeholder: 'Vybrať dátum', + rangePlaceholder: ['Od', 'Do'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/sl_SI.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/sl_SI.tsx new file mode 100644 index 0000000..b478fd1 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/sl_SI.tsx @@ -0,0 +1,45 @@ +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/sl_SI'; +import type { PickerLocale } from '../generatePicker'; + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + locale: 'sl', + placeholder: 'Izberite datum', + rangePlaceholder: ['Začetni datum', 'Končni datum'], + today: 'Danes', + now: 'Trenutno', + backToToday: 'Nazaj na trenutni datum', + ok: 'OK', + clear: 'Počisti', + month: 'Mesec', + year: 'Leto', + timeSelect: 'Izberi čas', + dateSelect: 'Izberi datum', + monthSelect: 'Izberite mesec', + yearSelect: 'Izberite leto', + decadeSelect: 'Izberite desetletje', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthFormat: 'MMMM', + monthBeforeYear: true, + previousMonth: 'Prejšnji mesec (PageUp)', + nextMonth: 'Naslednji mesec (PageDown)', + previousYear: 'Lansko leto (Control + left)', + nextYear: 'Naslednje leto (Control + right)', + previousDecade: 'Prejšnje desetletje', + nextDecade: 'Naslednje desetletje', + previousCentury: 'Zadnje stoletje', + nextCentury: 'Naslednje stoletje', + }, + timePickerLocale: { + ...TimePickerLocale, + }, +}; + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/sr_RS.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/sr_RS.tsx new file mode 100644 index 0000000..3877c75 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/sr_RS.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/sr_RS' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/sr_RS' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Izaberi datum', + yearPlaceholder: 'Izaberi godinu', + quarterPlaceholder: 'Izaberi tromesečje', + monthPlaceholder: 'Izaberi mesec', + weekPlaceholder: 'Izaberi sedmicu', + rangePlaceholder: ['Datum početka', 'Datum završetka'], + rangeYearPlaceholder: ['Godina početka', 'Godina završetka'], + rangeMonthPlaceholder: ['Mesec početka', 'Mesec završetka'], + rangeWeekPlaceholder: ['Sedmica početka', 'Sedmica završetka'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/sv_SE.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/sv_SE.tsx new file mode 100644 index 0000000..19f4822 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/sv_SE.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/sv_SE' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/sv_SE' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Välj datum', + yearPlaceholder: 'Välj år', + quarterPlaceholder: 'Välj kvartal', + monthPlaceholder: 'Välj månad', + weekPlaceholder: 'Välj vecka', + rangePlaceholder: ['Startdatum', 'Slutdatum'], + rangeYearPlaceholder: ['Startår', 'Slutår'], + rangeMonthPlaceholder: ['Startmånad', 'Slutmånad'], + rangeWeekPlaceholder: ['Startvecka', 'Slutvecka'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ta_IN.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ta_IN.tsx new file mode 100644 index 0000000..7083bc5 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ta_IN.tsx @@ -0,0 +1,21 @@ +// Tamil Locale added to rc-calendar +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ta_IN' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ta_IN' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'தேதியைத் தேர்ந்தெடுக்கவும்', + rangePlaceholder: ['தொடக்க தேதி', 'கடைசி தேதி'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/th_TH.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/th_TH.tsx new file mode 100644 index 0000000..1a8330b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/th_TH.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/th_TH' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/th_TH' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'เลือกวันที่', + yearPlaceholder: 'เลือกปี', + quarterPlaceholder: 'เลือกไตรมาส', + monthPlaceholder: 'เลือกเดือน', + weekPlaceholder: 'เลือกสัปดาห์', + rangePlaceholder: ['วันเริ่มต้น', 'วันสิ้นสุด'], + rangeYearPlaceholder: ['ปีเริ่มต้น', 'ปีสิ้นสุด'], + rangeMonthPlaceholder: ['เดือนเริ่มต้น', 'เดือนสิ้นสุด'], + rangeWeekPlaceholder: ['สัปดาห์เริ่มต้น', 'สัปดาห์สิ้นสุด'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/tr_TR.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/tr_TR.tsx new file mode 100644 index 0000000..2faf05a --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/tr_TR.tsx @@ -0,0 +1,28 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/tr_TR' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/tr_TR' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Tarih seç', + yearPlaceholder: 'Yıl seç', + quarterPlaceholder: 'Çeyrek seç', + monthPlaceholder: 'Ay seç', + weekPlaceholder: 'Hafta seç', + rangePlaceholder: ['Başlangıç tarihi', 'Bitiş tarihi'], + rangeYearPlaceholder: ['Başlangıç yılı', 'Bitiş yılı'], + rangeMonthPlaceholder: ['Başlangıç ayı', 'Bitiş ayı'], + rangeWeekPlaceholder: ['Başlangıç haftası', 'Bitiş haftası'], + + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/uk_UA.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/uk_UA.tsx new file mode 100644 index 0000000..04a3bfd --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/uk_UA.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/uk_UA' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/uk_UA' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Оберіть дату', + rangePlaceholder: ['Початкова дата', 'Кінцева дата'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/ur_PK.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/ur_PK.tsx new file mode 100644 index 0000000..3726938 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/ur_PK.tsx @@ -0,0 +1,27 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/ur_PK' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/ur_PK' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'تاریخ منتخب کریں', + yearPlaceholder: 'سال کو منتخب کریں', + quarterPlaceholder: 'کوارٹر منتخب کریں', + monthPlaceholder: 'ماہ منتخب کریں', + weekPlaceholder: 'ہفتہ منتخب کریں', + rangePlaceholder: ['شروع کرنے کی تاریخ', 'آخری تاریخ'], + rangeYearPlaceholder: ['آغاز سال', 'آخر سال'], + rangeMonthPlaceholder: ['مہینہ شروع', 'اختتامی مہینہ'], + rangeWeekPlaceholder: ['ہفتے شروع کریں', 'اختتام ہفتہ'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/vi_VN.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/vi_VN.tsx new file mode 100644 index 0000000..3cb1e08 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/vi_VN.tsx @@ -0,0 +1,20 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/vi_VN' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/vi_VN' +import type { PickerLocale } from '../generatePicker' + +// Merge into a locale object +const locale: PickerLocale = { + lang: { + placeholder: 'Chọn thời điểm', + rangePlaceholder: ['Ngày bắt đầu', 'Ngày kết thúc'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/zh_CN.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/zh_CN.tsx new file mode 100644 index 0000000..fa0a1d2 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/zh_CN.tsx @@ -0,0 +1,31 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/zh_CN' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/zh_CN' +import type { PickerLocale } from '../generatePicker' + +// 统一合并为完整的 Locale +const locale: PickerLocale = { + lang: { + placeholder: '请选择日期', + yearPlaceholder: '请选择年份', + quarterPlaceholder: '请选择季度', + monthPlaceholder: '请选择月份', + weekPlaceholder: '请选择周', + rangePlaceholder: ['开始日期', '结束日期'], + rangeYearPlaceholder: ['开始年份', '结束年份'], + rangeMonthPlaceholder: ['开始月份', '结束月份'], + rangeQuarterPlaceholder: ['开始季度', '结束季度'], + rangeWeekPlaceholder: ['开始周', '结束周'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +// should add whitespace between char in Button +locale.lang.ok = '确定' + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/locale/zh_TW.tsx b/src/core/components/BaseDatePicker/src/datePick/locale/zh_TW.tsx new file mode 100644 index 0000000..d392045 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/locale/zh_TW.tsx @@ -0,0 +1,30 @@ +import CalendarLocale from '@core/components/BaseDatePicker/src/vc-picker/locale/zh_TW' +import TimePickerLocale from 'ant-design-vue/es/time-picker/locale/zh_TW' +import type { PickerLocale } from '../generatePicker' + +// 统一合并为完整的 Locale +const locale: PickerLocale = { + lang: { + placeholder: '請選擇日期', + yearPlaceholder: '請選擇年份', + quarterPlaceholder: '請選擇季度', + monthPlaceholder: '請選擇月份', + weekPlaceholder: '請選擇周', + rangePlaceholder: ['開始日期', '結束日期'], + rangeYearPlaceholder: ['開始年份', '結束年份'], + rangeMonthPlaceholder: ['開始月份', '結束月份'], + rangeQuarterPlaceholder: ['開始季度', '結束季度'], + rangeWeekPlaceholder: ['開始周', '結束周'], + ...CalendarLocale + }, + timePickerLocale: { + ...TimePickerLocale + } +} + +locale.lang.ok = '確 定' + +// All settings at: +// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json + +export default locale diff --git a/src/core/components/BaseDatePicker/src/datePick/moment.tsx b/src/core/components/BaseDatePicker/src/datePick/moment.tsx new file mode 100644 index 0000000..dcde098 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/moment.tsx @@ -0,0 +1,39 @@ +import type { Moment } from 'moment' +import type { App } from 'vue' +import momentGenerateConfig from '@core/components/BaseDatePicker/src/vc-picker/generate/moment' +import type { + PickerProps, + PickerDateProps, + RangePickerProps as BaseRangePickerProps +} from './generatePicker' +import generatePicker from './generatePicker' +import type { ExtraDatePickerProps, ExtraRangePickerProps } from './generatePicker/props' + +export type DatePickerProps = PickerProps & ExtraDatePickerProps +export type MonthPickerProps = Omit, 'picker'> & + ExtraDatePickerProps +export type WeekPickerProps = Omit, 'picker'> & ExtraDatePickerProps +export type RangePickerProps = BaseRangePickerProps & ExtraRangePickerProps + +const { DatePicker, WeekPicker, MonthPicker, YearPicker, TimePicker, QuarterPicker, RangePicker } = + generatePicker(momentGenerateConfig) + +/* istanbul ignore next */ +export { RangePicker, WeekPicker, MonthPicker, QuarterPicker } + +export default Object.assign(DatePicker, { + WeekPicker, + MonthPicker, + YearPicker, + RangePicker, + TimePicker, + QuarterPicker, + install: (app: App) => { + app.component(DatePicker.name, DatePicker) + app.component(RangePicker.name, RangePicker) + app.component(MonthPicker.name, MonthPicker) + app.component(WeekPicker.name, WeekPicker) + app.component(QuarterPicker.name, QuarterPicker) + return app + } +}) diff --git a/src/core/components/BaseDatePicker/src/datePick/style/index.less b/src/core/components/BaseDatePicker/src/datePick/style/index.less new file mode 100644 index 0000000..a7d769c --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/style/index.less @@ -0,0 +1,362 @@ +@import 'index'; +@import 'index'; +@import 'mixin'; + +@picker-prefix-cls: ~'@{ant-prefix}-picker'; + +.picker-padding(@input-height, @font-size, @padding-horizontal) { + // font height probably 22.0001, So use floor better + @font-height: floor(@font-size * @line-height-base) + 2; + @padding-top: max(((@input-height - @font-height) / 2), 0); + @padding-bottom: max(@input-height - @font-height - @padding-top, 0); + padding: @padding-top @padding-horizontal @padding-bottom; +} + +.@{picker-prefix-cls} { + @arrow-size: 10px; + + .reset-component(); + .picker-padding(@input-height-base, @font-size-base, @input-padding-horizontal-base); + position: relative; + display: inline-flex; + align-items: center; + background: @picker-bg; + border: @border-width-base @border-style-base @select-border-color; + border-radius: @border-radius-base; + transition: border @animation-duration-slow, box-shadow @animation-duration-slow; + + &:hover, + &-focused { + .hover(); + } + + &-focused { + .active(); + } + + &&-disabled { + background: @input-disabled-bg; + border-color: @select-border-color; + cursor: not-allowed; + } + + &&-disabled &-suffix { + color: @disabled-color; + } + + &&-borderless { + background-color: transparent !important; + border-color: transparent !important; + box-shadow: none !important; + } + + // ======================== Input ========================= + &-input { + position: relative; + display: inline-flex; + align-items: center; + width: 100%; + + > input { + .input(); + flex: auto; + + // Fix Firefox flex not correct: + // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553 + min-width: 1px; + height: auto; + padding: 0; + background: transparent; + + border: 0; + + &:focus { + box-shadow: none; + } + + &[disabled] { + background: transparent; + } + } + + &:hover { + .@{picker-prefix-cls}-clear { + opacity: 1; + } + } + + &-placeholder { + > input { + color: @input-placeholder-color; + } + } + } + + // Size + &-large { + .picker-padding(@input-height-lg, @font-size-lg, @input-padding-horizontal-lg); + + .@{picker-prefix-cls}-input > input { + font-size: @font-size-lg; + } + } + + &-small { + .picker-padding(@input-height-sm, @font-size-base, @input-padding-horizontal-sm); + } + + &-suffix { + align-self: center; + margin-left: (@padding-xs / 2); + color: @disabled-color; + line-height: 1; + pointer-events: none; + + > * { + vertical-align: top; + } + } + + &-clear { + position: absolute; + top: 50%; + right: 0; + color: @disabled-color; + line-height: 1; + background: @component-background; + transform: translateY(-50%); + cursor: pointer; + opacity: 0; + transition: opacity @animation-duration-slow, color @animation-duration-slow; + + > * { + vertical-align: top; + } + + &:hover { + color: @text-color-secondary; + } + } + + &-separator { + position: relative; + display: inline-block; + width: 1em; + height: @font-size-lg; + color: @disabled-color; + font-size: @font-size-lg; + vertical-align: top; + cursor: default; + + .@{picker-prefix-cls}-focused & { + color: @text-color-secondary; + } + + .@{picker-prefix-cls}-range-separator & { + .@{picker-prefix-cls}-disabled & { + cursor: not-allowed; + } + } + } + + // ======================== Range ========================= + &-range { + position: relative; + display: inline-flex; + + // Clear + .@{picker-prefix-cls}-clear { + right: @input-padding-horizontal-base; + } + + &:hover { + .@{picker-prefix-cls}-clear { + opacity: 1; + } + } + + // Active bar + .@{picker-prefix-cls}-active-bar { + bottom: -@border-width-base; + height: 2px; + margin-left: @input-padding-horizontal-base; + background: @primary-color; + opacity: 0; + transition: all @animation-duration-slow ease-out; + pointer-events: none; + } + + &.@{picker-prefix-cls}-focused { + .@{picker-prefix-cls}-active-bar { + opacity: 1; + } + } + + &-separator { + align-items: center; + padding: 0 @padding-xs; + line-height: 1; + } + + &.@{picker-prefix-cls}-small { + .@{picker-prefix-cls}-clear { + right: @input-padding-horizontal-sm; + } + + .@{picker-prefix-cls}-active-bar { + margin-left: @input-padding-horizontal-sm; + } + } + } + + // ======================= Dropdown ======================= + &-dropdown { + .reset-component(); + position: absolute; + z-index: @zindex-picker; + + &-hidden { + display: none; + } + + &-placement-bottomLeft { + .@{picker-prefix-cls}-range-arrow { + top: (@arrow-size / 2) - (@arrow-size / 3); + display: block; + transform: rotate(-45deg); + } + } + + &-placement-topLeft { + .@{picker-prefix-cls}-range-arrow { + bottom: (@arrow-size / 2) - (@arrow-size / 3); + display: block; + transform: rotate(135deg); + } + } + + &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft, + &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topRight, + &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft, + &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topRight { + animation-name: antSlideDownIn; + } + + &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomLeft, + &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomRight, + &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomLeft, + &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomRight { + animation-name: antSlideUpIn; + } + + &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft, + &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topRight { + animation-name: antSlideDownOut; + } + + &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomLeft, + &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomRight { + animation-name: antSlideUpOut; + } + } + + &-dropdown-range { + padding: (@arrow-size * 2 / 3) 0; + + &-hidden { + display: none; + } + } + + // Time picker with additional style + &-dropdown &-panel > &-time-panel { + padding-top: (@padding-xs / 2); + } + + // ======================== Ranges ======================== + &-ranges { + margin-bottom: 0; + padding: (@padding-xs / 2) @padding-sm; + overflow: hidden; + line-height: @picker-text-height - 2 * @border-width-base - (@padding-xs / 2); + text-align: left; + list-style: none; + + > li { + display: inline-block; + } + + // https://github.com/ant-design/ant-design/issues/23687 + .@{picker-prefix-cls}-preset > .@{ant-prefix}-tag-blue { + color: @primary-color; + background: @primary-1; + border-color: @primary-3; + cursor: pointer; + } + + .@{picker-prefix-cls}-ok { + float: right; + margin-left: @padding-xs; + } + } + + &-range-wrapper { + display: flex; + } + + &-range-arrow { + position: absolute; + z-index: 1; + display: none; + width: @arrow-size; + height: @arrow-size; + margin-left: @input-padding-horizontal-base * 1.5; + box-shadow: 2px -2px 6px fade(@black, 6%); + transition: left @animation-duration-slow ease-out; + + &::after { + position: absolute; + top: @border-width-base; + right: @border-width-base; + width: @arrow-size; + height: @arrow-size; + border: (@arrow-size / 2) solid @border-color-split; + border-color: @calendar-bg @calendar-bg transparent transparent; + content: ''; + } + } + + &-panel-container { + overflow: hidden; + vertical-align: top; + background: @calendar-bg; + border-radius: @border-radius-base; + box-shadow: @box-shadow-base; + transition: margin @animation-duration-slow; + + .@{picker-prefix-cls}-panels { + display: inline-flex; + flex-wrap: nowrap; + direction: ltr; + } + + .@{picker-prefix-cls}-panel { + vertical-align: top; + background: transparent; + border-width: 0 0 @border-width-base 0; + border-radius: 0; + + .@{picker-prefix-cls}-content, + table { + text-align: center; + } + + &-focused { + border-color: @border-color-split; + } + } + } +} + +@import 'panel'; +@import 'rtl'; diff --git a/src/core/components/BaseDatePicker/src/datePick/style/index.tsx b/src/core/components/BaseDatePicker/src/datePick/style/index.tsx new file mode 100644 index 0000000..cc44242 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/style/index.tsx @@ -0,0 +1,5 @@ +import './index.less'; + +// style dependencies +import '../../tag/style'; +import '../../button/style'; diff --git a/src/core/components/BaseDatePicker/src/datePick/style/panel.less b/src/core/components/BaseDatePicker/src/datePick/style/panel.less new file mode 100644 index 0000000..fec6899 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/style/panel.less @@ -0,0 +1,677 @@ +@picker-cell-inner-cls: ~'@{picker-prefix-cls}-cell-inner'; + +.@{picker-prefix-cls} { + @picker-arrow-size: 7px; + @picker-year-month-cell-width: 60px; + @picker-panel-width: @picker-panel-cell-width * 7 + @padding-sm * 2 + 4; + + &-panel { + display: inline-flex; + flex-direction: column; + text-align: center; + background: @calendar-bg; + border: @border-width-base @border-style-base @picker-border-color; + border-radius: @border-radius-base; + outline: none; + + &-focused { + border-color: @primary-color; + } + } + + // ======================================================== + // = Shared Panel = + // ======================================================== + &-decade-panel, + &-year-panel, + &-quarter-panel, + &-month-panel, + &-week-panel, + &-date-panel, + &-time-panel { + display: flex; + flex-direction: column; + width: @picker-panel-width; + } + + // ======================= Header ======================= + &-header { + display: flex; + padding: 0 @padding-xs; + color: @heading-color; + border-bottom: @border-width-base @border-style-base @picker-border-color; + + > * { + flex: none; + } + + button { + padding: 0; + color: @disabled-color; + line-height: @picker-text-height; + background: transparent; + border: 0; + cursor: pointer; + transition: color @animation-duration-slow; + } + + > button { + min-width: 1.6em; + font-size: @font-size-base; + + &:hover { + color: @text-color; + } + } + + &-view { + flex: auto; + font-weight: 500; + line-height: @picker-text-height; + + button { + color: inherit; + font-weight: inherit; + + &:not(:first-child) { + margin-left: @padding-xs; + } + + &:hover { + color: @primary-color; + } + } + } + } + + // Arrow button + &-prev-icon, + &-next-icon, + &-super-prev-icon, + &-super-next-icon { + position: relative; + display: inline-block; + width: @picker-arrow-size; + height: @picker-arrow-size; + + &::before { + position: absolute; + top: 0; + left: 0; + display: inline-block; + width: @picker-arrow-size; + height: @picker-arrow-size; + border: 0 solid currentcolor; + border-width: 1.5px 0 0 1.5px; + content: ''; + } + } + + &-super-prev-icon, + &-super-next-icon { + &::after { + position: absolute; + top: ceil((@picker-arrow-size / 2)); + left: ceil((@picker-arrow-size / 2)); + display: inline-block; + width: @picker-arrow-size; + height: @picker-arrow-size; + border: 0 solid currentcolor; + border-width: 1.5px 0 0 1.5px; + content: ''; + } + } + + &-prev-icon, + &-super-prev-icon { + transform: rotate(-45deg); + } + + &-next-icon, + &-super-next-icon { + transform: rotate(135deg); + } + + // ======================== Body ======================== + &-content { + width: 100%; + table-layout: fixed; + border-collapse: collapse; + + th, + td { + position: relative; + min-width: 24px; + font-weight: 400; + } + + th { + height: 30px; + color: @text-color; + line-height: 30px; + } + } + + .picker-cell-inner(@cellClassName) { + &::before { + position: absolute; + top: 50%; + right: 0; + left: 0; + z-index: 1; + height: @picker-panel-cell-height; + transform: translateY(-50%); + transition: all @animation-duration-slow; + content: ''; + } + + // >>> Default + .@{cellClassName} { + position: relative; + z-index: 2; + display: inline-block; + min-width: @picker-panel-cell-height; + height: @picker-panel-cell-height; + line-height: @picker-panel-cell-height; + border-radius: @border-radius-base; + transition: background @animation-duration-slow, border @animation-duration-slow; + } + + // >>> Hover + &:hover:not(&-in-view), + &:hover:not(&-selected):not(&-range-start):not(&-range-end):not(&-range-hover-start):not(&-range-hover-end) { + .@{cellClassName} { + background: @picker-basic-cell-hover-color; + } + } + + // >>> Today + &-in-view&-today .@{cellClassName} { + &::before { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + border: @border-width-base @border-style-base @primary-color; + border-radius: @border-radius-base; + content: ''; + } + } + + // >>> In Range + &-in-view&-in-range { + position: relative; + + &::before { + background: @picker-basic-cell-active-with-range-color; + } + } + + // >>> Selected + &-in-view&-selected .@{cellClassName}, + &-in-view&-range-start .@{cellClassName}, + &-in-view&-range-end .@{cellClassName} { + color: @text-color-inverse; + background: @primary-color; + } + + &-in-view&-range-start:not(&-range-start-single), + &-in-view&-range-end:not(&-range-end-single) { + &::before { + background: @picker-basic-cell-active-with-range-color; + } + } + + &-in-view&-range-start::before { + left: 50%; + } + + &-in-view&-range-end::before { + right: 50%; + } + + // >>> Range Hover + &-in-view&-range-hover-start:not(&-in-range):not(&-range-start):not(&-range-end), + &-in-view&-range-hover-end:not(&-in-range):not(&-range-start):not(&-range-end), + &-in-view&-range-hover-start&-range-start-single, + &-in-view&-range-hover-start&-range-start&-range-end&-range-end-near-hover, + &-in-view&-range-hover-end&-range-start&-range-end&-range-start-near-hover, + &-in-view&-range-hover-end&-range-end-single, + &-in-view&-range-hover:not(&-in-range) { + &::after { + position: absolute; + top: 50%; + z-index: 0; + height: 24px; + border-top: @border-width-base dashed @picker-date-hover-range-border-color; + border-bottom: @border-width-base dashed @picker-date-hover-range-border-color; + transform: translateY(-50%); + transition: all @animation-duration-slow; + content: ''; + } + } + + // Add space for stash + &-range-hover-start::after, + &-range-hover-end::after, + &-range-hover::after { + right: 0; + left: 2px; + } + + // Hover with in range + &-in-view&-in-range&-range-hover::before, + &-in-view&-range-start&-range-hover::before, + &-in-view&-range-end&-range-hover::before, + &-in-view&-range-start:not(&-range-start-single)&-range-hover-start::before, + &-in-view&-range-end:not(&-range-end-single)&-range-hover-end::before, + .@{picker-prefix-cls}-panel + > :not(.@{picker-prefix-cls}-date-panel) + &-in-view&-in-range&-range-hover-start::before, + .@{picker-prefix-cls}-panel + > :not(.@{picker-prefix-cls}-date-panel) + &-in-view&-in-range&-range-hover-end::before { + background: @picker-date-hover-range-color; + } + + // range start border-radius + &-in-view&-range-start:not(&-range-start-single):not(&-range-end) .@{cellClassName} { + border-radius: @border-radius-base 0 0 @border-radius-base; + } + + // range end border-radius + &-in-view&-range-end:not(&-range-end-single):not(&-range-start) .@{cellClassName} { + border-radius: 0 @border-radius-base @border-radius-base 0; + } + + // DatePanel only + .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-start .@{cellClassName}, + .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName} { + &::after { + position: absolute; + top: 0; + bottom: 0; + z-index: -1; + background: @picker-date-hover-range-color; + transition: all @animation-duration-slow; + content: ''; + } + } + + .@{picker-prefix-cls}-date-panel + &-in-view&-in-range&-range-hover-start + .@{cellClassName}::after { + right: -5px - @border-width-base; + left: 0; + } + + .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName}::after { + right: 0; + left: -5px - @border-width-base; + } + + // Hover with range start & end + &-range-hover&-range-start::after { + right: 50%; + } + + &-range-hover&-range-end::after { + left: 50%; + } + + // Edge start + tr > &-in-view&-range-hover:first-child::after, + tr > &-in-view&-range-hover-end:first-child::after, + &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after, + &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after, + &-in-view&-range-hover-start::after { + left: 6px; + border-left: @border-width-base dashed @picker-date-hover-range-border-color; + border-top-left-radius: @border-radius-base; + border-bottom-left-radius: @border-radius-base; + } + + // Edge end + tr > &-in-view&-range-hover:last-child::after, + tr > &-in-view&-range-hover-start:last-child::after, + &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after, + &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after, + &-in-view&-range-hover-end::after { + right: 6px; + border-right: @border-width-base dashed @picker-date-hover-range-border-color; + border-top-right-radius: @border-radius-base; + border-bottom-right-radius: @border-radius-base; + } + + // >>> Disabled + &-disabled { + color: @disabled-color; + pointer-events: none; + + .@{cellClassName} { + background: transparent; + } + + &::before { + background: @picker-basic-cell-disabled-bg; + } + } + &-disabled&-today .@{cellClassName}::before { + border-color: @disabled-color; + } + } + + &-cell { + padding: 3px 0; + color: @disabled-color; + cursor: pointer; + + // In view + &-in-view { + color: @text-color; + } + + .picker-cell-inner(~'@{picker-cell-inner-cls}'); + } + + &-decade-panel, + &-year-panel, + &-quarter-panel, + &-month-panel { + .@{picker-prefix-cls}-content { + height: @picker-panel-without-time-cell-height * 4; + } + + .@{picker-cell-inner-cls} { + padding: 0 @padding-xs; + } + } + + &-quarter-panel { + .@{picker-prefix-cls}-content { + height: 56px; + } + } + + // ======================== Footer ======================== + &-footer { + width: min-content; + min-width: 100%; + line-height: @picker-text-height - 2 * @border-width-base; + text-align: center; + border-bottom: @border-width-base @border-style-base transparent; + + .@{picker-prefix-cls}-panel & { + border-top: @border-width-base @border-style-base @picker-border-color; + } + + &-extra { + padding: 0 @padding-sm; + line-height: @picker-text-height - 2 * @border-width-base; + text-align: left; + + &:not(:last-child) { + border-bottom: @border-width-base @border-style-base @picker-border-color; + } + } + } + + &-now { + text-align: left; + } + + &-today-btn { + color: @link-color; + + &:hover { + color: @link-hover-color; + } + + &:active { + color: @link-active-color; + } + + &&-disabled { + color: @disabled-color; + cursor: not-allowed; + } + } + + // ======================================================== + // = Special = + // ======================================================== + + // ===================== Decade Panel ===================== + &-decade-panel { + .@{picker-cell-inner-cls} { + padding: 0 (@padding-xs / 2); + } + + .@{picker-prefix-cls}-cell::before { + display: none; + } + } + + // ============= Year & Quarter & Month Panel ============= + &-year-panel, + &-quarter-panel, + &-month-panel { + @hover-cell-fixed-distance: ( + (((@picker-panel-width - @padding-xs * 2) / 3) - @picker-year-month-cell-width) / 2 + ); + + .@{picker-prefix-cls}-body { + padding: 0 @padding-xs; + } + + .@{picker-cell-inner-cls} { + width: @picker-year-month-cell-width; + } + + .@{picker-prefix-cls}-cell-range-hover-start::after { + left: @hover-cell-fixed-distance; + border-left: @border-width-base dashed @picker-date-hover-range-border-color; + border-radius: @border-radius-base 0 0 @border-radius-base; + + .@{picker-prefix-cls}-panel-rtl & { + right: @hover-cell-fixed-distance; + border-right: @border-width-base dashed @picker-date-hover-range-border-color; + border-radius: 0 @border-radius-base @border-radius-base 0; + } + } + .@{picker-prefix-cls}-cell-range-hover-end::after { + right: @hover-cell-fixed-distance; + border-right: @border-width-base dashed @picker-date-hover-range-border-color; + border-radius: 0 @border-radius-base @border-radius-base 0; + + .@{picker-prefix-cls}-panel-rtl & { + left: @hover-cell-fixed-distance; + border-left: @border-width-base dashed @picker-date-hover-range-border-color; + border-radius: @border-radius-base 0 0 @border-radius-base; + } + } + } + + // ====================== Week Panel ====================== + &-week-panel { + .@{picker-prefix-cls}-body { + padding: @padding-xs @padding-sm; + } + + // Clear cell style + .@{picker-prefix-cls}-cell { + &:hover .@{picker-cell-inner-cls}, + &-selected .@{picker-cell-inner-cls}, + .@{picker-cell-inner-cls} { + background: transparent !important; + } + } + + &-row { + td { + transition: background @animation-duration-slow; + } + + &:hover td { + background: @picker-basic-cell-hover-color; + } + + &-selected td, + &-selected:hover td { + background: @primary-color; + + &.@{picker-prefix-cls}-cell-week { + color: fade(@text-color-inverse, 50%); + } + + &.@{picker-prefix-cls}-cell-today .@{picker-cell-inner-cls}::before { + border-color: @text-color-inverse; + } + + .@{picker-cell-inner-cls} { + color: @text-color-inverse; + } + } + } + } + + // ====================== Date Panel ====================== + &-date-panel { + .@{picker-prefix-cls}-body { + padding: @padding-xs @padding-sm; + } + + .@{picker-prefix-cls}-content { + width: @picker-panel-cell-width * 7; + + th { + width: @picker-panel-cell-width; + } + } + } + + // ==================== Datetime Panel ==================== + &-datetime-panel { + display: flex; + + .@{picker-prefix-cls}-time-panel { + border-left: @border-width-base @border-style-base @picker-border-color; + } + + .@{picker-prefix-cls}-date-panel, + .@{picker-prefix-cls}-time-panel { + transition: opacity @animation-duration-slow; + } + + // Keyboard + &-active { + .@{picker-prefix-cls}-date-panel, + .@{picker-prefix-cls}-time-panel { + opacity: 0.3; + + &-active { + opacity: 1; + } + } + } + } + + // ====================== Time Panel ====================== + &-time-panel { + width: auto; + min-width: auto; + + .@{picker-prefix-cls}-content { + display: flex; + flex: auto; + height: @picker-time-panel-column-height; + } + + &-column { + flex: 1 0 auto; + width: @picker-time-panel-column-width; + margin: 0; + padding: 0; + overflow-y: hidden; + text-align: left; + list-style: none; + transition: background @animation-duration-slow; + + &::after { + display: block; + height: @picker-time-panel-column-height - @picker-time-panel-cell-height; + content: ''; + .@{picker-prefix-cls}-datetime-panel & { + height: @picker-time-panel-column-height - @picker-time-panel-cell-height + 2 * + @border-width-base; + } + } + + &:not(:first-child) { + border-left: @border-width-base @border-style-base @picker-border-color; + } + + &-active { + background: @calendar-column-active-bg; + } + + &:hover { + overflow-y: auto; + } + + > li { + margin: 0; + padding: 0; + + &.@{picker-prefix-cls}-time-panel-cell { + .@{picker-prefix-cls}-time-panel-cell-inner { + display: block; + width: 100%; + height: @picker-time-panel-cell-height; + margin: 0; + padding: 0 0 0 ((@picker-time-panel-column-width - 28px) / 2); + color: @text-color; + line-height: @picker-time-panel-cell-height; + border-radius: 0; + cursor: pointer; + transition: background @animation-duration-slow; + + &:hover { + background: @item-hover-bg; + } + } + + &-selected { + .@{picker-prefix-cls}-time-panel-cell-inner { + background: @calendar-item-active-bg; + } + } + + &-disabled { + .@{picker-prefix-cls}-time-panel-cell-inner { + color: @disabled-color; + background: transparent; + cursor: not-allowed; + } + } + } + } + } + } +} + +// Fix IE11 render bug by css hacks +// https://github.com/ant-design/ant-design/issues/21559 +// https://codepen.io/afc163-1472555193/pen/mdJRaNj?editors=0110 +/* stylelint-disable-next-line selector-type-no-unknown,selector-no-vendor-prefix */ +_:-ms-fullscreen, +:root { + .@{picker-prefix-cls}-range-wrapper { + .@{picker-prefix-cls}-month-panel .@{picker-prefix-cls}-cell, + .@{picker-prefix-cls}-year-panel .@{picker-prefix-cls}-cell { + padding: 21px 0; + } + } +} diff --git a/src/core/components/BaseDatePicker/src/datePick/style/rtl.less b/src/core/components/BaseDatePicker/src/datePick/style/rtl.less new file mode 100644 index 0000000..3a74800 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/style/rtl.less @@ -0,0 +1,246 @@ +.@{picker-prefix-cls} { + &-rtl { + direction: rtl; + } + + &-suffix { + .@{picker-prefix-cls}-rtl & { + margin-right: (@padding-xs / 2); + margin-left: 0; + } + } + + &-clear { + .@{picker-prefix-cls}-rtl & { + right: auto; + left: 0; + } + } + + &-separator { + .@{picker-prefix-cls}-rtl & { + transform: rotate(180deg); + } + } + + &-header { + &-view { + button { + &:not(:first-child) { + .@{picker-prefix-cls}-panel-rtl & { + margin-right: @padding-xs; + margin-left: 0; + } + } + } + } + } + + // ======================== Range ========================= + &-range { + // Clear + .@{picker-prefix-cls}-clear { + .@{picker-prefix-cls}-rtl& { + right: auto; + left: @input-padding-horizontal-base; + } + } + + // Active bar + .@{picker-prefix-cls}-active-bar { + .@{picker-prefix-cls}-rtl& { + margin-right: @input-padding-horizontal-base; + margin-left: 0; + } + } + + &.@{picker-prefix-cls}-small { + .@{picker-prefix-cls}-active-bar { + .@{picker-prefix-cls}-rtl& { + margin-right: @input-padding-horizontal-sm; + } + } + } + } + + // ======================== Ranges ======================== + &-ranges { + .@{picker-prefix-cls}-dropdown-rtl & { + text-align: right; + } + + .@{picker-prefix-cls}-ok { + .@{picker-prefix-cls}-dropdown-rtl & { + float: left; + margin-right: @padding-xs; + margin-left: 0; + } + } + } + + // ======================== Panel ======================== + &-panel { + &-rtl { + direction: rtl; + } + } + + &-prev-icon, + &-super-prev-icon { + .@{picker-prefix-cls}-panel-rtl & { + transform: rotate(135deg); + } + } + + &-next-icon, + &-super-next-icon { + .@{picker-prefix-cls}-panel-rtl & { + transform: rotate(-45deg); + } + } + + &-cell { + .picker-cell-inner(~'@{picker-cell-inner-cls}'); + } + + // ======================== Body ========================== + .picker-cell-inner(@cellClassName) { + .@{cellClassName} { + position: relative; + z-index: 2; + display: inline-block; + min-width: @picker-panel-cell-height; + height: @picker-panel-cell-height; + line-height: @picker-panel-cell-height; + border-radius: @border-radius-base; + transition: background @animation-duration-slow, border @animation-duration-slow; + } + + &-in-view&-range-start::before { + .@{picker-prefix-cls}-panel-rtl & { + right: 50%; + left: 0; + } + } + + &-in-view&-range-end::before { + .@{picker-prefix-cls}-panel-rtl & { + right: 0; + left: 50%; + } + } + + &-in-view&-range-start&-range-end::before { + .@{picker-prefix-cls}-panel-rtl & { + right: 50%; + left: 50%; + } + } + + .@{picker-prefix-cls}-date-panel + &-in-view&-in-range&-range-hover-start + .@{cellClassName}::after { + .@{picker-prefix-cls}-panel-rtl & { + right: 0; + left: -5px - @border-width-base; + } + } + + .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName}::after { + .@{picker-prefix-cls}-panel-rtl & { + right: -5px - @border-width-base; + left: 0; + } + } + + // Hover with range start & end + &-range-hover&-range-start::after { + .@{picker-prefix-cls}-panel-rtl & { + right: 0; + left: 50%; + } + } + + &-range-hover&-range-end::after { + .@{picker-prefix-cls}-panel-rtl & { + right: 50%; + left: 0; + } + } + + // range start border-radius + &-in-view&-range-start:not(&-range-start-single):not(&-range-end) .@{cellClassName} { + .@{picker-prefix-cls}-panel-rtl & { + border-radius: 0 @border-radius-base @border-radius-base 0; + } + } + + // range end border-radius + &-in-view&-range-end:not(&-range-end-single):not(&-range-start) .@{cellClassName} { + .@{picker-prefix-cls}-panel-rtl & { + border-radius: @border-radius-base 0 0 @border-radius-base; + } + } + + // Edge start + tr > &-in-view&-range-hover:not(&-selected):first-child::after, + &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after, + &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after, + &-in-view&-range-hover-start::after { + .@{picker-prefix-cls}-panel-rtl & { + right: 6px; + left: 0; + border-right: @border-width-base dashed @picker-date-hover-range-border-color; + border-left: none; + border-radius: 0 @border-radius-base @border-radius-base 0; + } + } + + // Edge end + tr > &-in-view&-range-hover:not(&-selected):last-child::after, + &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after, + &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after, + &-in-view&-range-hover-end::after { + .@{picker-prefix-cls}-panel-rtl & { + right: 0; + left: 6px; + border-right: none; + border-left: @border-width-base dashed @picker-date-hover-range-border-color; + border-radius: @border-radius-base 0 0 @border-radius-base; + } + } + + tr > &-in-view&-range-hover-start:last-child::after, + tr > &-in-view&-range-hover-end:first-child::after, + &-in-view&-start&-range-hover-edge-start:not(&-range-hover)::after, + &-in-view&-start&-range-hover-end&-range-hover-edge-start:not(&-range-hover)::after, + &-in-view&-end&-range-hover-start&-range-hover-edge-end:not(&-range-hover)::after, + tr > &-in-view&-start&-range-hover&-range-hover-edge-start:last-child::after, + tr > &-in-view&-end&-range-hover&-range-hover-edge-end:first-child::after { + .@{picker-prefix-cls}-panel-rtl & { + right: 6px; + left: 6px; + border-right: @border-width-base dashed @picker-date-hover-range-border-color; + border-left: @border-width-base dashed @picker-date-hover-range-border-color; + border-radius: @border-radius-base; + } + } + } + + // ======================== Footer ======================== + &-footer { + &-extra { + .@{picker-prefix-cls}-dropdown-rtl & { + direction: rtl; + text-align: right; + } + } + } + + // ====================== Time Panel ====================== + &-time-panel { + .@{picker-prefix-cls}-panel-rtl & { + direction: ltr; + } + } +} diff --git a/src/core/components/BaseDatePicker/src/datePick/util.ts b/src/core/components/BaseDatePicker/src/datePick/util.ts new file mode 100644 index 0000000..aa7b7fe --- /dev/null +++ b/src/core/components/BaseDatePicker/src/datePick/util.ts @@ -0,0 +1,53 @@ +import type { PickerMode } from '@core/components/BaseDatePicker/src/vc-picker/interface' +import type { PickerLocale } from './generatePicker' + +export function getPlaceholder( + picker: PickerMode | undefined, + locale: PickerLocale, + customizePlaceholder?: string +): string { + if (customizePlaceholder !== undefined) { + return customizePlaceholder + } + + if (picker === 'year' && locale.lang.yearPlaceholder) { + return locale.lang.yearPlaceholder + } + if (picker === 'quarter' && locale.lang.quarterPlaceholder) { + return locale.lang.quarterPlaceholder + } + if (picker === 'month' && locale.lang.monthPlaceholder) { + return locale.lang.monthPlaceholder + } + if (picker === 'week' && locale.lang.weekPlaceholder) { + return locale.lang.weekPlaceholder + } + if (picker === 'time' && locale.timePickerLocale.placeholder) { + return locale!.timePickerLocale.placeholder + } + return locale.lang.placeholder +} + +export function getRangePlaceholder( + picker: PickerMode | undefined, + locale: PickerLocale, + customizePlaceholder?: [string, string] +) { + if (customizePlaceholder !== undefined) { + return customizePlaceholder + } + + if (picker === 'year' && locale.lang.yearPlaceholder) { + return locale.lang.rangeYearPlaceholder + } + if (picker === 'month' && locale.lang.monthPlaceholder) { + return locale.lang.rangeMonthPlaceholder + } + if (picker === 'week' && locale.lang.weekPlaceholder) { + return locale.lang.rangeWeekPlaceholder + } + if (picker === 'time' && locale.timePickerLocale.placeholder) { + return locale!.timePickerLocale.rangePlaceholder + } + return locale.lang.rangePlaceholder +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/PanelContext.tsx b/src/core/components/BaseDatePicker/src/vc-picker/PanelContext.tsx new file mode 100644 index 0000000..5ea2f23 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/PanelContext.tsx @@ -0,0 +1,38 @@ +import type { InjectionKey, Ref } from 'vue'; +import { inject, provide } from 'vue'; +import type { OnSelect, PanelMode } from './interface'; + +export type ContextOperationRefProps = { + onKeydown?: (e: KeyboardEvent) => boolean; + onClose?: () => void; +}; + +export type PanelContextProps = { + operationRef?: Ref; + /** Only work with time panel */ + hideHeader?: Ref; + panelRef?: Ref; + hidePrevBtn?: Ref; + hideNextBtn?: Ref; + onDateMouseenter?: (date: any) => void; + onDateMouseleave?: (date: any) => void; + onSelect?: OnSelect; + hideRanges?: Ref; + open?: Ref; + mode?: Ref; + + /** Only used for TimePicker and this is a deprecated prop */ + defaultOpenValue?: Ref; +}; + +const PanelContextKey: InjectionKey = Symbol('PanelContextProps'); + +export const useProvidePanel = (props: PanelContextProps) => { + provide(PanelContextKey, props); +}; + +export const useInjectPanel = () => { + return inject(PanelContextKey, {}); +}; + +export default PanelContextKey; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/Picker.tsx b/src/core/components/BaseDatePicker/src/vc-picker/Picker.tsx new file mode 100644 index 0000000..25f32c0 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/Picker.tsx @@ -0,0 +1,639 @@ +/** + * Removed: + * - getCalendarContainer: use `getPopupContainer` instead + * - onOk + * + * New Feature: + * - picker + * - allowEmpty + * - selectable + * + * Tips: Should add faq about `datetime` mode with `defaultValue` + */ + +import type { + PickerPanelBaseProps, + PickerPanelDateProps, + PickerPanelTimeProps +} from './PickerPanel' +import PickerPanel from './PickerPanel' +import PickerTrigger from './PickerTrigger' +import { formatValue, isEqual, parseValue } from './utils/dateUtil' +import getDataOrAriaProps, { toArray } from './utils/miscUtil' +import type { ContextOperationRefProps } from './PanelContext' +import { useProvidePanel } from './PanelContext' +import type { CustomFormat, PickerMode } from './interface' +import { getDefaultFormat, getInputSize, elementsContains } from './utils/uiUtil' +import usePickerInput from './hooks/usePickerInput' +import useTextValueMapping from './hooks/useTextValueMapping' +import useValueTexts from './hooks/useValueTexts' +import useHoverValue from './hooks/useHoverValue' +import type { CSSProperties, HTMLAttributes, Ref } from 'vue' +import { computed, defineComponent, ref, toRef, watch } from 'vue' +import type { + ChangeEvent, + FocusEventHandler, + MouseEventHandler +} from 'ant-design-vue/es/_util/EventInterface' +import type { VueNode } from 'ant-design-vue/es/_util/type' +import type { AlignType } from 'ant-design-vue/es/vc-align/interface' +import useMergedState from 'ant-design-vue/es/_util/hooks/useMergedState' +import { warning } from 'ant-design-vue/es/vc-util/warning' +import classNames from 'ant-design-vue/es/_util/classNames' +import type { SharedTimeProps } from './panels/TimePanel' +import { useProviderTrigger } from 'ant-design-vue/es/vc-trigger/context' +import { legacyPropsWarning } from './utils/warnUtil' + +export type PickerRefConfig = { + focus: () => void + blur: () => void +} + +export type PickerSharedProps = { + dropdownClassName?: string + dropdownAlign?: AlignType + popupStyle?: CSSProperties + transitionName?: string + placeholder?: string + allowClear?: boolean + autofocus?: boolean + disabled?: boolean + tabindex?: number + open?: boolean + defaultOpen?: boolean + /** Make input readOnly to avoid popup keyboard in mobile */ + inputReadOnly?: boolean + id?: string + + presets?: PresetDate[] + + // Value + format?: string | CustomFormat | (string | CustomFormat)[] + + // Render + suffixIcon?: VueNode + clearIcon?: VueNode + prevIcon?: VueNode + nextIcon?: VueNode + superPrevIcon?: VueNode + superNextIcon?: VueNode + getPopupContainer?: (node: HTMLElement) => HTMLElement + panelRender?: (originPanel: VueNode) => VueNode + inputRender?: (props: HTMLAttributes) => VueNode + + // Events + onChange?: (value: DateType | null, dateString: string) => void + onOpenChange?: (open: boolean) => void + onFocus?: FocusEventHandler + onBlur?: FocusEventHandler + onMousedown?: MouseEventHandler + onMouseup?: MouseEventHandler + onMouseenter?: MouseEventHandler + onMouseleave?: MouseEventHandler + onClick?: MouseEventHandler + onContextmenu?: MouseEventHandler + onKeydown?: (event: KeyboardEvent, preventDefault: () => void) => void + + // WAI-ARIA + role?: string + name?: string + + autocomplete?: string + direction?: 'ltr' | 'rtl' + showToday?: boolean + showTime?: boolean | SharedTimeProps +} + +type OmitPanelProps = Omit< + Props, + 'onChange' | 'hideHeader' | 'pickerValue' | 'onPickerValueChange' +> + +export type PickerBaseProps = {} & PickerSharedProps & + OmitPanelProps> + +export type PickerDateProps = {} & PickerSharedProps & + OmitPanelProps> + +export type PickerTimeProps = { + picker: 'time' + /** + * @deprecated Please use `defaultValue` directly instead + * since `defaultOpenValue` will confuse user of current value status + */ + defaultOpenValue?: DateType +} & PickerSharedProps & + Omit>, 'format'> + +export type PickerProps = + | PickerBaseProps + | PickerDateProps + | PickerTimeProps + +// TMP type to fit for ts 3.9.2 +type OmitType = Omit, 'picker'> & + Omit, 'picker'> & + Omit, 'picker'> +type MergedPickerProps = { + picker?: PickerMode +} & OmitType + +function Picker() { + return defineComponent>({ + name: 'Picker', + inheritAttrs: false, + props: [ + 'prefixCls', + 'id', + 'tabindex', + 'dropdownClassName', + 'dropdownAlign', + 'popupStyle', + 'transitionName', + 'generateConfig', + 'locale', + 'inputReadOnly', + 'allowClear', + 'autofocus', + 'showTime', + 'showNow', + 'showHour', + 'showMinute', + 'showSecond', + 'picker', + 'format', + 'use12Hours', + 'value', + 'defaultValue', + 'open', + 'defaultOpen', + 'defaultOpenValue', + 'suffixIcon', + 'presets', + 'clearIcon', + 'disabled', + 'disabledDate', + 'placeholder', + 'getPopupContainer', + 'panelRender', + 'inputRender', + 'onChange', + 'onOpenChange', + 'onFocus', + 'onBlur', + 'onMousedown', + 'onMouseup', + 'onMouseenter', + 'onMouseleave', + 'onContextmenu', + 'onClick', + 'onKeydown', + 'onSelect', + 'direction', + 'autocomplete', + 'showToday', + 'renderExtraFooter', + 'dateRender', + 'minuteStep', + 'hourStep', + 'secondStep', + 'hideDisabledOptions' + ] as any, + // slots: [ + // 'suffixIcon', + // 'clearIcon', + // 'prevIcon', + // 'nextIcon', + // 'superPrevIcon', + // 'superNextIcon', + // 'panelRender', + // ], + setup(props, { attrs, expose }) { + const inputRef = ref(null) + const picker = computed(() => props.picker ?? 'date') + const needConfirmButton = computed( + () => (picker.value === 'date' && !!props.showTime) || picker.value === 'time' + ) + // ============================ Warning ============================ + if (process.env.NODE_ENV !== 'production') { + legacyPropsWarning(props) + } + // ============================= State ============================= + const formatList = computed(() => + toArray(getDefaultFormat(props.format, picker.value, props.showTime, props.use12Hours)) + ) + + // Panel ref + const panelDivRef = ref(null) + const inputDivRef = ref(null) + const containerRef = ref(null) + + // Real value + const [mergedValue, setInnerValue] = useMergedState(null, { + value: toRef(props, 'value'), + defaultValue: props.defaultValue + }) + const selectedValue = ref(mergedValue.value) as Ref + const setSelectedValue = (val: DateType) => { + selectedValue.value = val + } + + // Operation ref + const operationRef = ref(null) + + // Open + const [mergedOpen, triggerInnerOpen] = useMergedState(false, { + value: toRef(props, 'open'), + defaultValue: props.defaultOpen, + postState: (postOpen) => (props.disabled ? false : postOpen), + onChange: (newOpen) => { + if (props.onOpenChange) { + props.onOpenChange(newOpen) + } + + if (!newOpen && operationRef.value && operationRef.value.onClose) { + operationRef.value.onClose() + } + } + }) + + // ============================= Text ============================== + const [valueTexts, firstValueText] = useValueTexts(selectedValue, { + formatList, + generateConfig: toRef(props, 'generateConfig'), + locale: toRef(props, 'locale') + }) + const [text, triggerTextChange, resetText] = useTextValueMapping({ + valueTexts, + onTextChange: (newText) => { + const inputDate = parseValue(newText, { + locale: props.locale, + formatList: formatList.value, + generateConfig: props.generateConfig + }) + if (inputDate && (!props.disabledDate || !props.disabledDate(inputDate))) { + setSelectedValue(inputDate) + } + } + }) + + // ============================ Trigger ============================ + const triggerChange = (newValue: DateType | null) => { + const { onChange, generateConfig, locale } = props + setSelectedValue(newValue) + setInnerValue(newValue) + + if (onChange && !isEqual(generateConfig, mergedValue.value, newValue)) { + onChange( + newValue, + newValue + ? formatValue(newValue, { + generateConfig, + locale, + format: formatList.value[0] + }) + : '' + ) + } + } + + const triggerOpen = (newOpen: boolean) => { + if (props.disabled && newOpen) { + return + } + triggerInnerOpen(newOpen) + } + + const forwardKeydown = (e: KeyboardEvent) => { + if (mergedOpen.value && operationRef.value && operationRef.value.onKeydown) { + // Let popup panel handle keyboard + return operationRef.value.onKeydown(e) + } + + /* istanbul ignore next */ + /* eslint-disable no-lone-blocks */ + { + warning( + false, + 'Picker not correct forward Keydown operation. Please help to fire issue about this.' + ) + return false + } + } + + const onInternalMouseup: MouseEventHandler = (...args) => { + if (props.onMouseup) { + props.onMouseup(...args) + } + + if (inputRef.value) { + inputRef.value.focus() + triggerOpen(true) + } + } + + // ============================= Input ============================= + const [inputProps, { focused, typing }] = usePickerInput({ + blurToCancel: needConfirmButton, + open: mergedOpen, + value: text, + triggerOpen, + forwardKeydown, + isClickOutside: (target) => + !elementsContains( + [panelDivRef.value, inputDivRef.value, containerRef.value], + target as HTMLElement + ), + onSubmit: () => { + if ( + // When user typing disabledDate with keyboard and enter, this value will be empty + !selectedValue.value || + // Normal disabled check + (props.disabledDate && props.disabledDate(selectedValue.value)) + ) { + return false + } + + triggerChange(selectedValue.value) + triggerOpen(false) + resetText() + return true + }, + onCancel: () => { + triggerOpen(false) + setSelectedValue(mergedValue.value) + resetText() + }, + onKeydown: (e, preventDefault) => { + props.onKeydown?.(e, preventDefault) + }, + onFocus: (e: FocusEvent) => { + props.onFocus?.(e) + }, + onBlur: (e: FocusEvent) => { + props.onBlur?.(e) + } + }) + + // ============================= Sync ============================== + // Close should sync back with text value + watch([mergedOpen, valueTexts], () => { + if (!mergedOpen.value) { + setSelectedValue(mergedValue.value) + + if (!valueTexts.value.length || valueTexts.value[0] === '') { + triggerTextChange('') + } else if (firstValueText.value !== text.value) { + resetText() + } + } + }) + + // Change picker should sync back with text value + watch(picker, () => { + if (!mergedOpen.value) { + resetText() + } + }) + + // Sync innerValue with control mode + watch(mergedValue, () => { + // Sync select value + setSelectedValue(mergedValue.value) + }) + + const [hoverValue, onEnter, onLeave] = useHoverValue(text, { + formatList, + generateConfig: toRef(props, 'generateConfig'), + locale: toRef(props, 'locale') + }) + + const onContextSelect = (date: DateType, type: 'key' | 'mouse' | 'submit') => { + if (type === 'submit' || (type !== 'key' && !needConfirmButton.value)) { + // triggerChange will also update selected values + triggerChange(date) + triggerOpen(false) + } + } + + useProvidePanel({ + operationRef, + hideHeader: computed(() => picker.value === 'time'), + panelRef: panelDivRef, + onSelect: onContextSelect, + open: mergedOpen, + defaultOpenValue: toRef(props, 'defaultOpenValue'), + onDateMouseenter: onEnter, + onDateMouseleave: onLeave + }) + + expose({ + focus: () => { + if (inputRef.value) { + inputRef.value.focus() + } + }, + blur: () => { + if (inputRef.value) { + inputRef.value.blur() + } + } + }) + + const getPortal = useProviderTrigger() + + return () => { + const { + prefixCls = 'rc-picker', + id, + tabindex, + dropdownClassName, + dropdownAlign, + popupStyle, + transitionName, + generateConfig, + locale, + inputReadOnly, + allowClear, + autofocus, + picker = 'date', + defaultOpenValue, + suffixIcon, + clearIcon, + disabled, + placeholder, + getPopupContainer, + panelRender, + onMousedown, + onMouseenter, + onMouseleave, + onContextmenu, + onClick, + onSelect, + direction, + autocomplete = 'off' + } = props + + // ============================= Panel ============================= + //todo check + const panelProps = { + // Remove `picker` & `format` here since TimePicker is little different with other panel + ...(props as Omit, 'picker' | 'format'>), + ...attrs, + class: classNames({ + [`${prefixCls}-panel-focused`]: !typing.value + }), + style: undefined, + pickerValue: undefined, + onPickerValueChange: undefined, + onChange: null + } + //todo check + let panelNode: VueNode = ( + { + onSelect?.(date) + setSelectedValue(date) + }} + direction={direction} + /*onPanelChange={(viewDate, mode) => { + const { onPanelChange } = props; + onLeave(true); + onPanelChange?.(viewDate, mode); + }}*/ + /> + ) + + if (panelRender) { + panelNode = panelRender(panelNode) + } + + const panel = ( +
{ + e.preventDefault() + }} + > + {panelNode} +
+ ) + + let suffixNode: VueNode + if (suffixIcon) { + suffixNode = {suffixIcon} + } + + let clearNode: VueNode + if (allowClear && mergedValue.value && !disabled) { + clearNode = ( + { + e.preventDefault() + e.stopPropagation() + }} + onMouseup={(e) => { + e.preventDefault() + e.stopPropagation() + triggerChange(null) + triggerOpen(false) + }} + class={`${prefixCls}-clear`} + role="button" + > + {clearIcon || } + + ) + } + + const mergedInputProps: HTMLAttributes = { + id, + tabindex, + disabled, + readonly: inputReadOnly || typeof formatList.value[0] === 'function' || !typing.value, + value: hoverValue.value || text.value, + onInput: (e: ChangeEvent) => { + triggerTextChange(e.target.value) + }, + autofocus, + placeholder, + ref: inputRef, + title: text.value, + ...inputProps.value, + size: getInputSize(picker, formatList.value[0], generateConfig), + ...getDataOrAriaProps(props), + autocomplete + } + + const inputNode = props.inputRender ? ( + props.inputRender(mergedInputProps) + ) : ( + + ) + + // ============================ Warning ============================ + if (process.env.NODE_ENV !== 'production') { + warning( + !defaultOpenValue, + '`defaultOpenValue` may confuse user for the current value status. Please use `defaultValue` instead.' + ) + } + + // ============================ Return ============================= + + const popupPlacement = direction === 'rtl' ? 'bottomRight' : 'bottomLeft' + return ( + panel + }} + > +
+
+ {inputNode} + {suffixNode} + {clearNode} +
+ {getPortal()} +
+
+ ) + } + } + }) +} + +export default Picker() diff --git a/src/core/components/BaseDatePicker/src/vc-picker/PickerPanel.tsx b/src/core/components/BaseDatePicker/src/vc-picker/PickerPanel.tsx new file mode 100644 index 0000000..26e02fa --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/PickerPanel.tsx @@ -0,0 +1,624 @@ +/** + * Logic: + * When `mode` === `picker`, + * click will trigger `onSelect` (if value changed trigger `onChange` also). + * Panel change will not trigger `onSelect` but trigger `onPanelChange` + */ +import type { SharedTimeProps } from './panels/TimePanel'; +import TimePanel from './panels/TimePanel'; +import DatetimePanel from './panels/DatetimePanel'; +import DatePanel from './panels/DatePanel'; +import WeekPanel from './panels/WeekPanel'; +import MonthPanel from './panels/MonthPanel'; +import QuarterPanel from './panels/QuarterPanel'; +import YearPanel from './panels/YearPanel'; +import DecadePanel from './panels/DecadePanel'; +import type { GenerateConfig } from './generate'; +import type { + Locale, + PanelMode, + PanelRefProps, + PickerMode, + DisabledTime, + OnPanelChange, + Components, +} from './interface'; +import { isEqual } from './utils/dateUtil'; +import { useInjectPanel, useProvidePanel } from './PanelContext'; +import type { DateRender } from './panels/DatePanel/DateBody'; +import { PickerModeMap } from './utils/uiUtil'; +import type { MonthCellRender } from './panels/MonthPanel/MonthBody'; +import { useInjectRange } from './RangeContext'; +import getExtraFooter from './utils/getExtraFooter'; +import getRanges from './utils/getRanges'; +import { getLowerBoundTime, setDateTime, setTime } from './utils/timeUtil'; +import type { VueNode } from 'ant-design-vue/es/_util/type'; +import type { CSSProperties } from 'vue'; +import { computed, createVNode, defineComponent, ref, toRef, watch, watchEffect } from 'vue'; +import useMergedState from 'ant-design-vue/es/_util/hooks/useMergedState'; +import { warning } from 'ant-design-vue/es/vc-util/warning'; +import KeyCode from 'ant-design-vue/es/_util/KeyCode'; +import classNames from 'ant-design-vue/es/_util/classNames'; + +export type PickerPanelSharedProps = { + prefixCls?: string; + // className?: string; + // style?: React.CSSProperties; + /** @deprecated Will be removed in next big version. Please use `mode` instead */ + mode?: PanelMode; + tabindex?: number; + + // Locale + locale: Locale; + generateConfig: GenerateConfig; + + // Value + value?: DateType | null; + defaultValue?: DateType; + /** [Legacy] Set default display picker view date */ + pickerValue?: DateType; + /** [Legacy] Set default display picker view date */ + defaultPickerValue?: DateType; + + // Date + disabledDate?: (date: DateType) => boolean; + + // Render + dateRender?: DateRender; + monthCellRender?: MonthCellRender; + renderExtraFooter?: (mode: PanelMode) => VueNode; + + // Event + onSelect?: (value: DateType) => void; + onChange?: (value: DateType) => void; + onPanelChange?: OnPanelChange; + onMousedown?: (e: MouseEvent) => void; + onOk?: (date: DateType) => void; + + direction?: 'ltr' | 'rtl'; + + /** @private This is internal usage. Do not use in your production env */ + hideHeader?: boolean; + /** @private This is internal usage. Do not use in your production env */ + onPickerValueChange?: (date: DateType) => void; + + /** @private Internal usage. Do not use in your production env */ + components?: Components; +}; + +export type PickerPanelBaseProps = { + picker: Exclude; +} & PickerPanelSharedProps; + +export type PickerPanelDateProps = { + picker?: 'date'; + showToday?: boolean; + showNow?: boolean; + + // Time + showTime?: boolean | SharedTimeProps; + disabledTime?: DisabledTime; +} & PickerPanelSharedProps; + +export type PickerPanelTimeProps = { + picker: 'time'; +} & PickerPanelSharedProps & + SharedTimeProps; + +export type PickerPanelProps = + | PickerPanelBaseProps + | PickerPanelDateProps + | PickerPanelTimeProps; + +// TMP type to fit for ts 3.9.2 +type OmitType = Omit, 'picker'> & + Omit, 'picker'> & + Omit, 'picker'>; +type MergedPickerPanelProps = { + picker?: PickerMode; +} & OmitType; + +function PickerPanel() { + return defineComponent>({ + name: 'PickerPanel', + inheritAttrs: false, + props: { + prefixCls: String, + locale: Object, + generateConfig: Object, + value: Object, + defaultValue: Object, + pickerValue: Object, + defaultPickerValue: Object, + disabledDate: Function, + mode: String, + picker: { type: String, default: 'date' }, + tabindex: { type: [Number, String], default: 0 }, + showNow: { type: Boolean, default: undefined }, + showTime: [Boolean, Object], + showToday: Boolean, + renderExtraFooter: Function, + dateRender: Function, + hideHeader: { type: Boolean, default: undefined }, + onSelect: Function, + onChange: Function, + onPanelChange: Function, + onMousedown: Function, + onPickerValueChange: Function, + onOk: Function, + components: Object, + direction: String, + hourStep: { type: Number, default: 1 }, + minuteStep: { type: Number, default: 1 }, + secondStep: { type: Number, default: 1 }, + } as any, + setup(props, { attrs }) { + const needConfirmButton = computed( + () => (props.picker === 'date' && !!props.showTime) || props.picker === 'time', + ); + + const isHourStepValid = computed(() => 24 % props.hourStep === 0); + const isMinuteStepValid = computed(() => 60 % props.minuteStep === 0); + const isSecondStepValid = computed(() => 60 % props.secondStep === 0); + if (process.env.NODE_ENV !== 'production') { + watchEffect(() => { + const { generateConfig, value, hourStep = 1, minuteStep = 1, secondStep = 1 } = props; + warning(!value || generateConfig.isValidate(value), 'Invalidate date pass to `value`.'); + warning( + !value || generateConfig.isValidate(value), + 'Invalidate date pass to `defaultValue`.', + ); + warning( + isHourStepValid.value, + `\`hourStep\` ${hourStep} is invalid. It should be a factor of 24.`, + ); + warning( + isMinuteStepValid.value, + `\`minuteStep\` ${minuteStep} is invalid. It should be a factor of 60.`, + ); + warning( + isSecondStepValid.value, + `\`secondStep\` ${secondStep} is invalid. It should be a factor of 60.`, + ); + }); + } + + const panelContext = useInjectPanel(); + const { + operationRef, + panelRef: panelDivRef, + onSelect: onContextSelect, + hideRanges, + defaultOpenValue, + } = panelContext; + const { inRange, panelPosition, rangedValue, hoverRangedValue } = useInjectRange(); + const panelRef = ref({}); + // Value + const [mergedValue, setInnerValue] = useMergedState(null, { + value: toRef(props, 'value'), + defaultValue: props.defaultValue, + postState: val => { + if (!val && defaultOpenValue?.value && props.picker === 'time') { + return defaultOpenValue.value; + } + return val; + }, + }); + + // View date control + const [viewDate, setInnerViewDate] = useMergedState(null, { + value: toRef(props, 'pickerValue'), + defaultValue: props.defaultPickerValue || mergedValue.value, + postState: date => { + const { generateConfig, showTime, defaultValue } = props; + + const now = generateConfig.getNow(); + if (!date) return now; + // When value is null and set showTime + if (!mergedValue.value && props.showTime) { + if (typeof showTime === 'object') { + return setDateTime( + generateConfig, + Array.isArray(date) ? date[0] : date, + showTime.defaultValue || now, + ); + } + if (defaultValue) { + return setDateTime( + generateConfig, + Array.isArray(date) ? date[0] : date, + defaultValue, + ); + } + return setDateTime(generateConfig, Array.isArray(date) ? date[0] : date, now); + } + return date; + }, + }); + + + const setViewDate = (date: DateType) => { + setInnerViewDate(date); + if (props.onPickerValueChange) { + props.onPickerValueChange(date); + } + }; + + // Panel control + const getInternalNextMode = (nextMode: PanelMode): PanelMode => { + const getNextMode = PickerModeMap[props.picker!]; + if (getNextMode) { + return getNextMode(nextMode); + } + + return nextMode; + }; + + // Save panel is changed from which panel + const [mergedMode, setInnerMode] = useMergedState( + () => { + if (props.picker === 'time') { + return 'time'; + } + return getInternalNextMode('date'); + }, + { + value: toRef(props, 'mode'), + }, + ); + watch( + () => props.picker, + () => { + setInnerMode(props.picker); + }, + ); + + const sourceMode = ref(mergedMode.value); + const setSourceMode = (val: PanelMode) => { + sourceMode.value = val; + }; + + const onInternalPanelChange = (newMode: PanelMode | null, viewValue: DateType) => { + const { onPanelChange, generateConfig } = props; + const nextMode = getInternalNextMode(newMode || mergedMode.value); + setSourceMode(mergedMode.value); + setInnerMode(nextMode); + + if ( + onPanelChange && + (mergedMode.value !== nextMode || isEqual(generateConfig, viewDate.value, viewDate.value)) + ) { + onPanelChange(viewValue, nextMode); + } + }; + + const triggerSelect = ( + date: DateType, + type: 'key' | 'mouse' | 'submit', + forceTriggerSelect = false, + ) => { + const { picker, generateConfig, onSelect, onChange, disabledDate } = props; + if (mergedMode.value === picker || forceTriggerSelect) { + setInnerValue(date); + + if (onSelect) { + onSelect(date); + } + + if (onContextSelect) { + onContextSelect(date, type); + } + + if ( + onChange && + !isEqual(generateConfig, date, mergedValue.value) && + !disabledDate?.(date) + ) { + onChange(date); + } + } + }; + + // ========================= Interactive ========================== + const onInternalKeydown = (e: KeyboardEvent) => { + if (panelRef.value && panelRef.value.onKeydown) { + if ( + [ + KeyCode.LEFT, + KeyCode.RIGHT, + KeyCode.UP, + KeyCode.DOWN, + KeyCode.PAGE_UP, + KeyCode.PAGE_DOWN, + KeyCode.ENTER, + ].includes(e.which) + ) { + e.preventDefault(); + } + return panelRef.value.onKeydown(e); + } + + /* istanbul ignore next */ + /* eslint-disable no-lone-blocks */ + { + warning( + false, + 'Panel not correct handle keyDown event. Please help to fire issue about this.', + ); + return false; + } + /* eslint-enable no-lone-blocks */ + }; + + const onInternalBlur = (e: FocusEvent) => { + if (panelRef.value && panelRef.value.onBlur) { + panelRef.value.onBlur(e); + } + }; + const onNow = () => { + const { generateConfig, hourStep, minuteStep, secondStep } = props; + const now = generateConfig.getNow(); + const lowerBoundTime = getLowerBoundTime( + generateConfig.getHour(now), + generateConfig.getMinute(now), + generateConfig.getSecond(now), + isHourStepValid.value ? hourStep : 1, + isMinuteStepValid.value ? minuteStep : 1, + isSecondStepValid.value ? secondStep : 1, + ); + const adjustedNow = setTime( + generateConfig, + now, + lowerBoundTime[0], // hour + lowerBoundTime[1], // minute + lowerBoundTime[2], // second + ); + triggerSelect(adjustedNow, 'submit'); + }; + + const classString = computed(() => { + const { prefixCls, direction } = props; + return classNames(`${prefixCls}-panel`, { + [`${prefixCls}-panel-has-range`]: + rangedValue && rangedValue.value && rangedValue.value[0] && rangedValue.value[1], + [`${prefixCls}-panel-has-range-hover`]: + hoverRangedValue && + hoverRangedValue.value && + hoverRangedValue.value[0] && + hoverRangedValue.value[1], + [`${prefixCls}-panel-rtl`]: direction === 'rtl', + }); + }); + useProvidePanel({ + ...panelContext, + mode: mergedMode, + hideHeader: computed(() => + props.hideHeader !== undefined ? props.hideHeader : panelContext.hideHeader?.value, + ), + hidePrevBtn: computed(() => inRange.value && panelPosition.value === 'right'), + hideNextBtn: computed(() => inRange.value && panelPosition.value === 'left'), + }); + + watch( + () => props.value, + () => { + if (props.value) { + setInnerViewDate(props.value); + } + }, + ); + + return () => { + const { + prefixCls = 'ant-picker', + locale, + generateConfig, + disabledDate, + picker = 'date', + tabindex = 0, + showNow, + showTime, + showToday, + renderExtraFooter, + onMousedown, + onOk, + components, + } = props; + if (operationRef && panelPosition.value !== 'right') { + operationRef.value = { + onKeydown: onInternalKeydown, + onClose: () => { + if (panelRef.value && panelRef.value.onClose) { + panelRef.value.onClose(); + } + }, + }; + } + + // ============================ Panels ============================ + let panelNode: VueNode; + const pickerProps = { + ...attrs, + ...(props as MergedPickerPanelProps), + operationRef: panelRef, + prefixCls, + viewDate: viewDate.value, + value: mergedValue.value, + onViewDateChange: setViewDate, + sourceMode: sourceMode.value, + onPanelChange: onInternalPanelChange, + disabledDate, + }; + delete pickerProps.onChange; + delete pickerProps.onSelect; + switch (mergedMode.value) { + case 'decade': + panelNode = ( + + {...pickerProps} + onSelect={(date, type) => { + setViewDate(date); + triggerSelect(date, type); + }} + /> + ); + break; + + case 'year': + panelNode = ( + + {...pickerProps} + onSelect={(date, type) => { + setViewDate(date); + triggerSelect(date, type); + }} + /> + ); + break; + + case 'month': + panelNode = ( + + {...pickerProps} + onSelect={(date, type) => { + setViewDate(date); + triggerSelect(date, type); + }} + /> + ); + break; + + case 'quarter': + panelNode = ( + + {...pickerProps} + onSelect={(date, type) => { + setViewDate(date); + triggerSelect(date, type); + }} + /> + ); + break; + + case 'week': + panelNode = ( + { + setViewDate(date); + triggerSelect(date, type); + }} + /> + ); + break; + + case 'time': + delete pickerProps.showTime; + panelNode = ( + + {...pickerProps} + {...(typeof showTime === 'object' ? showTime : null)} + onSelect={(date, type) => { + setViewDate(date); + triggerSelect(date, type); + }} + /> + ); + break; + + default: + if (showTime) { + panelNode = ( + { + setViewDate(date); + triggerSelect(date, type); + }} + /> + ); + } else { + panelNode = ( + + {...pickerProps} + onSelect={(date, type) => { + setViewDate(date); + triggerSelect(date, type); + }} + /> + ); + } + } + + // ============================ Footer ============================ + let extraFooter: VueNode; + let rangesNode: VueNode; + + if (!hideRanges?.value) { + extraFooter = getExtraFooter(prefixCls, mergedMode.value, renderExtraFooter); + rangesNode = getRanges({ + prefixCls, + components, + needConfirmButton: needConfirmButton.value, + okDisabled: !mergedValue.value || (disabledDate && disabledDate(mergedValue.value)), + locale, + showNow, + onNow: needConfirmButton.value && onNow, + onOk: () => { + if (mergedValue.value) { + triggerSelect(mergedValue.value, 'submit', true); + if (onOk) { + onOk(mergedValue.value); + } + } + }, + }); + } + + let todayNode: VueNode; + + if (showToday && mergedMode.value === 'date' && picker === 'date' && !showTime) { + const now = generateConfig.getNow(); + const todayCls = `${prefixCls}-today-btn`; + const disabled = disabledDate && disabledDate(now); + todayNode = ( + { + if (!disabled) { + triggerSelect(now, 'mouse', true); + } + }} + > + {locale.today} + + ); + } + return ( +
+ {panelNode} + {extraFooter || rangesNode || todayNode ? ( +
+ {extraFooter} + {rangesNode} + {todayNode} +
+ ) : null} +
+ ); + }; + }, + }); +} +const InterPickerPanel = PickerPanel(); +export default (props: MergedPickerPanelProps): JSX.Element => + createVNode(InterPickerPanel, props); diff --git a/src/core/components/BaseDatePicker/src/vc-picker/PickerTrigger.tsx b/src/core/components/BaseDatePicker/src/vc-picker/PickerTrigger.tsx new file mode 100644 index 0000000..3a4d206 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/PickerTrigger.tsx @@ -0,0 +1,103 @@ +import type { CSSProperties } from 'vue'; +import type { AlignType } from 'ant-design-vue/es/vc-align/interface'; +import Trigger from 'ant-design-vue/es/vc-trigger'; +import classNames from 'ant-design-vue/es/_util/classNames'; +import useMergeProps from './hooks/useMergeProps'; + +const BUILT_IN_PLACEMENTS = { + bottomLeft: { + points: ['tl', 'bl'], + offset: [0, 4], + overflow: { + adjustX: 1, + adjustY: 1, + }, + }, + bottomRight: { + points: ['tr', 'br'], + offset: [0, 4], + overflow: { + adjustX: 1, + adjustY: 1, + }, + }, + topLeft: { + points: ['bl', 'tl'], + offset: [0, -4], + overflow: { + adjustX: 0, + adjustY: 1, + }, + }, + topRight: { + points: ['br', 'tr'], + offset: [0, -4], + overflow: { + adjustX: 0, + adjustY: 1, + }, + }, +}; + +type Placement = 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight'; + +export type PickerTriggerProps = { + prefixCls: string; + visible: boolean; + popupStyle?: CSSProperties; + dropdownClassName?: string; + transitionName?: string; + getPopupContainer?: (node: HTMLElement) => HTMLElement; + dropdownAlign?: AlignType; + range?: boolean; + popupPlacement?: Placement; + direction?: 'ltr' | 'rtl'; +}; + +function PickerTrigger(props: PickerTriggerProps, { slots }) { + const { + prefixCls, + popupStyle, + visible, + dropdownClassName, + dropdownAlign, + transitionName, + getPopupContainer, + range, + popupPlacement, + direction, + } = useMergeProps(props); + const dropdownPrefixCls = `${prefixCls}-dropdown`; + + const getPopupPlacement = () => { + if (popupPlacement !== undefined) { + return popupPlacement; + } + return direction === 'rtl' ? 'bottomRight' : 'bottomLeft'; + }; + + return ( + + ); +} + +export default PickerTrigger; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/RangeContext.tsx b/src/core/components/BaseDatePicker/src/vc-picker/RangeContext.tsx new file mode 100644 index 0000000..17146b3 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/RangeContext.tsx @@ -0,0 +1,74 @@ +import type { InjectionKey, PropType, Ref } from 'vue'; +import { defineComponent, inject, provide, ref, toRef, watch } from 'vue'; +import type { NullableDateType, RangeValue } from './interface'; + +export type RangeContextProps = { + /** + * Set displayed range value style. + * Panel only has one value, this is only style effect. + */ + rangedValue?: Ref<[NullableDateType, NullableDateType] | null>; + hoverRangedValue?: Ref>; + inRange?: Ref; + panelPosition?: Ref<'left' | 'right' | false>; +}; + +type RangeContextProviderValue = { + /** + * Set displayed range value style. + * Panel only has one value, this is only style effect. + */ + rangedValue?: [NullableDateType, NullableDateType] | null; + hoverRangedValue?: RangeValue; + inRange?: boolean; + panelPosition?: 'left' | 'right' | false; +}; + +const RangeContextKey: InjectionKey = Symbol('RangeContextProps'); + +export const useProvideRange = (props: RangeContextProps) => { + provide(RangeContextKey, props); +}; + +export const useInjectRange = () => { + return inject(RangeContextKey, { + rangedValue: ref(), + hoverRangedValue: ref(), + inRange: ref(), + panelPosition: ref(), + }); +}; + +export const RangeContextProvider = defineComponent({ + name: 'PanelContextProvider', + inheritAttrs: false, + props: { + value: { + type: Object as PropType, + default: () => ({} as RangeContextProviderValue), + }, + }, + setup(props, { slots }) { + const value: RangeContextProps = { + rangedValue: ref(props.value.rangedValue), + hoverRangedValue: ref(props.value.hoverRangedValue), + inRange: ref(props.value.inRange), + panelPosition: ref(props.value.panelPosition), + }; + useProvideRange(value); + toRef; + watch( + () => props.value, + () => { + Object.keys(props.value).forEach(key => { + if (value[key]) { + value[key].value = props.value[key]; + } + }); + }, + ); + return () => slots.default?.(); + }, +}); + +export default RangeContextKey; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/RangePicker.tsx b/src/core/components/BaseDatePicker/src/vc-picker/RangePicker.tsx new file mode 100644 index 0000000..e2bbab8 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/RangePicker.tsx @@ -0,0 +1,1285 @@ +import type { DisabledTimes, PanelMode, PickerMode, RangeValue, EventValue } from './interface' +import type { PickerBaseProps, PickerDateProps, PickerTimeProps } from './Picker' +import type { SharedTimeProps } from './panels/TimePanel' +import PickerTrigger from './PickerTrigger' +import PickerPanel from './PickerPanel' +import usePickerInput from './hooks/usePickerInput' +import getDataOrAriaProps, { toArray, getValue, updateValues } from './utils/miscUtil' +import { getDefaultFormat, getInputSize, elementsContains } from './utils/uiUtil' +import type { ContextOperationRefProps } from './PanelContext' +import { useProvidePanel } from './PanelContext' +import { + isEqual, + getClosingViewDate, + isSameDate, + isSameWeek, + isSameQuarter, + formatValue, + parseValue +} from './utils/dateUtil' +import useValueTexts from './hooks/useValueTexts' +import useTextValueMapping from './hooks/useTextValueMapping' +import type { GenerateConfig } from './generate' +import type { PickerPanelProps } from './index' +import { RangeContextProvider } from './RangeContext' +import useRangeDisabled from './hooks/useRangeDisabled' +import getExtraFooter from './utils/getExtraFooter' +import getRanges from './utils/getRanges' +import useRangeViewDates from './hooks/useRangeViewDates' +import type { DateRender } from './panels/DatePanel/DateBody' +import useHoverValue from './hooks/useHoverValue' +import type { VueNode } from 'ant-design-vue/es/_util/type' +import type { + ChangeEvent, + FocusEventHandler, + MouseEventHandler +} from 'ant-design-vue/es/_util/EventInterface' +import { computed, defineComponent, ref, toRef, watch, watchEffect } from 'vue' +import useMergedState from 'ant-design-vue/es/_util/hooks/useMergedState' +import { warning } from 'ant-design-vue/es/vc-util/warning' +import useState from 'ant-design-vue/es/_util/hooks/useState' +import classNames from 'ant-design-vue/es/_util/classNames' +import { useProviderTrigger } from 'ant-design-vue/es/vc-trigger/context' +import { legacyPropsWarning } from './utils/warnUtil' + +function reorderValues( + values: RangeValue, + generateConfig: GenerateConfig +): RangeValue { + if (values && values[0] && values[1] && generateConfig.isAfter(values[0], values[1])) { + return [values[1], values[0]] + } + + return values +} + +function canValueTrigger( + value: EventValue, + index: number, + disabled: [boolean, boolean], + allowEmpty?: [boolean, boolean] | null +): boolean { + if (value) { + return true + } + + if (allowEmpty && allowEmpty[index]) { + return true + } + + if (disabled[(index + 1) % 2]) { + return true + } + + return false +} + +export type RangeType = 'start' | 'end' + +export type RangeInfo = { + range: RangeType +} + +export type RangeDateRender = (props: { + current: DateType + today: DateType + info: RangeInfo +}) => VueNode + +export type RangePickerSharedProps = { + id?: string + value?: RangeValue + defaultValue?: RangeValue + defaultPickerValue?: [DateType, DateType] + placeholder?: [string, string] + disabled?: boolean | [boolean, boolean] + disabledTime?: (date: EventValue, type: RangeType) => DisabledTimes + ranges?: Record< + string, + Exclude, null> | (() => Exclude, null>) + > + separator?: VueNode + allowEmpty?: [boolean, boolean] + mode?: [PanelMode, PanelMode] + onChange?: (values: RangeValue, formatString: [string, string]) => void + onCalendarChange?: ( + values: RangeValue, + formatString: [string, string], + info: RangeInfo + ) => void + onPanelChange?: (values: RangeValue, modes: [PanelMode, PanelMode]) => void + onFocus?: FocusEventHandler + onBlur?: FocusEventHandler + onMousedown?: MouseEventHandler + onMouseup?: MouseEventHandler + onMouseenter?: MouseEventHandler + onMouseleave?: MouseEventHandler + onClick?: MouseEventHandler + onOk?: (dates: RangeValue) => void + direction?: 'ltr' | 'rtl' + autocomplete?: string + /** @private Internal control of active picker. Do not use since it's private usage */ + activePickerIndex?: 0 | 1 + dateRender?: RangeDateRender + panelRender?: (originPanel: VueNode) => VueNode +} + +type OmitPickerProps = Omit< + Props, + | 'value' + | 'defaultValue' + | 'defaultPickerValue' + | 'placeholder' + | 'disabled' + | 'disabledTime' + | 'showToday' + | 'showTime' + | 'mode' + | 'onChange' + | 'onSelect' + | 'onPanelChange' + | 'pickerValue' + | 'onPickerValueChange' + | 'onOk' + | 'dateRender' +> + +type RangeShowTimeObject = Omit, 'defaultValue'> & { + defaultValue?: DateType[] +} + +export type RangePickerBaseProps = {} & RangePickerSharedProps & + OmitPickerProps> + +export type RangePickerDateProps = { + showTime?: boolean | RangeShowTimeObject +} & RangePickerSharedProps & + OmitPickerProps> + +export type RangePickerTimeProps = { + order?: boolean +} & RangePickerSharedProps & + OmitPickerProps> + +export type RangePickerProps = + | RangePickerBaseProps + | RangePickerDateProps + | RangePickerTimeProps + +// TMP type to fit for ts 3.9.2 +type OmitType = Omit, 'picker'> & + Omit, 'picker'> & + Omit, 'picker'> + +type MergedRangePickerProps = { + picker?: PickerMode +} & OmitType +function RangerPicker() { + return defineComponent>({ + name: 'RangerPicker', + inheritAttrs: false, + props: [ + 'prefixCls', + 'id', + 'popupStyle', + 'dropdownClassName', + 'transitionName', + 'dropdownAlign', + 'getPopupContainer', + 'generateConfig', + 'locale', + 'placeholder', + 'autofocus', + 'disabled', + 'format', + 'picker', + 'showTime', + 'showNow', + 'showHour', + 'showMinute', + 'showSecond', + 'use12Hours', + 'separator', + 'value', + 'defaultValue', + 'defaultPickerValue', + 'open', + 'defaultOpen', + 'disabledDate', + 'disabledTime', + 'dateRender', + 'panelRender', + 'ranges', + 'allowEmpty', + 'allowClear', + 'suffixIcon', + 'clearIcon', + 'pickerRef', + 'inputReadOnly', + 'mode', + 'renderExtraFooter', + 'onChange', + 'onOpenChange', + 'onPanelChange', + 'onCalendarChange', + 'onFocus', + 'onBlur', + 'onMousedown', + 'onMouseup', + 'onMouseenter', + 'onMouseleave', + 'onClick', + 'onOk', + 'onKeydown', + 'components', + 'order', + 'direction', + 'activePickerIndex', + 'autocomplete', + 'minuteStep', + 'hourStep', + 'secondStep', + 'hideDisabledOptions', + 'disabledMinutes' + ] as any, + setup(props, { attrs, expose }) { + const needConfirmButton = computed( + () => (props.picker === 'date' && !!props.showTime) || props.picker === 'time' + ) + const getPortal = useProviderTrigger() + // We record opened status here in case repeat open with picker + const openRecordsRef = ref>({}) + + const containerRef = ref(null) + const panelDivRef = ref(null) + const startInputDivRef = ref(null) + const endInputDivRef = ref(null) + const separatorRef = ref(null) + const startInputRef = ref(null) + const endInputRef = ref(null) + const arrowRef = ref(null) + + // ============================ Warning ============================ + if (process.env.NODE_ENV !== 'production') { + legacyPropsWarning(props) + } + + // ============================= Misc ============================== + const formatList = computed(() => + toArray( + getDefaultFormat(props.format, props.picker, props.showTime, props.use12Hours) + ) + ) + + // Active picker + const [mergedActivePickerIndex, setMergedActivePickerIndex] = useMergedState<0 | 1>(0, { + value: toRef(props, 'activePickerIndex') + }) + + // Operation ref + const operationRef = ref(null) + + const mergedDisabled = computed<[boolean, boolean]>(() => { + const { disabled } = props + if (Array.isArray(disabled)) { + return disabled + } + + return [disabled || false, disabled || false] + }) + + // ============================= Value ============================= + const [mergedValue, setInnerValue] = useMergedState>(null, { + value: toRef(props, 'value'), + defaultValue: props.defaultValue, + postState: (values) => + props.picker === 'time' && !props.order + ? values + : reorderValues(values, props.generateConfig) + }) + + // =========================== View Date =========================== + // Config view panel + const [startViewDate, endViewDate, setViewDate] = useRangeViewDates({ + values: mergedValue, + picker: toRef(props, 'picker'), + defaultDates: props.defaultPickerValue, + generateConfig: toRef(props, 'generateConfig') + }) + + // ========================= Select Values ========================= + const [selectedValue, setSelectedValue] = useMergedState(mergedValue.value, { + postState: (values) => { + let postValues = values + + if (mergedDisabled.value[0] && mergedDisabled.value[1]) { + return postValues + } + + // Fill disabled unit + for (let i = 0; i < 2; i += 1) { + if (mergedDisabled[i] && !getValue(postValues, i) && !getValue(props.allowEmpty, i)) { + postValues = updateValues(postValues, props.generateConfig.getNow(), i) + } + } + return postValues + } + }) + + // ============================= Modes ============================= + const [mergedModes, setInnerModes] = useMergedState<[PanelMode, PanelMode]>( + [props.picker, props.picker], + { + value: toRef(props, 'mode') + } + ) + + watch( + () => props.picker, + () => { + setInnerModes([props.picker, props.picker]) + } + ) + + const triggerModesChange = (modes: [PanelMode, PanelMode], values: RangeValue) => { + setInnerModes(modes) + props.onPanelChange?.(values, modes) + } + + // ========================= Disable Date ========================== + const [disabledStartDate, disabledEndDate] = useRangeDisabled( + { + picker: toRef(props, 'picker'), + selectedValue, + locale: toRef(props, 'locale'), + disabled: mergedDisabled, + disabledDate: toRef(props, 'disabledDate'), + generateConfig: toRef(props, 'generateConfig') + }, + openRecordsRef + ) + + // ============================= Open ============================== + const [mergedOpen, triggerInnerOpen] = useMergedState(false, { + value: toRef(props, 'open'), + defaultValue: props.defaultOpen, + postState: (postOpen) => + mergedDisabled.value[mergedActivePickerIndex.value] ? false : postOpen, + onChange: (newOpen) => { + props.onOpenChange?.(newOpen) + + if (!newOpen && operationRef.value && operationRef.value.onClose) { + operationRef.value.onClose() + } + } + }) + + const startOpen = computed(() => mergedOpen.value && mergedActivePickerIndex.value === 0) + const endOpen = computed(() => mergedOpen.value && mergedActivePickerIndex.value === 1) + + // ============================= Popup ============================= + // Popup min width + const popupMinWidth = ref(0) + watch(mergedOpen, () => { + if (!mergedOpen.value && containerRef.value) { + popupMinWidth.value = containerRef.value.offsetWidth + } + }) + + // ============================ Trigger ============================ + const triggerRef = ref() + + function triggerOpen(newOpen: boolean, index: 0 | 1) { + if (newOpen) { + clearTimeout(triggerRef.value) + openRecordsRef.value[index] = true + + setMergedActivePickerIndex(index) + triggerInnerOpen(newOpen) + + // Open to reset view date + if (!mergedOpen.value) { + setViewDate(null, index) + } + } else if (mergedActivePickerIndex.value === index) { + triggerInnerOpen(newOpen) + + // Clean up async + // This makes ref not quick refresh in case user open another input with blur trigger + const openRecords = openRecordsRef.value + triggerRef.value = setTimeout(() => { + if (openRecords === openRecordsRef.value) { + openRecordsRef.value = {} + } + }) + } + } + + function triggerOpenAndFocus(index: 0 | 1) { + triggerOpen(true, index) + // Use setTimeout to make sure panel DOM exists + setTimeout(() => { + const inputRef = [startInputRef, endInputRef][index] + if (inputRef.value) { + inputRef.value.focus() + } + }, 0) + } + + function triggerChange(newValue: RangeValue, sourceIndex: 0 | 1) { + let values = newValue + let startValue = getValue(values, 0) + let endValue = getValue(values, 1) + const { + generateConfig, + locale, + picker, + order, + onCalendarChange, + allowEmpty, + onChange, + showTime + } = props + + // >>>>> Format start & end values + if (startValue && endValue && generateConfig.isAfter(startValue, endValue)) { + if ( + // WeekPicker only compare week + (picker === 'week' && + !isSameWeek(generateConfig, locale.locale, startValue, endValue)) || + // QuotaPicker only compare week + (picker === 'quarter' && !isSameQuarter(generateConfig, startValue, endValue)) || + // Other non-TimePicker compare date + (picker !== 'week' && + picker !== 'quarter' && + picker !== 'time' && + !(showTime + ? isEqual(generateConfig, startValue, endValue) + : isSameDate(generateConfig, startValue, endValue))) + ) { + // Clean up end date when start date is after end date + if (sourceIndex === 0) { + values = [startValue, null] + endValue = null + } else { + startValue = null + values = [null, endValue] + } + + // Clean up cache since invalidate + openRecordsRef.value = { + [sourceIndex]: true + } + } else if (picker !== 'time' || order !== false) { + // Reorder when in same date + values = reorderValues(values, generateConfig) + } + } + + setSelectedValue(values) + + const startStr = + values && values[0] + ? formatValue(values[0], { generateConfig, locale, format: formatList.value[0] }) + : '' + const endStr = + values && values[1] + ? formatValue(values[1], { generateConfig, locale, format: formatList.value[0] }) + : '' + if (onCalendarChange) { + const info: RangeInfo = { range: sourceIndex === 0 ? 'start' : 'end' } + + onCalendarChange(values, [startStr, endStr], info) + } + + // >>>>> Trigger `onChange` event + const canStartValueTrigger = canValueTrigger( + startValue, + 0, + mergedDisabled.value, + allowEmpty + ) + const canEndValueTrigger = canValueTrigger(endValue, 1, mergedDisabled.value, allowEmpty) + + const canTrigger = values === null || (canStartValueTrigger && canEndValueTrigger) + + if (canTrigger) { + // Trigger onChange only when value is validate + setInnerValue(values) + + if ( + onChange && + (!isEqual(generateConfig, getValue(mergedValue.value, 0), startValue) || + !isEqual(generateConfig, getValue(mergedValue.value, 1), endValue)) + ) { + onChange(values, [startStr, endStr]) + } + } + + // >>>>> Open picker when + + // Always open another picker if possible + let nextOpenIndex: 0 | 1 = null + if (sourceIndex === 0 && !mergedDisabled.value[1]) { + nextOpenIndex = 1 + } else if (sourceIndex === 1 && !mergedDisabled.value[0]) { + nextOpenIndex = 0 + } + + if ( + nextOpenIndex !== null && + nextOpenIndex !== mergedActivePickerIndex.value && + (!openRecordsRef.value[nextOpenIndex] || !getValue(values, nextOpenIndex)) && + getValue(values, sourceIndex) + ) { + // Delay to focus to avoid input blur trigger expired selectedValues + triggerOpenAndFocus(nextOpenIndex) + } else { + triggerOpen(false, sourceIndex) + } + } + + const forwardKeydown = (e: KeyboardEvent) => { + if (mergedOpen && operationRef.value && operationRef.value.onKeydown) { + // Let popup panel handle keyboard + return operationRef.value.onKeydown(e) + } + + /* istanbul ignore next */ + /* eslint-disable no-lone-blocks */ + { + warning( + false, + 'Picker not correct forward Keydown operation. Please help to fire issue about this.' + ) + return false + } + } + + // ============================= Text ============================== + const sharedTextHooksProps = { + formatList, + generateConfig: toRef(props, 'generateConfig'), + locale: toRef(props, 'locale') + } + + const [startValueTexts, firstStartValueText] = useValueTexts( + computed(() => getValue(selectedValue.value, 0)), + sharedTextHooksProps + ) + + const [endValueTexts, firstEndValueText] = useValueTexts( + computed(() => getValue(selectedValue.value, 1)), + sharedTextHooksProps + ) + + const onTextChange = (newText: string, index: 0 | 1) => { + const inputDate = parseValue(newText, { + locale: props.locale, + formatList: formatList.value, + generateConfig: props.generateConfig + }) + + const disabledFunc = index === 0 ? disabledStartDate : disabledEndDate + + if (inputDate && !disabledFunc(inputDate)) { + setSelectedValue(updateValues(selectedValue.value, inputDate, index)) + setViewDate(inputDate, index) + } + } + + const [startText, triggerStartTextChange, resetStartText] = useTextValueMapping({ + valueTexts: startValueTexts, + onTextChange: (newText) => onTextChange(newText, 0) + }) + + const [endText, triggerEndTextChange, resetEndText] = useTextValueMapping({ + valueTexts: endValueTexts, + onTextChange: (newText) => onTextChange(newText, 1) + }) + + const [rangeHoverValue, setRangeHoverValue] = useState>(null) + + // ========================== Hover Range ========================== + const [hoverRangedValue, setHoverRangedValue] = useState>(null) + + const [startHoverValue, onStartEnter, onStartLeave] = useHoverValue( + startText, + sharedTextHooksProps + ) + + const [endHoverValue, onEndEnter, onEndLeave] = useHoverValue(endText, sharedTextHooksProps) + + const onDateMouseenter = (date: DateType) => { + setHoverRangedValue(updateValues(selectedValue.value, date, mergedActivePickerIndex.value)) + if (mergedActivePickerIndex.value === 0) { + onStartEnter(date) + } else { + onEndEnter(date) + } + } + + const onDateMouseleave = () => { + setHoverRangedValue(updateValues(selectedValue.value, null, mergedActivePickerIndex.value)) + if (mergedActivePickerIndex.value === 0) { + onStartLeave() + } else { + onEndLeave() + } + } + + // ============================= Input ============================= + const getSharedInputHookProps = (index: 0 | 1, resetText: () => void) => ({ + forwardKeydown, + onBlur: (e: FocusEvent) => { + props.onBlur?.(e) + }, + isClickOutside: (target: EventTarget | null) => + !elementsContains( + [panelDivRef.value, startInputDivRef.value, endInputDivRef.value, containerRef.value], + target as HTMLElement + ), + onFocus: (e: FocusEvent) => { + setMergedActivePickerIndex(index) + props.onFocus?.(e) + }, + triggerOpen: (newOpen: boolean) => { + triggerOpen(newOpen, index) + }, + onSubmit: () => { + if ( + // When user typing disabledDate with keyboard and enter, this value will be empty + !selectedValue.value || + // Normal disabled check + (props.disabledDate && props.disabledDate(selectedValue.value[index])) + ) { + return false + } + triggerChange(selectedValue.value, index) + resetText() + }, + onCancel: () => { + triggerOpen(false, index) + setSelectedValue(mergedValue.value) + resetText() + } + }) + + const [startInputProps, { focused: startFocused, typing: startTyping }] = usePickerInput({ + ...getSharedInputHookProps(0, resetStartText), + blurToCancel: needConfirmButton, + open: startOpen, + value: startText, + onKeydown: (e, preventDefault) => { + props.onKeydown?.(e, preventDefault) + } + }) + + const [endInputProps, { focused: endFocused, typing: endTyping }] = usePickerInput({ + ...getSharedInputHookProps(1, resetEndText), + blurToCancel: needConfirmButton, + open: endOpen, + value: endText, + onKeydown: (e, preventDefault) => { + props.onKeydown?.(e, preventDefault) + } + }) + + // ========================== Click Picker ========================== + const onPickerClick = (e: MouseEvent) => { + // When click inside the picker & outside the picker's input elements + // the panel should still be opened + props.onClick?.(e) + if ( + !mergedOpen.value && + !startInputRef.value.contains(e.target as Node) && + !endInputRef.value.contains(e.target as Node) + ) { + if (!mergedDisabled.value[0]) { + triggerOpenAndFocus(0) + } else if (!mergedDisabled.value[1]) { + triggerOpenAndFocus(1) + } + } + } + + const onPickerMousedown = (e: MouseEvent) => { + // shouldn't affect input elements if picker is active + props.onMousedown?.(e) + if ( + mergedOpen.value && + (startFocused.value || endFocused.value) && + !startInputRef.value.contains(e.target as Node) && + !endInputRef.value.contains(e.target as Node) + ) { + e.preventDefault() + } + } + + // ============================= Sync ============================== + // Close should sync back with text value + const startStr = computed(() => + mergedValue.value?.[0] + ? formatValue(mergedValue.value[0], { + locale: props.locale, + format: 'YYYYMMDDHHmmss', + generateConfig: props.generateConfig + }) + : '' + ) + const endStr = computed(() => + mergedValue.value?.[1] + ? formatValue(mergedValue.value[1], { + locale: props.locale, + format: 'YYYYMMDDHHmmss', + generateConfig: props.generateConfig + }) + : '' + ) + + watch([mergedOpen, startValueTexts, endValueTexts], () => { + if (!mergedOpen.value) { + setSelectedValue(mergedValue.value) + + if (!startValueTexts.value.length || startValueTexts.value[0] === '') { + triggerStartTextChange('') + } else if (firstStartValueText.value !== startText.value) { + resetStartText() + } + if (!endValueTexts.value.length || endValueTexts.value[0] === '') { + triggerEndTextChange('') + } else if (firstEndValueText.value !== endText.value) { + resetEndText() + } + } + }) + + // Sync innerValue with control mode + watch([startStr, endStr], () => { + setSelectedValue(mergedValue.value) + }) + + // ============================ Warning ============================ + if (process.env.NODE_ENV !== 'production') { + watchEffect(() => { + const { value, disabled } = props + if ( + value && + Array.isArray(disabled) && + ((getValue(disabled, 0) && !getValue(value, 0)) || + (getValue(disabled, 1) && !getValue(value, 1))) + ) { + warning( + false, + '`disabled` should not set with empty `value`. You should set `allowEmpty` or `value` instead.' + ) + } + }) + } + + expose({ + focus: () => { + if (startInputRef.value) { + startInputRef.value.focus() + } + }, + blur: () => { + if (startInputRef.value) { + startInputRef.value.blur() + } + if (endInputRef.value) { + endInputRef.value.blur() + } + } + }) + + // ============================ Ranges ============================= + + const rangeList = computed(() => + Object.keys(props.ranges || {}).map((label) => { + const range = props.ranges![label] + const newValues = typeof range === 'function' ? range() : range + + return { + label, + onClick: () => { + triggerChange(newValues, null) + triggerOpen(false, mergedActivePickerIndex.value) + }, + onMouseenter: () => { + setRangeHoverValue(newValues) + }, + onMouseleave: () => { + setRangeHoverValue(null) + } + } + }) + ) + // ============================= Panel ============================= + const panelHoverRangedValue = computed(() => { + if ( + mergedOpen.value && + hoverRangedValue.value && + hoverRangedValue.value[0] && + hoverRangedValue.value[1] && + props.generateConfig.isAfter(hoverRangedValue.value[1], hoverRangedValue.value[0]) + ) { + return hoverRangedValue.value + } else { + return null + } + }) + function renderPanel( + panelPosition: 'left' | 'right' | false = false, + panelProps: Partial> = {} + ) { + const { generateConfig, showTime, dateRender, direction, disabledTime, prefixCls, locale } = + props + + let panelShowTime: boolean | SharedTimeProps | undefined = + showTime as SharedTimeProps + if (showTime && typeof showTime === 'object' && showTime.defaultValue) { + const timeDefaultValues: DateType[] = showTime.defaultValue! + panelShowTime = { + ...showTime, + defaultValue: getValue(timeDefaultValues, mergedActivePickerIndex.value) || undefined + } + } + + let panelDateRender: DateRender | null = null + if (dateRender) { + panelDateRender = ({ current: date, today }) => + dateRender({ + current: date, + today, + info: { + range: mergedActivePickerIndex.value ? 'end' : 'start' + } + }) + } + + return ( + + + {...(props as any)} + {...panelProps} + dateRender={panelDateRender} + showTime={panelShowTime} + mode={mergedModes.value[mergedActivePickerIndex.value]} + generateConfig={generateConfig} + style={undefined} + direction={direction} + disabledDate={ + mergedActivePickerIndex.value === 0 ? disabledStartDate : disabledEndDate + } + disabledTime={(date) => { + if (disabledTime) { + return disabledTime(date, mergedActivePickerIndex.value === 0 ? 'start' : 'end') + } + return false + }} + class={classNames({ + [`${prefixCls}-panel-focused`]: + mergedActivePickerIndex.value === 0 ? !startTyping.value : !endTyping.value + })} + value={getValue(selectedValue.value, mergedActivePickerIndex.value)} + locale={locale} + tabIndex={-1} + onPanelChange={(date, newMode) => { + // clear hover value when panel change + if (mergedActivePickerIndex.value === 0) { + onStartLeave(true) + } + if (mergedActivePickerIndex.value === 1) { + onEndLeave(true) + } + triggerModesChange( + updateValues(mergedModes.value, newMode, mergedActivePickerIndex.value), + updateValues(selectedValue.value, date, mergedActivePickerIndex.value) + ) + + let viewDate = date + if ( + panelPosition === 'right' && + mergedModes.value[mergedActivePickerIndex.value] === newMode + ) { + viewDate = getClosingViewDate(viewDate, newMode as any, generateConfig, -1) + } + setViewDate(viewDate, mergedActivePickerIndex.value) + }} + onOk={null} + onSelect={undefined} + onChange={undefined} + defaultValue={ + mergedActivePickerIndex.value === 0 + ? getValue(selectedValue.value, 1) + : getValue(selectedValue.value, 0) + } + /> + + ) + } + + const onContextSelect = (date: DateType, type: 'key' | 'mouse' | 'submit') => { + const values = updateValues(selectedValue.value, date, mergedActivePickerIndex.value) + + if (type === 'submit' || (type !== 'key' && !needConfirmButton.value)) { + // triggerChange will also update selected values + triggerChange(values, mergedActivePickerIndex.value) + // clear hover value style + if (mergedActivePickerIndex.value === 0) { + onStartLeave() + } else { + onEndLeave() + } + } else { + setSelectedValue(values) + } + } + + useProvidePanel({ + operationRef, + hideHeader: computed(() => props.picker === 'time'), + onDateMouseenter, + onDateMouseleave, + hideRanges: computed(() => true), + onSelect: onContextSelect, + open: mergedOpen + }) + + return () => { + const { + prefixCls = 'rc-picker', + id, + popupStyle, + dropdownClassName, + transitionName, + dropdownAlign, + getPopupContainer, + generateConfig, + locale, + placeholder, + autofocus, + picker = 'date', + showTime, + separator = '~', + disabledDate, + panelRender, + allowClear, + suffixIcon, + clearIcon, + inputReadOnly, + renderExtraFooter, + onMouseenter, + onMouseleave, + onMouseup, + onOk, + components, + direction, + autocomplete = 'off' + } = props + let arrowLeft = 0 + let panelLeft = 0 + if ( + mergedActivePickerIndex.value && + startInputDivRef.value && + separatorRef.value && + panelDivRef.value + ) { + // Arrow offset + arrowLeft = startInputDivRef.value.offsetWidth + separatorRef.value.offsetWidth + if ( + panelDivRef.value.offsetWidth && + arrowRef.value.offsetWidth && + arrowLeft > + panelDivRef.value.offsetWidth - + arrowRef.value.offsetWidth - + (direction === 'rtl' || arrowRef.value.offsetLeft > arrowLeft + ? 0 + : arrowRef.value.offsetLeft) + ) { + panelLeft = arrowLeft + } + } + + const arrowPositionStyle = + direction === 'rtl' ? { right: `${arrowLeft}px` } : { left: `${arrowLeft}px` } + + function renderPanels() { + let panels: VueNode + const extraNode = getExtraFooter( + prefixCls, + mergedModes.value[mergedActivePickerIndex.value], + renderExtraFooter + ) + + const rangesNode = getRanges({ + prefixCls, + components, + needConfirmButton: needConfirmButton.value, + okDisabled: + !getValue(selectedValue.value, mergedActivePickerIndex.value) || + (disabledDate && disabledDate(selectedValue.value[mergedActivePickerIndex.value])), + locale, + rangeList: rangeList.value, + onOk: () => { + if (getValue(selectedValue.value, mergedActivePickerIndex.value)) { + // triggerChangeOld(selectedValue.value); + triggerChange(selectedValue.value, mergedActivePickerIndex.value) + if (onOk) { + onOk(selectedValue.value) + } + } + } + }) + + if (picker !== 'time' && !showTime) { + const viewDate = + mergedActivePickerIndex.value === 0 ? startViewDate.value : endViewDate.value + const nextViewDate = getClosingViewDate(viewDate, picker, generateConfig) + const currentMode = mergedModes.value[mergedActivePickerIndex.value] + + const showDoublePanel = currentMode === picker + const leftPanel = renderPanel(showDoublePanel ? 'left' : false, { + pickerValue: viewDate, + onPickerValueChange: (newViewDate) => { + setViewDate(newViewDate, mergedActivePickerIndex.value) + } + }) + const rightPanel = renderPanel('right', { + pickerValue: nextViewDate, + onPickerValueChange: (newViewDate) => { + setViewDate( + getClosingViewDate(newViewDate, picker, generateConfig, -1), + mergedActivePickerIndex.value + ) + } + }) + + if (direction === 'rtl') { + panels = ( + <> + {rightPanel} + {showDoublePanel && leftPanel} + + ) + } else { + panels = ( + <> + {leftPanel} + {showDoublePanel && rightPanel} + + ) + } + } else { + panels = renderPanel() + } + + let mergedNodes: VueNode = ( + <> +
{panels}
+ {(extraNode || rangesNode) && ( +
+ {extraNode} + {rangesNode} +
+ )} + + ) + + if (panelRender) { + mergedNodes = panelRender(mergedNodes) + } + + return ( +
{ + e.preventDefault() + }} + > + {mergedNodes} +
+ ) + } + + const rangePanel = ( +
+
+ {renderPanels()} +
+ ) + + // ============================= Icons ============================= + let suffixNode: VueNode + if (suffixIcon) { + suffixNode = {suffixIcon} + } + + let clearNode: VueNode + if ( + allowClear && + ((getValue(mergedValue.value, 0) && !mergedDisabled.value[0]) || + (getValue(mergedValue.value, 1) && !mergedDisabled.value[1])) + ) { + clearNode = ( + { + e.preventDefault() + e.stopPropagation() + }} + onMouseup={(e) => { + e.preventDefault() + e.stopPropagation() + let values = mergedValue.value + + if (!mergedDisabled.value[0]) { + values = updateValues(values, null, 0) + } + if (!mergedDisabled.value[1]) { + values = updateValues(values, null, 1) + } + + triggerChange(values, null) + triggerOpen(false, mergedActivePickerIndex.value) + }} + class={`${prefixCls}-clear`} + > + {clearIcon || } + + ) + } + + const inputSharedProps = { + size: getInputSize(picker, formatList.value[0], generateConfig) + } + + let activeBarLeft = 0 + let activeBarWidth = 0 + if (startInputDivRef.value && endInputDivRef.value && separatorRef.value) { + if (mergedActivePickerIndex.value === 0) { + activeBarWidth = startInputDivRef.value.offsetWidth + } else { + activeBarLeft = arrowLeft + activeBarWidth = endInputDivRef.value.offsetWidth + } + } + const activeBarPositionStyle = + direction === 'rtl' ? { right: `${activeBarLeft}px` } : { left: `${activeBarLeft}px` } + // ============================ Return ============================= + + return ( + rangePanel + }} + > +
+
+ { + triggerStartTextChange(e.target.value) + }} + autofocus={autofocus} + placeholder={getValue(placeholder, 0) || ''} + ref={startInputRef} + {...startInputProps.value} + {...inputSharedProps} + autocomplete={autocomplete} + /> +
+
+ {separator} +
+
+ { + triggerEndTextChange(e.target.value) + }} + placeholder={getValue(placeholder, 1) || ''} + ref={endInputRef} + {...endInputProps.value} + {...inputSharedProps} + autocomplete={autocomplete} + /> +
+
+ {suffixNode} + {clearNode} + {getPortal()} +
+ + ) + } + } + }) +} + +const InterRangerPicker = RangerPicker() +export default InterRangerPicker diff --git a/src/core/components/BaseDatePicker/src/vc-picker/generate/dateFns.ts b/src/core/components/BaseDatePicker/src/vc-picker/generate/dateFns.ts new file mode 100644 index 0000000..4f3a8e9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/generate/dateFns.ts @@ -0,0 +1,140 @@ +import { + getDay, + getYear, + getMonth, + getDate, + endOfMonth, + getHours, + getMinutes, + getSeconds, + addYears, + addMonths, + addDays, + setYear, + setMonth, + setDate, + setHours, + setMinutes, + setSeconds, + isAfter, + isValid, + getWeek, + startOfWeek, + format as formatDate, + parse as parseDate, + isDate, + isMatch +} from 'date-fns' + +import * as Locale from 'date-fns/locale' +import type { GenerateConfig } from './index' + +const dealLocal = (str: string) => { + return str.replace(/_/g, '') +} + +const localeParse = (format: string) => { + return format + .replace(/Y/g, 'y') + .replace(/D/g, 'd') + .replace(/gggg/, 'yyyy') + .replace(/g/g, 'G') + .replace(/([Ww])o/g, 'wo') +} + +const generateConfig: GenerateConfig = { + // get + getNow: () => new Date(), + getFixedDate: (string) => new Date(string), + getEndDate: (date) => endOfMonth(date), + getWeekDay: (date) => getDay(date), + getYear: (date) => getYear(date), + getMonth: (date) => getMonth(date), + getDate: (date) => getDate(date), + getHour: (date) => getHours(date), + getMinute: (date) => getMinutes(date), + getSecond: (date) => getSeconds(date), + + // set + addYear: (date, diff) => addYears(date, diff), + addMonth: (date, diff) => addMonths(date, diff), + addDate: (date, diff) => addDays(date, diff), + setYear: (date, year) => setYear(date, year), + setMonth: (date, month) => setMonth(date, month), + setDate: (date, num) => setDate(date, num), + setHour: (date, hour) => setHours(date, hour), + setMinute: (date, minute) => setMinutes(date, minute), + setSecond: (date, second) => setSeconds(date, second), + + // Compare + isAfter: (date1, date2) => isAfter(date1, date2), + isValidate: (date) => isValid(date), + + locale: { + getWeekFirstDay: (locale) => { + const clone = Locale[dealLocal(locale)] + return clone.options.weekStartsOn + }, + getWeekFirstDate: (locale, date) => { + return startOfWeek(date, { locale: Locale[dealLocal(locale)] }) + }, + getWeek: (locale, date) => { + return getWeek(date, { locale: Locale[dealLocal(locale)] }) + }, + getShortWeekDays: (locale) => { + const clone = Locale[dealLocal(locale)] + return Array.from({ length: 7 }).map((_, i) => clone.localize.day(i, { width: 'short' })) + }, + getShortMonths: (locale) => { + const clone = Locale[dealLocal(locale)] + return Array.from({ length: 12 }).map((_, i) => + clone.localize.month(i, { width: 'abbreviated' }) + ) + }, + format: (locale, date, format) => { + if (!isValid(date)) { + return null + } + return formatDate(date, localeParse(format), { + locale: Locale[dealLocal(locale)] + }) + }, + parse: (locale, text, formats) => { + for (let i = 0; i < formats.length; i += 1) { + const format = localeParse(formats[i]) + const formatText = text + const date = parseDate(formatText, format, new Date(), { + locale: Locale[dealLocal(locale)] + }) + if (isValid(date) && formatText.length === format.length && isMatch(formatText, format)) { + return date + } + } + return null + } + }, + toDate: (value, valueFormat) => { + if (Array.isArray(value)) { + return value.map((val: any) => + typeof val === 'string' && val ? parseDate(val, valueFormat, new Date()) : val || null + ) as Date[] + } else { + return ( + typeof value === 'string' && value + ? parseDate(value, valueFormat, new Date()) + : value || null + ) as Date + } + }, + toString: (value, valueFormat) => { + if (Array.isArray(value)) { + return value.map((val: any) => + isDate(val) ? formatDate(val as Date, valueFormat) : val + ) as string[] + } else { + return (isDate(value) ? formatDate(value as Date, valueFormat) : value) as string + } + } +} + +export default generateConfig diff --git a/src/core/components/BaseDatePicker/src/vc-picker/generate/dayjs.ts b/src/core/components/BaseDatePicker/src/vc-picker/generate/dayjs.ts new file mode 100644 index 0000000..482132d --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/generate/dayjs.ts @@ -0,0 +1,296 @@ +import type { Dayjs } from 'dayjs' +import dayjs from 'dayjs' +import weekday from 'dayjs/plugin/weekday' +import localeData from 'dayjs/plugin/localeData' +import weekOfYear from 'dayjs/plugin/weekOfYear' +import weekYear from 'dayjs/plugin/weekYear' +import advancedFormat from 'dayjs/plugin/advancedFormat' +import customParseFormat from 'dayjs/plugin/customParseFormat' +import type { GenerateConfig } from './index' +import { noteOnce } from 'ant-design-vue/es/vc-util/warning' +import jalaliday from "dayjalali" +import updateLocale from 'dayjs/plugin/updateLocale' +dayjs.extend(updateLocale) +dayjs.extend(jalaliday) +//@ts-ignore +dayjs.calendar('jalali') +//import jalali from 'jalali-dayjs' +//import {de} from "date-fns/locale"; +//dayjs.extend(jalali) +dayjs.extend(customParseFormat) +dayjs.extend(advancedFormat) +dayjs.extend(weekday) +dayjs.extend(localeData) +dayjs.extend(weekOfYear) +dayjs.extend(weekYear) + +dayjs.extend((_o, c) => { + // todo support Wo (ISO week) + const proto = c.prototype + const oldFormat = proto.format + proto.format = function f(formatStr: string) { + const str = (formatStr || '').replace('Wo', 'wo') + return oldFormat.bind(this)(str) + } +}) + +type IlocaleMapObject = Record +const monthsShort = [ + 'فروردین', + 'اردیبهشت', + 'خرداد', + 'تیر', + 'مرداد', + 'شهریور', + 'مهر', + 'آبان', + 'آذر', + 'دی', + 'بهمن', + 'اسفند' +] +const months = [ + 'فروردین', + 'اردیبهشت', + 'خرداد', + 'تیر', + 'مرداد', + 'شهریور', + 'مهر', + 'آبان', + 'آذر', + 'دی', + 'بهمن', + 'اسفند' +] + +//const weekdays = ['Sunday', 'Monday', 'Tuesday', 'سشیشسی', 'Thursday', 'جمعه', 'شنبه'] + +/*dayjs.updateLocale('en', { + +})*/ + +dayjs.updateLocale('fa', { + months: months, + monthsShort: monthsShort + // weekdays: weekdays, +}) + +const localeMap: IlocaleMapObject = { + // ar_EG: + // az_AZ: + // bg_BG: + bn_BD: 'bn-bd', + by_BY: 'be', + // ca_ES: + // cs_CZ: + // da_DK: + // de_DE: + // el_GR: + en_GB: 'en-gb', + en_US: 'en', + // es_ES: + // et_EE: + fa_IR: 'fa', + // fi_FI: + fr_BE: 'fr', // todo: dayjs has no fr_BE locale, use fr at present + fr_CA: 'fr-ca', + // fr_FR: + // ga_IE: + // gl_ES: + // he_IL: + // hi_IN: + // hr_HR: + // hu_HU: + hy_AM: 'hy-am', + // id_ID: + // is_IS: + // it_IT: + // ja_JP: + // ka_GE: + // kk_KZ: + // km_KH: + kmr_IQ: 'ku', + // kn_IN: + // ko_KR: + // ku_IQ: // previous ku in antd + // lt_LT: + // lv_LV: + // mk_MK: + // ml_IN: + // mn_MN: + // ms_MY: + // nb_NO: + // ne_NP: + nl_BE: 'nl-be', + // nl_NL: + // pl_PL: + pt_BR: 'pt-br', + // pt_PT: + // ro_RO: + // ru_RU: + // sk_SK: + // sl_SI: + // sr_RS: + // sv_SE: + // ta_IN: + // th_TH: + // tr_TR: + // uk_UA: + // ur_PK: + // vi_VN: + zh_CN: 'zh-cn', + zh_HK: 'zh-hk', + zh_TW: 'zh-tw' +} + +const parseLocale = (locale: string) => { + const mapLocale = localeMap[locale] + return mapLocale || locale.split('_')[0] +} + +const parseNoMatchNotice = () => { + /* istanbul ignore next */ + noteOnce(false, 'Not match any format. Please help to fire a issue about this.') +} + +const generateConfig: GenerateConfig = { + // get + getNow: () => { + //todo check + return dayjs().locale('fa') + }, + getFixedDate: (string) => { + return dayjs(string, ['YYYY-M-DD', 'YYYY-MM-DD']) + }, + getEndDate: (date) => { + return date.endOf('month') + }, + getWeekDay: (date) => { + const clone = date.locale('en') + return clone.weekday() + clone.localeData().firstDayOfWeek() + }, + getYear: (date) => { + return date.year() + }, + getMonth: (date) => { + return date.month() + }, + getDate: (date) => { + return date.locale('fa').date() + }, + getHour: (date) => { + return date.hour() + }, + getMinute: (date) => { + return date.minute() + }, + getSecond: (date) => { + return date.second() + }, + + // set + addYear: (date, diff) => { + return date.add(diff, 'year') + }, + addMonth: (date, diff) => { + return date.add(diff, 'month') + }, + addDate: (date, diff) => { + return date.add(diff, 'day') + }, + setYear: (date, year) => { + return date.year(year) + }, + setMonth: (date, month) => { + return date.month(month) + }, + setDate: (date, num) => { + return date.date(num) + }, + setHour: (date, hour) => { + return date.hour(hour) + }, + setMinute: (date, minute) => { + return date.minute(minute) + }, + setSecond: (date, second) => { + return date.second(second) + }, + + // Compare + isAfter: (date1, date2) => date1.isAfter(date2), + isValidate: (date) => date.isValid(), + + locale: { + getWeekFirstDay: (locale) => { + return dayjs().locale(parseLocale(locale)).localeData().firstDayOfWeek() + }, + getWeekFirstDate: (locale, date) => { + return date.locale(parseLocale(locale)).weekday(0) + }, + getWeek: (locale, date) => { + return date.locale(parseLocale(locale)).week() + }, + getShortWeekDays: (locale) => { + return dayjs().locale(parseLocale(locale)).localeData().weekdaysMin() + }, + getShortMonths: (locale) => { + return dayjs().locale(parseLocale(locale)).localeData().monthsShort() + }, + format: (locale, date, format) => { + return date.locale(parseLocale(locale)).format(format) + }, + parse: (locale, text, formats) => { + const localeStr = parseLocale(locale) + for (let i = 0; i < formats.length; i += 1) { + const format = formats[i] + const formatText = text + if (format.includes('wo') || format.includes('Wo')) { + // parse Wo + const year = formatText.split('-')[0] + const weekStr = formatText.split('-')[1] + const firstWeek = dayjs(year, 'YYYY').startOf('year').locale(localeStr) + for (let j = 0; j <= 52; j += 1) { + const nextWeek = firstWeek.add(j, 'week') + if (nextWeek.format('Wo') === weekStr) { + return nextWeek + } + } + parseNoMatchNotice() + return null + } + const date = dayjs(formatText, format, true).locale(localeStr) + if (date.isValid()) { + return date + } + } + + if (!text) { + parseNoMatchNotice() + } + return null + } + }, + + toDate: (value, valueFormat) => { + if (Array.isArray(value)) { + return value.map((val: any) => + typeof val === 'string' && val ? dayjs(val, valueFormat) : val || null + ) as Dayjs[] + } else { + return ( + typeof value === 'string' && value ? dayjs(value, valueFormat) : value || null + ) as Dayjs + } + }, + toString: (value, valueFormat) => { + if (Array.isArray(value)) { + return value.map((val: any) => (dayjs.isDayjs(val) ? val.format(valueFormat) : val)) + } else { + return dayjs.isDayjs(value) ? value.format(valueFormat) : value + } + } +} + +export default generateConfig diff --git a/src/core/components/BaseDatePicker/src/vc-picker/generate/index.ts b/src/core/components/BaseDatePicker/src/vc-picker/generate/index.ts new file mode 100644 index 0000000..4e3e7ca --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/generate/index.ts @@ -0,0 +1,52 @@ +export type GenerateConfig = { + // Get + getWeekDay: (value: DateType) => number; + getSecond: (value: DateType) => number; + getMinute: (value: DateType) => number; + getHour: (value: DateType) => number; + getDate: (value: DateType) => number; + getMonth: (value: DateType) => number; + getYear: (value: DateType) => number; + getNow: () => DateType; + getFixedDate: (fixed: string) => DateType; + getEndDate: (value: DateType) => DateType; + + // Set + addYear: (value: DateType, diff: number) => DateType; + addMonth: (value: DateType, diff: number) => DateType; + addDate: (value: DateType, diff: number) => DateType; + setYear: (value: DateType, year: number) => DateType; + setMonth: (value: DateType, month: number) => DateType; + setDate: (value: DateType, date: number) => DateType; + setHour: (value: DateType, hour: number) => DateType; + setMinute: (value: DateType, minute: number) => DateType; + setSecond: (value: DateType, second: number) => DateType; + + // Compare + isAfter: (date1: DateType, date2: DateType) => boolean; + isValidate: (date: DateType) => boolean; + + toDate: ( + value: string | string[] | DateType | DateType[], + valueFormat: string, + ) => DateType | DateType[]; + toString: ( + value: string | string[] | DateType | DateType[], + valueFormat: string, + ) => string | string[]; + locale: { + getWeekFirstDay: (locale: string) => number; + getWeekFirstDate: (locale: string, value: DateType) => DateType; + getWeek: (locale: string, value: DateType) => number; + + format: (locale: string, date: DateType, format: string) => string; + + /** Should only return validate date instance */ + parse: (locale: string, text: string, formats: string[]) => DateType | null; + + /** A proxy for getting locale with moment or other locale library */ + getShortWeekDays?: (locale: string) => string[]; + /** A proxy for getting locale with moment or other locale library */ + getShortMonths?: (locale: string) => string[]; + }; +}; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/generate/moment.ts b/src/core/components/BaseDatePicker/src/vc-picker/generate/moment.ts new file mode 100644 index 0000000..ac34543 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/generate/moment.ts @@ -0,0 +1,158 @@ +import { noteOnce } from 'ant-design-vue/es/vc-util/warning' +import type { Moment } from 'moment' +import moment from 'moment' +import type { GenerateConfig } from './index' + +const generateConfig: GenerateConfig = { + // get + getNow: () => moment(), + getFixedDate: (string) => moment(string, 'YYYY-MM-DD'), + getEndDate: (date) => { + const clone = date.clone() + return clone.endOf('month') + }, + getWeekDay: (date) => { + const clone = date.clone().locale('en_US') + return clone.weekday() + clone.localeData().firstDayOfWeek() + }, + getYear: (date) => date.year(), + getMonth: (date) => date.month(), + getDate: (date) => date.date(), + getHour: (date) => date.hour(), + getMinute: (date) => date.minute(), + getSecond: (date) => date.second(), + + // set + addYear: (date, diff) => { + const clone = date.clone() + return clone.add(diff, 'year') + }, + addMonth: (date, diff) => { + const clone = date.clone() + return clone.add(diff, 'month') + }, + addDate: (date, diff) => { + const clone = date.clone() + return clone.add(diff, 'day') + }, + setYear: (date, year) => { + const clone = date.clone() + return clone.year(year) + }, + setMonth: (date, month) => { + const clone = date.clone() + return clone.month(month) + }, + setDate: (date, num) => { + const clone = date.clone() + return clone.date(num) + }, + setHour: (date, hour) => { + const clone = date.clone() + return clone.hour(hour) + }, + setMinute: (date, minute) => { + const clone = date.clone() + return clone.minute(minute) + }, + setSecond: (date, second) => { + const clone = date.clone() + return clone.second(second) + }, + + // Compare + isAfter: (date1, date2) => date1.isAfter(date2), + isValidate: (date) => date.isValid(), + + locale: { + getWeekFirstDay: (locale) => { + const date = moment().locale(locale) + return date.localeData().firstDayOfWeek() + }, + getWeekFirstDate: (locale, date) => { + const clone = date.clone() + const result = clone.locale(locale) + return result.weekday(0) + }, + getWeek: (locale, date) => { + const clone = date.clone() + const result = clone.locale(locale) + return result.week() + }, + getShortWeekDays: (locale) => { + const date = moment().locale(locale) + return date.localeData().weekdaysMin() + }, + getShortMonths: (locale) => { + const date = moment().locale(locale) + return date.localeData().monthsShort() + }, + format: (locale, date, format) => { + const clone = date.clone() + const result = clone.locale(locale) + return result.format(format) + }, + parse: (locale, text, formats) => { + const fallbackFormatList: string[] = [] + + for (let i = 0; i < formats.length; i += 1) { + let format = formats[i] + let formatText = text + + if (format.includes('wo') || format.includes('Wo')) { + format = format.replace(/wo/g, 'w').replace(/Wo/g, 'W') + const matchFormat = format.match(/[-YyMmDdHhSsWwGg]+/g) + const matchText = formatText.match(/[-\d]+/g) + + if (matchFormat && matchText) { + format = matchFormat.join('') + formatText = matchText.join('') + } else { + fallbackFormatList.push(format.replace(/o/g, '')) + } + } + + const date = moment(formatText, format, locale, true) + if (date.isValid()) { + return date + } + } + + // Fallback to fuzzy matching, this should always not reach match or need fire a issue + for (let i = 0; i < fallbackFormatList.length; i += 1) { + const date = moment(text, fallbackFormatList[i], locale, false) + + /* istanbul ignore next */ + if (date.isValid()) { + noteOnce( + false, + 'Not match any format strictly and fallback to fuzzy match. Please help to fire a issue about this.' + ) + return date + } + } + + return null + } + }, + toDate: (value, valueFormat) => { + if (Array.isArray(value)) { + return value.map((val: any) => + typeof val === 'string' && val ? moment(val, valueFormat) : val || null + ) as Moment[] + } else { + return ( + typeof value === 'string' && value ? moment(value, valueFormat) : value || null + ) as Moment + } + }, + toString: (value, valueFormat) => { + if (Array.isArray(value)) { + return value.map((val: any) => (moment.isMoment(val) ? val.format(valueFormat) : val)) + } else { + return moment.isMoment(value) ? value.format(valueFormat) : value + } + } +} + +export default generateConfig diff --git a/src/core/components/BaseDatePicker/src/vc-picker/hooks/useCellClassName.ts b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useCellClassName.ts new file mode 100644 index 0000000..5c9bc4b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useCellClassName.ts @@ -0,0 +1,97 @@ +import { isInRange } from '../utils/dateUtil'; +import type { GenerateConfig } from '../generate'; +import type { RangeValue, NullableDateType } from '../interface'; +import { getValue } from '../utils/miscUtil'; + +export default function useCellClassName({ + cellPrefixCls, + generateConfig, + rangedValue, + hoverRangedValue, + isInView, + isSameCell, + offsetCell, + today, + value, +}: { + cellPrefixCls: string; + generateConfig: GenerateConfig; + isSameCell: (current: NullableDateType, target: NullableDateType) => boolean; + offsetCell: (date: DateType, offset: number) => DateType; + isInView: (date: DateType) => boolean; + rangedValue?: RangeValue; + hoverRangedValue?: RangeValue; + today?: NullableDateType; + value?: NullableDateType; +}) { + function getClassName(currentDate: DateType) { + const prevDate = offsetCell(currentDate, -1); + const nextDate = offsetCell(currentDate, 1); + + const rangeStart = getValue(rangedValue, 0); + const rangeEnd = getValue(rangedValue, 1); + + const hoverStart = getValue(hoverRangedValue, 0); + const hoverEnd = getValue(hoverRangedValue, 1); + + const isRangeHovered = isInRange(generateConfig, hoverStart, hoverEnd, currentDate); + + function isRangeStart(date: DateType) { + return isSameCell(rangeStart, date); + } + function isRangeEnd(date: DateType) { + return isSameCell(rangeEnd, date); + } + const isHoverStart = isSameCell(hoverStart, currentDate); + const isHoverEnd = isSameCell(hoverEnd, currentDate); + + const isHoverEdgeStart = + (isRangeHovered || isHoverEnd) && (!isInView(prevDate) || isRangeEnd(prevDate)); + const isHoverEdgeEnd = + (isRangeHovered || isHoverStart) && (!isInView(nextDate) || isRangeStart(nextDate)); + + return { + // In view + [`${cellPrefixCls}-in-view`]: isInView(currentDate), + + // Range + [`${cellPrefixCls}-in-range`]: isInRange( + generateConfig, + rangeStart, + rangeEnd, + currentDate, + ), + [`${cellPrefixCls}-range-start`]: isRangeStart(currentDate), + [`${cellPrefixCls}-range-end`]: isRangeEnd(currentDate), + [`${cellPrefixCls}-range-start-single`]: isRangeStart(currentDate) && !rangeEnd, + [`${cellPrefixCls}-range-end-single`]: isRangeEnd(currentDate) && !rangeStart, + [`${cellPrefixCls}-range-start-near-hover`]: + isRangeStart(currentDate) && + (isSameCell(prevDate, hoverStart) || + isInRange(generateConfig, hoverStart, hoverEnd, prevDate)), + [`${cellPrefixCls}-range-end-near-hover`]: + isRangeEnd(currentDate) && + (isSameCell(nextDate, hoverEnd) || + isInRange(generateConfig, hoverStart, hoverEnd, nextDate)), + + // Range Hover + [`${cellPrefixCls}-range-hover`]: isRangeHovered, + [`${cellPrefixCls}-range-hover-start`]: isHoverStart, + [`${cellPrefixCls}-range-hover-end`]: isHoverEnd, + + // Range Edge + [`${cellPrefixCls}-range-hover-edge-start`]: isHoverEdgeStart, + [`${cellPrefixCls}-range-hover-edge-end`]: isHoverEdgeEnd, + [`${cellPrefixCls}-range-hover-edge-start-near-range`]: + isHoverEdgeStart && isSameCell(prevDate, rangeEnd), + [`${cellPrefixCls}-range-hover-edge-end-near-range`]: + isHoverEdgeEnd && isSameCell(nextDate, rangeStart), + + // Others + [`${cellPrefixCls}-today`]: isSameCell(today, currentDate), + [`${cellPrefixCls}-selected`]: isSameCell(value, currentDate), + }; + } + + return getClassName; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/hooks/useHoverValue.ts b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useHoverValue.ts new file mode 100644 index 0000000..2f343ed --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useHoverValue.ts @@ -0,0 +1,46 @@ +import raf from 'ant-design-vue/es/_util/raf'; +import type { ComputedRef, Ref, UnwrapRef } from 'vue'; +import { ref, onBeforeUnmount, watch } from 'vue'; +import type { ValueTextConfig } from './useValueTexts'; +import useValueTexts from './useValueTexts'; + +export default function useHoverValue( + valueText: Ref, + { formatList, generateConfig, locale }: ValueTextConfig, +): [ComputedRef, (date: DateType) => void, (immediately?: boolean) => void] { + const innerValue = ref(null); + let rafId: number; + + function setValue(val: DateType, immediately = false) { + raf.cancel(rafId); + if (immediately) { + innerValue.value = val as UnwrapRef; + return; + } + rafId = raf(() => { + innerValue.value = val as UnwrapRef; + }); + } + + const [, firstText] = useValueTexts(innerValue as Ref, { + formatList, + generateConfig, + locale, + }); + function onEnter(date: DateType) { + setValue(date); + } + + function onLeave(immediately = false) { + setValue(null, immediately); + } + + watch(valueText, () => { + onLeave(true); + }); + onBeforeUnmount(() => { + raf.cancel(rafId); + }); + + return [firstText, onEnter, onLeave]; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/hooks/useMergeProps.ts b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useMergeProps.ts new file mode 100644 index 0000000..54450bd --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useMergeProps.ts @@ -0,0 +1,8 @@ +import type { HTMLAttributes } from 'vue'; +import { useAttrs } from 'vue'; + +// 仅用在函数式组件中,不用考虑响应式问题 +export default function useMergeProps(props: T) { + const attrs: HTMLAttributes = useAttrs(); + return { ...props, ...attrs }; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/hooks/usePickerInput.ts b/src/core/components/BaseDatePicker/src/vc-picker/hooks/usePickerInput.ts new file mode 100644 index 0000000..036a1a1 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/hooks/usePickerInput.ts @@ -0,0 +1,176 @@ +import type { ComputedRef, HTMLAttributes, Ref } from 'vue'; +import { onBeforeUnmount, onMounted, watch, ref, computed } from 'vue'; +import type { FocusEventHandler } from 'ant-design-vue/es/_util/EventInterface'; +import KeyCode from 'ant-design-vue/es/_util/KeyCode'; +import { addGlobalMousedownEvent, getTargetFromEvent } from '../utils/uiUtil'; +import raf from 'ant-design-vue/es/_util/raf'; + +export default function usePickerInput({ + open, + value, + isClickOutside, + triggerOpen, + forwardKeydown, + onKeydown, + blurToCancel, + onSubmit, + onCancel, + onFocus, + onBlur, +}: { + open: Ref; + value: Ref; + isClickOutside: (clickElement: EventTarget | null) => boolean; + triggerOpen: (open: boolean) => void; + forwardKeydown: (e: KeyboardEvent) => boolean; + onKeydown: (e: KeyboardEvent, preventDefault: () => void) => void; + blurToCancel?: ComputedRef; + onSubmit: () => void | boolean; + onCancel: () => void; + onFocus?: FocusEventHandler; + onBlur?: FocusEventHandler; +}): [ComputedRef, { focused: Ref; typing: Ref }] { + const typing = ref(false); + const focused = ref(false); + + /** + * We will prevent blur to handle open event when user click outside, + * since this will repeat trigger `onOpenChange` event. + */ + const preventBlurRef = ref(false); + + const valueChangedRef = ref(false); + + const preventDefaultRef = ref(false); + + const inputProps = computed(() => ({ + onMousedown: () => { + typing.value = true; + triggerOpen(true); + }, + onKeydown: e => { + const preventDefault = (): void => { + preventDefaultRef.value = true; + }; + + onKeydown(e, preventDefault); + + if (preventDefaultRef.value) return; + + switch (e.which) { + case KeyCode.ENTER: { + if (!open.value) { + triggerOpen(true); + } else if (onSubmit() !== false) { + typing.value = true; + } + + e.preventDefault(); + return; + } + + case KeyCode.TAB: { + if (typing.value && open.value && !e.shiftKey) { + typing.value = false; + e.preventDefault(); + } else if (!typing.value && open.value) { + if (!forwardKeydown(e) && e.shiftKey) { + typing.value = true; + e.preventDefault(); + } + } + return; + } + + case KeyCode.ESC: { + typing.value = true; + onCancel(); + return; + } + } + + if (!open.value && ![KeyCode.SHIFT].includes(e.which)) { + triggerOpen(true); + } else if (!typing.value) { + // Let popup panel handle keyboard + forwardKeydown(e); + } + }, + + onFocus: e => { + typing.value = true; + focused.value = true; + + if (onFocus) { + onFocus(e); + } + }, + + onBlur: e => { + if (preventBlurRef.value || !isClickOutside(document.activeElement)) { + preventBlurRef.value = false; + return; + } + + if (blurToCancel.value) { + setTimeout(() => { + let { activeElement } = document; + while (activeElement && activeElement.shadowRoot) { + activeElement = activeElement.shadowRoot.activeElement; + } + + if (isClickOutside(activeElement)) { + onCancel(); + } + }, 0); + } else if (open.value) { + triggerOpen(false); + + if (valueChangedRef.value) { + onSubmit(); + } + } + focused.value = false; + + if (onBlur) { + onBlur(e); + } + }, + })); + + // check if value changed + watch(open, () => { + valueChangedRef.value = false; + }); + + watch(value, () => { + valueChangedRef.value = true; + }); + const globalMousedownEvent = ref(); + // Global click handler + onMounted(() => { + globalMousedownEvent.value = addGlobalMousedownEvent((e: MouseEvent) => { + const target = getTargetFromEvent(e); + + if (open.value) { + const clickedOutside = isClickOutside(target); + + if (!clickedOutside) { + preventBlurRef.value = true; + + // Always set back in case `onBlur` prevented by user + raf(() => { + preventBlurRef.value = false; + }); + } else if (!focused.value || clickedOutside) { + triggerOpen(false); + } + } + }); + }); + onBeforeUnmount(() => { + globalMousedownEvent.value && globalMousedownEvent.value(); + }); + + return [inputProps, { focused, typing }]; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/hooks/useRangeDisabled.ts b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useRangeDisabled.ts new file mode 100644 index 0000000..b11c1ec --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useRangeDisabled.ts @@ -0,0 +1,114 @@ +import type { RangeValue, PickerMode, Locale } from '../interface'; +import { getValue } from '../utils/miscUtil'; +import type { GenerateConfig } from '../generate'; +import { isSameDate, getQuarter } from '../utils/dateUtil'; +import type { ComputedRef, Ref } from 'vue'; +import { computed } from 'vue'; + +export default function useRangeDisabled( + { + picker, + locale, + selectedValue, + disabledDate, + disabled, + generateConfig, + }: { + picker: Ref; + selectedValue: Ref>; + disabledDate?: Ref<(date: DateType) => boolean>; + disabled: ComputedRef<[boolean, boolean]>; + locale: Ref; + generateConfig: Ref>; + }, + openRecordsRef: Ref<{ + [x: number]: boolean; + }>, +) { + const startDate = computed(() => getValue(selectedValue.value, 0)); + const endDate = computed(() => getValue(selectedValue.value, 1)); + + function weekFirstDate(date: DateType) { + return generateConfig.value.locale.getWeekFirstDate(locale.value.locale, date); + } + + function monthNumber(date: DateType) { + const year = generateConfig.value.getYear(date); + const month = generateConfig.value.getMonth(date); + return year * 100 + month; + } + + function quarterNumber(date: DateType) { + const year = generateConfig.value.getYear(date); + const quarter = getQuarter(generateConfig.value, date); + return year * 10 + quarter; + } + + const disabledStartDate = (date: DateType) => { + if (disabledDate && disabledDate?.value?.(date)) { + return true; + } + + // Disabled range + if (disabled[1] && endDate) { + return ( + !isSameDate(generateConfig.value, date, endDate.value) && + generateConfig.value.isAfter(date, endDate.value) + ); + } + + // Disabled part + if (openRecordsRef.value[1] && endDate.value) { + switch (picker.value) { + case 'quarter': + return quarterNumber(date) > quarterNumber(endDate.value); + case 'month': + return monthNumber(date) > monthNumber(endDate.value); + case 'week': + return weekFirstDate(date) > weekFirstDate(endDate.value); + default: + return ( + !isSameDate(generateConfig.value, date, endDate.value) && + generateConfig.value.isAfter(date, endDate.value) + ); + } + } + + return false; + }; + + const disabledEndDate = (date: DateType) => { + if (disabledDate.value?.(date)) { + return true; + } + + // Disabled range + if (disabled[0] && startDate) { + return ( + !isSameDate(generateConfig.value, date, endDate.value) && + generateConfig.value.isAfter(startDate.value, date) + ); + } + + // Disabled part + if (openRecordsRef.value[0] && startDate.value) { + switch (picker.value) { + case 'quarter': + return quarterNumber(date) < quarterNumber(startDate.value); + case 'month': + return monthNumber(date) < monthNumber(startDate.value); + case 'week': + return weekFirstDate(date) < weekFirstDate(startDate.value); + default: + return ( + !isSameDate(generateConfig.value, date, startDate.value) && + generateConfig.value.isAfter(startDate.value, date) + ); + } + } + + return false; + }; + + return [disabledStartDate, disabledEndDate]; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/hooks/useRangeViewDates.ts b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useRangeViewDates.ts new file mode 100644 index 0000000..a8cdea1 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useRangeViewDates.ts @@ -0,0 +1,128 @@ +import type { RangeValue, PickerMode } from '../interface'; +import type { GenerateConfig } from '../generate'; +import { getValue, updateValues } from '../utils/miscUtil'; +import { getClosingViewDate, isSameYear, isSameMonth, isSameDecade } from '../utils/dateUtil'; +import type { Ref } from 'vue'; +import { watchEffect, computed, ref } from 'vue'; + +function getStartEndDistance( + startDate: DateType, + endDate: DateType, + picker: PickerMode, + generateConfig: GenerateConfig, +): 'same' | 'closing' | 'far' { + const startNext = getClosingViewDate(startDate, picker, generateConfig, 1); + + function getDistance(compareFunc: (start: DateType | null, end: DateType | null) => boolean) { + if (compareFunc(startDate, endDate)) { + return 'same'; + } + if (compareFunc(startNext, endDate)) { + return 'closing'; + } + return 'far'; + } + + switch (picker) { + case 'year': + return getDistance((start, end) => isSameDecade(generateConfig, start, end)); + case 'quarter': + case 'month': + return getDistance((start, end) => isSameYear(generateConfig, start, end)); + default: + return getDistance((start, end) => isSameMonth(generateConfig, start, end)); + } +} + +function getRangeViewDate( + values: RangeValue, + index: 0 | 1, + picker: PickerMode, + generateConfig: GenerateConfig, +): DateType | null { + const startDate = getValue(values, 0); + const endDate = getValue(values, 1); + + if (index === 0) { + return startDate; + } + + if (startDate && endDate) { + const distance = getStartEndDistance(startDate, endDate, picker, generateConfig); + switch (distance) { + case 'same': + return startDate; + case 'closing': + return startDate; + default: + return getClosingViewDate(endDate, picker, generateConfig, -1); + } + } + + return startDate; +} + +export default function useRangeViewDates({ + values, + picker, + defaultDates, + generateConfig, +}: { + values: Ref>; + picker: Ref; + defaultDates: RangeValue | undefined; + generateConfig: Ref>; +}): [Ref, Ref, (viewDate: DateType | null, index: 0 | 1) => void] { + const defaultViewDates = ref<[DateType | null, DateType | null]>([ + getValue(defaultDates, 0), + getValue(defaultDates, 1), + ]); + const viewDates = ref>(null); + const startDate = computed(() => getValue(values.value, 0)); + const endDate = computed(() => getValue(values.value, 1)); + + const getViewDate = (index: 0 | 1): DateType => { + // If set default view date, use it + if (defaultViewDates.value[index]) { + return defaultViewDates.value[index]! as DateType; + } + + return ( + (getValue(viewDates.value, index) as any) || + getRangeViewDate(values.value, index, picker.value, generateConfig.value) || + startDate.value || + endDate.value || + generateConfig.value.getNow() + ); + }; + + const startViewDate = ref(null); + + const endViewDate = ref(null); + watchEffect(() => { + startViewDate.value = getViewDate(0); + endViewDate.value = getViewDate(1); + }); + + function setViewDate(viewDate: DateType | null, index: 0 | 1) { + if (viewDate) { + let newViewDates = updateValues(viewDates.value, viewDate as any, index); + // Set view date will clean up default one + // Should always be an array + defaultViewDates.value = updateValues(defaultViewDates.value, null, index) || [null, null]; + + // Reset another one when not have value + const anotherIndex = (index + 1) % 2; + if (!getValue(values.value, anotherIndex)) { + newViewDates = updateValues(newViewDates, viewDate, anotherIndex); + } + + viewDates.value = newViewDates; + } else if (startDate.value || endDate.value) { + // Reset all when has values when `viewDate` is `null` which means from open trigger + viewDates.value = null; + } + } + + return [startViewDate, endViewDate, setViewDate]; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/hooks/useTextValueMapping.ts b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useTextValueMapping.ts new file mode 100644 index 0000000..eec0366 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useTextValueMapping.ts @@ -0,0 +1,37 @@ +import type { ComputedRef, Ref } from 'vue'; +import { ref, watch } from 'vue'; + +export default function useTextValueMapping({ + valueTexts, + onTextChange, +}: { + /** Must useMemo, to assume that `valueTexts` only match on the first change */ + valueTexts: ComputedRef; + onTextChange: (text: string) => void; +}): [Ref, (text: string) => void, () => void] { + const text = ref(''); + + function triggerTextChange(value: string) { + text.value = value; + onTextChange(value); + } + + function resetText() { + text.value = valueTexts.value[0]; + } + + watch( + () => [...valueTexts.value], + (cur, pre = []) => { + if ( + cur.join('||') !== pre.join('||') && + valueTexts.value.every(valText => valText !== text.value) + ) { + resetText(); + } + }, + { immediate: true }, + ); + + return [text, triggerTextChange, resetText]; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/hooks/useValueTexts.ts b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useValueTexts.ts new file mode 100644 index 0000000..d46cd63 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/hooks/useValueTexts.ts @@ -0,0 +1,51 @@ +import type { ComputedRef, Ref } from 'vue'; +import { computed } from 'vue'; +import useMemo from 'ant-design-vue/es/_util/hooks/useMemo'; +import shallowequal from 'ant-design-vue/es/_util/shallowequal'; +import type { GenerateConfig } from '../generate'; +import type { CustomFormat, Locale } from '../interface'; +import { formatValue } from '../utils/dateUtil'; + +export type ValueTextConfig = { + formatList: ComputedRef<(string | CustomFormat)[]>; + generateConfig: Ref>; + locale: Ref; +}; + +export default function useValueTexts( + value: Ref, + { formatList, generateConfig, locale }: ValueTextConfig, +): [ComputedRef, ComputedRef] { + const texts = useMemo<[string[], string]>( + () => { + if (!value.value) { + return [[''], '']; + } + + // We will convert data format back to first format + let firstValueText = ''; + const fullValueTexts: string[] = []; + + for (let i = 0; i < formatList.value.length; i += 1) { + const format = formatList.value[i]; + const formatStr = formatValue(value.value, { + generateConfig: generateConfig.value, + locale: locale.value, + format, + }); + fullValueTexts.push(formatStr); + + if (i === 0) { + firstValueText = formatStr; + } + } + + return [fullValueTexts, firstValueText]; + }, + [value, formatList], + (next, prev) => prev[0] !== next[0] || !shallowequal(prev[1], next[1]), + ); + const fullValueTexts = computed(() => texts.value[0]); + const firstValueText = computed(() => texts.value[1]); + return [fullValueTexts, firstValueText]; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/index.tsx new file mode 100644 index 0000000..2bfcc8b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/index.tsx @@ -0,0 +1,14 @@ +// 2.6.7 +import type { PickerProps } from './Picker'; +//todo check +import Picker from './Picker'; +//import Picker from 'ant-design-vue/es/vc-picker/Picker' +import PickerPanel from './PickerPanel'; +import RangePicker from './RangePicker'; +import type { PickerPanelProps } from './PickerPanel'; +import type { RangePickerProps } from './RangePicker'; + +export { PickerPanel, RangePicker }; +export type { PickerProps, PickerPanelProps, RangePickerProps }; + +export default Picker; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/interface.ts b/src/core/components/BaseDatePicker/src/vc-picker/interface.ts new file mode 100644 index 0000000..f28265b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/interface.ts @@ -0,0 +1,115 @@ +import type { Ref } from 'vue' +import type { VueNode } from 'ant-design-vue/es/_util/type' +import type { GenerateConfig } from './generate' + +export type Locale = { + locale: string + + // ===================== Date Panel ===================== + /** Display month before year in date panel header */ + monthBeforeYear?: boolean + yearFormat: string + monthFormat?: string + quarterFormat?: string + + today: string + now: string + backToToday: string + ok: string + timeSelect: string + dateSelect: string + weekSelect?: string + clear: string + month: string + year: string + previousMonth: string + nextMonth: string + monthSelect: string + yearSelect: string + decadeSelect: string + + dayFormat: string + dateFormat: string + dateTimeFormat: string + previousYear: string + nextYear: string + previousDecade: string + nextDecade: string + previousCentury: string + nextCentury: string + + shortWeekDays?: string[] + shortMonths?: string[] +} + +export type PanelMode = 'time' | 'date' | 'week' | 'month' | 'quarter' | 'year' | 'decade' + +export type PickerMode = Exclude + +export type PanelRefProps = { + onKeydown?: (e: KeyboardEvent) => boolean + onBlur?: (e: FocusEvent) => void + onClose?: () => void +} + +export type NullableDateType = DateType | null | undefined + +export type OnSelect = (value: DateType, type: 'key' | 'mouse' | 'submit') => void + +export type PanelSharedProps = { + prefixCls: string + generateConfig: GenerateConfig + value?: NullableDateType + viewDate: DateType + /** [Legacy] Set default display picker view date */ + defaultPickerValue?: DateType + locale: Locale + disabledDate?: (date: DateType) => boolean + + prevIcon?: VueNode + nextIcon?: VueNode + superPrevIcon?: VueNode + superNextIcon?: VueNode + + // /** + // * Typescript can not handle generic type so we can not use `forwardRef` here. + // * Thus, move ref into operationRef. + // * This is little hack which should refactor after typescript support. + // */ + operationRef: Ref + + onSelect: OnSelect + onViewDateChange: (value: DateType) => void + onPanelChange: (mode: PanelMode | null, viewValue: DateType) => void +} + +export type DisabledTimes = { + disabledHours?: () => number[] + disabledMinutes?: (hour: number) => number[] + disabledSeconds?: (hour: number, minute: number) => number[] +} + +export type DisabledTime = (date: DateType | null) => DisabledTimes + +export type OnPanelChange = (value: DateType, mode: PanelMode) => void + +export type EventValue = DateType | null +export type RangeValue = [EventValue, EventValue] | null + +export type Components = { + button?: any +} + +export type RangeList = { + label: VueNode + onClick: () => void + onMouseenter: () => void + onMouseleave: () => void +}[] + +export type CustomFormat = (value: DateType) => string + +export interface PresetDate { + label: VueNode + value: T +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ar_EG.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ar_EG.ts new file mode 100644 index 0000000..14e9b6b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ar_EG.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ar_EG', + today: 'اليوم', + now: 'الأن', + backToToday: 'العودة إلى اليوم', + ok: 'تأكيد', + clear: 'مسح', + month: 'الشهر', + year: 'السنة', + timeSelect: 'اختيار الوقت', + dateSelect: 'اختيار التاريخ', + monthSelect: 'اختيار الشهر', + yearSelect: 'اختيار السنة', + decadeSelect: 'اختيار العقد', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'الشهر السابق (PageUp)', + nextMonth: 'الشهر التالى(PageDown)', + previousYear: 'العام السابق (Control + left)', + nextYear: 'العام التالى (Control + right)', + previousDecade: 'العقد السابق', + nextDecade: 'العقد التالى', + previousCentury: 'القرن السابق', + nextCentury: 'القرن التالى', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/az_AZ.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/az_AZ.ts new file mode 100644 index 0000000..a499805 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/az_AZ.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'az_AZ', + today: 'Bugün', + now: 'İndi', + backToToday: 'Bugünə qayıt', + ok: 'Təsdiq', + clear: 'Təmizlə', + month: 'Ay', + year: 'İl', + timeSelect: 'vaxtı seç', + dateSelect: 'tarixi seç', + weekSelect: 'Həftə seç', + monthSelect: 'Ay seç', + yearSelect: 'il seç', + decadeSelect: 'Onillik seçin', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Əvvəlki ay (PageUp)', + nextMonth: 'Növbəti ay (PageDown)', + previousYear: 'Sonuncu il (Control + left)', + nextYear: 'Növbəti il (Control + right)', + previousDecade: 'Sonuncu onillik', + nextDecade: 'Növbəti onillik', + previousCentury: 'Sonuncu əsr', + nextCentury: 'Növbəti əsr', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/bg_BG.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/bg_BG.ts new file mode 100644 index 0000000..07334a9 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/bg_BG.ts @@ -0,0 +1,31 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'bg_BG', + today: 'Днес', + now: 'Сега', + backToToday: 'Към днес', + ok: 'Добре', + clear: 'Изчистване', + month: 'Месец', + year: 'Година', + timeSelect: 'Избор на час', + dateSelect: 'Избор на дата', + monthSelect: 'Избор на месец', + yearSelect: 'Избор на година', + decadeSelect: 'Десетилетие', + yearFormat: 'YYYY', + dateFormat: 'D M YYYY', + dayFormat: 'D', + dateTimeFormat: 'D M YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Предишен месец (PageUp)', + nextMonth: 'Следващ месец (PageDown)', + previousYear: 'Последна година (Control + left)', + nextYear: 'Следваща година (Control + right)', + previousDecade: 'Предишно десетилетие', + nextDecade: 'Следващо десетилетие', + previousCentury: 'Последен век', + nextCentury: 'Следващ век', +}; +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/bn_BD.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/bn_BD.ts new file mode 100644 index 0000000..c98e890 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/bn_BD.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'bn_BD', + today: 'আজ', + now: 'এখন', + backToToday: 'আজকে ফিরে চলুন', + ok: 'ওকে', + clear: 'পরিস্কার', + month: 'মাস', + year: 'বছর', + timeSelect: 'সময় নির্বাচন', + dateSelect: 'তারিখ নির্বাচন', + weekSelect: 'সপ্তাহ পছন্দ করুন', + monthSelect: 'মাস পছন্দ করুন', + yearSelect: 'বছর পছন্দ করুন', + decadeSelect: 'একটি দশক পছন্দ করুন', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'গত মাস (PageUp)', + nextMonth: 'আগামী মাস (PageDown)', + previousYear: 'গত বছর (Control + left)', + nextYear: 'আগামী বছর (Control + right)', + previousDecade: 'গত দশক', + nextDecade: 'পরের দশক', + previousCentury: 'গত শতাব্দী', + nextCentury: 'পরের শতাব্দী', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/by_BY.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/by_BY.ts new file mode 100644 index 0000000..fe5984a --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/by_BY.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'by_BY', + today: 'Сёння', + now: 'Зараз', + backToToday: 'Дадзеная дата', + ok: 'Ok', + clear: 'Ачысціць', + month: 'Месяц', + year: 'Год', + timeSelect: 'Выбраць час', + dateSelect: 'Выбраць дату', + weekSelect: 'Выбраць тыдзень', + monthSelect: 'Выбраць месяц', + yearSelect: 'Выбраць год', + decadeSelect: 'Выбраць дзесяцігоддзе', + yearFormat: 'YYYY', + dateFormat: 'D-M-YYYY', + dayFormat: 'D', + dateTimeFormat: 'D-M-YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Папярэдні месяц (PageUp)', + nextMonth: 'Наступны месяц (PageDown)', + previousYear: 'Папярэдні год (Control + left)', + nextYear: 'Наступны год (Control + right)', + previousDecade: 'Папярэдняе дзесяцігоддзе', + nextDecade: 'Наступнае дзесяцігоддзе', + previousCentury: 'Папярэдні век', + nextCentury: 'Наступны век', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ca_ES.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ca_ES.ts new file mode 100644 index 0000000..f93f093 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ca_ES.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ca_ES', + today: 'Avui', + now: 'Ara', + backToToday: 'Tornar a avui', + ok: 'Acceptar', + clear: 'Netejar', + month: 'Mes', + year: 'Any', + timeSelect: 'Seleccionar hora', + dateSelect: 'Seleccionar data', + monthSelect: 'Escollir un mes', + yearSelect: 'Escollir un any', + decadeSelect: 'Escollir una dècada', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Mes anterior (PageUp)', + nextMonth: 'Mes següent (PageDown)', + previousYear: 'Any anterior (Control + left)', + nextYear: 'Mes següent (Control + right)', + previousDecade: 'Dècada anterior', + nextDecade: 'Dècada següent', + previousCentury: 'Segle anterior', + nextCentury: 'Segle següent', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/cs_CZ.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/cs_CZ.ts new file mode 100644 index 0000000..3c1b2eb --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/cs_CZ.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'cs_CZ', + today: 'Dnes', + now: 'Nyní', + backToToday: 'Zpět na dnešek', + ok: 'Ok', + clear: 'Vymazat', + month: 'Měsíc', + year: 'Rok', + timeSelect: 'Vybrat čas', + dateSelect: 'Vybrat datum', + monthSelect: 'Vyberte měsíc', + yearSelect: 'Vyberte rok', + decadeSelect: 'Vyberte dekádu', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Předchozí měsíc (PageUp)', + nextMonth: 'Následující (PageDown)', + previousYear: 'Předchozí rok (Control + left)', + nextYear: 'Následující rok (Control + right)', + previousDecade: 'Předchozí dekáda', + nextDecade: 'Následující dekáda', + previousCentury: 'Předchozí století', + nextCentury: 'Následující století', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/da_DK.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/da_DK.ts new file mode 100644 index 0000000..f3fe17c --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/da_DK.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'da_DK', + today: 'I dag', + now: 'Nu', + backToToday: 'Gå til i dag', + ok: 'Ok', + clear: 'Ryd', + month: 'Måned', + year: 'År', + timeSelect: 'Vælg tidspunkt', + dateSelect: 'Vælg dato', + monthSelect: 'Vælg måned', + yearSelect: 'Vælg år', + decadeSelect: 'Vælg årti', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Forrige måned (Page Up)', + nextMonth: 'Næste måned (Page Down)', + previousYear: 'Forrige år (Ctrl-venstre pil)', + nextYear: 'Næste år (Ctrl-højre pil)', + previousDecade: 'Forrige årti', + nextDecade: 'Næste årti', + previousCentury: 'Forrige århundrede', + nextCentury: 'Næste århundrede', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/de_DE.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/de_DE.ts new file mode 100644 index 0000000..e053a63 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/de_DE.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'de_DE', + today: 'Heute', + now: 'Jetzt', + backToToday: 'Zurück zu Heute', + ok: 'OK', + clear: 'Zurücksetzen', + month: 'Monat', + year: 'Jahr', + timeSelect: 'Zeit wählen', + dateSelect: 'Datum wählen', + monthSelect: 'Wähle einen Monat', + yearSelect: 'Wähle ein Jahr', + decadeSelect: 'Wähle ein Jahrzehnt', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Vorheriger Monat (PageUp)', + nextMonth: 'Nächster Monat (PageDown)', + previousYear: 'Vorheriges Jahr (Ctrl + left)', + nextYear: 'Nächstes Jahr (Ctrl + right)', + previousDecade: 'Vorheriges Jahrzehnt', + nextDecade: 'Nächstes Jahrzehnt', + previousCentury: 'Vorheriges Jahrhundert', + nextCentury: 'Nächstes Jahrhundert', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/el_GR.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/el_GR.ts new file mode 100644 index 0000000..e8979a5 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/el_GR.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'el_GR', + today: 'Σήμερα', + now: 'Τώρα', + backToToday: 'Πίσω στη σημερινή μέρα', + ok: 'Ok', + clear: 'Καθαρισμός', + month: 'Μήνας', + year: 'Έτος', + timeSelect: 'Επιλογή ώρας', + dateSelect: 'Επιλογή ημερομηνίας', + monthSelect: 'Επιλογή μήνα', + yearSelect: 'Επιλογή έτους', + decadeSelect: 'Επιλογή δεκαετίας', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Προηγούμενος μήνας (PageUp)', + nextMonth: 'Επόμενος μήνας (PageDown)', + previousYear: 'Προηγούμενο έτος (Control + αριστερά)', + nextYear: 'Επόμενο έτος (Control + δεξιά)', + previousDecade: 'Προηγούμενη δεκαετία', + nextDecade: 'Επόμενη δεκαετία', + previousCentury: 'Προηγούμενος αιώνας', + nextCentury: 'Επόμενος αιώνας', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/en_GB.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/en_GB.ts new file mode 100644 index 0000000..a875ae2 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/en_GB.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'en_GB', + today: 'Today', + now: 'Now', + backToToday: 'Back to today', + ok: 'Ok', + clear: 'Clear', + month: 'Month', + year: 'Year', + timeSelect: 'Select time', + dateSelect: 'Select date', + monthSelect: 'Choose a month', + yearSelect: 'Choose a year', + decadeSelect: 'Choose a decade', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Previous month (PageUp)', + nextMonth: 'Next month (PageDown)', + previousYear: 'Last year (Control + left)', + nextYear: 'Next year (Control + right)', + previousDecade: 'Last decade', + nextDecade: 'Next decade', + previousCentury: 'Last century', + nextCentury: 'Next century', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/en_US.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/en_US.ts new file mode 100644 index 0000000..28d5fad --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/en_US.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'en_US', + today: 'Today', + now: 'Now', + backToToday: 'Back to today', + ok: 'Ok', + clear: 'Clear', + month: 'Month', + year: 'Year', + timeSelect: 'select time', + dateSelect: 'select date', + weekSelect: 'Choose a week', + monthSelect: 'Choose a month', + yearSelect: 'Choose a year', + decadeSelect: 'Choose a decade', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Previous month (PageUp)', + nextMonth: 'Next month (PageDown)', + previousYear: 'Last year (Control + left)', + nextYear: 'Next year (Control + right)', + previousDecade: 'Last decade', + nextDecade: 'Next decade', + previousCentury: 'Last century', + nextCentury: 'Next century', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/es_ES.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/es_ES.ts new file mode 100644 index 0000000..373db7d --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/es_ES.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'es_ES', + today: 'Hoy', + now: 'Ahora', + backToToday: 'Volver a hoy', + ok: 'Aceptar', + clear: 'Limpiar', + month: 'Mes', + year: 'Año', + timeSelect: 'Seleccionar hora', + dateSelect: 'Seleccionar fecha', + monthSelect: 'Elegir un mes', + yearSelect: 'Elegir un año', + decadeSelect: 'Elegir una década', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Mes anterior (PageUp)', + nextMonth: 'Mes siguiente (PageDown)', + previousYear: 'Año anterior (Control + left)', + nextYear: 'Año siguiente (Control + right)', + previousDecade: 'Década anterior', + nextDecade: 'Década siguiente', + previousCentury: 'Siglo anterior', + nextCentury: 'Siglo siguiente', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/es_MX.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/es_MX.ts new file mode 100644 index 0000000..db65cc8 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/es_MX.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'es_MX', + today: 'Hoy', + now: 'Ahora', + backToToday: 'Volver a hoy', + ok: 'Aceptar', + clear: 'Limpiar', + month: 'Mes', + year: 'Año', + timeSelect: 'elegir hora', + dateSelect: 'elegir fecha', + weekSelect: 'elegir semana', + monthSelect: 'Seleccionar mes', + yearSelect: 'Seleccionar año', + decadeSelect: 'Seleccionar década', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Mes anterior (PageUp)', + nextMonth: 'Mes siguiente (PageDown)', + previousYear: 'Año anterior (Control + Left)', + nextYear: 'Año siguiente (Control + Right)', + previousDecade: 'Década anterior', + nextDecade: 'Década siguiente', + previousCentury: 'Siglo anterior', + nextCentury: 'Siglo siguiente', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/et_EE.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/et_EE.ts new file mode 100644 index 0000000..19a4af5 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/et_EE.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'et_EE', + today: 'Täna', + now: 'Praegu', + backToToday: 'Tagasi tänase juurde', + ok: 'Ok', + clear: 'Tühista', + month: 'Kuu', + year: 'Aasta', + timeSelect: 'Vali aeg', + dateSelect: 'Vali kuupäev', + monthSelect: 'Vali kuu', + yearSelect: 'Vali aasta', + decadeSelect: 'Vali dekaad', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Eelmine kuu (PageUp)', + nextMonth: 'Järgmine kuu (PageDown)', + previousYear: 'Eelmine aasta (Control + left)', + nextYear: 'Järgmine aasta (Control + right)', + previousDecade: 'Eelmine dekaad', + nextDecade: 'Järgmine dekaad', + previousCentury: 'Eelmine sajand', + nextCentury: 'Järgmine sajand', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/fa_IR.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/fa_IR.ts new file mode 100644 index 0000000..f7e1af3 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/fa_IR.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'fa_IR', + today: 'امروز', + now: 'اکنون', + backToToday: 'بازگشت به روز', + ok: 'باشه', + clear: 'پاک کردن', + month: 'ماه', + year: 'سال', + timeSelect: 'انتخاب زمان', + dateSelect: 'انتخاب تاریخ', + monthSelect: 'یک ماه را انتخاب کنید', + yearSelect: 'یک سال را انتخاب کنید', + decadeSelect: 'یک دهه را انتخاب کنید', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'ماه قبل (PageUp)', + nextMonth: 'ماه بعد (PageDown)', + previousYear: 'سال قبل (Control + left)', + nextYear: 'سال بعد (Control + right)', + previousDecade: 'دهه قبل', + nextDecade: 'دهه بعد', + previousCentury: 'قرن قبل', + nextCentury: 'قرن بعد', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/fi_FI.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/fi_FI.ts new file mode 100644 index 0000000..9a02113 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/fi_FI.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'fi_FI', + today: 'Tänään', + now: 'Nyt', + backToToday: 'Tämä päivä', + ok: 'Ok', + clear: 'Tyhjennä', + month: 'Kuukausi', + year: 'Vuosi', + timeSelect: 'Valise aika', + dateSelect: 'Valitse päivä', + monthSelect: 'Valitse kuukausi', + yearSelect: 'Valitse vuosi', + decadeSelect: 'Valitse vuosikymmen', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Edellinen kuukausi (PageUp)', + nextMonth: 'Seuraava kuukausi (PageDown)', + previousYear: 'Edellinen vuosi (Control + left)', + nextYear: 'Seuraava vuosi (Control + right)', + previousDecade: 'Edellinen vuosikymmen', + nextDecade: 'Seuraava vuosikymmen', + previousCentury: 'Edellinen vuosisata', + nextCentury: 'Seuraava vuosisata', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_BE.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_BE.ts new file mode 100644 index 0000000..b398644 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_BE.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'fr_BE', + today: "Aujourd'hui", + now: 'Maintenant', + backToToday: "Aujourd'hui", + ok: 'Ok', + clear: 'Rétablir', + month: 'Mois', + year: 'Année', + timeSelect: "Sélectionner l'heure", + dateSelect: "Sélectionner l'heure", + monthSelect: 'Choisissez un mois', + yearSelect: 'Choisissez une année', + decadeSelect: 'Choisissez une décennie', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Mois précédent (PageUp)', + nextMonth: 'Mois suivant (PageDown)', + previousYear: 'Année précédente (Ctrl + gauche)', + nextYear: 'Année prochaine (Ctrl + droite)', + previousDecade: 'Décennie précédente', + nextDecade: 'Décennie suivante', + previousCentury: 'Siècle précédent', + nextCentury: 'Siècle suivant', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_CA.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_CA.ts new file mode 100644 index 0000000..8bbaf2f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_CA.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'fr_CA', + today: "Aujourd'hui", + now: 'Maintenant', + backToToday: "Aujourd'hui", + ok: 'Ok', + clear: 'Rétablir', + month: 'Mois', + year: 'Année', + timeSelect: "Sélectionner l'heure", + dateSelect: 'Sélectionner la date', + monthSelect: 'Choisissez un mois', + yearSelect: 'Choisissez une année', + decadeSelect: 'Choisissez une décennie', + yearFormat: 'YYYY', + dateFormat: 'DD/MM/YYYY', + dayFormat: 'DD', + dateTimeFormat: 'DD/MM/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Mois précédent (PageUp)', + nextMonth: 'Mois suivant (PageDown)', + previousYear: 'Année précédente (Ctrl + gauche)', + nextYear: 'Année prochaine (Ctrl + droite)', + previousDecade: 'Décennie précédente', + nextDecade: 'Décennie suivante', + previousCentury: 'Siècle précédent', + nextCentury: 'Siècle suivant', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_FR.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_FR.ts new file mode 100644 index 0000000..53239b5 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/fr_FR.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'fr_FR', + today: "Aujourd'hui", + now: 'Maintenant', + backToToday: "Aujourd'hui", + ok: 'Ok', + clear: 'Rétablir', + month: 'Mois', + year: 'Année', + timeSelect: "Sélectionner l'heure", + dateSelect: 'Sélectionner la date', + monthSelect: 'Choisissez un mois', + yearSelect: 'Choisissez une année', + decadeSelect: 'Choisissez une décennie', + yearFormat: 'YYYY', + dateFormat: 'DD/MM/YYYY', + dayFormat: 'DD', + dateTimeFormat: 'DD/MM/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Mois précédent (PageUp)', + nextMonth: 'Mois suivant (PageDown)', + previousYear: 'Année précédente (Ctrl + gauche)', + nextYear: 'Année prochaine (Ctrl + droite)', + previousDecade: 'Décennie précédente', + nextDecade: 'Décennie suivante', + previousCentury: 'Siècle précédent', + nextCentury: 'Siècle suivant', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ga_IE.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ga_IE.ts new file mode 100644 index 0000000..326a209 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ga_IE.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ga_IE', + today: 'inniu', + now: 'anois', + backToToday: 'Ar ais inniu', + ok: 'ceart go leor', + clear: 'soiléir', + month: 'mhí', + year: 'bhliain', + timeSelect: 'roghnaigh am', + dateSelect: 'roghnaigh dáta', + weekSelect: 'Roghnaigh seachtain', + monthSelect: 'Roghnaigh mí', + yearSelect: 'Roghnaigh bliain', + decadeSelect: 'Roghnaigh deich mbliana', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'An mhí roimhe seo (PageUp)', + nextMonth: 'An mhí seo chugainn (PageDown)', + previousYear: 'Anuraidh (Control + left)', + nextYear: 'An bhliain seo chugainn (Control + right)', + previousDecade: 'Le deich mbliana anuas', + nextDecade: 'Deich mbliana amach romhainn', + previousCentury: 'An chéid seo caite', + nextCentury: 'An chéad aois eile', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/gl_ES.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/gl_ES.ts new file mode 100644 index 0000000..1325876 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/gl_ES.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'gl_ES', + today: 'Hoxe', + now: 'Agora', + backToToday: 'Voltar a hoxe', + ok: 'Aceptar', + clear: 'Limpar', + month: 'Mes', + year: 'Ano', + timeSelect: 'Seleccionar hora', + dateSelect: 'Seleccionar data', + monthSelect: 'Elexir un mes', + yearSelect: 'Elexir un año', + decadeSelect: 'Elexir unha década', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Mes anterior (PageUp)', + nextMonth: 'Mes seguinte (PageDown)', + previousYear: 'Ano anterior (Control + left)', + nextYear: 'Ano seguinte (Control + right)', + previousDecade: 'Década anterior', + nextDecade: 'Década seguinte', + previousCentury: 'Século anterior', + nextCentury: 'Século seguinte', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/he_IL.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/he_IL.ts new file mode 100644 index 0000000..ea3fc8b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/he_IL.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'he_IL', + today: 'היום', + now: 'עכשיו', + backToToday: 'חזור להיום', + ok: 'אישור', + clear: 'איפוס', + month: 'חודש', + year: 'שנה', + timeSelect: 'בחר שעה', + dateSelect: 'בחר תאריך', + weekSelect: 'בחר שבוע', + monthSelect: 'בחר חודש', + yearSelect: 'בחר שנה', + decadeSelect: 'בחר עשור', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'חודש קודם (PageUp)', + nextMonth: 'חודש הבא (PageDown)', + previousYear: 'שנה שעברה (Control + left)', + nextYear: 'שנה הבאה (Control + right)', + previousDecade: 'העשור הקודם', + nextDecade: 'העשור הבא', + previousCentury: 'המאה הקודמת', + nextCentury: 'המאה הבאה', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/hi_IN.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/hi_IN.ts new file mode 100644 index 0000000..51ae229 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/hi_IN.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'hi_IN', + today: 'आज', + now: 'अभी', + backToToday: 'आज तक', + ok: 'ठीक', + clear: 'स्पष्ट', + month: 'महीना', + year: 'साल', + timeSelect: 'समय का चयन करें', + dateSelect: 'तारीख़ चुनें', + weekSelect: 'एक सप्ताह चुनें', + monthSelect: 'एक महीना चुनें', + yearSelect: 'एक वर्ष चुनें', + decadeSelect: 'एक दशक चुनें', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'पिछला महीना (पेजअप)', + nextMonth: 'अगले महीने (पेजडाउन)', + previousYear: 'पिछले साल (Ctrl + बाएं)', + nextYear: 'अगले साल (Ctrl + दाहिना)', + previousDecade: 'पिछला दशक', + nextDecade: 'अगले दशक', + previousCentury: 'पीछ्ली शताब्दी', + nextCentury: 'अगली सदी', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/hr_HR.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/hr_HR.ts new file mode 100644 index 0000000..a341396 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/hr_HR.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'hr_HR', + today: 'Danas', + now: 'Sad', + backToToday: 'Natrag na danas', + ok: 'Ok', + clear: 'Očisti', + month: 'Mjesec', + year: 'Godina', + timeSelect: 'odaberite vrijeme', + dateSelect: 'odaberite datum', + weekSelect: 'Odaberite tjedan', + monthSelect: 'Odaberite mjesec', + yearSelect: 'Odaberite godinu', + decadeSelect: 'Odaberite desetljeće', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Prošli mjesec (PageUp)', + nextMonth: 'Sljedeći mjesec (PageDown)', + previousYear: 'Prošla godina (Control + left)', + nextYear: 'Sljedeća godina (Control + right)', + previousDecade: 'Prošlo desetljeće', + nextDecade: 'Sljedeće desetljeće', + previousCentury: 'Prošlo stoljeće', + nextCentury: 'Sljedeće stoljeće', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/hu_HU.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/hu_HU.ts new file mode 100644 index 0000000..b98603d --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/hu_HU.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'hu_HU', + today: 'Ma', // 'Today', + now: 'Most', // 'Now', + backToToday: 'Vissza a mai napra', // 'Back to today', + ok: 'Ok', + clear: 'Törlés', // 'Clear', + month: 'Hónap', // 'Month', + year: 'Év', // 'Year', + timeSelect: 'Időpont kiválasztása', // 'Select time', + dateSelect: 'Dátum kiválasztása', // 'Select date', + monthSelect: 'Hónap kiválasztása', // 'Choose a month', + yearSelect: 'Év kiválasztása', // 'Choose a year', + decadeSelect: 'Évtized kiválasztása', // 'Choose a decade', + yearFormat: 'YYYY', + dateFormat: 'YYYY/MM/DD', // 'M/D/YYYY', + dayFormat: 'DD', // 'D', + dateTimeFormat: 'YYYY/MM/DD HH:mm:ss', // 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Előző hónap (PageUp)', // 'Previous month (PageUp)', + nextMonth: 'Következő hónap (PageDown)', // 'Next month (PageDown)', + previousYear: 'Múlt év (Control + left)', // 'Last year (Control + left)', + nextYear: 'Jövő év (Control + right)', // 'Next year (Control + right)', + previousDecade: 'Előző évtized', // 'Last decade', + nextDecade: 'Következő évtized', // 'Next decade', + previousCentury: 'Múlt évszázad', // 'Last century', + nextCentury: 'Jövő évszázad', // 'Next century', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/id_ID.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/id_ID.ts new file mode 100644 index 0000000..01c9d76 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/id_ID.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'id_ID', + today: 'Hari ini', + now: 'Sekarang', + backToToday: 'Kembali ke hari ini', + ok: 'Baik', + clear: 'Bersih', + month: 'Bulan', + year: 'Tahun', + timeSelect: 'pilih waktu', + dateSelect: 'pilih tanggal', + weekSelect: 'Pilih satu minggu', + monthSelect: 'Pilih satu bulan', + yearSelect: 'Pilih satu tahun', + decadeSelect: 'Pilih satu dekade', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Bulan sebelumnya (PageUp)', + nextMonth: 'Bulan selanjutnya (PageDown)', + previousYear: 'Tahun lalu (Control + kiri)', + nextYear: 'Tahun selanjutnya (Kontrol + kanan)', + previousDecade: 'Dekade terakhir', + nextDecade: 'Dekade berikutnya', + previousCentury: 'Abad terakhir', + nextCentury: 'Abad berikutnya', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/is_IS.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/is_IS.ts new file mode 100644 index 0000000..efea367 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/is_IS.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'is_IS', + today: 'Í dag', + now: 'Núna', + backToToday: 'Til baka til dagsins í dag', + ok: 'Í lagi', + clear: 'Hreinsa', + month: 'Mánuður', + year: 'Ár', + timeSelect: 'Velja tíma', + dateSelect: 'Velja dag', + monthSelect: 'Velja mánuð', + yearSelect: 'Velja ár', + decadeSelect: 'Velja áratug', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Fyrri mánuður (PageUp)', + nextMonth: 'Næsti mánuður (PageDown)', + previousYear: 'Fyrra ár (Control + left)', + nextYear: 'Næsta ár (Control + right)', + previousDecade: 'Fyrri áratugur', + nextDecade: 'Næsti áratugur', + previousCentury: 'Fyrri öld', + nextCentury: 'Næsta öld', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/it_IT.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/it_IT.ts new file mode 100644 index 0000000..3b69a9f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/it_IT.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'it_IT', + today: 'Oggi', + now: 'Adesso', + backToToday: 'Torna ad oggi', + ok: 'Ok', + clear: 'Cancella', + month: 'Mese', + year: 'Anno', + timeSelect: "Seleziona l'ora", + dateSelect: 'Seleziona la data', + monthSelect: 'Seleziona il mese', + yearSelect: "Seleziona l'anno", + decadeSelect: 'Seleziona il decennio', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Il mese scorso (PageUp)', + nextMonth: 'Il prossimo mese (PageDown)', + previousYear: "L'anno scorso (Control + sinistra)", + nextYear: "L'anno prossimo (Control + destra)", + previousDecade: 'Ultimo decennio', + nextDecade: 'Prossimo decennio', + previousCentury: 'Secolo precedente', + nextCentury: 'Prossimo secolo', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ja_JP.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ja_JP.ts new file mode 100644 index 0000000..f4d3985 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ja_JP.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ja_JP', + today: '今日', + now: '現在時刻', + backToToday: '今日に戻る', + ok: '決定', + timeSelect: '時間を選択', + dateSelect: '日時を選択', + weekSelect: '週を選択', + clear: 'クリア', + month: '月', + year: '年', + previousMonth: '前月 (ページアップキー)', + nextMonth: '翌月 (ページダウンキー)', + monthSelect: '月を選択', + yearSelect: '年を選択', + decadeSelect: '年代を選択', + yearFormat: 'YYYY年', + dayFormat: 'D日', + dateFormat: 'YYYY年M月D日', + dateTimeFormat: 'YYYY年M月D日 HH時mm分ss秒', + previousYear: '前年 (Controlを押しながら左キー)', + nextYear: '翌年 (Controlを押しながら右キー)', + previousDecade: '前の年代', + nextDecade: '次の年代', + previousCentury: '前の世紀', + nextCentury: '次の世紀', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ka_GE.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ka_GE.ts new file mode 100644 index 0000000..6442ca1 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ka_GE.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ka_GE', + today: 'დღეს', + now: 'ახლა', + backToToday: 'მიმდინარე თარიღი', + ok: 'Ok', + clear: 'გასუფთავება', + month: 'თვე', + year: 'წელი', + timeSelect: 'დროის არჩევა', + dateSelect: 'თარიღის არჩევა', + weekSelect: 'კვირის არჩევა', + monthSelect: 'თვის არჩევა', + yearSelect: 'წლის არჩევა', + decadeSelect: 'ათწლეულის არჩევა', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'წინა თვე (PageUp)', + nextMonth: 'მომდევნო თვე (PageDown)', + previousYear: 'წინა წელი (Control + left)', + nextYear: 'მომდევნო წელი (Control + right)', + previousDecade: 'წინა ათწლეული', + nextDecade: 'მომდევნო ათწლეული', + previousCentury: 'გასული საუკუნე', + nextCentury: 'მომდევნო საუკუნე', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/kk_KZ.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/kk_KZ.ts new file mode 100644 index 0000000..f3b6787 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/kk_KZ.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'kk_KZ', + today: 'Бүгін', + now: 'Қазір', + backToToday: 'Ағымдағы күн', + ok: 'Таңдау', + clear: 'Таза', + month: 'Ай', + year: 'Жыл', + timeSelect: 'Уақытты таңдау', + dateSelect: 'Күнді таңдау', + monthSelect: 'Айды таңдаңыз', + yearSelect: 'Жылды таңдаңыз', + decadeSelect: 'Онжылды таңдаңыз', + yearFormat: 'YYYY', + dateFormat: 'D-M-YYYY', + dayFormat: 'D', + dateTimeFormat: 'D-M-YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Алдыңғы ай (PageUp)', + nextMonth: 'Келесі ай (PageDown)', + previousYear: 'Алдыңғы жыл (Control + left)', + nextYear: 'Келесі жыл (Control + right)', + previousDecade: 'Алдыңғы онжылдық', + nextDecade: 'Келесі онжылдық', + previousCentury: 'Алдыңғы ғасыр', + nextCentury: 'Келесі ғасыр', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/km_KH.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/km_KH.ts new file mode 100644 index 0000000..2edb5da --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/km_KH.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'km', + today: 'ថ្ងៃនេះ', + now: 'ឥឡូវ​នេះ', + backToToday: 'ត្រលប់ទៅថ្ងៃនេះ', + ok: 'កំណត់', + timeSelect: 'រយៈពេលជ្រើសរើស', + dateSelect: 'ជ្រើសរើសកាលបរិច្ឆេទ', + weekSelect: 'ជ្រើសរើសសប្តាហ៍', + clear: 'ច្បាស់', + month: 'ខែ', + year: 'ឆ្នាំ', + previousMonth: 'ខែមុន (ឡើងទំព័រ)', + nextMonth: 'ខែបន្ទាប់ (ប៊ូតុងចុះទំព័រ)', + monthSelect: 'ជ្រើសរើសខែ', + yearSelect: 'ជ្រើសរើសឆ្នាំ', + decadeSelect: 'ជ្រើសរើសអាយុ', + yearFormat: 'YYYY', + dayFormat: 'D', + dateFormat: 'YYYY-M-D', + dateTimeFormat: 'YYYY-M-D HH:mm:ss', + previousYear: 'ឆ្នាំមុន (Controlគ្រាប់ចុចបូកព្រួញខាងឆ្វេង)', + nextYear: 'ឆ្នាំក្រោយ (Control គ្រាប់ចុចបូកព្រួញស្ដាំ)', + previousDecade: 'ជំនាន់ចុងក្រោយ', + nextDecade: 'ជំនាន់​ក្រោយ', + previousCentury: 'សតវត្សចុងក្រោយ', + nextCentury: 'សតវត្សរ៍បន្ទាប់', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/kmr_IQ.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/kmr_IQ.ts new file mode 100644 index 0000000..867ec68 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/kmr_IQ.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ku', + today: 'Îro', + now: 'Niha', + backToToday: 'Vegere îro', + ok: 'Temam', + clear: 'Paqij bike', + month: 'Meh', + year: 'Sal', + timeSelect: 'Demê hilbijêre', + dateSelect: 'Dîrok hilbijêre', + monthSelect: 'Meh hilbijêre', + yearSelect: 'Sal hilbijêre', + decadeSelect: 'Dehsal hilbijêre', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Meha peş (PageUp))', + nextMonth: 'Meha paş (PageDown)', + previousYear: 'Sala peş (Control + şep)', + nextYear: 'Sala paş (Control + rast)', + previousDecade: 'Dehsalen peş', + nextDecade: 'Dehsalen paş', + previousCentury: 'Sedsalen peş', + nextCentury: 'Sedsalen paş', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/kn_IN.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/kn_IN.ts new file mode 100644 index 0000000..1731ebd --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/kn_IN.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'kn_IN', + today: 'ಇಂದು', + now: 'ಈಗ', + backToToday: 'ಇಂದು ಹಿಂದಿರುಗಿ', + ok: 'ಸರಿ', + clear: 'ಸ್ಪಷ್ಟ', + month: 'ತಿಂಗಳು', + year: 'ವರ್ಷ', + timeSelect: 'ಸಮಯ ಆಯ್ಕೆಮಾಡಿ', + dateSelect: 'ದಿನಾಂಕವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ', + weekSelect: 'ಒಂದು ವಾರದ ಆರಿಸಿ', + monthSelect: 'ಒಂದು ತಿಂಗಳು ಆಯ್ಕೆಮಾಡಿ', + yearSelect: 'ಒಂದು ವರ್ಷ ಆರಿಸಿ', + decadeSelect: 'ಒಂದು ದಶಕದ ಆಯ್ಕೆಮಾಡಿ', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'ಹಿಂದಿನ ತಿಂಗಳು (ಪೇಜ್ಅಪ್)', + nextMonth: 'ಮುಂದಿನ ತಿಂಗಳು (ಪೇಜ್ಡೌನ್)', + previousYear: 'ಕಳೆದ ವರ್ಷ (Ctrl + ಎಡ)', + nextYear: 'ಮುಂದಿನ ವರ್ಷ (Ctrl + ಬಲ)', + previousDecade: 'ಕಳೆದ ದಶಕ', + nextDecade: 'ಮುಂದಿನ ದಶಕ', + previousCentury: 'ಕಳೆದ ಶತಮಾನ', + nextCentury: 'ಮುಂದಿನ ಶತಮಾನ', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ko_KR.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ko_KR.ts new file mode 100644 index 0000000..6f8416c --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ko_KR.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ko_KR', + today: '오늘', + now: '현재 시각', + backToToday: '오늘로 돌아가기', + ok: '확인', + clear: '지우기', + month: '월', + year: '년', + timeSelect: '시간 선택', + dateSelect: '날짜 선택', + monthSelect: '달 선택', + yearSelect: '연 선택', + decadeSelect: '연대 선택', + yearFormat: 'YYYY년', + dateFormat: 'YYYY-MM-DD', + dayFormat: 'Do', + dateTimeFormat: 'YYYY-MM-DD HH:mm:ss', + monthBeforeYear: false, + previousMonth: '이전 달 (PageUp)', + nextMonth: '다음 달 (PageDown)', + previousYear: '이전 해 (Control + left)', + nextYear: '다음 해 (Control + right)', + previousDecade: '이전 연대', + nextDecade: '다음 연대', + previousCentury: '이전 세기', + nextCentury: '다음 세기', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/lt_LT.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/lt_LT.ts new file mode 100644 index 0000000..2ddb658 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/lt_LT.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'lt_LT', + today: 'Šiandien', + now: 'Dabar', + backToToday: 'Rodyti šiandien', + ok: 'Gerai', + clear: 'Išvalyti', + month: 'Mėnesis', + year: 'Metai', + timeSelect: 'Pasirinkti laiką', + dateSelect: 'Pasirinkti datą', + monthSelect: 'Pasirinkti mėnesį', + yearSelect: 'Pasirinkti metus', + decadeSelect: 'Pasirinkti dešimtmetį', + yearFormat: 'YYYY', + dateFormat: 'YYYY-MM-DD', + dayFormat: 'DD', + dateTimeFormat: 'YYYY-MM-DD HH:MM:SS', + monthBeforeYear: true, + previousMonth: 'Buvęs mėnesis (PageUp)', + nextMonth: 'Sekantis mėnesis (PageDown)', + previousYear: 'Buvę metai (Control + left)', + nextYear: 'Sekantis metai (Control + right)', + previousDecade: 'Buvęs dešimtmetis', + nextDecade: 'Sekantis dešimtmetis', + previousCentury: 'Buvęs amžius', + nextCentury: 'Sekantis amžius', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/lv_LV.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/lv_LV.ts new file mode 100644 index 0000000..0529ff6 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/lv_LV.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'lv_LV', + today: 'Šodien', + now: 'Tagad', + backToToday: 'Atpakaļ pie šodienas', + ok: 'Ok', + clear: 'Skaidrs', + month: 'Mēnesis', + year: 'Gads', + timeSelect: 'Izvēlieties laiku', + dateSelect: 'Izvēlieties datumu', + monthSelect: 'Izvēlieties mēnesi', + yearSelect: 'Izvēlieties gadu', + decadeSelect: 'Izvēlieties desmit gadus', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Iepriekšējais mēnesis (PageUp)', + nextMonth: 'Nākammēnes (PageDown)', + previousYear: 'Pagājušais gads (Control + left)', + nextYear: 'Nākamgad (Control + right)', + previousDecade: 'Pēdējā desmitgadē', + nextDecade: 'Nākamā desmitgade', + previousCentury: 'Pagājušajā gadsimtā', + nextCentury: 'Nākamajā gadsimtā', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/mk_MK.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/mk_MK.ts new file mode 100644 index 0000000..d1dd459 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/mk_MK.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'mk_MK', + today: 'Денес', + now: 'Сега', + backToToday: 'Назад до денес', + ok: 'ОК', + clear: 'Избриши', + month: 'Месец', + year: 'Година', + timeSelect: 'Избери време', + dateSelect: 'Избери датум', + monthSelect: 'Избери месец', + yearSelect: 'Избери година', + decadeSelect: 'Избери деценија', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Претходен месец (PageUp)', + nextMonth: 'Нареден месец (PageDown)', + previousYear: 'Претходна година (Control + left)', + nextYear: 'Наредна година (Control + right)', + previousDecade: 'Претходна деценија', + nextDecade: 'Наредна деценија', + previousCentury: 'Претходен век', + nextCentury: 'Нареден век', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ml_IN.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ml_IN.ts new file mode 100644 index 0000000..5c7b513 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ml_IN.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ml_IN', + today: 'ഇന്ന്', + now: 'ഇപ്പോൾ', + backToToday: 'ഇന്നത്തെ ദിവസത്തിലേക്ക് തിരിച്ചു പോകുക', + ok: 'ശരിയാണ്', + clear: 'നീക്കം ചെയ്യുക', + month: 'മാസം', + year: 'വർഷം', + timeSelect: 'സമയം തിരഞ്ഞെടുക്കുക', + dateSelect: 'ദിവസം തിരഞ്ഞെടുക്കുക', + weekSelect: 'വാരം തിരഞ്ഞെടുക്കുക', + monthSelect: 'മാസം തിരഞ്ഞെടുക്കുക', + yearSelect: 'വർഷം തിരഞ്ഞെടുക്കുക', + decadeSelect: 'ദശാബ്ദം തിരഞ്ഞെടുക്കുക', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'കഴിഞ്ഞ മാസം (PageUp)', + nextMonth: 'അടുത്ത മാസം (PageDown)', + previousYear: 'കഴിഞ്ഞ വർഷം (Control + left)', + nextYear: 'അടുത്ത വർഷം (Control + right)', + previousDecade: 'കഴിഞ്ഞ ദശാബ്ദം', + nextDecade: 'അടുത്ത ദശാബ്ദം', + previousCentury: 'കഴിഞ്ഞ നൂറ്റാണ്ട്', + nextCentury: 'അടുത്ത നൂറ്റാണ്ട്', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/mm_MM.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/mm_MM.ts new file mode 100644 index 0000000..b6a8241 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/mm_MM.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'mm_MM', + today: 'ယနေ့', + now: 'ယခု', + backToToday: 'ယနေ့ မတိုင်ခင် သို့', + ok: 'Ok', + clear: 'ရှင်းမည်', + month: 'လ', + year: 'နှစ်', + timeSelect: 'အချိန်ကို ရွေး', + dateSelect: 'နေ့ကို ရွေး', + weekSelect: 'အပတ်ကို ရွေး', + monthSelect: 'လကို ရွေး', + yearSelect: 'နှစ်ကို ရွေး', + decadeSelect: 'ဆယ်စုနှစ်ကို ရွေး', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'ယခင် လ (PageUp)', + nextMonth: 'နောက် လ (PageDown)', + previousYear: 'ယခင် နှစ် (Control + left)', + nextYear: 'နောက် နှစ် (Control + right)', + previousDecade: 'ယခင် ဆယ်စုနှစ်', + nextDecade: 'နောက် ဆယ်စုနှစ်', + previousCentury: 'ယခင် ရာစုနှစ်', + nextCentury: 'နောက် ရာစုနှစ်', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/mn_MN.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/mn_MN.ts new file mode 100644 index 0000000..3b9e2ef --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/mn_MN.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'mn_MN', + today: 'Өнөөдөр', + now: 'Одоо', + backToToday: 'Өнөөдөрлүү буцах', + ok: 'Ok', + clear: 'Цэвэрлэх', + month: 'Сар', + year: 'Жил', + timeSelect: 'Цаг сонгох', + dateSelect: 'Огноо сонгох', + weekSelect: '7 хоног сонгох', + monthSelect: 'Сар сонгох', + yearSelect: 'Жил сонгох', + decadeSelect: 'Арван сонгох', + yearFormat: 'YYYY', + dateFormat: 'YYYY/MM/DD', + dayFormat: 'DD', + dateTimeFormat: 'YYYY/MM/DD HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Өмнөх сар (PageUp)', + nextMonth: 'Дараа сар (PageDown)', + previousYear: 'Өмнөх жил (Control + left)', + nextYear: 'Дараа жил (Control + right)', + previousDecade: 'Өмнөх арван', + nextDecade: 'Дараа арван', + previousCentury: 'Өмнөх зуун', + nextCentury: 'Дараа зуун', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ms_MY.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ms_MY.ts new file mode 100644 index 0000000..1e3784c --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ms_MY.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ms_MY', + today: 'Hari ini', + now: 'Sekarang', + backToToday: 'Kembali ke hari ini', + ok: 'Ok', + timeSelect: 'Pilih masa', + dateSelect: 'Pilih tarikh', + weekSelect: 'Pilih minggu', + clear: 'Padam', + month: 'Bulan', + year: 'Tahun', + previousMonth: 'Bulan lepas', + nextMonth: 'Bulan depan', + monthSelect: 'Pilih bulan', + yearSelect: 'Pilih tahun', + decadeSelect: 'Pilih dekad', + yearFormat: 'YYYY', + dayFormat: 'D', + dateFormat: 'M/D/YYYY', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + previousYear: 'Tahun lepas (Ctrl+left)', + nextYear: 'Tahun depan (Ctrl+right)', + previousDecade: 'Dekad lepas', + nextDecade: 'Dekad depan', + previousCentury: 'Abad lepas', + nextCentury: 'Abad depan', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/nb_NO.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/nb_NO.ts new file mode 100644 index 0000000..a2ce4ea --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/nb_NO.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'nb_NO', + today: 'I dag', + now: 'Nå', + backToToday: 'Gå til i dag', + ok: 'Ok', + clear: 'Annuller', + month: 'Måned', + year: 'År', + timeSelect: 'Velg tidspunkt', + dateSelect: 'Velg dato', + weekSelect: 'Velg uke', + monthSelect: 'Velg måned', + yearSelect: 'Velg år', + decadeSelect: 'Velg tiår', + yearFormat: 'YYYY', + dateFormat: 'DD.MM.YYYY', + dayFormat: 'DD', + dateTimeFormat: 'DD.MM.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Forrige måned (PageUp)', + nextMonth: 'Neste måned (PageDown)', + previousYear: 'Forrige år (Control + venstre)', + nextYear: 'Neste år (Control + høyre)', + previousDecade: 'Forrige tiår', + nextDecade: 'Neste tiår', + previousCentury: 'Forrige århundre', + nextCentury: 'Neste århundre', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/nl_BE.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/nl_BE.ts new file mode 100644 index 0000000..e78fef0 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/nl_BE.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'nl_BE', + today: 'Vandaag', + now: 'Nu', + backToToday: 'Terug naar vandaag', + ok: 'Ok', + clear: 'Reset', + month: 'Maand', + year: 'Jaar', + timeSelect: 'Selecteer tijd', + dateSelect: 'Selecteer datum', + monthSelect: 'Kies een maand', + yearSelect: 'Kies een jaar', + decadeSelect: 'Kies een decennium', + yearFormat: 'YYYY', + dateFormat: 'D-M-YYYY', + dayFormat: 'D', + dateTimeFormat: 'D-M-YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Vorige maand (PageUp)', + nextMonth: 'Volgende maand (PageDown)', + previousYear: 'Vorig jaar (Control + left)', + nextYear: 'Volgend jaar (Control + right)', + previousDecade: 'Vorig decennium', + nextDecade: 'Volgend decennium', + previousCentury: 'Vorige eeuw', + nextCentury: 'Volgende eeuw', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/nl_NL.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/nl_NL.ts new file mode 100644 index 0000000..cb33549 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/nl_NL.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'nl_NL', + today: 'Vandaag', + now: 'Nu', + backToToday: 'Terug naar vandaag', + ok: 'Ok', + clear: 'Reset', + month: 'Maand', + year: 'Jaar', + timeSelect: 'Selecteer tijd', + dateSelect: 'Selecteer datum', + monthSelect: 'Kies een maand', + yearSelect: 'Kies een jaar', + decadeSelect: 'Kies een decennium', + yearFormat: 'YYYY', + dateFormat: 'D-M-YYYY', + dayFormat: 'D', + dateTimeFormat: 'D-M-YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Vorige maand (PageUp)', + nextMonth: 'Volgende maand (PageDown)', + previousYear: 'Vorig jaar (Control + left)', + nextYear: 'Volgend jaar (Control + right)', + previousDecade: 'Vorig decennium', + nextDecade: 'Volgend decennium', + previousCentury: 'Vorige eeuw', + nextCentury: 'Volgende eeuw', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/pl_PL.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/pl_PL.ts new file mode 100644 index 0000000..d37f20f --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/pl_PL.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'pl_PL', + today: 'Dzisiaj', + now: 'Teraz', + backToToday: 'Ustaw dzisiaj', + ok: 'Ok', + clear: 'Wyczyść', + month: 'Miesiąc', + year: 'Rok', + timeSelect: 'Ustaw czas', + dateSelect: 'Ustaw datę', + monthSelect: 'Wybierz miesiąc', + yearSelect: 'Wybierz rok', + decadeSelect: 'Wybierz dekadę', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Poprzedni miesiąc (PageUp)', + nextMonth: 'Następny miesiąc (PageDown)', + previousYear: 'Ostatni rok (Ctrl + left)', + nextYear: 'Następny rok (Ctrl + right)', + previousDecade: 'Ostatnia dekada', + nextDecade: 'Następna dekada', + previousCentury: 'Ostatni wiek', + nextCentury: 'Następny wiek', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/pt_BR.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/pt_BR.ts new file mode 100644 index 0000000..a6ca2af --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/pt_BR.ts @@ -0,0 +1,34 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'pt_BR', + today: 'Hoje', + now: 'Agora', + backToToday: 'Voltar para hoje', + ok: 'Ok', + clear: 'Limpar', + month: 'Mês', + year: 'Ano', + timeSelect: 'Selecionar hora', + dateSelect: 'Selecionar data', + monthSelect: 'Escolher mês', + yearSelect: 'Escolher ano', + decadeSelect: 'Escolher década', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: false, + previousMonth: 'Mês anterior (PageUp)', + nextMonth: 'Próximo mês (PageDown)', + previousYear: 'Ano anterior (Control + esquerda)', + nextYear: 'Próximo ano (Control + direita)', + previousDecade: 'Década anterior', + nextDecade: 'Próxima década', + previousCentury: 'Século anterior', + nextCentury: 'Próximo século', + shortWeekDays: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'], + shortMonths: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'], +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/pt_PT.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/pt_PT.ts new file mode 100644 index 0000000..3c3c642 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/pt_PT.ts @@ -0,0 +1,34 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'pt_PT', + today: 'Hoje', + now: 'Agora', + backToToday: 'Hoje', + ok: 'Ok', + clear: 'Limpar', + month: 'Mês', + year: 'Ano', + timeSelect: 'Selecionar hora', + dateSelect: 'Selecionar data', + monthSelect: 'Selecionar mês', + yearSelect: 'Selecionar ano', + decadeSelect: 'Selecionar década', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Mês anterior (PageUp)', + nextMonth: 'Mês seguinte (PageDown)', + previousYear: 'Ano anterior (Control + left)', + nextYear: 'Ano seguinte (Control + right)', + previousDecade: 'Década anterior', + nextDecade: 'Década seguinte', + previousCentury: 'Século anterior', + nextCentury: 'Século seguinte', + shortWeekDays: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'], + shortMonths: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'], +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ro_RO.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ro_RO.ts new file mode 100644 index 0000000..7994b7b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ro_RO.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ro_RO', + today: 'Azi', + now: 'Acum', + backToToday: 'Înapoi la azi', + ok: 'Ok', + clear: 'Șterge', + month: 'Lună', + year: 'An', + timeSelect: 'selectează timpul', + dateSelect: 'selectează data', + weekSelect: 'Alege o săptămână', + monthSelect: 'Alege o lună', + yearSelect: 'Alege un an', + decadeSelect: 'Alege un deceniu', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Luna anterioară (PageUp)', + nextMonth: 'Luna următoare (PageDown)', + previousYear: 'Anul anterior (Control + stânga)', + nextYear: 'Anul următor (Control + dreapta)', + previousDecade: 'Deceniul anterior', + nextDecade: 'Deceniul următor', + previousCentury: 'Secolul anterior', + nextCentury: 'Secolul următor', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ru_RU.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ru_RU.ts new file mode 100644 index 0000000..a93224c --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ru_RU.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ru_RU', + today: 'Сегодня', + now: 'Сейчас', + backToToday: 'Текущая дата', + ok: 'ОК', + clear: 'Очистить', + month: 'Месяц', + year: 'Год', + timeSelect: 'Выбрать время', + dateSelect: 'Выбрать дату', + monthSelect: 'Выбрать месяц', + yearSelect: 'Выбрать год', + decadeSelect: 'Выбрать десятилетие', + yearFormat: 'YYYY', + dateFormat: 'D-M-YYYY', + dayFormat: 'D', + dateTimeFormat: 'D-M-YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Предыдущий месяц (PageUp)', + nextMonth: 'Следующий месяц (PageDown)', + previousYear: 'Предыдущий год (Control + left)', + nextYear: 'Следующий год (Control + right)', + previousDecade: 'Предыдущее десятилетие', + nextDecade: 'Следущее десятилетие', + previousCentury: 'Предыдущий век', + nextCentury: 'Следующий век', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/sk_SK.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/sk_SK.ts new file mode 100644 index 0000000..997f55e --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/sk_SK.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'sk_SK', + today: 'Dnes', + now: 'Teraz', + backToToday: 'Späť na dnes', + ok: 'Ok', + clear: 'Vymazať', + month: 'Mesiac', + year: 'Rok', + timeSelect: 'Vybrať čas', + dateSelect: 'Vybrať dátum', + monthSelect: 'Vybrať mesiac', + yearSelect: 'Vybrať rok', + decadeSelect: 'Vybrať dekádu', + yearFormat: 'YYYY', + dateFormat: 'D.M.YYYY', + dayFormat: 'D', + dateTimeFormat: 'D.M.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Predchádzajúci mesiac (PageUp)', + nextMonth: 'Nasledujúci mesiac (PageDown)', + previousYear: 'Predchádzajúci rok (Control + left)', + nextYear: 'Nasledujúci rok (Control + right)', + previousDecade: 'Predchádzajúca dekáda', + nextDecade: 'Nasledujúca dekáda', + previousCentury: 'Predchádzajúce storočie', + nextCentury: 'Nasledujúce storočie', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/sl_SI.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/sl_SI.ts new file mode 100644 index 0000000..4af0184 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/sl_SI.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'sl_SI', + today: 'Danes', + now: 'Trenutno', + backToToday: 'Nazaj na danes', + ok: 'V redu', + clear: 'Počisti', + month: 'Mesec', + year: 'Leto', + timeSelect: 'Izberite čas', + dateSelect: 'Izberite datum', + monthSelect: 'Izberite mesec', + yearSelect: 'Izberite leto', + decadeSelect: 'Izberite desetletje', + yearFormat: 'YYYY', + dateFormat: 'DD.MM.YYYY', + dayFormat: 'D', + dateTimeFormat: 'DD.MM.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Prejšnji mesec (PageUp)', + nextMonth: 'Naslednji mesec (PageDown)', + previousYear: 'Prejšnje leto (Control + left)', + nextYear: 'Naslednje leto (Control + right)', + previousDecade: 'Prejšnje desetletje', + nextDecade: 'Naslednje desetletje', + previousCentury: 'Prejšnje stoletje', + nextCentury: 'Naslednje stoletje', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/sr_RS.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/sr_RS.ts new file mode 100644 index 0000000..d77eb97 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/sr_RS.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'sr_RS', + today: 'Danas', + now: 'Sada', + backToToday: 'Vrati se na danas', + ok: 'U redu', + clear: 'Obriši', + month: 'Mesec', + year: 'Godina', + timeSelect: 'Izaberi vreme', + dateSelect: 'Izaberi datum', + monthSelect: 'Izaberi mesec', + yearSelect: 'Izaberi godinu', + decadeSelect: 'Izaberi deceniju', + yearFormat: 'YYYY', + dateFormat: 'DD.MM.YYYY', + dayFormat: 'D', + dateTimeFormat: 'DD.MM.YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Prethodni mesec (PageUp)', + nextMonth: 'Sledeći mesec (PageDown)', + previousYear: 'Prethodna godina (Control + left)', + nextYear: 'Sledeća godina (Control + right)', + previousDecade: 'Prethodna decenija', + nextDecade: 'Sledeća decenija', + previousCentury: 'Prethodni vek', + nextCentury: 'Sledeći vek', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/sv_SE.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/sv_SE.ts new file mode 100644 index 0000000..c42c29c --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/sv_SE.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'sv_SE', + today: 'I dag', + now: 'Nu', + backToToday: 'Till idag', + ok: 'Ok', + clear: 'Avbryt', + month: 'Månad', + year: 'År', + timeSelect: 'Välj tidpunkt', + dateSelect: 'Välj datum', + monthSelect: 'Välj månad', + yearSelect: 'Välj år', + decadeSelect: 'Välj årtionde', + yearFormat: 'YYYY', + dateFormat: 'YYYY-MM-DD', + dayFormat: 'D', + dateTimeFormat: 'YYYY-MM-DD H:mm:ss', + monthBeforeYear: true, + previousMonth: 'Förra månaden (PageUp)', + nextMonth: 'Nästa månad (PageDown)', + previousYear: 'Föreg år (Control + left)', + nextYear: 'Nästa år (Control + right)', + previousDecade: 'Föreg årtionde', + nextDecade: 'Nästa årtionde', + previousCentury: 'Föreg århundrade', + nextCentury: 'Nästa århundrade', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ta_IN.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ta_IN.ts new file mode 100644 index 0000000..7f0e305 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ta_IN.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ta_IN', + today: 'இன்று', + now: 'இப்போது', + backToToday: 'இன்றுக்கு திரும்பு', + ok: 'சரி', + clear: 'அழி', + month: 'மாதம்', + year: 'வருடம்', + timeSelect: 'நேரத்தைத் தேர்ந்தெடு', + dateSelect: 'தேதியைத் தேர்ந்தெடு', + weekSelect: 'வாரத்தைத் தேர்வுசெய்க', + monthSelect: 'மாதத்தைத் தேர்வுசெய்க', + yearSelect: 'வருடத்தைத் தேர்வுசெய்க', + decadeSelect: 'தசாப்தத்தைத் தேர்வுசெய்க', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'முந்தைய மாதம் (PageUp)', + nextMonth: 'அடுத்த மாதம் (PageDown)', + previousYear: 'முந்தைய வருடம் (Control + left)', + nextYear: 'அடுத்த வருடம் (Control + right)', + previousDecade: 'முந்தைய தசாப்தம்', + nextDecade: 'அடுத்த தசாப்தம்', + previousCentury: 'முந்தைய நூற்றாண்டு', + nextCentury: 'அடுத்த நூற்றாண்டு', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/th_TH.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/th_TH.ts new file mode 100644 index 0000000..bcc1c42 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/th_TH.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'th_TH', + today: 'วันนี้', + now: 'ตอนนี้', + backToToday: 'กลับไปยังวันนี้', + ok: 'ตกลง', + clear: 'ลบล้าง', + month: 'เดือน', + year: 'ปี', + timeSelect: 'เลือกเวลา', + dateSelect: 'เลือกวัน', + monthSelect: 'เลือกเดือน', + yearSelect: 'เลือกปี', + decadeSelect: 'เลือกทศวรรษ', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'เดือนก่อนหน้า (PageUp)', + nextMonth: 'เดือนถัดไป (PageDown)', + previousYear: 'ปีก่อนหน้า (Control + left)', + nextYear: 'ปีถัดไป (Control + right)', + previousDecade: 'ทศวรรษก่อนหน้า', + nextDecade: 'ทศวรรษถัดไป', + previousCentury: 'ศตวรรษก่อนหน้า', + nextCentury: 'ศตวรรษถัดไป', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/tr_TR.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/tr_TR.ts new file mode 100644 index 0000000..f2f1054 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/tr_TR.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'tr_TR', + today: 'Bugün', + now: 'Şimdi', + backToToday: 'Bugüne Geri Dön', + ok: 'tamam', + clear: 'Temizle', + month: 'Ay', + year: 'Yıl', + timeSelect: 'Zaman Seç', + dateSelect: 'Tarih Seç', + monthSelect: 'Ay Seç', + yearSelect: 'Yıl Seç', + decadeSelect: 'On Yıl Seç', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Önceki Ay (PageUp)', + nextMonth: 'Sonraki Ay (PageDown)', + previousYear: 'Önceki Yıl (Control + Sol)', + nextYear: 'Sonraki Yıl (Control + Sağ)', + previousDecade: 'Önceki On Yıl', + nextDecade: 'Sonraki On Yıl', + previousCentury: 'Önceki Yüzyıl', + nextCentury: 'Sonraki Yüzyıl', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ug_CN.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ug_CN.ts new file mode 100644 index 0000000..4e02416 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ug_CN.ts @@ -0,0 +1,31 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ug_CN', + today: 'بۈگۈن', + now: 'ھازىر', + backToToday: 'بۈگۈنگە قايتىش', + ok: 'مۇقىملاشتۇرۇش', + timeSelect: 'ۋاقىت تاللاش', + dateSelect: 'كۈن تاللاش', + clear: 'تازىلاش', + month: 'ئاي', + year: 'يىل', + previousMonth: 'ئالدىنقى ئاي(ئالدىنقى بەت )', + nextMonth: 'كېلەركى ئاي (كېلەركى بەت)', + monthSelect: 'ئاي تاللاش', + yearSelect: 'يىل تاللاش', + decadeSelect: 'يىللارنى تاللاش', + yearFormat: 'YYYY-يىلى', + dayFormat: 'D-كۈنى', + dateFormat: 'YYYY-يىلىM-ئاينىڭD-كۈنى', + dateTimeFormat: 'YYYY-يىلىM—ئاينىڭD-كۈنى، HH:mm:ss', + previousYear: 'ئالدىنقى يىلى (Controlبىلەن يۆنىلىش كونۇپكىسى)', + nextYear: 'كېلەركى يىلى (Controlبىلەن يۆنىلىش كونۇپكىسى)', + previousDecade: 'ئالدىنقى يىللار', + nextDecade: 'كېيىنكى يىللار', + previousCentury: 'ئالدىنقى ئەسىر', + nextCentury: 'كېيىنكى ئەسىر', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/uk_UA.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/uk_UA.ts new file mode 100644 index 0000000..eb56087 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/uk_UA.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'uk_UA', + today: 'Сьогодні', + now: 'Зараз', + backToToday: 'Поточна дата', + ok: 'Ok', + clear: 'Очистити', + month: 'Місяць', + year: 'Рік', + timeSelect: 'Обрати час', + dateSelect: 'Обрати дату', + monthSelect: 'Обрати місяць', + yearSelect: 'Обрати рік', + decadeSelect: 'Обрати десятиріччя', + yearFormat: 'YYYY', + dateFormat: 'D-M-YYYY', + dayFormat: 'D', + dateTimeFormat: 'D-M-YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Попередній місяць (PageUp)', + nextMonth: 'Наступний місяць (PageDown)', + previousYear: 'Попередній рік (Control + left)', + nextYear: 'Наступний рік (Control + right)', + previousDecade: 'Попереднє десятиріччя', + nextDecade: 'Наступне десятиріччя', + previousCentury: 'Попереднє століття', + nextCentury: 'Наступне століття', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/ur_PK.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/ur_PK.ts new file mode 100644 index 0000000..d272adb --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/ur_PK.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'ur_PK', + today: 'آج', + now: 'ابھی', + backToToday: 'آج واپس', + ok: 'ٹھیک ہے', + clear: 'صاف', + month: 'مہینہ', + year: 'سال', + timeSelect: 'وقت منتخب کریں', + dateSelect: 'تاریخ منتخب کریں', + weekSelect: 'ایک ہفتہ کا انتخاب کریں', + monthSelect: 'ایک مہینہ کا انتخاب کریں', + yearSelect: 'ایک سال کا انتخاب کریں', + decadeSelect: 'ایک دہائی کا انتخاب کریں', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'پچھلے مہینے (PageUp)', + nextMonth: 'اگلے مہینے (PageDown)', + previousYear: 'گزشتہ سال (Control + left)', + nextYear: 'اگلے سال (Control + right)', + previousDecade: 'پچھلی دہائی', + nextDecade: 'اگلی دہائی', + previousCentury: 'پچھلی صدی', + nextCentury: 'اگلی صدی', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/vi_VN.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/vi_VN.ts new file mode 100644 index 0000000..75302e7 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/vi_VN.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'vi_VN', + today: 'Hôm nay', + now: 'Bây giờ', + backToToday: 'Trở về hôm nay', + ok: 'Ok', + clear: 'Xóa', + month: 'Tháng', + year: 'Năm', + timeSelect: 'Chọn thời gian', + dateSelect: 'Chọn ngày', + weekSelect: 'Chọn tuần', + monthSelect: 'Chọn tháng', + yearSelect: 'Chọn năm', + decadeSelect: 'Chọn thập kỷ', + yearFormat: 'YYYY', + dateFormat: 'D/M/YYYY', + dayFormat: 'D', + dateTimeFormat: 'D/M/YYYY HH:mm:ss', + monthBeforeYear: true, + previousMonth: 'Tháng trước (PageUp)', + nextMonth: 'Tháng sau (PageDown)', + previousYear: 'Năm trước (Control + left)', + nextYear: 'Năm sau (Control + right)', + previousDecade: 'Thập kỷ trước', + nextDecade: 'Thập kỷ sau', + previousCentury: 'Thế kỷ trước', + nextCentury: 'Thế kỷ sau', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/zh_CN.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/zh_CN.ts new file mode 100644 index 0000000..0b0495b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/zh_CN.ts @@ -0,0 +1,32 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'zh_CN', + today: '今天', + now: '此刻', + backToToday: '返回今天', + ok: '确定', + timeSelect: '选择时间', + dateSelect: '选择日期', + weekSelect: '选择周', + clear: '清除', + month: '月', + year: '年', + previousMonth: '上个月 (翻页上键)', + nextMonth: '下个月 (翻页下键)', + monthSelect: '选择月份', + yearSelect: '选择年份', + decadeSelect: '选择年代', + yearFormat: 'YYYY年', + dayFormat: 'D日', + dateFormat: 'YYYY年M月D日', + dateTimeFormat: 'YYYY年M月D日 HH时mm分ss秒', + previousYear: '上一年 (Control键加左方向键)', + nextYear: '下一年 (Control键加右方向键)', + previousDecade: '上一年代', + nextDecade: '下一年代', + previousCentury: '上一世纪', + nextCentury: '下一世纪', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/locale/zh_TW.ts b/src/core/components/BaseDatePicker/src/vc-picker/locale/zh_TW.ts new file mode 100644 index 0000000..47bd3b0 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/locale/zh_TW.ts @@ -0,0 +1,33 @@ +import type { Locale } from '../interface'; + +const locale: Locale = { + locale: 'zh_TW', + + today: '今天', + now: '此刻', + backToToday: '返回今天', + ok: '確定', + timeSelect: '選擇時間', + dateSelect: '選擇日期', + weekSelect: '選擇周', + clear: '清除', + month: '月', + year: '年', + previousMonth: '上個月 (翻頁上鍵)', + nextMonth: '下個月 (翻頁下鍵)', + monthSelect: '選擇月份', + yearSelect: '選擇年份', + decadeSelect: '選擇年代', + yearFormat: 'YYYY年', + dayFormat: 'D日', + dateFormat: 'YYYY年M月D日', + dateTimeFormat: 'YYYY年M月D日 HH時mm分ss秒', + previousYear: '上一年 (Control鍵加左方向鍵)', + nextYear: '下一年 (Control鍵加右方向鍵)', + previousDecade: '上一年代', + nextDecade: '下一年代', + previousCentury: '上一世紀', + nextCentury: '下一世紀', +}; + +export default locale; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/DateBody.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/DateBody.tsx new file mode 100644 index 0000000..74d6061 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/DateBody.tsx @@ -0,0 +1,119 @@ +import type { GenerateConfig } from '../../generate'; +import { + WEEK_DAY_COUNT, + getWeekStartDate, + isSameDate, + isSameMonth, + formatValue, +} from '../../utils/dateUtil'; +import type { Locale } from '../../interface'; +import useCellClassName from '../../hooks/useCellClassName'; +import PanelBody from '../PanelBody'; +import type { VueNode } from 'ant-design-vue/es/_util/type'; +import { useInjectRange } from '../../RangeContext'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type DateRender = (props: { current: DateType; today: DateType }) => VueNode; + +export type DateBodyPassProps = { + dateRender?: DateRender; + disabledDate?: (date: DateType) => boolean; + + // Used for week panel + prefixColumn?: (date: DateType) => VueNode; + rowClassName?: (date: DateType) => string; +}; + +export type DateBodyProps = { + prefixCls: string; + generateConfig: GenerateConfig; + value?: DateType | null; + viewDate: DateType; + locale: Locale; + rowCount: number; + onSelect: (value: DateType) => void; +} & DateBodyPassProps; + +function DateBody(_props: DateBodyProps) { + const props = useMergeProps(_props); + const { prefixCls, generateConfig, prefixColumn, locale, rowCount, viewDate, value, dateRender } = + props; + + const { rangedValue, hoverRangedValue } = useInjectRange(); + + const baseDate = getWeekStartDate(locale.locale, generateConfig, viewDate); + const cellPrefixCls = `${prefixCls}-cell`; + const weekFirstDay = generateConfig.locale.getWeekFirstDay(locale.locale); + const today = generateConfig.getNow(); + + // ============================== Header ============================== + const headerCells: VueNode[] = []; + const weekDaysLocale: string[] = + locale.shortWeekDays || + (generateConfig.locale.getShortWeekDays + ? generateConfig.locale.getShortWeekDays(locale.locale) + : []); + + if (prefixColumn) { + headerCells.push(); + } + for (let i = 0; i < WEEK_DAY_COUNT; i += 1) { + headerCells.push({weekDaysLocale[(i + weekFirstDay) % WEEK_DAY_COUNT]}); + } + + // =============================== Body =============================== + const getCellClassName = useCellClassName({ + cellPrefixCls, + today, + value, + generateConfig, + rangedValue: prefixColumn ? null : rangedValue.value, + hoverRangedValue: prefixColumn ? null : hoverRangedValue.value, + isSameCell: (current, target) => isSameDate(generateConfig, current, target), + isInView: date => isSameMonth(generateConfig, date, viewDate), + offsetCell: (date, offset) => generateConfig.addDate(date, offset), + }); + + const getCellNode = dateRender + ? (date: DateType) => dateRender({ current: date, today }) + : undefined; + + return ( + + formatValue(date, { + locale, + format: 'YYYY-MM-DD', + generateConfig, + }) + } + headerCells={headerCells} + /> + ); +} + +DateBody.displayName = 'DateBody'; +DateBody.inheritAttrs = false; +DateBody.props = [ + 'prefixCls', + 'generateConfig', + 'value?', + 'viewDate', + 'locale', + 'rowCount', + 'onSelect', + 'dateRender?', + 'disabledDate?', + // Used for week panel + 'prefixColumn?', + 'rowClassName?', +]; +export default DateBody; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/DateHeader.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/DateHeader.tsx new file mode 100644 index 0000000..efad6b3 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/DateHeader.tsx @@ -0,0 +1,106 @@ +import Header from '../Header'; +import type { Locale } from '../../interface'; +import type { GenerateConfig } from '../../generate'; +import { useInjectPanel } from '../../PanelContext'; +import { formatValue } from '../../utils/dateUtil'; +import type { VueNode } from 'ant-design-vue/es/_util/type'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type DateHeaderProps = { + prefixCls: string; + viewDate: DateType; + value?: DateType | null; + locale: Locale; + generateConfig: GenerateConfig; + + onPrevYear: () => void; + onNextYear: () => void; + onPrevMonth: () => void; + onNextMonth: () => void; + onYearClick: () => void; + onMonthClick: () => void; +}; + +function DateHeader(_props: DateHeaderProps) { + const props = useMergeProps(_props); + const { + prefixCls, + generateConfig, + locale, + viewDate, + onNextMonth, + onPrevMonth, + onNextYear, + onPrevYear, + onYearClick, + onMonthClick, + } = props; + + const { hideHeader } = useInjectPanel(); + if (hideHeader.value) { + return null; + } + + const headerPrefixCls = `${prefixCls}-header`; + + const monthsLocale: string[] = + locale.shortMonths || + (generateConfig.locale.getShortMonths + ? generateConfig.locale.getShortMonths(locale.locale) + : []); + + const month = generateConfig.getMonth(viewDate); + + // =================== Month & Year =================== + const yearNode: VueNode = ( + + ); + const monthNode: VueNode = ( + + ); + + const monthYearNodes = locale.monthBeforeYear ? [monthNode, yearNode] : [yearNode, monthNode]; + + return ( +
+ {monthYearNodes} +
+ ); +} + +DateHeader.displayName = 'DateHeader'; +DateHeader.inheritAttrs = false; +export default DateHeader; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/index.tsx new file mode 100644 index 0000000..02a3b68 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/DatePanel/index.tsx @@ -0,0 +1,117 @@ +import type { DateBodyPassProps, DateRender } from './DateBody'; +import DateBody from './DateBody'; +import DateHeader from './DateHeader'; +import type { PanelSharedProps } from '../../interface'; +import { WEEK_DAY_COUNT } from '../../utils/dateUtil'; +import type { KeyboardConfig } from '../../utils/uiUtil'; +import { createKeydownHandler } from '../../utils/uiUtil'; +import classNames from 'ant-design-vue/es/_util/classNames'; +import useMergeProps from '../../hooks/useMergeProps'; + +const DATE_ROW_COUNT = 6; + +export type DatePanelProps = { + active?: boolean; + dateRender?: DateRender; + + // Used for week panel + panelName?: string; + keyboardConfig?: KeyboardConfig; +} & PanelSharedProps & + DateBodyPassProps; + +function DatePanel(_props: DatePanelProps) { + const props = useMergeProps(_props); + const { + prefixCls, + panelName = 'date', + keyboardConfig, + active, + operationRef, + generateConfig, + value, + viewDate, + onViewDateChange, + onPanelChange, + onSelect, + } = props; + const panelPrefixCls = `${prefixCls}-${panelName}-panel`; + // ======================= Keyboard ======================= + operationRef.value = { + onKeydown: (event: KeyboardEvent) => + createKeydownHandler(event, { + onLeftRight: diff => { + onSelect(generateConfig.addDate(value || viewDate, diff), 'key'); + }, + onCtrlLeftRight: diff => { + onSelect(generateConfig.addYear(value || viewDate, diff), 'key'); + }, + onUpDown: diff => { + onSelect(generateConfig.addDate(value || viewDate, diff * WEEK_DAY_COUNT), 'key'); + }, + onPageUpDown: diff => { + onSelect(generateConfig.addMonth(value || viewDate, diff), 'key'); + }, + ...keyboardConfig, + }), + }; + + // ==================== View Operation ==================== + const onYearChange = (diff: number) => { + const newDate = generateConfig.addYear(viewDate, diff); + onViewDateChange(newDate); + onPanelChange(null, newDate); + }; + const onMonthChange = (diff: number) => { + const newDate = generateConfig.addMonth(viewDate, diff); + onViewDateChange(newDate); + onPanelChange(null, newDate); + }; + + return ( +
+ { + onYearChange(-1); + }} + onNextYear={() => { + onYearChange(1); + }} + onPrevMonth={() => { + onMonthChange(-1); + }} + onNextMonth={() => { + onMonthChange(1); + }} + onMonthClick={() => { + onPanelChange('month', viewDate); + }} + onYearClick={() => { + onPanelChange('year', viewDate); + }} + /> + onSelect(date, 'mouse')} + prefixCls={prefixCls} + value={value} + viewDate={viewDate} + rowCount={DATE_ROW_COUNT} + /> +
+ ); +} + +DatePanel.displayName = 'DatePanel'; +DatePanel.inheritAttrs = false; + +export default DatePanel; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/DatetimePanel/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/DatetimePanel/index.tsx new file mode 100644 index 0000000..31066e5 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/DatetimePanel/index.tsx @@ -0,0 +1,244 @@ +import type { DatePanelProps } from '../DatePanel' +import DatePanel from '../DatePanel' +import type { SharedTimeProps } from '../TimePanel' +import TimePanel from '../TimePanel' +import { tuple } from '../../utils/miscUtil' + +import { createVNode as _createVNode } from 'vue' +// @ts-ignore +import _defineProperty from '@babel/runtime/helpers/esm/defineProperty' +// @ts-ignore +import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2' + +import { setDateTime as setTime } from '../../utils/timeUtil' +import type { PanelRefProps, DisabledTime } from '../../interface' +import KeyCode from 'ant-design-vue/es/_util/KeyCode' +import classNames from 'ant-design-vue/es/_util/classNames' +import { ref } from 'vue' +import useMergeProps from '../../hooks/useMergeProps' + +export type DatetimePanelProps = { + disabledTime?: DisabledTime + showTime?: boolean | SharedTimeProps + defaultValue?: DateType +} & Omit, 'disabledHours' | 'disabledMinutes' | 'disabledSeconds'> + +const ACTIVE_PANEL = tuple('date', 'time') +type ActivePanelType = (typeof ACTIVE_PANEL)[number] + +function DatetimePanel(_props: DatetimePanelProps) { + const props = useMergeProps(_props) + const { + prefixCls, + operationRef, + generateConfig, + value, + defaultValue, + disabledTime, + showTime, + onSelect + } = props + const panelPrefixCls = `${prefixCls}-datetime-panel` + const activePanel = ref(null) + + const dateOperationRef = ref({}) + const timeOperationRef = ref({}) + + const timeProps = typeof showTime === 'object' ? { ...showTime } : {} + + // ======================= Keyboard ======================= + function getNextActive(offset: number) { + const activeIndex = ACTIVE_PANEL.indexOf(activePanel.value!) + offset + const nextActivePanel = ACTIVE_PANEL[activeIndex] || null + return nextActivePanel + } + + const onBlur = (e?: FocusEvent) => { + if (timeOperationRef.value.onBlur) { + timeOperationRef.value.onBlur(e!) + } + activePanel.value = null + } + + operationRef.value = { + onKeydown: (event: KeyboardEvent) => { + // Switch active panel + if (event.which === KeyCode.TAB) { + const nextActivePanel = getNextActive(event.shiftKey ? -1 : 1) + activePanel.value = nextActivePanel + + if (nextActivePanel) { + event.preventDefault() + } + + return true + } + + // Operate on current active panel + if (activePanel.value) { + const ref = activePanel.value === 'date' ? dateOperationRef : timeOperationRef + + if (ref.value && ref.value.onKeydown) { + ref.value.onKeydown(event) + } + + return true + } + + // Switch first active panel if operate without panel + if ([KeyCode.LEFT, KeyCode.RIGHT, KeyCode.UP, KeyCode.DOWN].includes(event.which)) { + activePanel.value = 'date' + return true + } + + return false + }, + onBlur, + onClose: onBlur + } + + // ======================== Events ======================== + const onInternalSelect = (date: DateType, source: 'date' | 'time') => { + let selectedDate = date + + if (source === 'date' && !value && timeProps.defaultValue) { + // Date with time defaultValue + selectedDate = generateConfig.setHour( + selectedDate, + generateConfig.getHour(timeProps.defaultValue) + ) + selectedDate = generateConfig.setMinute( + selectedDate, + generateConfig.getMinute(timeProps.defaultValue) + ) + selectedDate = generateConfig.setSecond( + selectedDate, + generateConfig.getSecond(timeProps.defaultValue) + ) + } else if (source === 'time' && !value && defaultValue) { + selectedDate = generateConfig.setYear(selectedDate, generateConfig.getYear(defaultValue)) + selectedDate = generateConfig.setMonth(selectedDate, generateConfig.getMonth(defaultValue)) + selectedDate = generateConfig.setDate(selectedDate, generateConfig.getDate(defaultValue)) + } + + if (onSelect) { + onSelect(selectedDate, 'mouse') + } + } + + // ======================== Render ======================== + const disabledTimes = disabledTime ? disabledTime(value || null) : {} + + /* return ( +
+ { + onInternalSelect( + setTime( + generateConfig, + date, + !value && typeof showTime === 'object' ? showTime.defaultValue : null, + ), + 'date', + ); + }}*!/ + onSelect={function onSelect(date) { + onInternalSelect( + setTime( + generateConfig, + date, + !value && typeof showTime === 'object' ? showTime.defaultValue : null + ), + 'date' + ) + }} + /> + { + console.log('ssssssssssss') + onInternalSelect(date, 'time') + }} + /> +
+ )*/ + return _createVNode( + 'div', + { + class: classNames( + panelPrefixCls, + _defineProperty({}, ''.concat(panelPrefixCls, '-active'), activePanel.value) + ) + }, + [ + _createVNode( + DatePanel, + _objectSpread( + _objectSpread({}, props), + {}, + { + operationRef: dateOperationRef, + active: activePanel.value === 'date', + onSelect: function onSelect(date: any) { + onInternalSelect( + setTime( + generateConfig, + date, + !value && typeof showTime === 'object' ? showTime.defaultValue : null + ), + 'date' + ) + } + } + ), + null + ), + _createVNode( + TimePanel, + _objectSpread( + _objectSpread( + _objectSpread( + _objectSpread({}, props), + {}, + { + format: undefined + }, + timeProps + ), + disabledTimes + ), + {}, + { + disabledTime: null, + defaultValue: undefined, + operationRef: timeOperationRef, + active: activePanel.value === 'time', + onSelect: function onSelect(date) { + onInternalSelect(date, 'time') + } + } + ), + null + ) + ] + ) +} + +DatetimePanel.displayName = 'DatetimePanel' +DatetimePanel.inheritAttrs = false + +export default DatetimePanel diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/DecadeBody.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/DecadeBody.tsx new file mode 100644 index 0000000..4872378 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/DecadeBody.tsx @@ -0,0 +1,68 @@ +import type { GenerateConfig } from '../../generate' +import { DECADE_DISTANCE_COUNT, DECADE_UNIT_DIFF } from './index' +import PanelBody from '../PanelBody' +import useMergeProps from '../../hooks/useMergeProps' + +export const DECADE_COL_COUNT = 3 +const DECADE_ROW_COUNT = 4 + +export type YearBodyProps = { + prefixCls: string + generateConfig: GenerateConfig + viewDate: DateType + disabledDate?: (date: DateType) => boolean + onSelect: (value: DateType) => void +} + +function DecadeBody(_props: YearBodyProps) { + const props = useMergeProps(_props) + const DECADE_UNIT_DIFF_DES = DECADE_UNIT_DIFF - 1 + const { prefixCls, viewDate, generateConfig } = props + + const cellPrefixCls = `${prefixCls}-cell` + + const yearNumber = generateConfig.getYear(viewDate) + const decadeYearNumber = Math.floor(yearNumber / DECADE_UNIT_DIFF) * DECADE_UNIT_DIFF + + const startDecadeYear = Math.floor(yearNumber / DECADE_DISTANCE_COUNT) * DECADE_DISTANCE_COUNT + const endDecadeYear = startDecadeYear + DECADE_DISTANCE_COUNT - 1 + + const baseDecadeYear = generateConfig.setYear( + viewDate, + startDecadeYear - + Math.ceil( + (DECADE_COL_COUNT * DECADE_ROW_COUNT * DECADE_UNIT_DIFF - DECADE_DISTANCE_COUNT) / 2 + ) + ) + + const getCellClassName = (date: DateType) => { + const startDecadeNumber = generateConfig.getYear(date) + const endDecadeNumber = startDecadeNumber + DECADE_UNIT_DIFF_DES + + return { + [`${cellPrefixCls}-in-view`]: + startDecadeYear <= startDecadeNumber && endDecadeNumber <= endDecadeYear, + [`${cellPrefixCls}-selected`]: startDecadeNumber === decadeYearNumber + } + } + + return ( + { + const startDecadeNumber = generateConfig.getYear(date) + return `${startDecadeNumber}-${startDecadeNumber + DECADE_UNIT_DIFF_DES}` + }} + getCellClassName={getCellClassName} + getCellDate={(date, offset) => generateConfig.addYear(date, offset * DECADE_UNIT_DIFF)} + /> + ) +} + +DecadeBody.displayName = 'DecadeBody' +DecadeBody.inheritAttrs = false + +export default DecadeBody diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/DecadeHeader.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/DecadeHeader.tsx new file mode 100644 index 0000000..8265c24 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/DecadeHeader.tsx @@ -0,0 +1,45 @@ +import Header from '../Header' +import type { GenerateConfig } from '../../generate' +import { DECADE_DISTANCE_COUNT } from './index' +import { useInjectPanel } from '../../PanelContext' +import useMergeProps from '../../hooks/useMergeProps' + +export type YearHeaderProps = { + prefixCls: string + viewDate: DateType + generateConfig: GenerateConfig + + onPrevDecades: () => void + onNextDecades: () => void +} + +function DecadeHeader(_props: YearHeaderProps) { + const props = useMergeProps(_props) + const { prefixCls, generateConfig, viewDate, onPrevDecades, onNextDecades } = props + const { hideHeader } = useInjectPanel() + if (hideHeader) { + return null + } + + const headerPrefixCls = `${prefixCls}-header` + + const yearNumber = generateConfig.getYear(viewDate) + const startYear = Math.floor(yearNumber / DECADE_DISTANCE_COUNT) * DECADE_DISTANCE_COUNT + const endYear = startYear + DECADE_DISTANCE_COUNT - 1 + + return ( +
+ {startYear}-{endYear} +
+ ) +} + +DecadeHeader.displayName = 'DecadeHeader' +DecadeHeader.inheritAttrs = false + +export default DecadeHeader diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/index.tsx new file mode 100644 index 0000000..e600b33 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/DecadePanel/index.tsx @@ -0,0 +1,80 @@ +import DecadeHeader from './DecadeHeader'; +import DecadeBody, { DECADE_COL_COUNT } from './DecadeBody'; +import type { PanelSharedProps } from '../../interface'; +import { createKeydownHandler } from '../../utils/uiUtil'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type DecadePanelProps = PanelSharedProps; + +export const DECADE_UNIT_DIFF = 10; +export const DECADE_DISTANCE_COUNT = DECADE_UNIT_DIFF * 10; + +function DecadePanel(_props: DecadePanelProps) { + const props = useMergeProps(_props); + const { + prefixCls, + onViewDateChange, + generateConfig, + viewDate, + operationRef, + onSelect, + onPanelChange, + } = props; + + const panelPrefixCls = `${prefixCls}-decade-panel`; + + // ======================= Keyboard ======================= + operationRef.value = { + onKeydown: (event: KeyboardEvent) => + createKeydownHandler(event, { + onLeftRight: diff => { + onSelect(generateConfig.addYear(viewDate, diff * DECADE_UNIT_DIFF), 'key'); + }, + onCtrlLeftRight: diff => { + onSelect(generateConfig.addYear(viewDate, diff * DECADE_DISTANCE_COUNT), 'key'); + }, + onUpDown: diff => { + onSelect( + generateConfig.addYear(viewDate, diff * DECADE_UNIT_DIFF * DECADE_COL_COUNT), + 'key', + ); + }, + onEnter: () => { + onPanelChange('year', viewDate); + }, + }), + }; + + // ==================== View Operation ==================== + const onDecadesChange = (diff: number) => { + const newDate = generateConfig.addYear(viewDate, diff * DECADE_DISTANCE_COUNT); + onViewDateChange(newDate); + onPanelChange(null, newDate); + }; + + const onInternalSelect = (date: DateType) => { + onSelect(date, 'mouse'); + onPanelChange('year', date); + }; + + return ( +
+ { + onDecadesChange(-1); + }} + onNextDecades={() => { + onDecadesChange(1); + }} + /> + +
+ ); +} + +DecadePanel.displayName = 'DecadePanel'; +DecadePanel.inheritAttrs = false; + +export default DecadePanel; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/Header.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/Header.tsx new file mode 100644 index 0000000..3f80da8 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/Header.tsx @@ -0,0 +1,100 @@ +import type { CSSProperties } from 'vue'; +import type { VueNode } from 'ant-design-vue/es/_util/type'; +import useMergeProps from '../hooks/useMergeProps'; +import { useInjectPanel } from '../PanelContext'; + +const HIDDEN_STYLE: CSSProperties = { + visibility: 'hidden', +}; + +export type HeaderProps = { + prefixCls: string; + + // Icons + prevIcon?: VueNode; + nextIcon?: VueNode; + superPrevIcon?: VueNode; + superNextIcon?: VueNode; + + /** Last one step */ + onPrev?: () => void; + /** Next one step */ + onNext?: () => void; + /** Last multiple steps */ + onSuperPrev?: () => void; + /** Next multiple steps */ + onSuperNext?: () => void; + + children?: VueNode; +}; + +function Header(_props: HeaderProps, { slots }) { + const props = useMergeProps(_props); + const { + prefixCls, + prevIcon = '\u2039', + nextIcon = '\u203A', + superPrevIcon = '\u00AB', + superNextIcon = '\u00BB', + onSuperPrev, + onSuperNext, + onPrev, + onNext, + } = props; + const { hideNextBtn, hidePrevBtn } = useInjectPanel(); + + return ( +
+ {onSuperPrev && ( + + )} + {onPrev && ( + + )} +
{slots.default?.()}
+ {onNext && ( + + )} + {onSuperNext && ( + + )} +
+ ); +} + +Header.displayName = 'Header'; +Header.inheritAttrs = false; + +export default Header; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/MonthBody.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/MonthBody.tsx new file mode 100644 index 0000000..de31bec --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/MonthBody.tsx @@ -0,0 +1,89 @@ +import type { GenerateConfig } from '../../generate'; +import type { Locale } from '../../interface'; +import { formatValue, isSameMonth } from '../../utils/dateUtil'; +import { useInjectRange } from '../../RangeContext'; +import useCellClassName from '../../hooks/useCellClassName'; +import PanelBody from '../PanelBody'; +import type { VueNode } from 'ant-design-vue/es/_util/type'; +import useMergeProps from '../../hooks/useMergeProps'; + +export const MONTH_COL_COUNT = 3; +const MONTH_ROW_COUNT = 4; + +export type MonthCellRender = (obj: { current: DateType; locale: Locale }) => VueNode; + +export type MonthBodyProps = { + prefixCls: string; + locale: Locale; + generateConfig: GenerateConfig; + value?: DateType | null; + viewDate: DateType; + disabledDate?: (date: DateType) => boolean; + monthCellRender?: MonthCellRender; + onSelect: (value: DateType) => void; +}; + +function MonthBody(_props: MonthBodyProps) { + const props = useMergeProps(_props); + const { prefixCls, locale, value, viewDate, generateConfig, monthCellRender } = props; + + const { rangedValue, hoverRangedValue } = useInjectRange(); + + const cellPrefixCls = `${prefixCls}-cell`; + + const getCellClassName = useCellClassName({ + cellPrefixCls, + value, + generateConfig, + rangedValue: rangedValue.value, + hoverRangedValue: hoverRangedValue.value, + isSameCell: (current, target) => isSameMonth(generateConfig, current, target), + isInView: () => true, + offsetCell: (date, offset) => generateConfig.addMonth(date, offset), + }); + + const monthsLocale: string[] = + locale.shortMonths || + (generateConfig.locale.getShortMonths + ? generateConfig.locale.getShortMonths(locale.locale) + : []); + + const baseMonth = generateConfig.setMonth(viewDate, 0); + + const getCellNode = monthCellRender + ? (date: DateType) => monthCellRender({ current: date, locale }) + : undefined; + + return ( + + locale.monthFormat + ? formatValue(date, { + locale, + format: locale.monthFormat, + generateConfig, + }) + : monthsLocale[generateConfig.getMonth(date)] + } + getCellClassName={getCellClassName} + getCellDate={generateConfig.addMonth} + titleCell={date => + formatValue(date, { + locale, + format: 'YYYY-MM', + generateConfig, + }) + } + /> + ); +} + +MonthBody.displayName = 'MonthBody'; +MonthBody.inheritAttrs = false; + +export default MonthBody; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/MonthHeader.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/MonthHeader.tsx new file mode 100644 index 0000000..cc010ff --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/MonthHeader.tsx @@ -0,0 +1,51 @@ +import Header from '../Header'; +import type { Locale } from '../../interface'; +import type { GenerateConfig } from '../../generate'; +import { useInjectPanel } from '../../PanelContext'; +import { formatValue } from '../../utils/dateUtil'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type MonthHeaderProps = { + prefixCls: string; + viewDate: DateType; + locale: Locale; + generateConfig: GenerateConfig; + + onPrevYear: () => void; + onNextYear: () => void; + onYearClick: () => void; +}; + +function MonthHeader(_props: MonthHeaderProps) { + const props = useMergeProps(_props); + const { prefixCls, generateConfig, locale, viewDate, onNextYear, onPrevYear, onYearClick } = + props; + const { hideHeader } = useInjectPanel(); + if (hideHeader.value) { + return null; + } + + const headerPrefixCls = `${prefixCls}-header`; + + return ( +
+ +
+ ); +} + +MonthHeader.displayName = 'MonthHeader'; +MonthHeader.inheritAttrs = false; + +export default MonthHeader; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/index.tsx new file mode 100644 index 0000000..04fdfd7 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/MonthPanel/index.tsx @@ -0,0 +1,83 @@ +import MonthHeader from './MonthHeader'; +import type { MonthCellRender } from './MonthBody'; +import MonthBody, { MONTH_COL_COUNT } from './MonthBody'; +import type { PanelSharedProps } from '../../interface'; +import { createKeydownHandler } from '../../utils/uiUtil'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type MonthPanelProps = { + monthCellContentRender?: MonthCellRender; +} & PanelSharedProps; + +function MonthPanel(_props: MonthPanelProps) { + const props = useMergeProps(_props); + const { + prefixCls, + operationRef, + onViewDateChange, + generateConfig, + value, + viewDate, + onPanelChange, + onSelect, + } = props; + + const panelPrefixCls = `${prefixCls}-month-panel`; + + // ======================= Keyboard ======================= + operationRef.value = { + onKeydown: (event: KeyboardEvent) => + createKeydownHandler(event, { + onLeftRight: diff => { + onSelect(generateConfig.addMonth(value || viewDate, diff), 'key'); + }, + onCtrlLeftRight: diff => { + onSelect(generateConfig.addYear(value || viewDate, diff), 'key'); + }, + onUpDown: diff => { + onSelect(generateConfig.addMonth(value || viewDate, diff * MONTH_COL_COUNT), 'key'); + }, + onEnter: () => { + onPanelChange('date', value || viewDate); + }, + }), + }; + + // ==================== View Operation ==================== + const onYearChange = (diff: number) => { + const newDate = generateConfig.addYear(viewDate, diff); + onViewDateChange(newDate); + onPanelChange(null, newDate); + }; + + return ( +
+ { + onYearChange(-1); + }} + onNextYear={() => { + onYearChange(1); + }} + onYearClick={() => { + onPanelChange('year', viewDate); + }} + /> + + {...props} + prefixCls={prefixCls} + onSelect={date => { + onSelect(date, 'mouse'); + onPanelChange('date', date); + }} + /> +
+ ); +} + +MonthPanel.displayName = 'MonthPanel'; +MonthPanel.inheritAttrs = false; + +export default MonthPanel; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/PanelBody.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/PanelBody.tsx new file mode 100644 index 0000000..95522ff --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/PanelBody.tsx @@ -0,0 +1,147 @@ +import { useInjectPanel } from '../PanelContext' +import type { GenerateConfig } from '../generate' +import { getLastDay } from '../utils/timeUtil' +import type { PanelMode } from '../interface' +import { getCellDateDisabled } from '../utils/dateUtil' +import type { VueNode } from 'ant-design-vue/es/_util/type' +import classNames from 'ant-design-vue/es/_util/classNames' +import useMergeProps from '../hooks/useMergeProps' + +export type PanelBodyProps = { + prefixCls: string + disabledDate?: (date: DateType) => boolean + onSelect: (value: DateType) => void + picker?: PanelMode + + // By panel + headerCells?: VueNode[] + rowNum: number + colNum: number + baseDate: DateType + getCellClassName: (date: DateType) => Record + getCellDate: (date: DateType, offset: number) => DateType + getCellText: (date: DateType) => VueNode + getCellNode?: (date: DateType) => VueNode + titleCell?: (date: DateType) => string + generateConfig: GenerateConfig + + // Used for week panel + prefixColumn?: (date: DateType) => VueNode + rowClassName?: (date: DateType) => string +} + +function PanelBody(_props: PanelBodyProps) { + const { + prefixCls, + disabledDate, + onSelect, + picker, + rowNum, + colNum, + prefixColumn, + rowClassName, + baseDate, + getCellClassName, + getCellText, + getCellNode, + getCellDate, + generateConfig, + titleCell, + headerCells + } = useMergeProps(_props) + const { onDateMouseenter, onDateMouseleave, mode } = useInjectPanel() + + const cellPrefixCls = `${prefixCls}-cell` + + // =============================== Body =============================== + const rows: VueNode[] = [] + + for (let i = 0; i < rowNum; i += 1) { + const row: VueNode[] = [] + let rowStartDate: DateType + + for (let j = 0; j < colNum; j += 1) { + const offset = i * colNum + j + const currentDate = getCellDate(baseDate, offset) + const disabled = getCellDateDisabled({ + cellDate: currentDate, + mode: mode.value, + disabledDate, + generateConfig + }) + + if (j === 0) { + rowStartDate = currentDate + + if (prefixColumn) { + row.push(prefixColumn(rowStartDate)) + } + } + + const title = titleCell && titleCell(currentDate) + + row.push( + { + if (!disabled) { + //todo check + onSelect[1](currentDate) + //onSelect(currentDate); + } + }} + onMouseenter={() => { + if (!disabled && onDateMouseenter) { + onDateMouseenter(currentDate) + } + }} + onMouseleave={() => { + if (!disabled && onDateMouseleave) { + onDateMouseleave(currentDate) + } + }} + > + {getCellNode ? ( + getCellNode(currentDate) + ) : ( +
{getCellText(currentDate)}
+ )} + + ) + } + + rows.push( + + {row} + + ) + } + + return ( +
+ + {headerCells && ( + + {headerCells} + + )} + {rows} +
+
+ ) +} + +PanelBody.displayName = 'PanelBody' +PanelBody.inheritAttrs = false + +export default PanelBody diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/QuarterBody.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/QuarterBody.tsx new file mode 100644 index 0000000..edbb8ad --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/QuarterBody.tsx @@ -0,0 +1,71 @@ +import type { GenerateConfig } from '../../generate'; +import type { Locale } from '../../interface'; +import { formatValue, isSameQuarter } from '../../utils/dateUtil'; +import { useInjectRange } from '../../RangeContext'; +import useCellClassName from '../../hooks/useCellClassName'; +import PanelBody from '../PanelBody'; +import useMergeProps from '../../hooks/useMergeProps'; + +export const QUARTER_COL_COUNT = 4; +const QUARTER_ROW_COUNT = 1; + +export type QuarterBodyProps = { + prefixCls: string; + locale: Locale; + generateConfig: GenerateConfig; + value?: DateType | null; + viewDate: DateType; + disabledDate?: (date: DateType) => boolean; + onSelect: (value: DateType) => void; +}; + +function QuarterBody(_props: QuarterBodyProps) { + const props = useMergeProps(_props); + const { prefixCls, locale, value, viewDate, generateConfig } = props; + + const { rangedValue, hoverRangedValue } = useInjectRange(); + + const cellPrefixCls = `${prefixCls}-cell`; + + const getCellClassName = useCellClassName({ + cellPrefixCls, + value, + generateConfig, + rangedValue: rangedValue.value, + hoverRangedValue: hoverRangedValue.value, + isSameCell: (current, target) => isSameQuarter(generateConfig, current, target), + isInView: () => true, + offsetCell: (date, offset) => generateConfig.addMonth(date, offset * 3), + }); + + const baseQuarter = generateConfig.setDate(generateConfig.setMonth(viewDate, 0), 1); + + return ( + + formatValue(date, { + locale, + format: locale.quarterFormat || '[Q]Q', + generateConfig, + }) + } + getCellClassName={getCellClassName} + getCellDate={(date, offset) => generateConfig.addMonth(date, offset * 3)} + titleCell={date => + formatValue(date, { + locale, + format: 'YYYY-[Q]Q', + generateConfig, + }) + } + /> + ); +} + +QuarterBody.displayName = 'QuarterBody'; +QuarterBody.inheritAttrs = false; +export default QuarterBody; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/QuarterHeader.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/QuarterHeader.tsx new file mode 100644 index 0000000..223f5d1 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/QuarterHeader.tsx @@ -0,0 +1,50 @@ +import Header from '../Header'; +import type { Locale } from '../../interface'; +import type { GenerateConfig } from '../../generate'; +import { useInjectPanel } from '../../PanelContext'; +import { formatValue } from '../../utils/dateUtil'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type QuarterHeaderProps = { + prefixCls: string; + viewDate: DateType; + locale: Locale; + generateConfig: GenerateConfig; + + onPrevYear: () => void; + onNextYear: () => void; + onYearClick: () => void; +}; + +function QuarterHeader(_props: QuarterHeaderProps) { + const props = useMergeProps(_props); + const { prefixCls, generateConfig, locale, viewDate, onNextYear, onPrevYear, onYearClick } = + props; + const { hideHeader } = useInjectPanel(); + if (hideHeader.value) { + return null; + } + + const headerPrefixCls = `${prefixCls}-header`; + return ( +
+ +
+ ); +} + +QuarterHeader.displayName = 'QuarterHeader'; +QuarterHeader.inheritAttrs = false; + +export default QuarterHeader; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/index.tsx new file mode 100644 index 0000000..a1f5057 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/QuarterPanel/index.tsx @@ -0,0 +1,76 @@ +import QuarterHeader from './QuarterHeader'; +import QuarterBody from './QuarterBody'; +import type { PanelSharedProps } from '../../interface'; +import { createKeydownHandler } from '../../utils/uiUtil'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type QuarterPanelProps = {} & PanelSharedProps; + +function QuarterPanel(_props: QuarterPanelProps) { + const props = useMergeProps(_props); + const { + prefixCls, + operationRef, + onViewDateChange, + generateConfig, + value, + viewDate, + onPanelChange, + onSelect, + } = props; + + const panelPrefixCls = `${prefixCls}-quarter-panel`; + + // ======================= Keyboard ======================= + operationRef.value = { + onKeydown: (event: KeyboardEvent) => + createKeydownHandler(event, { + onLeftRight: diff => { + onSelect(generateConfig.addMonth(value || viewDate, diff * 3), 'key'); + }, + onCtrlLeftRight: diff => { + onSelect(generateConfig.addYear(value || viewDate, diff), 'key'); + }, + onUpDown: diff => { + onSelect(generateConfig.addYear(value || viewDate, diff), 'key'); + }, + }), + }; + + // ==================== View Operation ==================== + const onYearChange = (diff: number) => { + const newDate = generateConfig.addYear(viewDate, diff); + onViewDateChange(newDate); + onPanelChange(null, newDate); + }; + + return ( +
+ { + onYearChange(-1); + }} + onNextYear={() => { + onYearChange(1); + }} + onYearClick={() => { + onPanelChange('year', viewDate); + }} + /> + + {...props} + prefixCls={prefixCls} + onSelect={date => { + onSelect(date, 'mouse'); + }} + /> +
+ ); +} + +QuarterPanel.displayName = 'QuarterPanel'; +QuarterPanel.inheritAttrs = false; + +export default QuarterPanel; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeBody.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeBody.tsx new file mode 100644 index 0000000..ea6004e --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeBody.tsx @@ -0,0 +1,311 @@ +import type { GenerateConfig } from '../../generate' +import type { Locale, OnSelect } from '../../interface' +import type { Unit } from './TimeUnitColumn' +import TimeUnitColumn from './TimeUnitColumn' +import { leftPad } from '../../utils/miscUtil' +import type { SharedTimeProps } from './index' +import { setTime as utilSetTime } from '../../utils/timeUtil' +import { cloneElement } from 'ant-design-vue/es/_util/vnode' +import type { VueNode } from 'ant-design-vue/es/_util/type' +import type { Ref, VNode } from 'vue' +import { onBeforeUpdate, ref, watchEffect, computed, defineComponent } from 'vue' + +function generateUnits( + start: number, + end: number, + step: number, + disabledUnits: number[] | undefined +) { + const units: Unit[] = [] + for (let i = start; i <= end; i += step) { + units.push({ + label: leftPad(i, 2), + value: i, + disabled: (disabledUnits || []).includes(i) + }) + } + return units +} + +export type BodyOperationRef = { + onUpDown: (diff: number) => void +} + +export type TimeBodyProps = { + prefixCls: string + locale: Locale + generateConfig: GenerateConfig + value?: DateType | null + onSelect: OnSelect + activeColumnIndex: number + operationRef: Ref +} & SharedTimeProps + +const TimeBody = defineComponent({ + name: 'TimeBody', + inheritAttrs: false, + props: [ + 'generateConfig', + 'prefixCls', + 'operationRef', + 'activeColumnIndex', + 'value', + 'showHour', + 'showMinute', + 'showSecond', + 'use12Hours', + 'hourStep', + 'minuteStep', + 'secondStep', + 'disabledHours', + 'disabledMinutes', + 'disabledSeconds', + 'disabledTime', + 'hideDisabledOptions', + 'onSelect' + ], + setup(props) { + const originHour = computed(() => + props.value ? props.generateConfig.getHour(props.value) : -1 + ) + const isPM = computed(() => { + if (props.use12Hours) { + return originHour.value >= 12 // -1 means should display AM + } else { + return false + } + }) + const hour = computed(() => { + // Should additional logic to handle 12 hours + if (props.use12Hours) { + return originHour.value % 12 + } else { + return originHour.value + } + }) + const minute = computed(() => (props.value ? props.generateConfig.getMinute(props.value) : -1)) + const second = computed(() => (props.value ? props.generateConfig.getSecond(props.value) : -1)) + + const now = ref(props.generateConfig.getNow()) + const mergedDisabledHours = ref() + const mergedDisabledMinutes = ref() + const mergedDisabledSeconds = ref() + onBeforeUpdate(() => { + now.value = props.generateConfig.getNow() + }) + watchEffect(() => { + if (props.disabledTime) { + const disabledConfig = props.disabledTime(now) + ;[mergedDisabledHours.value, mergedDisabledMinutes.value, mergedDisabledSeconds.value] = [ + disabledConfig.disabledHours, + disabledConfig.disabledMinutes, + disabledConfig.disabledSeconds + ] + } else { + ;[mergedDisabledHours.value, mergedDisabledMinutes.value, mergedDisabledSeconds.value] = [ + props.disabledHours, + props.disabledMinutes, + props.disabledSeconds + ] + } + }) + const setTime = ( + isNewPM: boolean | undefined, + newHour: number, + newMinute: number, + newSecond: number + ) => { + let newDate = props.value || props.generateConfig.getNow() + + const mergedHour = Math.max(0, newHour) + const mergedMinute = Math.max(0, newMinute) + const mergedSecond = Math.max(0, newSecond) + + newDate = utilSetTime( + props.generateConfig, + newDate, + !props.use12Hours || !isNewPM ? mergedHour : mergedHour + 12, + mergedMinute, + mergedSecond + ) + + return newDate + } + + // ========================= Unit ========================= + const rawHours = computed(() => + generateUnits( + 0, + 23, + props.hourStep ?? 1, + mergedDisabledHours.value && mergedDisabledHours.value() + ) + ) + + // const memorizedRawHours = useMemo(() => rawHours, rawHours, shouldUnitsUpdate); + + const AMPMDisabled = computed(() => { + if (!props.use12Hours) { + return [false, false] + } + const AMPMDisabled = [true, true] + rawHours.value.forEach(({ disabled, value: hourValue }) => { + if (disabled) return + if (hourValue >= 12) { + AMPMDisabled[1] = false + } else { + AMPMDisabled[0] = false + } + }) + return AMPMDisabled + }) + + const hours = computed(() => { + if (!props.use12Hours) return rawHours.value + return rawHours.value + .filter(isPM.value ? (hourMeta) => hourMeta.value >= 12 : (hourMeta) => hourMeta.value < 12) + .map((hourMeta) => { + const hourValue = hourMeta.value % 12 + const hourLabel = hourValue === 0 ? '12' : leftPad(hourValue, 2) + return { + ...hourMeta, + label: hourLabel, + value: hourValue + } + }) + }) + + const minutes = computed(() => + generateUnits( + 0, + 59, + props.minuteStep ?? 1, + mergedDisabledMinutes.value && mergedDisabledMinutes.value(originHour.value) + ) + ) + + const seconds = computed(() => + generateUnits( + 0, + 59, + props.secondStep ?? 1, + mergedDisabledSeconds.value && mergedDisabledSeconds.value(originHour.value, minute) + ) + ) + + return () => { + const { + prefixCls, + operationRef, + activeColumnIndex, + showHour, + showMinute, + showSecond, + use12Hours, + hideDisabledOptions, + onSelect + } = props + const columns: { + node: VueNode + value: number + units: Unit[] + onSelect: (diff: number) => void + }[] = [] + const contentPrefixCls = `${prefixCls}-content` + const columnPrefixCls = `${prefixCls}-time-panel` + + // ====================== Operations ====================== + operationRef.value = { + onUpDown: (diff: number) => { + const column = columns[activeColumnIndex] + if (column) { + const valueIndex = column.units.findIndex((unit) => unit.value === column.value) + + const unitLen = column.units.length + for (let i = 1; i < unitLen; i += 1) { + const nextUnit = column.units[(valueIndex + diff * i + unitLen) % unitLen] + + if (nextUnit.disabled !== true) { + column.onSelect(nextUnit.value) + break + } + } + } + } + } + + // ======================== Render ======================== + function addColumnNode( + condition: boolean | undefined, + node: VueNode, + columnValue: number, + units: Unit[], + onColumnSelect: (diff: number) => void + ) { + if (condition !== false) { + columns.push({ + node: cloneElement(node as unknown as VNode, { + prefixCls: columnPrefixCls, + value: columnValue, + active: activeColumnIndex === columns.length, + onSelect: onColumnSelect, + units, + hideDisabledOptions + }), + onSelect: onColumnSelect, + value: columnValue, + units + }) + } + } + + // Hour + addColumnNode(showHour, , hour.value, hours.value, (num) => { + onSelect(setTime(isPM.value, num, minute.value, second.value), 'mouse') + }) + + // Minute + addColumnNode( + showMinute, + , + minute.value, + minutes.value, + (num) => { + onSelect(setTime(isPM.value, hour.value, num, second.value), 'mouse') + } + ) + + // Second + addColumnNode( + showSecond, + , + second.value, + seconds.value, + (num) => { + onSelect(setTime(isPM.value, hour.value, minute.value, num), 'mouse') + } + ) + + // 12 Hours + let PMIndex = -1 + PMIndex = isPM.value ? 1 : 0 + + addColumnNode( + use12Hours === true, + , + PMIndex, + [ + { label: 'AM', value: 0, disabled: AMPMDisabled.value[0] }, + { label: 'PM', value: 1, disabled: AMPMDisabled.value[1] } + ], + (num) => { + onSelect(setTime(!!num, hour.value, minute.value, second.value), 'mouse') + } + ) + + return
{columns.map(({ node }) => node)}
+ } + } +}) + +export default TimeBody diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeHeader.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeHeader.tsx new file mode 100644 index 0000000..977ef40 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeHeader.tsx @@ -0,0 +1,42 @@ +import Header from '../Header'; +import type { Locale } from '../../interface'; +import type { GenerateConfig } from '../../generate'; +import { useInjectPanel } from '../../PanelContext'; +import { formatValue } from '../../utils/dateUtil'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type TimeHeaderProps = { + prefixCls: string; + value?: DateType | null; + locale: Locale; + generateConfig: GenerateConfig; + format: string; +}; + +function TimeHeader(_props: TimeHeaderProps) { + const props = useMergeProps(_props); + const { hideHeader } = useInjectPanel(); + if (hideHeader.value) { + return null; + } + + const { prefixCls, generateConfig, locale, value, format } = props; + const headerPrefixCls = `${prefixCls}-header`; + + return ( +
+ {value + ? formatValue(value, { + locale, + format, + generateConfig, + }) + : '\u00A0'} +
+ ); +} + +TimeHeader.displayName = 'TimeHeader'; +TimeHeader.inheritAttrs = false; + +export default TimeHeader; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeUnitColumn.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeUnitColumn.tsx new file mode 100644 index 0000000..e51240b --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/TimeUnitColumn.tsx @@ -0,0 +1,102 @@ +import { scrollTo, waitElementReady } from '../../utils/uiUtil'; +import { useInjectPanel } from '../../PanelContext'; +import classNames from 'ant-design-vue/es/_util/classNames'; +import { ref, onBeforeUnmount, watch, defineComponent, nextTick } from 'vue'; + +export type Unit = { + label: any; + value: number; + disabled: boolean; +}; + +export type TimeUnitColumnProps = { + prefixCls?: string; + units?: Unit[]; + value?: number; + active?: boolean; + hideDisabledOptions?: boolean; + onSelect?: (value: number) => void; +}; + +export default defineComponent({ + name: 'TimeUnitColumn', + props: ['prefixCls', 'units', 'onSelect', 'value', 'active', 'hideDisabledOptions'] as any, + setup(props) { + const { open } = useInjectPanel(); + + const ulRef = ref(null); + const liRefs = ref>(new Map()); + const scrollRef = ref(); + + watch( + () => props.value, + () => { + const li = liRefs.value.get(props.value!); + if (li && open.value !== false) { + scrollTo(ulRef.value!, li.offsetTop, 120); + } + }, + ); + onBeforeUnmount(() => { + scrollRef.value?.(); + }); + + watch( + open, + () => { + scrollRef.value?.(); + nextTick(() => { + if (open.value) { + const li = liRefs.value.get(props.value!); + if (li) { + scrollRef.value = waitElementReady(li, () => { + scrollTo(ulRef.value!, li.offsetTop, 0); + }); + } + } + }); + }, + { immediate: true, flush: 'post' }, + ); + return () => { + const { prefixCls, units, onSelect, value, active, hideDisabledOptions } = props; + const cellPrefixCls = `${prefixCls}-cell`; + return ( +
    + {units!.map(unit => { + if (hideDisabledOptions && unit.disabled) { + return null; + } + + return ( +
  • { + liRefs.value.set(unit.value, element as HTMLElement); + }} + class={classNames(cellPrefixCls, { + [`${cellPrefixCls}-disabled`]: unit.disabled, + [`${cellPrefixCls}-selected`]: value === unit.value, + })} + onClick={() => { + if (unit.disabled) { + return; + } + onSelect!(unit.value); + }} + > +
    {unit.label}
    +
  • + ); + })} +
+ ); + }; + }, +}); diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/index.tsx new file mode 100644 index 0000000..1bfba73 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/TimePanel/index.tsx @@ -0,0 +1,109 @@ +import TimeHeader from './TimeHeader'; +import type { BodyOperationRef } from './TimeBody'; +import TimeBody from './TimeBody'; +import type { PanelSharedProps, DisabledTimes } from '../../interface'; +import { createKeydownHandler } from '../../utils/uiUtil'; +import classNames from 'ant-design-vue/es/_util/classNames'; +import { ref } from 'vue'; +import useMergeProps from '../../hooks/useMergeProps'; +// import type { RangeType } from '../../RangePicker'; + +export type SharedTimeProps = { + format?: string; + showNow?: boolean; + showHour?: boolean; + showMinute?: boolean; + showSecond?: boolean; + use12Hours?: boolean; + hourStep?: number; + minuteStep?: number; + secondStep?: number; + hideDisabledOptions?: boolean; + defaultValue?: DateType; + + /** @deprecated Please use `disabledTime` instead. */ + disabledHours?: DisabledTimes['disabledHours']; + /** @deprecated Please use `disabledTime` instead. */ + disabledMinutes?: DisabledTimes['disabledMinutes']; + /** @deprecated Please use `disabledTime` instead. */ + disabledSeconds?: DisabledTimes['disabledSeconds']; + + disabledTime?: (date: DateType) => DisabledTimes; +}; + +export type TimePanelProps = { + format?: string; + active?: boolean; +} & PanelSharedProps & + SharedTimeProps; + +const countBoolean = (boolList: (boolean | undefined)[]) => + boolList.filter(bool => bool !== false).length; + +function TimePanel(_props: TimePanelProps) { + const props = useMergeProps(_props); + const { + generateConfig, + format = 'HH:mm:ss', + prefixCls, + active, + operationRef, + showHour, + showMinute, + showSecond, + use12Hours = false, + onSelect, + value, + } = props; + const panelPrefixCls = `${prefixCls}-time-panel`; + const bodyOperationRef = ref(); + + // ======================= Keyboard ======================= + const activeColumnIndex = ref(-1); + const columnsCount = countBoolean([showHour, showMinute, showSecond, use12Hours]); + + operationRef.value = { + onKeydown: (event: KeyboardEvent) => + createKeydownHandler(event, { + onLeftRight: diff => { + activeColumnIndex.value = (activeColumnIndex.value + diff + columnsCount) % columnsCount; + }, + onUpDown: diff => { + if (activeColumnIndex.value === -1) { + activeColumnIndex.value = 0; + } else if (bodyOperationRef.value) { + bodyOperationRef.value.onUpDown(diff); + } + }, + onEnter: () => { + onSelect(value || generateConfig.getNow(), 'key'); + activeColumnIndex.value = -1; + }, + }), + + onBlur: () => { + activeColumnIndex.value = -1; + }, + }; + + return ( +
+ + +
+ ); +} + +TimePanel.displayName = 'TimePanel'; +TimePanel.inheritAttrs = false; + +export default TimePanel; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/WeekPanel/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/WeekPanel/index.tsx new file mode 100644 index 0000000..2eabc56 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/WeekPanel/index.tsx @@ -0,0 +1,44 @@ +import DatePanel from '../DatePanel'; +import type { PanelSharedProps } from '../../interface'; +import { isSameWeek } from '../../utils/dateUtil'; +import classNames from 'ant-design-vue/es/_util/classNames'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type WeekPanelProps = PanelSharedProps; + +function WeekPanel(_props: WeekPanelProps) { + const props = useMergeProps(_props); + const { prefixCls, generateConfig, locale, value } = props; + + // Render additional column + const cellPrefixCls = `${prefixCls}-cell`; + const prefixColumn = (date: DateType) => ( + + {generateConfig.locale.getWeek(locale.locale, date)} + + ); + + // Add row className + const rowPrefixCls = `${prefixCls}-week-panel-row`; + const rowClassName = (date: DateType) => + classNames(rowPrefixCls, { + [`${rowPrefixCls}-selected`]: isSameWeek(generateConfig, locale.locale, value, date), + }); + + return ( + + ); +} + +WeekPanel.displayName = 'WeekPanel'; +WeekPanel.inheritAttrs = false; + +export default WeekPanel; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/YearBody.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/YearBody.tsx new file mode 100644 index 0000000..06d97a7 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/YearBody.tsx @@ -0,0 +1,78 @@ +import type { GenerateConfig } from '../../generate' +import { YEAR_DECADE_COUNT } from './index' +import type { Locale, NullableDateType } from '../../interface' +import useCellClassName from '../../hooks/useCellClassName' +import { formatValue, isSameYear } from '../../utils/dateUtil' +import { useInjectRange } from '../../RangeContext' +import PanelBody from '../PanelBody' +import useMergeProps from '../../hooks/useMergeProps' + +export const YEAR_COL_COUNT = 3 +const YEAR_ROW_COUNT = 4 + +export type YearBodyProps = { + prefixCls: string + locale: Locale + generateConfig: GenerateConfig + value?: NullableDateType + viewDate: DateType + disabledDate?: (date: DateType) => boolean + onSelect: (value: DateType) => void +} + +function YearBody(_props: YearBodyProps) { + const props = useMergeProps(_props) + const { prefixCls, value, viewDate, locale, generateConfig } = props + const { rangedValue, hoverRangedValue } = useInjectRange() + + const yearPrefixCls = `${prefixCls}-cell` + + // =============================== Year =============================== + const yearNumber = generateConfig.getYear(viewDate) + const startYear = Math.floor(yearNumber / YEAR_DECADE_COUNT) * YEAR_DECADE_COUNT + const endYear = startYear + YEAR_DECADE_COUNT - 1 + const baseYear = generateConfig.setYear( + viewDate, + startYear - Math.ceil((YEAR_COL_COUNT * YEAR_ROW_COUNT - YEAR_DECADE_COUNT) / 2) + ) + + const isInView = (date: DateType) => { + const currentYearNumber = generateConfig.getYear(date) + return startYear <= currentYearNumber && currentYearNumber <= endYear + } + + const getCellClassName = useCellClassName({ + cellPrefixCls: yearPrefixCls, + value, + generateConfig, + rangedValue: rangedValue.value, + hoverRangedValue: hoverRangedValue.value, + isSameCell: (current, target) => isSameYear(generateConfig, current, target), + isInView, + offsetCell: (date, offset) => generateConfig.addYear(date, offset) + }) + + return ( + + formatValue(date, { + locale, + format: 'YYYY', + generateConfig + }) + } + /> + ) +} + +YearBody.displayName = 'YearBody' +YearBody.inheritAttrs = false + +export default YearBody diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/YearHeader.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/YearHeader.tsx new file mode 100644 index 0000000..a4dbda6 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/YearHeader.tsx @@ -0,0 +1,50 @@ +import Header from '../Header' +import type { GenerateConfig } from '../../generate' +import { YEAR_DECADE_COUNT } from './index' + +import { useInjectPanel } from '../../PanelContext' +import useMergeProps from '../../hooks/useMergeProps' + +export type YearHeaderProps = { + prefixCls: string + viewDate: DateType + value?: DateType | null + generateConfig: GenerateConfig + + onPrevDecade: () => void + onNextDecade: () => void + onDecadeClick: () => void +} + +function YearHeader(_props: YearHeaderProps) { + const props = useMergeProps(_props) + const { prefixCls, generateConfig, viewDate, onPrevDecade, onNextDecade, onDecadeClick } = props + const { hideHeader } = useInjectPanel() + if (hideHeader?.value) { + return null + } + + const headerPrefixCls = `${prefixCls}-header` + + const yearNumber = generateConfig.getYear(viewDate) + const startYear = Math.floor(yearNumber / YEAR_DECADE_COUNT) * YEAR_DECADE_COUNT + const endYear = startYear + YEAR_DECADE_COUNT - 1 + + return ( +
+ +
+ ) +} + +YearHeader.displayName = 'YearHeader' +YearHeader.inheritAttrs = false + +export default YearHeader diff --git a/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/index.tsx b/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/index.tsx new file mode 100644 index 0000000..7a43bc8 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/panels/YearPanel/index.tsx @@ -0,0 +1,85 @@ +import YearHeader from './YearHeader'; +import YearBody, { YEAR_COL_COUNT } from './YearBody'; +import type { PanelSharedProps, PanelMode } from '../../interface'; +import { createKeydownHandler } from '../../utils/uiUtil'; +import useMergeProps from '../../hooks/useMergeProps'; + +export type YearPanelProps = { + sourceMode: PanelMode; +} & PanelSharedProps; + +export const YEAR_DECADE_COUNT = 10; + +function YearPanel(_props: YearPanelProps) { + const props = useMergeProps(_props); + const { + prefixCls, + operationRef, + onViewDateChange, + generateConfig, + value, + viewDate, + sourceMode, + onSelect, + onPanelChange, + } = props; + + const panelPrefixCls = `${prefixCls}-year-panel`; + + // ======================= Keyboard ======================= + operationRef.value = { + onKeydown: (event: KeyboardEvent) => + createKeydownHandler(event, { + onLeftRight: diff => { + onSelect(generateConfig.addYear(value || viewDate, diff), 'key'); + }, + onCtrlLeftRight: diff => { + onSelect(generateConfig.addYear(value || viewDate, diff * YEAR_DECADE_COUNT), 'key'); + }, + onUpDown: diff => { + onSelect(generateConfig.addYear(value || viewDate, diff * YEAR_COL_COUNT), 'key'); + }, + onEnter: () => { + onPanelChange(sourceMode === 'date' ? 'date' : 'month', value || viewDate); + }, + }), + }; + + // ==================== View Operation ==================== + const onDecadeChange = (diff: number) => { + const newDate = generateConfig.addYear(viewDate, diff * 10); + onViewDateChange(newDate); + onPanelChange(null, newDate); + }; + + return ( +
+ { + onDecadeChange(-1); + }} + onNextDecade={() => { + onDecadeChange(1); + }} + onDecadeClick={() => { + onPanelChange('decade', viewDate); + }} + /> + { + onPanelChange(sourceMode === 'date' ? 'date' : 'month', date); + onSelect(date, 'mouse'); + }} + /> +
+ ); +} + +YearPanel.displayName = 'YearPanel'; +YearPanel.inheritAttrs = false; + +export default YearPanel; diff --git a/src/core/components/BaseDatePicker/src/vc-picker/utils/dateUtil.ts b/src/core/components/BaseDatePicker/src/vc-picker/utils/dateUtil.ts new file mode 100644 index 0000000..b127977 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/utils/dateUtil.ts @@ -0,0 +1,320 @@ +import { DECADE_UNIT_DIFF } from '../panels/DecadePanel' +import type { PanelMode, NullableDateType, PickerMode, Locale, CustomFormat } from '../interface' +import type { GenerateConfig } from '../generate' + +export const WEEK_DAY_COUNT = 7 + +export function isNullEqual(value1: T, value2: T): boolean | undefined { + if (!value1 && !value2) { + return true + } + if (!value1 || !value2) { + return false + } + return undefined +} + +export function isSameDecade( + generateConfig: GenerateConfig, + decade1: NullableDateType, + decade2: NullableDateType +) { + const equal = isNullEqual(decade1, decade2) + if (typeof equal === 'boolean') { + return equal + } + + const num1 = Math.floor(generateConfig.getYear(decade1!) / 10) + const num2 = Math.floor(generateConfig.getYear(decade2!) / 10) + return num1 === num2 +} + +export function isSameYear( + generateConfig: GenerateConfig, + year1: NullableDateType, + year2: NullableDateType +) { + const equal = isNullEqual(year1, year2) + if (typeof equal === 'boolean') { + return equal + } + + return generateConfig.getYear(year1!) === generateConfig.getYear(year2!) +} + +export function getQuarter(generateConfig: GenerateConfig, date: DateType) { + const quota = Math.floor(generateConfig.getMonth(date) / 3) + return quota + 1 +} + +export function isSameQuarter( + generateConfig: GenerateConfig, + quarter1: NullableDateType, + quarter2: NullableDateType +) { + const equal = isNullEqual(quarter1, quarter2) + if (typeof equal === 'boolean') { + return equal + } + + return ( + isSameYear(generateConfig, quarter1, quarter2) && + getQuarter(generateConfig, quarter1!) === getQuarter(generateConfig, quarter2!) + ) +} + +export function isSameMonth( + generateConfig: GenerateConfig, + month1: NullableDateType, + month2: NullableDateType +) { + const equal = isNullEqual(month1, month2) + if (typeof equal === 'boolean') { + return equal + } + + return ( + isSameYear(generateConfig, month1, month2) && + generateConfig.getMonth(month1!) === generateConfig.getMonth(month2!) + ) +} + +export function isSameDate( + generateConfig: GenerateConfig, + date1: NullableDateType, + date2: NullableDateType +) { + const equal = isNullEqual(date1, date2) + if (typeof equal === 'boolean') { + return equal + } + + return ( + generateConfig.getYear(date1!) === generateConfig.getYear(date2!) && + generateConfig.getMonth(date1!) === generateConfig.getMonth(date2!) && + generateConfig.getDate(date1!) === generateConfig.getDate(date2!) + ) +} + +export function isSameTime( + generateConfig: GenerateConfig, + time1: NullableDateType, + time2: NullableDateType +) { + const equal = isNullEqual(time1, time2) + if (typeof equal === 'boolean') { + return equal + } + + return ( + generateConfig.getHour(time1!) === generateConfig.getHour(time2!) && + generateConfig.getMinute(time1!) === generateConfig.getMinute(time2!) && + generateConfig.getSecond(time1!) === generateConfig.getSecond(time2!) + ) +} + +export function isSameWeek( + generateConfig: GenerateConfig, + locale: string, + date1: NullableDateType, + date2: NullableDateType +) { + const equal = isNullEqual(date1, date2) + if (typeof equal === 'boolean') { + return equal + } + + return ( + generateConfig.locale.getWeek(locale, date1!) === generateConfig.locale.getWeek(locale, date2!) + ) +} + +export function isEqual( + generateConfig: GenerateConfig, + value1: NullableDateType, + value2: NullableDateType +) { + return isSameDate(generateConfig, value1, value2) && isSameTime(generateConfig, value1, value2) +} + +/** Between in date but not equal of date */ +export function isInRange( + generateConfig: GenerateConfig, + startDate: NullableDateType, + endDate: NullableDateType, + current: NullableDateType +) { + if (!startDate || !endDate || !current) { + return false + } + + return ( + !isSameDate(generateConfig, startDate, current) && + !isSameDate(generateConfig, endDate, current) && + generateConfig.isAfter(current, startDate) && + generateConfig.isAfter(endDate, current) + ) +} + +export function getWeekStartDate( + locale: string, + generateConfig: GenerateConfig, + value: DateType +) { + const weekFirstDay = generateConfig.locale.getWeekFirstDay(locale) + const monthStartDate = generateConfig.setDate(value, 1) + const startDateWeekDay = generateConfig.getWeekDay(monthStartDate) + + let alignStartDate = generateConfig.addDate(monthStartDate, weekFirstDay - startDateWeekDay) + + if ( + generateConfig.getMonth(alignStartDate) === generateConfig.getMonth(value) && + generateConfig.getDate(alignStartDate) > 1 + ) { + alignStartDate = generateConfig.addDate(alignStartDate, -7) + } + return alignStartDate +} + +export function getClosingViewDate( + viewDate: DateType, + picker: PickerMode, + generateConfig: GenerateConfig, + offset = 1 +): DateType { + switch (picker) { + case 'year': + return generateConfig.addYear(viewDate, offset * 10) + case 'quarter': + case 'month': + return generateConfig.addYear(viewDate, offset) + default: + return generateConfig.addMonth(viewDate, offset) + } +} + +export function formatValue( + value: DateType, + { + generateConfig, + locale, + format + }: { + generateConfig: GenerateConfig + locale: Locale + format: string | CustomFormat + } +) { + return typeof format === 'function' + ? format(value) + : generateConfig.locale.format(locale.locale, value, format) +} + +export function parseValue( + value: string, + { + generateConfig, + locale, + formatList + }: { + generateConfig: GenerateConfig + locale: Locale + formatList: (string | CustomFormat)[] + } +) { + if (!value || typeof formatList[0] === 'function') { + return null + } + + return generateConfig.locale.parse(locale.locale, value, formatList as string[]) +} + +// eslint-disable-next-line consistent-return +export function getCellDateDisabled({ + cellDate, + mode, + disabledDate, + generateConfig +}: { + cellDate: DateType + mode: Omit + generateConfig: GenerateConfig + disabledDate?: (date: DateType) => boolean +}): boolean { + if (!disabledDate) return false + // Whether cellDate is disabled in range + const getDisabledFromRange = ( + currentMode: 'date' | 'month' | 'year', + start: number, + end: number + ) => { + let current = start + while (current <= end) { + let date: DateType + switch (currentMode) { + case 'date': { + date = generateConfig.setDate(cellDate, current) + if (!disabledDate(date)) { + return false + } + break + } + case 'month': { + date = generateConfig.setMonth(cellDate, current) + if ( + !getCellDateDisabled({ + cellDate: date, + mode: 'month', + generateConfig, + disabledDate + }) + ) { + return false + } + break + } + case 'year': { + date = generateConfig.setYear(cellDate, current) + if ( + !getCellDateDisabled({ + cellDate: date, + mode: 'year', + generateConfig, + disabledDate + }) + ) { + return false + } + break + } + } + current += 1 + } + return true + } + switch (mode) { + case 'date': + case 'week': { + return disabledDate(cellDate) + } + case 'month': { + const startDate = 1 + const endDate = generateConfig.getDate(generateConfig.getEndDate(cellDate)) + return getDisabledFromRange('date', startDate, endDate) + } + case 'quarter': { + const startMonth = Math.floor(generateConfig.getMonth(cellDate) / 3) * 3 + const endMonth = startMonth + 2 + return getDisabledFromRange('month', startMonth, endMonth) + } + case 'year': { + return getDisabledFromRange('month', 0, 11) + } + case 'decade': { + const year = generateConfig.getYear(cellDate) + const startYear = Math.floor(year / DECADE_UNIT_DIFF) * DECADE_UNIT_DIFF + const endYear = startYear + DECADE_UNIT_DIFF - 1 + return getDisabledFromRange('year', startYear, endYear) + } + } +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/utils/getExtraFooter.tsx b/src/core/components/BaseDatePicker/src/vc-picker/utils/getExtraFooter.tsx new file mode 100644 index 0000000..b536ade --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/utils/getExtraFooter.tsx @@ -0,0 +1,13 @@ +import type { PanelMode } from '../interface'; + +export default function getExtraFooter( + prefixCls: string, + mode: PanelMode, + renderExtraFooter?: (mode: PanelMode) => any, +) { + if (!renderExtraFooter) { + return null; + } + + return ; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/utils/getRanges.tsx b/src/core/components/BaseDatePicker/src/vc-picker/utils/getRanges.tsx new file mode 100644 index 0000000..4412cfd --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/utils/getRanges.tsx @@ -0,0 +1,78 @@ +import type { VueNode } from 'ant-design-vue/es/_util/type'; +import type { Components, RangeList, Locale } from '../interface'; + +export type RangesProps = { + prefixCls: string; + rangeList?: RangeList; + components?: Components; + needConfirmButton: boolean; + onNow?: null | (() => void) | false; + onOk?: null | (() => void) | false; + okDisabled?: boolean; + showNow?: boolean; + locale: Locale; +}; + +export default function getRanges({ + prefixCls, + rangeList = [], + components = {}, + needConfirmButton, + onNow, + onOk, + okDisabled, + showNow, + locale, +}: RangesProps) { + let presetNode: VueNode; + let okNode: VueNode; + + if (rangeList.length) { + const Item = (components.rangeItem || 'span') as any; + + presetNode = ( + <> + {rangeList.map(({ label, onClick, onMouseenter, onMouseleave }) => ( +
  • + + {label} + +
  • + ))} + + ); + } + + if (needConfirmButton) { + const Button = (components.button || 'button') as any; + + if (onNow && !presetNode && showNow !== false) { + presetNode = ( +
  • + + {locale.now} + +
  • + ); + } + + okNode = needConfirmButton && ( +
  • + +
  • + ); + } + + if (!presetNode && !okNode) { + return null; + } + + return ( +
      + {presetNode} + {okNode} +
    + ); +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/utils/miscUtil.ts b/src/core/components/BaseDatePicker/src/vc-picker/utils/miscUtil.ts new file mode 100644 index 0000000..4ba6c67 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/utils/miscUtil.ts @@ -0,0 +1,58 @@ +export function leftPad(str: string | number, length: number, fill = '0') { + let current = String(str); + while (current.length < length) { + current = `${fill}${str}`; + } + return current; +} + +export const tuple = (...args: T) => args; + +export function toArray(val: T | T[]): T[] { + if (val === null || val === undefined) { + return []; + } + + return Array.isArray(val) ? val : [val]; +} + +export default function getDataOrAriaProps(props: any) { + const retProps: any = {}; + + Object.keys(props).forEach(key => { + if ( + (key.substr(0, 5) === 'data-' || + key.substr(0, 5) === 'aria-' || + key === 'role' || + key === 'name') && + key.substr(0, 7) !== 'data-__' + ) { + retProps[key] = props[key]; + } + }); + + return retProps; +} + +export function getValue(values: null | undefined | (T | null)[], index: number): T | null { + return values ? values[index] : null; +} + +type UpdateValue = (prev: T) => T; + +export function updateValues( + values: [T | null, T | null] | null, + value: T | UpdateValue, + index: number, +): R { + const newValues: [T | null, T | null] = [getValue(values, 0), getValue(values, 1)]; + + newValues[index] = + typeof value === 'function' ? (value as UpdateValue)(newValues[index]) : value; + + if (!newValues[0] && !newValues[1]) { + return null as unknown as R; + } + + return newValues as unknown as R; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/utils/timeUtil.ts b/src/core/components/BaseDatePicker/src/vc-picker/utils/timeUtil.ts new file mode 100644 index 0000000..f666723 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/utils/timeUtil.ts @@ -0,0 +1,60 @@ +import type { NullableDateType } from '../interface'; +import type { GenerateConfig } from '../generate'; + +export function setTime( + generateConfig: GenerateConfig, + date: DateType, + hour: number, + minute: number, + second: number, +): DateType { + let nextTime = generateConfig.setHour(date, hour); + nextTime = generateConfig.setMinute(nextTime, minute); + nextTime = generateConfig.setSecond(nextTime, second); + return nextTime; +} + +export function setDateTime( + generateConfig: GenerateConfig, + date: DateType, + defaultDate: NullableDateType, +) { + if (!defaultDate) { + return date; + } + + let newDate = date; + newDate = generateConfig.setHour(newDate, generateConfig.getHour(defaultDate)); + newDate = generateConfig.setMinute(newDate, generateConfig.getMinute(defaultDate)); + newDate = generateConfig.setSecond(newDate, generateConfig.getSecond(defaultDate)); + return newDate; +} + +export function getLowerBoundTime( + hour: number, + minute: number, + second: number, + hourStep: number, + minuteStep: number, + secondStep: number, +): [number, number, number] { + const lowerBoundHour = Math.floor(hour / hourStep) * hourStep; + if (lowerBoundHour < hour) { + return [lowerBoundHour, 60 - minuteStep, 60 - secondStep]; + } + const lowerBoundMinute = Math.floor(minute / minuteStep) * minuteStep; + if (lowerBoundMinute < minute) { + return [lowerBoundHour, lowerBoundMinute, 60 - secondStep]; + } + const lowerBoundSecond = Math.floor(second / secondStep) * secondStep; + return [lowerBoundHour, lowerBoundMinute, lowerBoundSecond]; +} + +export function getLastDay(generateConfig: GenerateConfig, date: DateType) { + const year = generateConfig.getYear(date); + const month = generateConfig.getMonth(date) + 1; + const endDate = generateConfig.getEndDate(generateConfig.getFixedDate(`${year}-${month}-01`)); + const lastDay = generateConfig.getDate(endDate); + const monthShow = month < 10 ? `0${month}` : `${month}`; + return `${year}-${monthShow}-${lastDay}`; +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/utils/uiUtil.ts b/src/core/components/BaseDatePicker/src/vc-picker/utils/uiUtil.ts new file mode 100644 index 0000000..34605dd --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/utils/uiUtil.ts @@ -0,0 +1,279 @@ +import isVisible from 'ant-design-vue/es/vc-util/Dom/isVisible'; +import KeyCode from 'ant-design-vue/es/_util/KeyCode'; +import raf from 'ant-design-vue/es/_util/raf'; +import type { GenerateConfig } from '../generate'; +import type { CustomFormat, PanelMode, PickerMode } from '../interface'; + +const scrollIds = new Map(); + +/** Trigger when element is visible in view */ +export function waitElementReady(element: HTMLElement, callback: () => void): () => void { + let id: number; + + function tryOrNextFrame() { + if (isVisible(element)) { + callback(); + } else { + id = raf(() => { + tryOrNextFrame(); + }); + } + } + + tryOrNextFrame(); + + return () => { + raf.cancel(id); + }; +} + +/* eslint-disable no-param-reassign */ +export function scrollTo(element: HTMLElement, to: number, duration: number) { + if (scrollIds.get(element)) { + raf.cancel(scrollIds.get(element)!); + } + + // jump to target if duration zero + if (duration <= 0) { + scrollIds.set( + element, + raf(() => { + element.scrollTop = to; + }), + ); + + return; + } + const difference = to - element.scrollTop; + const perTick = (difference / duration) * 10; + + scrollIds.set( + element, + raf(() => { + element.scrollTop += perTick; + if (element.scrollTop !== to) { + scrollTo(element, to, duration - 10); + } + }), + ); +} +/* eslint-enable */ + +export type KeyboardConfig = { + onLeftRight?: ((diff: number) => void) | null; + onCtrlLeftRight?: ((diff: number) => void) | null; + onUpDown?: ((diff: number) => void) | null; + onPageUpDown?: ((diff: number) => void) | null; + onEnter?: (() => void) | null; +}; +export function createKeydownHandler( + event: KeyboardEvent, + { onLeftRight, onCtrlLeftRight, onUpDown, onPageUpDown, onEnter }: KeyboardConfig, +): boolean { + const { which, ctrlKey, metaKey } = event; + + switch (which) { + case KeyCode.LEFT: + if (ctrlKey || metaKey) { + if (onCtrlLeftRight) { + onCtrlLeftRight(-1); + return true; + } + } else if (onLeftRight) { + onLeftRight(-1); + return true; + } + /* istanbul ignore next */ + break; + + case KeyCode.RIGHT: + if (ctrlKey || metaKey) { + if (onCtrlLeftRight) { + onCtrlLeftRight(1); + return true; + } + } else if (onLeftRight) { + onLeftRight(1); + return true; + } + /* istanbul ignore next */ + break; + + case KeyCode.UP: + if (onUpDown) { + onUpDown(-1); + return true; + } + /* istanbul ignore next */ + break; + + case KeyCode.DOWN: + if (onUpDown) { + onUpDown(1); + return true; + } + /* istanbul ignore next */ + break; + + case KeyCode.PAGE_UP: + if (onPageUpDown) { + onPageUpDown(-1); + return true; + } + /* istanbul ignore next */ + break; + + case KeyCode.PAGE_DOWN: + if (onPageUpDown) { + onPageUpDown(1); + return true; + } + /* istanbul ignore next */ + break; + + case KeyCode.ENTER: + if (onEnter) { + onEnter(); + return true; + } + /* istanbul ignore next */ + break; + } + + return false; +} + +// ===================== Format ===================== +export function getDefaultFormat( + format: string | CustomFormat | (string | CustomFormat)[] | undefined, + picker: PickerMode | undefined, + showTime: boolean | object | undefined, + use12Hours: boolean | undefined, +) { + let mergedFormat = format; + if (!mergedFormat) { + switch (picker) { + case 'time': + mergedFormat = use12Hours ? 'hh:mm:ss a' : 'HH:mm:ss'; + break; + + case 'week': + mergedFormat = 'gggg-wo'; + break; + + case 'month': + mergedFormat = 'YYYY-MM'; + break; + + case 'quarter': + mergedFormat = 'YYYY-[Q]Q'; + break; + + case 'year': + mergedFormat = 'YYYY'; + break; + + default: + mergedFormat = showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'; + } + } + + return mergedFormat; +} + +export function getInputSize( + picker: PickerMode | undefined, + format: string | CustomFormat, + generateConfig: GenerateConfig, +) { + const defaultSize = picker === 'time' ? 8 : 10; + const length = + typeof format === 'function' ? format(generateConfig.getNow()).length : format.length; + return Math.max(defaultSize, length) + 2; +} + +// ===================== Window ===================== +type ClickEventHandler = (event: MouseEvent) => void; +let globalClickFunc: ClickEventHandler | null = null; +const clickCallbacks = new Set(); + +export function addGlobalMousedownEvent(callback: ClickEventHandler) { + if (!globalClickFunc && typeof window !== 'undefined' && window.addEventListener) { + globalClickFunc = (e: MouseEvent) => { + // Clone a new list to avoid repeat trigger events + [...clickCallbacks].forEach(queueFunc => { + queueFunc(e); + }); + }; + window.addEventListener('mousedown', globalClickFunc); + } + + clickCallbacks.add(callback); + + return () => { + clickCallbacks.delete(callback); + if (clickCallbacks.size === 0) { + window.removeEventListener('mousedown', globalClickFunc!); + globalClickFunc = null; + } + }; +} + +export function getTargetFromEvent(e: Event) { + const target = e.target as HTMLElement; + + // get target if in shadow dom + if (e.composed && target.shadowRoot) { + return (e.composedPath?.()[0] || target) as HTMLElement; + } + + return target; +} + +// ====================== Mode ====================== +const getYearNextMode = (next: PanelMode): PanelMode => { + if (next === 'month' || next === 'date') { + return 'year'; + } + return next; +}; + +const getMonthNextMode = (next: PanelMode): PanelMode => { + if (next === 'date') { + return 'month'; + } + return next; +}; + +const getQuarterNextMode = (next: PanelMode): PanelMode => { + if (next === 'month' || next === 'date') { + return 'quarter'; + } + return next; +}; + +const getWeekNextMode = (next: PanelMode): PanelMode => { + if (next === 'date') { + return 'week'; + } + return next; +}; + +export const PickerModeMap: Record PanelMode) | null> = { + year: getYearNextMode, + month: getMonthNextMode, + quarter: getQuarterNextMode, + week: getWeekNextMode, + time: null, + date: null, +}; + +export function elementsContains( + elements: (HTMLElement | undefined | null)[], + target: HTMLElement, +) { + if (process.env.NODE_ENV === 'test') { + return false; + } + return elements.some(ele => ele && ele.contains(target)); +} diff --git a/src/core/components/BaseDatePicker/src/vc-picker/utils/warnUtil.ts b/src/core/components/BaseDatePicker/src/vc-picker/utils/warnUtil.ts new file mode 100644 index 0000000..b725ab2 --- /dev/null +++ b/src/core/components/BaseDatePicker/src/vc-picker/utils/warnUtil.ts @@ -0,0 +1,17 @@ +import { warning } from 'ant-design-vue/es/vc-util/warning'; +import type { DisabledTimes, PickerMode } from '../interface'; + +export interface WarningProps extends DisabledTimes { + picker?: PickerMode; +} + +export function legacyPropsWarning(props: WarningProps) { + const { picker, disabledHours, disabledMinutes, disabledSeconds } = props; + + if (picker === 'time' && (disabledHours || disabledMinutes || disabledSeconds)) { + warning( + false, + `'disabledHours', 'disabledMinutes', 'disabledSeconds' will be removed in the next major version, please use 'disabledTime' instead.`, + ); + } +} diff --git a/src/core/components/BaseIcon/index.ts b/src/core/components/BaseIcon/index.ts new file mode 100644 index 0000000..d404b5f --- /dev/null +++ b/src/core/components/BaseIcon/index.ts @@ -0,0 +1,2 @@ +import BaseIcon from './src/Icon.vue' +export default BaseIcon diff --git a/src/core/components/BaseIcon/src/Icon.vue b/src/core/components/BaseIcon/src/Icon.vue new file mode 100644 index 0000000..3c92524 --- /dev/null +++ b/src/core/components/BaseIcon/src/Icon.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/core/components/BaseInputNumber/index.ts b/src/core/components/BaseInputNumber/index.ts new file mode 100644 index 0000000..c4ecadd --- /dev/null +++ b/src/core/components/BaseInputNumber/index.ts @@ -0,0 +1,2 @@ +import BaseInputNumber from './src/BaseInputNumber.vue' +export default BaseInputNumber diff --git a/src/core/components/BaseInputNumber/src/BaseInputNumber.vue b/src/core/components/BaseInputNumber/src/BaseInputNumber.vue new file mode 100644 index 0000000..ad9b14d --- /dev/null +++ b/src/core/components/BaseInputNumber/src/BaseInputNumber.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/src/core/components/BaseModal/index.ts b/src/core/components/BaseModal/index.ts new file mode 100644 index 0000000..328438a --- /dev/null +++ b/src/core/components/BaseModal/index.ts @@ -0,0 +1,2 @@ +import BaseModal from './src/Modal.vue' +export default BaseModal diff --git a/src/core/components/BaseModal/src/Modal.vue b/src/core/components/BaseModal/src/Modal.vue new file mode 100644 index 0000000..b10e2f0 --- /dev/null +++ b/src/core/components/BaseModal/src/Modal.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/core/components/BaseSwitch/index.ts b/src/core/components/BaseSwitch/index.ts new file mode 100644 index 0000000..f639f48 --- /dev/null +++ b/src/core/components/BaseSwitch/index.ts @@ -0,0 +1,2 @@ +import BaseSwitch from './src/BaseSwitch.vue' +export default BaseSwitch diff --git a/src/core/components/BaseSwitch/src/BaseSwitch.vue b/src/core/components/BaseSwitch/src/BaseSwitch.vue new file mode 100644 index 0000000..426a6d2 --- /dev/null +++ b/src/core/components/BaseSwitch/src/BaseSwitch.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/core/components/BaseTable/hooks/filterOperator.ts b/src/core/components/BaseTable/hooks/filterOperator.ts new file mode 100644 index 0000000..5a0bb4e --- /dev/null +++ b/src/core/components/BaseTable/hooks/filterOperator.ts @@ -0,0 +1,89 @@ +import type { ColumnTypeFilter, FilterOP } from '@core/type/baseTable' +/*interface FilterOperator { + label: string + value: FilterOP + // showIn: ColumnTypeFilter[] +}*/ + +//type ColumnTypeFilter = 'Date' | 'Time' | 'DateTime' | 'Select' | 'Text' | 'Boolean' | 'Number' +/*export const filterOperatorList: FilterOperator[] = [ + { + value: 'eq', + label: 'برابر' + // showIn: ['Date', 'Time', 'DateTime', 'Select', 'Text', 'Boolean', 'Number'] + }, + { + value: 'not', + label: 'نابرابر' + }, + { + value: 'gt', + label: 'بزرگتر' + }, + { + value: 'lt', + label: 'کوچکتر' + }, + { + value: 'gte', + label: 'بزرگتر مساوی' + }, + { + value: 'lte', + label: 'کوچکتر مساوی' + }, + { + value: 'sw', + label: 'شروع با' + }, + { + value: 'ew', + label: 'خاتمه با' + }, + { + value: 'has', + label: 'شامل' + }, + /!*{ + value: 'bet', + label: 'بین' + },*!/ + { + value: 'null', + label: 'تهی' + }, + { + value: 'nn', + label: 'تهی نباشد' + }, + { + value: 'in', + label: 'شامل در' + } +]*/ + +export const MapFilterOpToFaString: Record = { + sw: 'شروع با', + bet: '', + gte: 'بزرگتر مساوی', + has: 'شامل', + lte: 'کوچکتر مساوی', + not: 'نابرابر', + eq: 'برابر', + ew: 'خاتمه با', + null: 'تهی', + lt: 'کوچکتر', + in: 'شامل در', + gt: 'بزرگتر', + nn: 'تهی نباشد' +} + +export const availableFilterType: Record = { + Text: ['eq', 'sw', 'ew', 'has', 'in', 'nn', 'not', 'null'], + Number: ['eq', 'gt', 'lt', 'gte', 'lte', 'not', 'nn', 'in', 'null'], + Boolean: ['eq', 'not', 'nn', 'null', 'in'], + Date: ['eq', 'gt', 'lt', 'gte', 'lte', 'sw', 'ew', 'has', 'not', 'null', 'in', 'nn'], + Time: ['eq', 'gt', 'lt', 'gte', 'lte', 'sw', 'ew', 'has', 'not', 'null', 'in', 'nn'], + DateTime: ['eq', 'gt', 'lt', 'gte', 'lte', 'sw', 'ew', 'has', 'not', 'null', 'in', 'nn'], + Select: ['eq', 'gt', 'lt', 'gte', 'lte', 'sw', 'ew', 'nn', 'not', 'null', 'has', 'in'] +} diff --git a/src/core/components/BaseTable/hooks/useBaseTable.ts b/src/core/components/BaseTable/hooks/useBaseTable.ts new file mode 100644 index 0000000..4f12e88 --- /dev/null +++ b/src/core/components/BaseTable/hooks/useBaseTable.ts @@ -0,0 +1,18 @@ +import type { BaseTableEmit } from '@core/type/baseTable' + +function useBaseTable() { + let reload = (): any => { + throw 'base table not register reload function' + } + const runReload = () => { + reload() + } + const register = (data?: BaseTableEmit) => { + if (data && data.reload) { + reload = data.reload + } + } + return [register, runReload] +} + +export default useBaseTable diff --git a/src/core/components/BaseTable/index.ts b/src/core/components/BaseTable/index.ts new file mode 100644 index 0000000..99ef638 --- /dev/null +++ b/src/core/components/BaseTable/index.ts @@ -0,0 +1,2 @@ +import BaseTable from './src/BaseTable.vue' +export default BaseTable diff --git a/src/core/components/BaseTable/src/BaseTable.vue b/src/core/components/BaseTable/src/BaseTable.vue new file mode 100644 index 0000000..38a3129 --- /dev/null +++ b/src/core/components/BaseTable/src/BaseTable.vue @@ -0,0 +1,696 @@ + + + + + diff --git a/src/core/components/BaseTableOld/hooks/filterOperator.ts b/src/core/components/BaseTableOld/hooks/filterOperator.ts new file mode 100644 index 0000000..5a0bb4e --- /dev/null +++ b/src/core/components/BaseTableOld/hooks/filterOperator.ts @@ -0,0 +1,89 @@ +import type { ColumnTypeFilter, FilterOP } from '@core/type/baseTable' +/*interface FilterOperator { + label: string + value: FilterOP + // showIn: ColumnTypeFilter[] +}*/ + +//type ColumnTypeFilter = 'Date' | 'Time' | 'DateTime' | 'Select' | 'Text' | 'Boolean' | 'Number' +/*export const filterOperatorList: FilterOperator[] = [ + { + value: 'eq', + label: 'برابر' + // showIn: ['Date', 'Time', 'DateTime', 'Select', 'Text', 'Boolean', 'Number'] + }, + { + value: 'not', + label: 'نابرابر' + }, + { + value: 'gt', + label: 'بزرگتر' + }, + { + value: 'lt', + label: 'کوچکتر' + }, + { + value: 'gte', + label: 'بزرگتر مساوی' + }, + { + value: 'lte', + label: 'کوچکتر مساوی' + }, + { + value: 'sw', + label: 'شروع با' + }, + { + value: 'ew', + label: 'خاتمه با' + }, + { + value: 'has', + label: 'شامل' + }, + /!*{ + value: 'bet', + label: 'بین' + },*!/ + { + value: 'null', + label: 'تهی' + }, + { + value: 'nn', + label: 'تهی نباشد' + }, + { + value: 'in', + label: 'شامل در' + } +]*/ + +export const MapFilterOpToFaString: Record = { + sw: 'شروع با', + bet: '', + gte: 'بزرگتر مساوی', + has: 'شامل', + lte: 'کوچکتر مساوی', + not: 'نابرابر', + eq: 'برابر', + ew: 'خاتمه با', + null: 'تهی', + lt: 'کوچکتر', + in: 'شامل در', + gt: 'بزرگتر', + nn: 'تهی نباشد' +} + +export const availableFilterType: Record = { + Text: ['eq', 'sw', 'ew', 'has', 'in', 'nn', 'not', 'null'], + Number: ['eq', 'gt', 'lt', 'gte', 'lte', 'not', 'nn', 'in', 'null'], + Boolean: ['eq', 'not', 'nn', 'null', 'in'], + Date: ['eq', 'gt', 'lt', 'gte', 'lte', 'sw', 'ew', 'has', 'not', 'null', 'in', 'nn'], + Time: ['eq', 'gt', 'lt', 'gte', 'lte', 'sw', 'ew', 'has', 'not', 'null', 'in', 'nn'], + DateTime: ['eq', 'gt', 'lt', 'gte', 'lte', 'sw', 'ew', 'has', 'not', 'null', 'in', 'nn'], + Select: ['eq', 'gt', 'lt', 'gte', 'lte', 'sw', 'ew', 'nn', 'not', 'null', 'has', 'in'] +} diff --git a/src/core/components/BaseTableOld/hooks/useBaseTable.ts b/src/core/components/BaseTableOld/hooks/useBaseTable.ts new file mode 100644 index 0000000..4f12e88 --- /dev/null +++ b/src/core/components/BaseTableOld/hooks/useBaseTable.ts @@ -0,0 +1,18 @@ +import type { BaseTableEmit } from '@core/type/baseTable' + +function useBaseTable() { + let reload = (): any => { + throw 'base table not register reload function' + } + const runReload = () => { + reload() + } + const register = (data?: BaseTableEmit) => { + if (data && data.reload) { + reload = data.reload + } + } + return [register, runReload] +} + +export default useBaseTable diff --git a/src/core/components/BaseTableOld/index.ts b/src/core/components/BaseTableOld/index.ts new file mode 100644 index 0000000..99ef638 --- /dev/null +++ b/src/core/components/BaseTableOld/index.ts @@ -0,0 +1,2 @@ +import BaseTable from './src/BaseTable.vue' +export default BaseTable diff --git a/src/core/components/BaseTableOld/src/BaseTable.vue b/src/core/components/BaseTableOld/src/BaseTable.vue new file mode 100644 index 0000000..d8a8f48 --- /dev/null +++ b/src/core/components/BaseTableOld/src/BaseTable.vue @@ -0,0 +1,687 @@ + + + + + diff --git a/src/core/components/_sample/_index.vue b/src/core/components/_sample/_index.vue new file mode 100644 index 0000000..d89ac0d --- /dev/null +++ b/src/core/components/_sample/_index.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/core/components/_sample/components/buttons.vue b/src/core/components/_sample/components/buttons.vue new file mode 100644 index 0000000..7aa748a --- /dev/null +++ b/src/core/components/_sample/components/buttons.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/core/components/_sample/components/datePicker.vue b/src/core/components/_sample/components/datePicker.vue new file mode 100644 index 0000000..010b58e --- /dev/null +++ b/src/core/components/_sample/components/datePicker.vue @@ -0,0 +1,12 @@ + + + + + diff --git a/src/core/components/_sample/components/icons.vue b/src/core/components/_sample/components/icons.vue new file mode 100644 index 0000000..526b533 --- /dev/null +++ b/src/core/components/_sample/components/icons.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/src/core/components/_sample/components/modal.vue b/src/core/components/_sample/components/modal.vue new file mode 100644 index 0000000..891ff04 --- /dev/null +++ b/src/core/components/_sample/components/modal.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/core/composable/appInfo.ts b/src/core/composable/appInfo.ts new file mode 100644 index 0000000..10a8e45 --- /dev/null +++ b/src/core/composable/appInfo.ts @@ -0,0 +1,9 @@ +export function openNewTabBalance() { + const height = screen.height + window.open( + '/admin/balance', + '_blank', + `width=400,height=${height},toolbar=no,menubar=no,scrollbars=no,resizable=no` + ) + } + \ No newline at end of file diff --git a/src/core/composable/usePrefix.ts b/src/core/composable/usePrefix.ts new file mode 100644 index 0000000..b388b37 --- /dev/null +++ b/src/core/composable/usePrefix.ts @@ -0,0 +1,8 @@ +import { prefixCls } from '../../../config' + +export function usePrefix(name = '') { + return { + prefixVar: prefixCls, + prefixCls: `${prefixCls}-${name}` + } +} diff --git a/src/core/config.json b/src/core/config.json new file mode 100644 index 0000000..ca5c488 --- /dev/null +++ b/src/core/config.json @@ -0,0 +1,3 @@ +{ + "version": "0.0.2" +} diff --git a/src/core/config.ts b/src/core/config.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/core/config/vite.ts b/src/core/config/vite.ts new file mode 100644 index 0000000..37b5762 --- /dev/null +++ b/src/core/config/vite.ts @@ -0,0 +1,66 @@ +import { fileURLToPath, URL } from 'node:url' +import type { UserConfigExport } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import { resolve } from 'path' +import UnoCSS from './vitePlugins/unoCss' +import Components from './vitePlugins/unplugin-vue-components' +import AutoImport from './vitePlugins/unplugin-auto-import' +import VitePWA from './vitePlugins/vite-plugin-pwa' +/** + * @see https://vitejs.dev/config/ + */ +export const baseConfigVite: UserConfigExport = { + // Directory to serve as plain static assets. + publicDir: 'public', + // Adjust console output verbosity. + //logLevel: 'info', + //VitePWA + plugins: [vue(), vueJsx(), UnoCSS, AutoImport, Components], + resolve: { + extensions: ['*', '.js', '.vue', '.json', '.ts', '.tsx', '.mjs'], + alias: { + '@root': fileURLToPath(new URL('../../../', import.meta.url)), + '@core': fileURLToPath(new URL('../', import.meta.url)), + '@assets': fileURLToPath(new URL('./src/assets', import.meta.url)), + '@': fileURLToPath(new URL('../../', import.meta.url)), + '~': fileURLToPath(new URL('./node_modules', import.meta.url)) + } + }, + server: { + port: 3000, + host: true + }, + css: { + preprocessorOptions: { + less: { + modifyVars: { + // Used for global import to avoid the need to import each style file separately + // reference: Avoid repeated references + hack: `; @import (reference) "${resolve('./src/core/assets/css/var.less')}"` + }, + javascriptEnabled: true + } + } + }, + /** + * By default, Vite will crawl your index.html to detect dependencies that + * need to be pre-bundled. If build.rollupOptions.input is specified, + * Vite will crawl those entry points instead. + * + * @see https://vitejs.dev/config/#optimizedeps-entries + */ + optimizeDeps: { + //include: ['vue'], + //disabled: false + }, + build: { + //minify: 'terser', + // Do not warn about large chunks + // chunkSizeWarningLimit: Infinity, + // Double the default size threshold for inlined assets + // https://vitejs.dev/config/build-options.html#build-assetsinlinelimit + //assetsInlineLimit: 4096 * 2, + //commonjsOptions: { include: [] } + } +} diff --git a/src/core/config/vitePlugins/unoCss.ts b/src/core/config/vitePlugins/unoCss.ts new file mode 100644 index 0000000..eed332b --- /dev/null +++ b/src/core/config/vitePlugins/unoCss.ts @@ -0,0 +1,43 @@ +import UnoCSS from 'unocss/vite' +import { presetAttributify, presetUno } from 'unocss' +import transformerDirectives from '@unocss/transformer-directives' +import transformerVariantGroup from '@unocss/transformer-variant-group' +import transformerCompileClass from '@unocss/transformer-compile-class' +//import { presetScrollbarHide } from 'unocss-preset-scrollbar-hide' + +/** + * @see https://github.com/unocss/unocss + */ +export default UnoCSS({ + presets: [ + /** + * @see https://github.com/unocss/unocss/tree/main/packages/preset-attributify + */ + presetAttributify({ + /* preset options */ + }), + /** + * @see https://github.com/unocss/unocss/tree/main/packages/preset-uno + */ + presetUno() + /** + * @see https://github.com/reslear/unocss-preset-scrollbar-hide + */ + //presetScrollbarHide() + // ...custom presets + ], + transformers: [ + /** + * @see https://github.com/unocss/unocss/tree/main/packages/transformer-directives + */ + transformerDirectives(), + /** + * @see https://github.com/unocss/unocss/tree/main/packages/transformer-variant-group + */ + transformerVariantGroup(), + /** + * @see https://github.com/unocss/unocss/tree/main/packages/transformer-compile-class/ + */ + transformerCompileClass() + ] +}) diff --git a/src/core/config/vitePlugins/unplugin-auto-import.ts b/src/core/config/vitePlugins/unplugin-auto-import.ts new file mode 100644 index 0000000..b1f4234 --- /dev/null +++ b/src/core/config/vitePlugins/unplugin-auto-import.ts @@ -0,0 +1,85 @@ +import AutoImport from 'unplugin-auto-import/vite' + +/** + * @see https://github.com/antfu/unplugin-auto-import + */ +export default AutoImport({ + // targets to transform + include: [ + /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx + /\.vue$/, + /\.vue\?vue/, // .vue + /\.md$/ // .md + ], + + // global imports to register + imports: [ + // presets + 'vue', + 'vue-router', + 'pinia', + // custom + { + /*'@vueuse/core': [ + // named imports + 'useMouse', // import { useMouse } from '@vueuse/core', + // alias + ['useFetch', 'useMyFetch'] // import { useFetch as useMyFetch } from '@vueuse/core', + ]*/ + /* axios: [ + // default imports + ['default', 'axios'] // import { default as axios } from 'axios', + ],*/ + /*'[package-name]': [ + '[import-names]', + // alias + ['[from]', '[alias]'] + ]*/ + } + // example type import + /*{ + from: 'vue-router', + imports: ['RouteLocationRaw'], + type: true + }*/ + ], + // Enable auto import by filename for default module exports under directories + defaultExportByFilename: false, + + // Auto import for module exports under directories + // by default it only scan one level of modules under the directory + dirs: [ + // './hooks', + // './composables' // only root modules + // './composables/**', // all nested modules + // ... + ], + + // Filepath to generate corresponding .d.ts file. + // Defaults to './auto-imports.d.ts' when `typescript` is installed locally. + // Set `false` to disable. + dts: './auto-imports.d.ts', + + // Cache the result of resolving, across multiple vite builds. + // A custom path is supported. + // When set to `true`, the cache will be stored in `node_modules/.cache/unplugin-auto-import.json`. + cache: false, + + // Auto import inside Vue template + // see https://github.com/unjs/unimport/pull/15 and https://github.com/unjs/unimport/pull/72 + vueTemplate: false, + + // Custom resolvers, compatible with `unplugin-vue-components` + // see https://github.com/antfu/unplugin-auto-import/pull/23/ + resolvers: [ + /* ... */ + ], + + // Generate corresponding .eslintrc-auto-import.json file. + // eslint globals Docs - https://eslint.org/docs/user-guide/configuring/language-options#specifying-globals + eslintrc: { + enabled: true, // Default `false` + filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json` + globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable') + } +}) diff --git a/src/core/config/vitePlugins/unplugin-vue-components.ts b/src/core/config/vitePlugins/unplugin-vue-components.ts new file mode 100644 index 0000000..defc846 --- /dev/null +++ b/src/core/config/vitePlugins/unplugin-vue-components.ts @@ -0,0 +1,38 @@ +import Components from 'unplugin-vue-components/vite' +import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers' + +/** + * @see https://github.com/antfu/unplugin-vue-components + */ +export default Components({ + // valid file extensions for components. + //extensions: ['vue', 'ts'], + // Allow subdirectories as namespace prefix for components. + // directoryAsNamespace: false, + //collapseSamePrefixes: false, + //allowOverrides: true, + dts: true, + include: [/\.vue$/, /\.vue\?vue/, /\.md$/], + //include: [/\/index\.vue$/, /\/index\.ts$/, /\.vue\?vue/, /\.md$/], + //'src/components/**' + globs: [ + 'src/components/*/index.ts', + 'src/components/*/_index.vue', + 'src/components/*', + 'src/core/components/*/index.ts', + 'src/core/components/*/_index.vue', + 'src/core/components/*' + ], + //deep: true,s + resolvers: [AntDesignVueResolver({ importStyle: false })] +}) + +/*** + * dirs: ['src/hooks/**', 'src/utils/**', 'src/store/**', 'src/api/**'], + * Components({ + * dirs: ['src/components', 'src/icons'], + * extensions: ['vue'], + * deep: true, + * dts: './typings/components.d.ts' + * }), + */ diff --git a/src/core/config/vitePlugins/vite-plugin-pwa.ts b/src/core/config/vitePlugins/vite-plugin-pwa.ts new file mode 100644 index 0000000..0ae94f5 --- /dev/null +++ b/src/core/config/vitePlugins/vite-plugin-pwa.ts @@ -0,0 +1,33 @@ +import { VitePWA } from 'vite-plugin-pwa' + +//todo complete +export default VitePWA({ + base: '/', + includeAssets: ['favicon.svg', 'favicon.ico', 'robots.txt', 'apple-touch-icon.png'], + manifest: { + name: 'Admin V3 - A complete Vue 3 design system', + short_name: 'AdminV3', + start_url: '/', + display: 'standalone', + theme_color: '#ffffff', + background_color: '#ffffff', + icons: [ + { + src: 'pwa-192x192.png', + sizes: '192x192', + type: 'image/png' + }, + { + src: 'pwa-512x512.png', + sizes: '512x512', + type: 'image/png' + }, + { + src: 'pwa-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'any maskable' + } + ] + } +}) diff --git a/src/core/layouts/BaseSettings.vue b/src/core/layouts/BaseSettings.vue new file mode 100644 index 0000000..e9fe982 --- /dev/null +++ b/src/core/layouts/BaseSettings.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/core/layouts/BaseSideMenu.vue b/src/core/layouts/BaseSideMenu.vue new file mode 100644 index 0000000..2def44a --- /dev/null +++ b/src/core/layouts/BaseSideMenu.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/core/layouts/BasicHeader.vue b/src/core/layouts/BasicHeader.vue new file mode 100644 index 0000000..09b97e5 --- /dev/null +++ b/src/core/layouts/BasicHeader.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/src/core/layouts/BasicLayout.vue b/src/core/layouts/BasicLayout.vue new file mode 100644 index 0000000..9fad3c4 --- /dev/null +++ b/src/core/layouts/BasicLayout.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/src/core/layouts/composnts/BaseMenuItem.vue b/src/core/layouts/composnts/BaseMenuItem.vue new file mode 100644 index 0000000..cbbb21d --- /dev/null +++ b/src/core/layouts/composnts/BaseMenuItem.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/core/layouts/composnts/BasicMenu.vue b/src/core/layouts/composnts/BasicMenu.vue new file mode 100644 index 0000000..a762ad3 --- /dev/null +++ b/src/core/layouts/composnts/BasicMenu.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/src/core/layouts/composnts/BasicSubMenu.vue b/src/core/layouts/composnts/BasicSubMenu.vue new file mode 100644 index 0000000..b59235e --- /dev/null +++ b/src/core/layouts/composnts/BasicSubMenu.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/core/pages/404.vue b/src/core/pages/404.vue new file mode 100644 index 0000000..1d5f082 --- /dev/null +++ b/src/core/pages/404.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/src/core/pages/assets/svgs/404.svg b/src/core/pages/assets/svgs/404.svg new file mode 100644 index 0000000..4bcd522 --- /dev/null +++ b/src/core/pages/assets/svgs/404.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/core/pages/index.vue b/src/core/pages/index.vue new file mode 100644 index 0000000..f0a8dc5 --- /dev/null +++ b/src/core/pages/index.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/core/pages/login.vue b/src/core/pages/login.vue new file mode 100644 index 0000000..d198522 --- /dev/null +++ b/src/core/pages/login.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/core/plugins/pinia.ts b/src/core/plugins/pinia.ts new file mode 100644 index 0000000..eafdca5 --- /dev/null +++ b/src/core/plugins/pinia.ts @@ -0,0 +1,6 @@ +import { createPinia } from 'pinia' +import type { App } from 'vue' + +export function setupPinia(app: App) { + app.use(createPinia()) +} diff --git a/src/core/router/index.ts b/src/core/router/index.ts new file mode 100644 index 0000000..1173af5 --- /dev/null +++ b/src/core/router/index.ts @@ -0,0 +1,206 @@ +import { createRouter, createWebHistory, type Router, type RouteRecordRaw } from 'vue-router' +import type { App } from 'vue' +import { isDev } from '@core/utils/is' +import { useRouterStore } from '@core/stores/router' +//import { flatten } from 'lodash' +//import { routes } from '@core/router/routes' +//import { isToken } from '@/utils/is' +//import { sellerRoutes } from '@/router/seller' +//import { useUserStore } from '@/store/user' +//console.log('pppp', routes.slice()) +//const routeWithoutAuth: string[] = ['login', 'main', 'test2'] +/*router.beforeEach((to, from, next) => { + /!* if (isToken()) { + //debugger + const userStore = useUserStore() + if (to.name == 'login') { + router.push({ name: 'profile' }) + return + } + if (userStore.hasUserName) { + if (to.name == 'signUp') { + router.push({ name: 'profile' }) + return + } + next() + } else { + //if() + if (to.name == 'signUp') { + next() + } else { + router.push({ name: 'signUp' }) + return + } + } + //console.log('aaa', userStore.hasUserName) + /!*if (to.name != 'signUp' && !userStore.hasUserName) { + return router.push({ name: 'signUp' }) + }*!/ + /!* else { + //return router.push({ name: 'profile' }) + }*!/ + } else { + if (routeWithoutAuth.includes(to.name as string)) { + next() + } else { + router.push({ name: 'login' }) + } + }*!/ +})*/ + +/*export function setupRoutes() { + //sellerRoutes.forEach((item) => router.addRoute(item)) + /!*if (userStore.isPorter()) { + console.log('user is porter and setup') + porterRoutes.forEach((item) => router.addRoute(item)) + } else { + console.log('user is customer and setup') + customerRoutes.forEach((item) => router.addRoute(item)) + }*!/ + //app.use(router) +}*/ + +//const routes: RouteRecordRaw[] = [] + +export function setupRouter(app: App) { + const routerStore = useRouterStore() + //console.log('dfdsfsdf', routerStore.routes) + //debugger + const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: routerStore.routes, + /*scrollBehavior(to, from, savedPosition) { + /!*if (savedPosition) { + return savedPosition + } else { + return { top: 0 } + }*!/ + // always scroll to top + return { top: 0 } + // always scroll 10px above the element #main + /!*return { + // could also be + // el: document.getElementById('main'), + el: '#main', + top: -10, + }*!/ + },*/ + scrollBehavior: (to, from, savedPosition) => { + // Scroll to heading on click + if (to.hash) { + if (to.hash === '#') { + return { + top: 0, + behavior: 'smooth' + } + } + + const el = document.querySelector(to.hash) + + // vue-router does not incorporate scroll-margin-top on its own. + if (el) { + const top = parseFloat(getComputedStyle(el).scrollMarginTop) + if (el instanceof HTMLElement) { + el.focus() + } + + return { + el: to.hash, + behavior: 'smooth', + top + } + } + + return { + el: to.hash, + behavior: 'smooth' + } + } + + // Scroll to top of window + if (savedPosition) { + return savedPosition + } else if (to.path !== from.path) { + return { top: 0 } + } + } + }) + + if (isDev()) { + const children: RouteRecordRaw[] = [] + const components = import.meta.glob('../components/_sample/components/*.vue', {}) + for (const componentsKey in components) { + const nameSplit = componentsKey.split('/') + //@ts-ignore + const name = nameSplit[nameSplit.length - 1].replaceAll('.vue', '') + children.push({ + name, + component: () => import(`../components/_sample/components/${name}.vue`), + path: `${name}` + }) + } + router.addRoute({ + name: 'components', + children, + redirect: { name: children[0].name }, + path: '/components', + component: () => import('@core/components/_sample/_index.vue') + }) + } + + /*router.addRoute({ + name: 'dashboard', + path: '/dashboard', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'dashboardMain' }, + meta: { + icon: 'vuesax-linear:home-2', + title: 'میز کار', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 1 + }, + children: [ + { + name: 'dashboardMain', + path: '', + component: () => import('@/pages/dashboard/index.vue'), + meta: { + icon: 'vuesax-linear:home-2', + order: 1, + title: 'میز کار', + disabled: false, + hideMenu: true + //hideChildren: false + } + } + ] + })*/ + + //console.log('aaa', routes) + app.use(router) + + return router +} + +export function resetRouter(app: App, router: Router) { + //console.log(useRouter(), '5555') + const routerStore = useRouterStore() + //const flat = flatten('') + //console.log("aaaaaa,chan"); + /* routerStore.routes.forEach((item) => { + router.addRoute(item) + })*/ + routerStore.routes.forEach((item) => { + router.addRoute(item) + }) + //app.use(router) + // router.addRoute({ + // name: 'dashboard', + // path: '/dashboard', + // component: () => import('@/pages/dashboard/index.vue') + // }) + + console.log('this is routtttt after reset', router.getRoutes()) +} diff --git a/src/core/script/generate-icons.ts b/src/core/script/generate-icons.ts new file mode 100644 index 0000000..1554ec5 --- /dev/null +++ b/src/core/script/generate-icons.ts @@ -0,0 +1,23 @@ +/* +import { onMounted } from 'vue' + +const icons = {} +onMounted(async () => { + const plugins = import.meta.glob('./core/assets/icons/_icon/!*.svg', { + //eager: true + //eager: true + query: 'raw' + }) + for (const pluginsKey in plugins) { + const temp = await plugins[pluginsKey]() + const nameSplit = pluginsKey.split('/') + const name = nameSplit[nameSplit.length - 1].replaceAll('.svg', '') + //Object.assign(icons, { `${name}`: temp }) + icons[`vuesax-linear:${name}`] = temp.default + //console.log('tt', temp.default, pluginsKey) + } + console.log(icons) +}) +*/ + +export {} diff --git a/src/core/stores/darkmode.ts b/src/core/stores/darkmode.ts new file mode 100644 index 0000000..d9e698e --- /dev/null +++ b/src/core/stores/darkmode.ts @@ -0,0 +1,74 @@ +/** + * This is a store that hold the dark mode state + * It could be auto (fit system preference), dark or light + * + * Using useStorage from @vueuse/core allow persistance storage accross tabs/sessions + * + * We can import and set isDark anywhere in our project + * @see /src/components/navigation/LandingNavigation.vue + * @see /src/components/partials/toolbars/Toolbar.vue + */ + +import { computed, watchEffect } from 'vue' +import { usePreferredDark, useStorage } from '@vueuse/core' +import { acceptHMRUpdate, defineStore } from 'pinia' + +export const DARK_MODE_BODY_CLASS = 'is-dark' +export type DarkModeSchema = 'auto' | 'dark' | 'light' + +export const initDarkmode = () => { + const darkmode = useDarkmode() + + /** + * watchEffect callbacks will be executed each time used reactives value has changed + */ + watchEffect(() => { + if (!import.meta.env.SSR) { + const body = document.documentElement + + if (darkmode.isDark) { + body.classList.add(DARK_MODE_BODY_CLASS) + } else { + body.classList.remove(DARK_MODE_BODY_CLASS) + } + } + }) +} + +export const useDarkmode = defineStore('darkmode', () => { + const preferredDark = usePreferredDark() + const colorSchema = useStorage('color-schema', 'auto') + + const isDark = computed({ + get() { + return colorSchema.value === 'auto' + ? preferredDark.value + : colorSchema.value === 'dark' + }, + set(v: boolean) { + if (v === preferredDark.value) colorSchema.value = 'auto' + else colorSchema.value = v ? 'dark' : 'light' + }, + }) + + const onChange = (event: Event) => { + const target = event.target as HTMLInputElement + isDark.value = !target.checked + } + + return { + isDark, + onChange, + } +}) + +/** + * Pinia supports Hot Module replacement so you can edit your stores and + * interact with them directly in your app without reloading the page. + * + * @see https://pinia.esm.dev/cookbook/hot-module-replacement.html + * @see https://vitejs.dev/guide/api-hmr.html + */ +if (import.meta.hot) { + import.meta.hot.accept(acceptHMRUpdate(useDarkmode, import.meta.hot)) +} diff --git a/src/core/stores/layout.ts b/src/core/stores/layout.ts new file mode 100644 index 0000000..a9873ac --- /dev/null +++ b/src/core/stores/layout.ts @@ -0,0 +1,32 @@ +export const useLayoutStore = defineStore('layout', () => { + const sideMenu = reactive({ + collapsible: true, + collapsed: false, + width: '230px', + collapsedWidth: '56px', + fixedSideBar: false, + /** + * @see https://www.antdv.com/components/menu#components-menu-demo-switch-mode + */ + mode: 'horizontal' //inline or vertical or horizontal + }) + + const layout: 'side'| 'mix' |'top' = 'top' + const showSettingsIcon = ref(false) + //const menuPosition = ref<'top' | 'right'>('top') + + const sideMenuWidth = computed(() => { + return sideMenu.collapsed ? sideMenu.collapsedWidth : sideMenu.width + }) + + /*const showSideMenu = computed(() => { + return menuPosition.value === 'right' + })*/ + + const header = reactive({ + height: '45px', + fixed: true + }) + + return { sideMenu, sideMenuWidth, header, layout, showSettingsIcon } +}) diff --git a/src/core/stores/router.ts b/src/core/stores/router.ts new file mode 100644 index 0000000..28157b5 --- /dev/null +++ b/src/core/stores/router.ts @@ -0,0 +1,17 @@ +import { ref } from 'vue' +import type { RouteRecordRaw } from 'vue-router' +//import { resetRouter } from '@core/router' +//import router from '@core/router' +export const useRouterStore = defineStore('router', () => { + const routes = ref([]) + + /*function applyPermissions(keys: string[]) { + const router = useRouter() + console.log('this is router in store') + if (router) { + resetRouter(router) + } + }*/ + + return { routes } +}) diff --git a/src/core/stores/settings.ts b/src/core/stores/settings.ts new file mode 100644 index 0000000..541fa21 --- /dev/null +++ b/src/core/stores/settings.ts @@ -0,0 +1,9 @@ +import { ref } from 'vue' +export const useSettingsStore = defineStore('settings', () => { + const showSettingsDrawer = ref(false) + const settingsPlacementDrawer = ref<'top' | 'right' | 'bottom' | 'left'>('right') + return { + showSettingsDrawer, + settingsPlacementDrawer + } +}) diff --git a/src/core/type/baseTable.ts b/src/core/type/baseTable.ts new file mode 100644 index 0000000..2b87c8a --- /dev/null +++ b/src/core/type/baseTable.ts @@ -0,0 +1,116 @@ +import type { VNode, Component } from 'vue' + +interface BaseTableColumn { + title?: string //pass + name?: string //pass + dataIndex: string // pass + key: string //pass + slot?: string //pass + //customRenderer?: + width?: number // pass + type?: ColumnTypeFilter + filterable?: boolean + sortable?: boolean + draggable?: boolean + show?: boolean //pass + fixed?: boolean | string //string is (left/right) //pass + align?: 'center' | 'right' | 'left' //pass + ellipsis?: boolean + children?: BaseTableColumn[] + resizable?: boolean //pass - no support for rtl on resize + responsive?: string[] + customRender?: (data: { text: string; record: any; index: number }) => VNode | string //pass + customCell?: (record: any, rowIndex: number, column: any) => void + className?: string + filterComponentProps?: any + filterComponent?: Component | VNode + filterField?: string + sortField?: string +} + +//boolean switch - boolean checkbox +//for client +type ColumnTypeFilter = 'Date' | 'Time' | 'DateTime' | 'Select' | 'Text' | 'Boolean' | 'Number' + +//for server +type FilterType = 'number' | 'date' | 'text' | 'select' | 'switch' + +export const mapColumnTypeFilterToFilterType: Record = { + Date: 'date', + Time: 'date', + DateTime: 'date', + Select: 'select', + Text: 'text', + Boolean: 'switch', + Number: 'number' +} + +interface TableInput { + limit?: number //number of record that return + filters?: Filter[] + filtersOpt?: any + key?: any + order?: string + search?: string | null + select?: string[] + sort?: TableSort | null + page?: number //current page + titles?: Record + report_title?: string + total?: number +} + +interface TableSort { + key: string + order: 'asc' | 'desc' +} + +interface Filter { + cr: 'and' | 'or' + index?: number + field: string + type: FilterType + op: FilterOP | null + value: any + hidden?: boolean +} + +type FilterOP = + | 'gt' //> + | 'lt' //< + | 'eq' //= + | 'gte' //>= + | 'lte' //<= + | 'bet' //between + | 'not' //<> + | 'nn' // not null + | 'null' // null + | 'sw' //'like', $this->value . '%' + | 'ew' //'like', '%' . $this->value + | 'has' // 'like', '%' . $this->value . '%' + | 'in' // in array + +//const available +//const availableFilterType = {} + +interface TableOutput { + rows: T[] + query: TableInput +} + +interface BaseTableEmit { + reload: () => void +} + +export type { + BaseTableColumn, + TableInput, + TableOutput, + BaseTableEmit, + Filter, + FilterType, + FilterOP, + ColumnTypeFilter, + TableSort + //availableFilterType +} diff --git a/src/core/type/router.ts b/src/core/type/router.ts new file mode 100644 index 0000000..60b6bb1 --- /dev/null +++ b/src/core/type/router.ts @@ -0,0 +1,19 @@ +// This can be directly added to any of your `.ts` files like `router.ts` +// It can also be added to a `.d.ts` file. Make sure it's included in +// project's tsconfig.json "files" +import 'vue-router' + +// To ensure it is treated as a module, add at least one `export` statement +export {} + +declare module 'vue-router' { + interface RouteMeta { + icon?: string + title?: string + disabled?: boolean + hideMenu?: boolean + hideChildren?: boolean + order?: number + permissionsKey?: string + } +} diff --git a/src/core/utils/color-converter.ts b/src/core/utils/color-converter.ts new file mode 100644 index 0000000..1d87733 --- /dev/null +++ b/src/core/utils/color-converter.ts @@ -0,0 +1,91 @@ +const hslRe = + /hsl\(\s*(\d+)((?:deg)|(?:turn)|(?:rad))?\s*,?\s*(\d+(?:\.\d+)?%)\s*,?\s*(\d+(?:\.\d+)?%)\s*\)/ + +export function HSLToHex(hslCss?: string) { + if (!hslCss) { + return '#fff' + } + if (hslCss === 'transparent') { + return hslCss + } + + const res = hslRe.exec(hslCss) + if (res === null) { + return '#fff' + } + + const [hueString, hueUnit, saturationString, luminanceString] = res.slice(1) + if (!hueString || !saturationString || !luminanceString) { + return '#fff' + } + + let h = 0 + let s = parseFloat(saturationString ?? '0') + let l = parseFloat(luminanceString ?? '0') + + // Strip label and convert to degrees (if necessary) + switch (hueUnit) { + case 'deg': + h = parseFloat(hueString.substr(0, hueString.length - 3)) + break + case 'turn': + h = Math.round(parseFloat(hueString.substr(0, hueString.length - 4)) * 360) + break + case 'rad': + h = Math.round(parseFloat(hueString.substr(0, hueString.length - 3)) * (180 / Math.PI)) + break + default: + h = parseFloat(hueString) + break + } + + if (h >= 360) h %= 360 + + s /= 100 + l /= 100 + + const c = (1 - Math.abs(2 * l - 1)) * s + const x = c * (1 - Math.abs(((h / 60) % 2) - 1)) + const m = l - c / 2 + let r = 0 + let g = 0 + let b = 0 + + if (0 <= h && h < 60) { + r = c + g = x + b = 0 + } else if (60 <= h && h < 120) { + r = x + g = c + b = 0 + } else if (120 <= h && h < 180) { + r = 0 + g = c + b = x + } else if (180 <= h && h < 240) { + r = 0 + g = x + b = c + } else if (240 <= h && h < 300) { + r = x + g = 0 + b = c + } else if (300 <= h && h < 360) { + r = c + g = 0 + b = x + } + + // Having obtained RGB, convert channels to hex + let rString = Math.round((r + m) * 255).toString(16) + let gString = Math.round((g + m) * 255).toString(16) + let bString = Math.round((b + m) * 255).toString(16) + + // Prepend 0s, if necessary + if (rString.length == 1) rString = '0' + rString + if (gString.length == 1) gString = '0' + gString + if (bString.length == 1) bString = '0' + bString + + return '#' + rString + gString + bString +} diff --git a/src/core/utils/convert.ts b/src/core/utils/convert.ts new file mode 100644 index 0000000..b87f629 --- /dev/null +++ b/src/core/utils/convert.ts @@ -0,0 +1,22 @@ +//const e2p = (s: string) => s.replace(/\d/g, (d) => '۰۱۲۳۴۵۶۷۸۹'[+d]) +//const p2a = (s : string) => s.replace(/[۰-۹]/g, (d) => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf(d)]) +//const a2p = (s : string) => s.replace(/[٠-٩]/g, (d) => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf(d)]) +//const e2a = (s : string) => s.replace(/\d/g, (d) => '٠١٢٣٤٥٦٧٨٩'[+d]) +//_sample +//e2p('asdf1234') // asdf۱۲۳۴ +//e2a('asdf1234') // asdf١٢٣٤ +//p2e('asdf۱۲۳۴') // asdf1234 +//a2e('asdf١٢٣٤') // asdf1234 +//p2a('asdf۱۲۳۴') // asdf١٢٣٤ +//a2p('asdf١٢٣٤') // asdf۱۲۳۴ +//٠٩١٣٥٥١۷٤٢٥ +//۰۹۱۳۵۵۱۷۴۲۵ + +const a2e = (s: string) => s.replace(/[٠-٩]/g, (d) => '٠١٢٣٤٥٦٧٨٩'.indexOf(d).toString()) +const p2e = (s: string) => s.replace(/[۰-۹]/g, (d) => '۰۱۲۳۴۵۶۷۸۹'.indexOf(d).toString()) + +function persian2english(s: string) { + const temp = p2e(s) + return a2e(temp) +} +export { persian2english } diff --git a/src/core/utils/file.ts b/src/core/utils/file.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/core/utils/index.ts b/src/core/utils/index.ts new file mode 100644 index 0000000..da5bac4 --- /dev/null +++ b/src/core/utils/index.ts @@ -0,0 +1,30 @@ +//import { tokenName } from '@/themeConfig' +//import { getLocalStorage, setLocalStorage } from '@/utils/useStorage' +import pkg from '@root/package.json' +import config from '@core/config.json' +import { getLocalStorage, setLocalStorage } from '@core/utils/useStorage' + +function version() { + return pkg.version +} + +function coreVersion() { + return config.version +} + +function setToken(token: string) { + return setLocalStorage('token', token) +} + +function getToken() { + //return getLocalStorage(tokenName) + return getLocalStorage('token') +} + +export { coreVersion, version, getToken, setToken } + +/*function removeToken() { + return localStorage.removeItem(tokenName) +}*/ + +//export { getToken, setToken, removeToken } diff --git a/src/core/utils/is.ts b/src/core/utils/is.ts new file mode 100644 index 0000000..4a7c2df --- /dev/null +++ b/src/core/utils/is.ts @@ -0,0 +1,28 @@ +//import { getToken } from '@/utils/index' +import { breakpointsTailwind, useBreakpoints } from '@vueuse/core' +const breakpoints = useBreakpoints(breakpointsTailwind) +/** + * is application run in development mode + */ +function isDev() { + return import.meta.env.DEV +} + +/** + * is size screen mobile + */ +const isMobile = breakpoints.smaller('lg') +/*function isMobile() { + const breakpoints = useBreakpoints(breakpointsTailwind) + console.log('change is mobile') + return breakpoints.isSmaller('lg') +}*/ + +/* +function isToken() { + const token = getToken() + return !!token +} +*/ + +export { isDev, isMobile } diff --git a/src/core/utils/price.ts b/src/core/utils/price.ts new file mode 100644 index 0000000..2e61d03 --- /dev/null +++ b/src/core/utils/price.ts @@ -0,0 +1,136 @@ +import { ref } from 'vue' +import { loading, loadingMore } from '@/utils/index' +import { getNewOrderTable } from '@/api/order' +import type { TableEngineInput } from '@/model/table' +import type { TableOutput } from '@core/type/baseTable' +import type { Order } from '@/model/order' +import { getBalance } from '@/api/product' +import type { Price } from '@/model/price' +import type { Balance, Product } from '@/model/product' +import { getNow } from '@core/utils/useDataTime' + +export const orderPagination = ref({ filters: [], limit: 100, page: 0 }) +const orderTableOutput = ref | null>(null) +let intervalOrder: any +let intervalPrice: any + +export const updateTime = ref() + +export const balance = ref() + +export const orderItems = ref([]) + +let startTaraz: string = '' +let endTaraz: string = '' + +export async function getTaraz(start: string, end: string) { + try { + startTaraz = start + endTaraz = end + loading.value = true + balance.value = await getBalance(start, end) + } catch (e) { + console.log(e) + } finally { + loading.value = false + } +} + +export async function setIntervalGetOrder() { + try { + // itemsCredit.value = await getMyCredit() + intervalOrder = setInterval(async () => { + await getOrderTable() + }, 5000) + } catch (e) { + console.log(e) + } finally { + loading.value = false + loadingMore.value = false + } +} + +export async function getOrderTable() { + try { + // loading.value = true + orderPagination.value.filters = [] + // orderPagination.value.page === 0 ? loading.value = true : loadingMore.value = true + orderTableOutput.value = await getNewOrderTable(orderPagination.value) + if (orderPagination.value.page === 0) orderItems.value = [] + orderItems.value.push(...orderTableOutput.value.rows) + } catch (e) { + console.log(e) + } finally { + // loading.value = false + } +} + +export function stopOrderInterval() { + // console.log('stop') + clearInterval(intervalOrder) + intervalOrder = undefined +} + +//price +export const form = ref([]) +export const methodForm = ref([]) +export const items = ref([]) + +export async function setIntervalGetPrices() { + try { + // itemsCredit.value = await getMyCredit() + // intervalPrice = setInterval(async () => { + await getPriceTable() + // }, 20000) + } catch (e) { + console.log(e) + } finally { + loading.value = false + loadingMore.value = false + } +} + + +export async function getPriceTable() { + try { + // console.log('salammm') + await getTaraz(startTaraz, endTaraz) + const NonFilteredItems = await getProductList() + items.value = NonFilteredItems?.filter((x) => x.active) + form.value = items.value.map((x) => { + const myPrice = x.price?.price ?? 0 + const limanPrice = x.price?.difference_liman ?? 0 + const providerPrice = x.price?.difference_provider ?? 0 + const mainDifferent = x.price?.difference ?? 0 + // console.log(myPrice,'gg') + // const myDiff = x.sub?.sell_price ?? 0 + // if (!x.price?.price) x.price.price = 0 + if (x.sub && !x.sub?.sell_price) x.sub.sell_price = 0 + // const diff = x.sub? (x.price?.price - x.sub?.sell_price): 0 + return { + product_id: x.id, + price: myPrice, + diff: limanPrice, + difference_liman: limanPrice, + reading_method: x.reading_method, + reading_method_old: x.reading_method, + difference_main: mainDifferent, + difference_provider: providerPrice, + is_auto: x.reading_method !== 'manual' + } + }) + updateTime.value = getNow('jYYYY-jMM-jDD HH:mm:ss') + // console.log(form.value) + } catch (e) { + console.log(e) + } finally { + loading.value = false + loadingMore.value = false + } +} + +export function stopPriceInterval() { + // console.log('stop') + clearInterval(intervalPrice) + intervalPrice = undefined +} diff --git a/src/core/utils/regex.ts b/src/core/utils/regex.ts new file mode 100644 index 0000000..e518bb3 --- /dev/null +++ b/src/core/utils/regex.ts @@ -0,0 +1,5 @@ +const mobilePattern = /^(?:0|98|\+98|\+980|0098|098|00980)?(9\d{9})$/ + +const usernamePattern = /^(?!.*\.\.)(?!.*\.$)[^\W][\w.]{0,29}$/ + +export { mobilePattern, usernamePattern } diff --git a/src/core/utils/responsive.ts b/src/core/utils/responsive.ts new file mode 100644 index 0000000..b180174 --- /dev/null +++ b/src/core/utils/responsive.ts @@ -0,0 +1,16 @@ +/** + * This is a store that hold responsive state + * + * Using useMediaQuery from @vueuse/core allow to bind + * css media queries results to ref + * + * We can import and use isLargeScreen, isMediumScreen anywhere in our project + * @see /src/components/navigation/LandingNavigation.vue + * @see /src/state/activeNavbarState.ts + */ + +import { useMediaQuery } from '@vueuse/core' + +export const isLargeScreen = useMediaQuery('(min-width: 1023px)') +export const isMediumScreen = useMediaQuery('(min-width: 767px)') +export const isMobileScreen = useMediaQuery('(max-width: 767px)') diff --git a/src/core/utils/url.ts b/src/core/utils/url.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/core/utils/useAxios.ts b/src/core/utils/useAxios.ts new file mode 100644 index 0000000..2a74d2b --- /dev/null +++ b/src/core/utils/useAxios.ts @@ -0,0 +1,180 @@ +import { baseURL } from '../../../config' + +import axios from 'axios' +import type { AxiosRequestConfig, AxiosResponse } from 'axios' +// import { useRouter, useRoute } from 'vue-router' +import { getToken, removeToken } from '@/utils/index' +import { message } from 'ant-design-vue' +//import { isToken } from '@/utils/is' +//import router from '@/router' +//import { getToken, removeToken } from '@/utils/useUtility' +//import useUserStore from '@/model/user' +//import { useRouter } from 'vue-router' +//const router = useRouter() + +interface Meta { + errorMessage?: 'message' | 'notification' | 'toast' +} + +interface MyAxiosRequestConfig extends AxiosRequestConfig { + meta?: Meta +} + +const headers = { + 'Content-Type': 'application/json', + Accept: 'application/json' +} + +const _axios = axios.create({ + baseURL, + headers +}) + +_axios.interceptors.request.use( + (config) => { + //console.log('request config', config) + if (config.headers) { + const token = getToken() + // console.log(token) + if (token) { + //@ts-ignore + config.headers['Authorization'] = 'Bearer ' + token + } + } + return config + }, + (error) => { + //console.log('this is error on interceptors.request', error) + Promise.reject(error) + } +) +_axios.interceptors.response.use( + (response) => { + // console.log(response, 'ressss') + //console.log('this is response') + // Any status code that lie within the range of 2xx cause this function to trigger + // Do something with response data + //console.log('this is fulfilled on interceptors.response', response.data) + return response.data + }, + async function (error) { + const router = useRouter() + //console.log('this is axios error', error) + /* if (error.response.data && error.response.data.code) { + checkStatus(error.response.data, error.config) + }*/ + //console.log('this is error on interceptors.response', error.config.meta) + //console.log('1111111111', error.response) + if (error.response && error.response.status == 401) { + ///removeToken() + console.log('error') + removeToken() + // router.push({ name: 'login' }) + await router.push({ name: 'login' }) + } else if (error.response && error.response.status == 403) { + message.error('شما دسترسی لازم برای انجام این عملیات را ندارید') + } else if (error.response && error.response.status == 422) { + message.error(error.response.data?.message) + } else if (error.response) { + message.error('خطا در بارگذاری اطلاعات') + } + // Any status codes that falls outside the range of 2xx cause this function to trigger + // Do something with response error + + //const { response, code, message, config } = error || {} + //const errorMessageMode = config?.requestOptions?.errorMessageMode || 'none' + //const msg: string = response?.data?.error?.message ?? '' + //checkStatus(error?.response?.status, msg) + return Promise.reject(error) + } +) + +function checkStatus(data: { message: string; data: any; code: number }, config: any) { + //const { code, data, message } = data + let errorMessage = 'message' + if (config.meta) { + if (config.meta.message) { + errorMessage = config.meta.message + } + } + switch (errorMessage) { + case 'message': + message.error(data.message) + break + default: + message.error(data.message) + } +} + +const myAxios = { + //AxiosResponse + post( + url: string, + data?: D, + config?: MyAxiosRequestConfig + ): Promise { + return _axios.post(url, data, config) + }, + request, D = any>(config: MyAxiosRequestConfig): Promise { + return _axios.request(config) + }, + //AxiosResponse + get(url: string, config?: MyAxiosRequestConfig): Promise { + return _axios.get(url, config) + }, + //AxiosResponse + delete(url: string, config?: MyAxiosRequestConfig): Promise { + return _axios.delete(url, config) + }, + //AxiosResponse + head(url: string, config?: MyAxiosRequestConfig): Promise { + return _axios.head(url, config) + }, + //AxiosResponse + options(url: string, config?: MyAxiosRequestConfig): Promise { + return _axios.options(url, config) + }, + //AxiosResponse + put( + url: string, + data?: D, + config?: MyAxiosRequestConfig + ): Promise { + return _axios.put(url, data, config) + }, + //AxiosResponse + patch( + url: string, + data?: D, + config?: MyAxiosRequestConfig + ): Promise { + return _axios.patch(url, data, config) + }, + //AxiosResponse + postForm( + url: string, + data?: D, + config?: MyAxiosRequestConfig + ): Promise { + return _axios.postForm(url, data, config) + }, + //AxiosResponse + putForm( + url: string, + data?: D, + config?: MyAxiosRequestConfig + ): Promise { + return _axios.putForm(url, data, config) + }, + //AxiosResponse + patchForm( + url: string, + data?: D, + config?: MyAxiosRequestConfig + ): Promise { + return _axios.patchForm(url, data, config) + } +} + +export default myAxios +export { _axios } diff --git a/src/core/utils/useCountdownTimer.ts b/src/core/utils/useCountdownTimer.ts new file mode 100644 index 0000000..eebb910 --- /dev/null +++ b/src/core/utils/useCountdownTimer.ts @@ -0,0 +1,92 @@ +import { onMounted, ref } from 'vue' +//@ts-ignore +import moment from 'moment' +//_sample 00:30 - 1:50 - 00:59 +export default function useCountdownTimer(_time = '00:00:30', format = 'HH:mm:ss') { + let interval: number + let startTime = moment(_time, 'HH:mm:ss') + //const temp= + const endTime = moment('00:00:00', 'HH:mm:ss') + const time = ref('') + let tempHook: () => void + let tempHookStop: () => void + let tempHookStart: () => void + let tempHookRestart: () => void + function decrement() { + if (startTime > endTime) { + startTime.subtract('1', 'second') + time.value = startTime.format(format) + } else { + clearInterval(interval) + if (tempHook) { + tempHook() + } + } + } + + function start() { + if (interval) { + stop() + } + //@ts-ignore + interval = setInterval(decrement, 1000) + if (tempHookStart) { + tempHookStart() + } + } + + function stop() { + clearInterval(interval) + if (tempHookStop) { + tempHookStop() + } + } + + function onFinish(hook: () => any) { + tempHook = hook + } + + function setTime(_time = '00:00:30') { + startTime = moment(_time, 'HH:mm:ss') + time.value = startTime.format(format) + stop() + start() + } + + function reset() { + startTime = moment(_time, 'HH:mm:ss') + time.value = startTime.format(format) + stop() + start() + if (tempHookRestart) { + tempHookRestart() + } + } + + function onStop(hook: () => any) { + tempHookStop = hook + } + function onStart(hook: () => any) { + tempHookStart = hook + } + + function onRestart(hook: () => any) { + tempHookRestart = hook + } + + onMounted(() => { + time.value = startTime.format(format) + }) + + return { + time, + stop, + start, + onFinish, + reset, + setTime, + onRestart, + onStart, + onStop + } +} diff --git a/src/core/utils/useCrypto.ts b/src/core/utils/useCrypto.ts new file mode 100644 index 0000000..beeb6f2 --- /dev/null +++ b/src/core/utils/useCrypto.ts @@ -0,0 +1,18 @@ +//@ts-ignore +import AES from 'crypto-js/aes' +//@ts-ignore +import encUtf8 from 'crypto-js/enc-utf8' +///import { secretKey } from '@core/config' +const secretKey = 'pwd@1234' +//console.log('aaa', secretKey) +// Encrypting the data using the password key +function encryptedAES(data: string) { + return AES.encrypt(data, secretKey).toString() +} + +// Decrypting the data using the same password key +function decryptedAES(ciphertext: string) { + return AES.decrypt(ciphertext, secretKey).toString(encUtf8) +} + +export { encryptedAES, decryptedAES } diff --git a/src/core/utils/useDataTime.ts b/src/core/utils/useDataTime.ts new file mode 100644 index 0000000..ff49e48 --- /dev/null +++ b/src/core/utils/useDataTime.ts @@ -0,0 +1,26 @@ +//@ts-ignore +import moment from 'moment-jalaali' +//@ts-ignore +import fa from 'moment/src/locale/fa' +moment.locale('fa', fa) +moment.loadPersian() + +function momentTimeAgo(dataTime: string) { + return moment.utc(dataTime).fromNow() +} + +function toJalali(dateTime?: string, format = 'jYYYY/jMM/jDD-HH:mm:ss') { + return moment(dateTime).format(format) +} + +function toJalaliNoTime(dateTime?: string, format = 'jYYYY/jMM/jDD') { + return moment(dateTime).format(format) +} + +function toTime(dateTime?: string, format = 'HH:mm') { + return moment(dateTime).format(format) +} +function getNow(format = 'YYYY-MM-DDTHH:mm:ss') { + return moment().format(format) +} +export { momentTimeAgo, toJalali, toJalaliNoTime, toTime, getNow } diff --git a/src/core/utils/usePrice.ts b/src/core/utils/usePrice.ts new file mode 100644 index 0000000..4e89d78 --- /dev/null +++ b/src/core/utils/usePrice.ts @@ -0,0 +1,17 @@ +export function usePrice(price: number, digit = true, unit = 'ریال') { + let _price = price.toString() + if (digit) { + _price = _price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + } + return `${_price} ${unit}` +} + +export function useTowDecimal(num: string | number): string | number { + const temp = num.toString().match(/^-?\d+(?:\.\d{0,2})?/) + if (temp && temp.length > 0) return temp[0] + return Math.round(+num * 100) / 100 +} + +export function useFormat(num: string | number, unit = '') { + return usePrice(Math.abs(+useTowDecimal(num)), true, unit) +} diff --git a/src/core/utils/useStorage.ts b/src/core/utils/useStorage.ts new file mode 100644 index 0000000..5a49853 --- /dev/null +++ b/src/core/utils/useStorage.ts @@ -0,0 +1,35 @@ +import { isDev } from './is' +import { decryptedAES, encryptedAES } from './useCrypto' + +function convertForSet(value: any) { + const val = JSON.stringify(value) + return isDev() ? val : encryptedAES(val) +} + +function convertForGet(value: string | null): string | null { + if (value == null || value == '') { + return value + } + const temp = isDev() ? value : decryptedAES(value) + return JSON.parse(temp) +} + +function setLocalStorage(key: string, value: any) { + localStorage.setItem(key, convertForSet(value)) +} + +function setSessionStorage(key: string, value: any) { + sessionStorage.setItem(key, convertForSet(value)) +} + +function getLocalStorage(key: string) { + const val = localStorage.getItem(key) + return convertForGet(val) +} + +function getSessionStorage(key: string) { + const val = sessionStorage.getItem(key) + return convertForGet(val) +} + +export { setLocalStorage, setSessionStorage, getLocalStorage, getSessionStorage } diff --git a/src/core/utils/uuid.ts b/src/core/utils/uuid.ts new file mode 100644 index 0000000..585b24d --- /dev/null +++ b/src/core/utils/uuid.ts @@ -0,0 +1,8 @@ +//@ts-ignore +import { v4 as uuidv4 } from 'uuid' + +function buildUUId() { + return uuidv4() +} + +export { buildUUId } diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..aeea7ec --- /dev/null +++ b/src/index.css @@ -0,0 +1,4 @@ +/* +@tailwind base; +@tailwind components; +@tailwind utilities;*/ diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..e219408 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,91 @@ +import { createApp } from 'vue' +import App from './App.vue' +import { basicMain } from '@core/basicMain' +import VueApexCharts from 'vue3-apexcharts' +//todo use custom style and use core style added +import '@/assets/style.less' +//import './index.css' +import { getToken } from '@/utils' +//import { useStaticApiListsStore } from '@/store/staticApisStore' +//import { setupPinia } from '@core/plugins/pinia' +import { setupRoutes } from '@/router' +//import { useRouterStore } from '@core/stores/router' +//import { resetRouter } from '@core/router' +import { useUserStore } from '@/store/userStore' +import { setupPinia } from '@core/plugins/pinia' + +const init = async () => { + const app = createApp(App) + app.use(VueApexCharts) + setupPinia(app) + try { + /*if (isToken()) { + await userStore.getMe() + setupRoutes() + }*/ + const userStore = useUserStore() + const token = getToken() + if (token) { + await userStore.getMyInfo() + setupRoutes(['*']) + //setupRoutes(['project']) + /*router.removeRoute('usersMain') + router.removeRoute('users')*/ + //debugger + //resetRouter(app, router) + } else setupRoutes(['login']) + + /* if (userStore.isAdmin) { + setupRoutes(['*']) + } else { + setupRoutes(userStore.permissions) + }*/ + + //setupRoutes() + const { router } = basicMain(app) + //console.log('aaaa', router) + //console.log('this is route', router.getRoutes()) + //console.log('this is store', useRouterStore().routes) + //const _temp = useRouter() + //console.log('this is temp', _temp) + //resetRouter(app, router) + router.beforeEach((to, from, next) => { + const token = getToken() + if (token) { + if (to.name == 'login') { + return next({ name: 'dashboard' }) + } + return next() + } else { + if (['login', '404'].includes(to.name as string)) { + return next() + } + // console.log('salam') + return next({ name: 'login' }) + } + }) + //console.log('this is tes final', router.getRoutes()) + //console.log('this is tessssssss') + } catch (e) { + console.error(e) + } finally { + //setupRoutes() + //app.use(router) + //router.hasRoute() + + //app.use(router) + + app.mount('#app') + } +} + +init() + +/*const store = useStaticApiListsStore() +const token = getToken() +if (token) store.getMyInfo()*/ +/* +console.log('thisi s router', router.getRoutes()) +router.removeRoute('customers') +*/ +//app.mount('#app') diff --git a/src/model/File.ts b/src/model/File.ts new file mode 100644 index 0000000..443217c --- /dev/null +++ b/src/model/File.ts @@ -0,0 +1,13 @@ +export interface File { + created_at?: string + ext?: string + has_thumb?: boolean + id?: number + original_name?: string + size?: number + src?: string + title?: string + type?: string + updated_at?: string + user_id?: number +} diff --git a/src/model/Item.ts b/src/model/Item.ts new file mode 100644 index 0000000..128c8a5 --- /dev/null +++ b/src/model/Item.ts @@ -0,0 +1,9 @@ +export interface Item { + value: string + key: boolean | number +} + +export interface FunctionItem { + name: string + function: string +} diff --git a/src/model/accounting.ts b/src/model/accounting.ts new file mode 100644 index 0000000..03c2c0a --- /dev/null +++ b/src/model/accounting.ts @@ -0,0 +1,36 @@ +import withdraw from "@/router/routes/withdraw"; +import type {Withdraw} from "@/model/wallet"; + +export interface Accounting { + startDate:string + endDate:string + fullPriceM1:number + fullPriceM2:number + fullPriceKaermozd:number + fullPriceSood:number + orderCount:number + Gifts:string + GiftsPrise:number + sumAll:number +} + +export interface TotalAccounting{ + id: number + customer_id: number + order_id: null + customer_to_id: number + user_id: number + wallet: null + transaction_id: null + cash: number + note: string + type: number + gold: number + balance_cash: number + balance_gold: number + withdraw_id: number + updated_at: string + deleted_at: null + created_at: string + withdraw?: Withdraw +} \ No newline at end of file diff --git a/src/model/bill.ts b/src/model/bill.ts new file mode 100644 index 0000000..91df449 --- /dev/null +++ b/src/model/bill.ts @@ -0,0 +1,25 @@ +export interface AddId { + id: number +} + +export interface Bill { + state?: number + prepayment?: number + adjustment?: number + workQuality?: number + forcedEvents?: number + materialEntryRestrictions?: number + enactNewRules?: number + delaysInAnnouncing?: number + technicalSpecifications?: number + delaysInWorkshopDelivery?: number + delaysInPurchasing?: number + agreementSuspension?: number + newWork?: number + other?: number + illegal?: number + billPresentationDate?: number + billHandlingDate?: number + billCommunicateDate?: number + description?: number +} diff --git a/src/model/card.ts b/src/model/card.ts new file mode 100644 index 0000000..294107a --- /dev/null +++ b/src/model/card.ts @@ -0,0 +1,17 @@ +import type { Customer } from '@/model/customer' + +export interface Card { + id?: number + cart_number?: string + shaba_number?: string + bank_name?: string + account_number?: string + sts?: number + sts_str?: string + customer?: Customer +} + +export interface cardSts { + id: number + sts: number +} diff --git a/src/model/city.ts b/src/model/city.ts new file mode 100644 index 0000000..55ae55c --- /dev/null +++ b/src/model/city.ts @@ -0,0 +1,17 @@ +export interface Province { + code: string + has_children: boolean + id: number + level: number + parent_id: number + title: string +} + +export interface City { + code: string + has_children: boolean + id: number + level: number + parent_id: number + title: string +} diff --git a/src/model/const.ts b/src/model/const.ts new file mode 100644 index 0000000..04f5f7f --- /dev/null +++ b/src/model/const.ts @@ -0,0 +1,6 @@ +export interface Const { + key?: number | string | undefined + const_id?: number | undefined + title_fa?: string | undefined + value?: string | undefined +} diff --git a/src/model/customer.ts b/src/model/customer.ts new file mode 100644 index 0000000..3c04dfb --- /dev/null +++ b/src/model/customer.ts @@ -0,0 +1,37 @@ +import type { User } from '@/model/user' +import type { Wallet } from '@/model/wallet' + +export interface AddId { + id: number +} + +export interface Customer { + id: number + fname: string + lname: string + name: string + mobile: string + password: string + avatar_id: number + active: boolean + // email: string + birth_date: string + created_at: string + gram: number + shop_name: string + phone_number: string + referral_to_id: string + referral_id: string + referral: Customer + city: string + province: string + wallet: Wallet + n_code: string | number + last_seen_at:string + profit_amount: number + add_user_limit: number + trade_active: boolean + type_str: string + gold: number + // print_name: string +} diff --git a/src/model/dashboard.ts b/src/model/dashboard.ts new file mode 100644 index 0000000..79d58a8 --- /dev/null +++ b/src/model/dashboard.ts @@ -0,0 +1,41 @@ +export interface Dashboard { + new_customer_major?: number + new_customer_single?: number + all_customer_major?: number + all_customer_single?: number + archive_customer_major?: number + archive_customer_single?: number + all_gold?: number + all_gold_single?: number + price?: Price +} +export interface Price { + id?: number + title_fa?: string + value?: number + created_at?: string + updated_at?: string + update_date?: string + value_json?: ValuePrice[] +} + +export interface ValuePrice { + key?: number + low?: string + high?: string + price?: string + numbertitle?: string + change?: string + category?: string + created_at?: string +} + +export interface Charts { + buySellChart?: Chart + customerSellChart?: Chart + singleSellChart?: Chart +} +export interface Chart { + price: number + obj: any[] +} \ No newline at end of file diff --git a/src/model/filterSelect.ts b/src/model/filterSelect.ts new file mode 100644 index 0000000..585b4ef --- /dev/null +++ b/src/model/filterSelect.ts @@ -0,0 +1,4 @@ +export interface FilterSelect { + label: string + value: string | number | boolean +} diff --git a/src/model/funds.ts b/src/model/funds.ts new file mode 100644 index 0000000..190dba1 --- /dev/null +++ b/src/model/funds.ts @@ -0,0 +1,14 @@ +export interface Funds { + id: number + owner:number + cash:number + gold:number + fund_id:number + created_at:string + updated_at:string + fund:Fund +} +export interface Fund{ + id:number + title:string +} \ No newline at end of file diff --git a/src/model/login.ts b/src/model/login.ts new file mode 100644 index 0000000..19011e6 --- /dev/null +++ b/src/model/login.ts @@ -0,0 +1,12 @@ +export interface UserLoginState { + id?: number + mobile?: string + password?: string + provider: string + token?: string +} + +export interface Token { + id: number + access_token: string +} diff --git a/src/model/order.ts b/src/model/order.ts new file mode 100644 index 0000000..e0283af --- /dev/null +++ b/src/model/order.ts @@ -0,0 +1,31 @@ +import type { Customer } from '@/model/customer' + +export interface Order { + amount?: number + created_at?: string + customer?: Customer + customer_id?: number + description?: number + direction?: number + fee?: number + id?: number + payment_sts?: number + price?: number + price_original?: number + sts?: number + total_fee?: number + total_price?: number + goldCash?: number + goldValue?: number + total_price_original?: number + updated_at?: string + pay_at?: string + difference?: string + total_price_liman?: number +} +export interface OrderSts { + order_id?: number + sts?: number + offer_price?: number + offer_mesghal_price?: number +} diff --git a/src/model/othersPrices.ts b/src/model/othersPrices.ts new file mode 100644 index 0000000..8ac9d1c --- /dev/null +++ b/src/model/othersPrices.ts @@ -0,0 +1,9 @@ +export interface OthersPrices { + sell: number + buy: number + price_last: number + henzagold: number + Ounce: number + milli: number + tala_ir: number +} \ No newline at end of file diff --git a/src/model/permission.ts b/src/model/permission.ts new file mode 100644 index 0000000..1034ba4 --- /dev/null +++ b/src/model/permission.ts @@ -0,0 +1,19 @@ +export interface Permission { + user_type: number | undefined + section_id?: number + section?: string + rid: any +} + +export interface UserPermission { + user_id: number | undefined + section_id?: number + section?: string + rid: any +} + +export interface TreeData { + children?: TreeData[] //| string + title: string + key?: string +} diff --git a/src/model/price.ts b/src/model/price.ts new file mode 100644 index 0000000..9d77bb1 --- /dev/null +++ b/src/model/price.ts @@ -0,0 +1,9 @@ +export interface Price { + price?: number +} + +export interface last { + sell: number + buy: number + price_last: number +} \ No newline at end of file diff --git a/src/model/priceChart.ts b/src/model/priceChart.ts new file mode 100644 index 0000000..e1e1e92 --- /dev/null +++ b/src/model/priceChart.ts @@ -0,0 +1,12 @@ +import type {Order} from "@/model/order"; + +export interface PriceChart{ + id: number + price: number + date_at: string + time_at: string + user_id: null + created_at: number + updated_at: number + order: Order[] +} \ No newline at end of file diff --git a/src/model/priceTriggers.ts b/src/model/priceTriggers.ts new file mode 100644 index 0000000..12c6297 --- /dev/null +++ b/src/model/priceTriggers.ts @@ -0,0 +1,13 @@ +export interface PriceTriggers{ + id?: number + customer_id: number + target_price: number + price_condition: string + action: string + direction: null + is_active: boolean + triggered_at?: string + created_at: string + updated_at: string + deleted_at: null +} \ No newline at end of file diff --git a/src/model/product.ts b/src/model/product.ts new file mode 100644 index 0000000..098af62 --- /dev/null +++ b/src/model/product.ts @@ -0,0 +1,55 @@ +import type { User } from '@/model/user' +import type { Wallet } from '@/model/wallet' + +export interface AddId { + id: number +} + +export interface Product{ + id: number, + amount: number, + percent_fee_buy: number, + cash_fee_buy: number, + percent_fee_sell: number, + cash_fee_sell: number + group_type: string + unit: string + active: boolean + created_at: string + open_buy: boolean + open_sell: boolean + show: boolean + title: string + updated_at: string + methodOption: number + prices: MethodePrices[] + price: number + reading_method: string + weight: number + auto_open_at: string + auto_close_at: string +} + +export interface MethodePrices { + id: string + name: string + price: number + profit: number +} +export interface SetActiveTime { + auto_open_at: string + auto_close_at: string +} + +export interface Balance { + cashBalance: number + cashBalanceOfKalhor: number + cashBalanceOfLiman: number + goldBalance: number + goldBalanceOfKalhor: number + goldBalanceOfLiman: number + mazanehBalance: number + mazanehBalanceOfKalhor: number + income_money: number + mazanehBalanceOfLiman: number +} \ No newline at end of file diff --git a/src/model/referrals.ts b/src/model/referrals.ts new file mode 100644 index 0000000..146b380 --- /dev/null +++ b/src/model/referrals.ts @@ -0,0 +1,21 @@ +export interface Referrals{ + id:number + fname:string + lname:string + name:string + active:boolean + mobile:string + avatar_id:null + last_seen_at:string + default_address_id:null + sts:null + type:number + total_transaction:number + orders_count:number + birth_date:null + shop_name:null + phone_number:string + city:string + province:string + n_code:string +} \ No newline at end of file diff --git a/src/model/sms.ts b/src/model/sms.ts new file mode 100644 index 0000000..8255d19 --- /dev/null +++ b/src/model/sms.ts @@ -0,0 +1,8 @@ +import type { User } from '@/model/user' +import type { Wallet } from '@/model/wallet' + +export interface Sms { + numbers: string[] + message: string + single?: string[] +} diff --git a/src/model/table.ts b/src/model/table.ts new file mode 100644 index 0000000..7d92dce --- /dev/null +++ b/src/model/table.ts @@ -0,0 +1,20 @@ + +export interface TableEngineOutput { + rows: T[] + query: { + filters: [] + filtersOpt: null | any + key: any | null + limit: number + page: number + search: string + select: any | null + sort: any | null + total: number + } +} +export interface TableEngineInput { + page: number + limit: number + filters: any[] +} diff --git a/src/model/transaction.ts b/src/model/transaction.ts new file mode 100644 index 0000000..0d61d16 --- /dev/null +++ b/src/model/transaction.ts @@ -0,0 +1,25 @@ +import type { User } from '@/model/user' + +export interface Transaction { + active: boolean + balance_cash: number + balance_gold: number + caj: string + cash: number + created_at: string + customer_id: number + expire_at: string + fund_id: number + gold: number + hash: string + id: number + note: number + order_id: number + transaction_type: string + type: number + type_str: string + updated_at: string + value: number + wallet: number + customer: User +} \ No newline at end of file diff --git a/src/model/user.ts b/src/model/user.ts new file mode 100644 index 0000000..e25bfee --- /dev/null +++ b/src/model/user.ts @@ -0,0 +1,23 @@ +import type { Const } from '@/model/const' + +export interface User { + active?: boolean + avatar_id?: string + created_at?: string + fname?: string + password?: string + repassword?: string + id?: number + last_seen_at?: string + lname?: string + mobile?: number + name?: string + sts?: number + token_sms?: string + user_type?: string + send_sms?:boolean +} + +export interface AddId { + id: number +} diff --git a/src/model/wallet.ts b/src/model/wallet.ts new file mode 100644 index 0000000..986d4bd --- /dev/null +++ b/src/model/wallet.ts @@ -0,0 +1,43 @@ +import type { User } from '@/model/user' + +export interface Wallet { + owner: number + id: number + gold: number + cash: number + customer: User +} + +export interface Withdraw { + id?: number + customer_id?: number + user_id?: number + cash?: number + gold?: number + tracked_number?: number + date_at?: string + sts?: number + created_at?: string + updated_at?: string + sts_str?: string + daj?: string + customer?: User +} + +export interface Charge { + value?: number + note?: string + customer_id?: number +} + +export interface WithdrawStatus { + icon: string + bgColor: string + color: string +} + +export interface SendWeight { + weights: number[] + withdraw_id: number + customer_id: number +} \ No newline at end of file diff --git a/src/pages/balance/components/Item.vue b/src/pages/balance/components/Item.vue new file mode 100644 index 0000000..aba51fc --- /dev/null +++ b/src/pages/balance/components/Item.vue @@ -0,0 +1,21 @@ + + + + + \ No newline at end of file diff --git a/src/pages/balance/components/TransactionDetail.vue b/src/pages/balance/components/TransactionDetail.vue new file mode 100644 index 0000000..b4f3987 --- /dev/null +++ b/src/pages/balance/components/TransactionDetail.vue @@ -0,0 +1,250 @@ + + + + diff --git a/src/pages/balance/index.vue b/src/pages/balance/index.vue new file mode 100644 index 0000000..c6b557e --- /dev/null +++ b/src/pages/balance/index.vue @@ -0,0 +1,252 @@ + + + + \ No newline at end of file diff --git a/src/pages/dashboard/assets/svgs/nothing.svg b/src/pages/dashboard/assets/svgs/nothing.svg new file mode 100644 index 0000000..1395861 --- /dev/null +++ b/src/pages/dashboard/assets/svgs/nothing.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/dashboard/components/dashboardItem.vue b/src/pages/dashboard/components/dashboardItem.vue new file mode 100644 index 0000000..9c89d4d --- /dev/null +++ b/src/pages/dashboard/components/dashboardItem.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/pages/dashboard/index.vue b/src/pages/dashboard/index.vue new file mode 100644 index 0000000..64f6cf3 --- /dev/null +++ b/src/pages/dashboard/index.vue @@ -0,0 +1,876 @@ + + + + + diff --git a/src/pages/login/assets/img/background.webp b/src/pages/login/assets/img/background.webp new file mode 100644 index 0000000..5efb6a7 Binary files /dev/null and b/src/pages/login/assets/img/background.webp differ diff --git a/src/pages/login/assets/img/background1--old.png b/src/pages/login/assets/img/background1--old.png new file mode 100644 index 0000000..de70e33 Binary files /dev/null and b/src/pages/login/assets/img/background1--old.png differ diff --git a/src/pages/login/assets/img/loginBack.svg b/src/pages/login/assets/img/loginBack.svg new file mode 100644 index 0000000..b1d1ab4 --- /dev/null +++ b/src/pages/login/assets/img/loginBack.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/login/components/LoginPanel.vue b/src/pages/login/components/LoginPanel.vue new file mode 100644 index 0000000..d3bf0c6 --- /dev/null +++ b/src/pages/login/components/LoginPanel.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/src/pages/login/index.vue b/src/pages/login/index.vue new file mode 100644 index 0000000..4a8236f --- /dev/null +++ b/src/pages/login/index.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/src/pages/main/index.vue b/src/pages/main/index.vue new file mode 100644 index 0000000..54e4fd7 --- /dev/null +++ b/src/pages/main/index.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/pages/menuPages/accounting/components/table.vue b/src/pages/menuPages/accounting/components/table.vue new file mode 100644 index 0000000..61241a4 --- /dev/null +++ b/src/pages/menuPages/accounting/components/table.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/pages/menuPages/accounting/hooks/accountingColumns.tsx b/src/pages/menuPages/accounting/hooks/accountingColumns.tsx new file mode 100644 index 0000000..2e84b95 --- /dev/null +++ b/src/pages/menuPages/accounting/hooks/accountingColumns.tsx @@ -0,0 +1,85 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalali, toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'نام مشتری', + dataIndex: 'customer_to.name', + key: 'customer_id', + type: 'Number' + }, + { + title: 'نام مشتری دعوت شده', + dataIndex: 'customer.name', + key: 'customer_id', + type: 'Number' + }, + { + title: 'زمان ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'Text', + customRender: (record: any) => { + return toJalali(record.record.created_at) + } + }, + { + title: 'نقد', + dataIndex: 'cash', + key: 'cash', + type: 'Number', + // customRender(data) { + // return usePrice(data.record?.price ?? 0, true, '') + // } + }, + { + title: 'طلا', + dataIndex: 'gold', + key: 'gold', + type: 'Number', + }, + { + title: 'توضیحات', + dataIndex: 'note', + key: 'note', + type: 'Text', + }, + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + } +] diff --git a/src/pages/menuPages/accounting/index.vue b/src/pages/menuPages/accounting/index.vue new file mode 100644 index 0000000..93b3826 --- /dev/null +++ b/src/pages/menuPages/accounting/index.vue @@ -0,0 +1,438 @@ + + + + + diff --git a/src/pages/menuPages/cards/components/table.vue b/src/pages/menuPages/cards/components/table.vue new file mode 100644 index 0000000..a0e0acb --- /dev/null +++ b/src/pages/menuPages/cards/components/table.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/src/pages/menuPages/cards/hooks/cardColumns.tsx b/src/pages/menuPages/cards/hooks/cardColumns.tsx new file mode 100644 index 0000000..48c953b --- /dev/null +++ b/src/pages/menuPages/cards/hooks/cardColumns.tsx @@ -0,0 +1,183 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد حساب', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'کد کاربر', + dataIndex: 'customer_id', + key: 'customer_id', + type: 'Number' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'customer.name', + key: 'customer.name', + type: 'Text' + }, + { + title: 'نام بانک', + dataIndex: 'bank_name', + key: 'bank_name', + type: 'Text' + }, + { + title: 'شماره حساب', + dataIndex: 'account_number', + key: 'account_number', + type: 'Number' + }, + { + title: 'شماره کارت', + dataIndex: 'cart_number', + key: 'cart_number', + type: 'Number' + }, + { + title: 'شماره شبا', + dataIndex: 'shaba_number', + key: 'shaba_number', + type: 'Number' + }, + { + title: 'وضعیت', + dataIndex: 'sts', + key: 'sts', + filterable: false, + customRender: ({ record }) => { + switch (record.sts) { + case 1: + return ( +
    + + {record.sts_str} + +
    + ) + case 2: + return ( +
    + + {record.sts_str} + +
    + ) + default: + return ( +
    + + {record.sts_str} + +
    + ) + } + } + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + }, + /* { + title: 'تاریخ تایید', + dataIndex: 'updated_at', + key: 'updated_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + },*/ + + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + } +] diff --git a/src/pages/menuPages/cards/index.vue b/src/pages/menuPages/cards/index.vue new file mode 100644 index 0000000..f4fafa7 --- /dev/null +++ b/src/pages/menuPages/cards/index.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/src/pages/menuPages/customers/archive/components/table.vue b/src/pages/menuPages/customers/archive/components/table.vue new file mode 100644 index 0000000..3226a3b --- /dev/null +++ b/src/pages/menuPages/customers/archive/components/table.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/pages/menuPages/customers/archive/hooks/archiveColumns.tsx b/src/pages/menuPages/customers/archive/hooks/archiveColumns.tsx new file mode 100644 index 0000000..2dce5cf --- /dev/null +++ b/src/pages/menuPages/customers/archive/hooks/archiveColumns.tsx @@ -0,0 +1,163 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد کاربری', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'name', + key: 'name', + type: 'Text' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + }, +/* { + title: 'نام', + dataIndex: 'shop_name', + key: 'shop_name', + type: 'Text' + },*/ + { + title: 'وضعیت کاربر', + dataIndex: 'active', + key: 'active', + type: 'Boolean', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + }, + { + title: 'وضعیت سفارش دهی', + dataIndex: 'trade_active', + key: 'trade_active', + type: 'Boolean', + customRender: ({ record }) => { + return record.trade_active ? ( +
    + + مجاز + +
    + ) : ( +
    + + غیر مجاز + +
    + ) + } + }, + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + } +] diff --git a/src/pages/menuPages/customers/archive/index.vue b/src/pages/menuPages/customers/archive/index.vue new file mode 100644 index 0000000..3503778 --- /dev/null +++ b/src/pages/menuPages/customers/archive/index.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/src/pages/menuPages/customers/base/components/fundsTable.vue b/src/pages/menuPages/customers/base/components/fundsTable.vue new file mode 100644 index 0000000..2e2fb27 --- /dev/null +++ b/src/pages/menuPages/customers/base/components/fundsTable.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/pages/menuPages/customers/base/components/referralsTable.vue b/src/pages/menuPages/customers/base/components/referralsTable.vue new file mode 100644 index 0000000..e6c3fd7 --- /dev/null +++ b/src/pages/menuPages/customers/base/components/referralsTable.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/pages/menuPages/customers/base/components/table.vue b/src/pages/menuPages/customers/base/components/table.vue new file mode 100644 index 0000000..25cb178 --- /dev/null +++ b/src/pages/menuPages/customers/base/components/table.vue @@ -0,0 +1,425 @@ + + + + + diff --git a/src/pages/menuPages/customers/base/hooks/customerColumns.tsx b/src/pages/menuPages/customers/base/hooks/customerColumns.tsx new file mode 100644 index 0000000..6c97402 --- /dev/null +++ b/src/pages/menuPages/customers/base/hooks/customerColumns.tsx @@ -0,0 +1,214 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import {toJalali, toJalaliNoTime, toTime} from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد کاربری', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'name', + key: 'name', + type: 'Text' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + }, + { + title: 'نوع کاربر', + dataIndex: 'type_str', + key: 'type_str', + type: 'Text' + }, + { + title: 'کد معرف', + dataIndex: 'referral_id', + key: 'referral_id', + type: 'Text' + }, + { + title: 'نام معرف کاربر', + dataIndex: 'referral.name', + key: 'referral.name', + type: 'Text' + }, + { + title: 'موجودی ریالی (ریال)', + dataIndex: 'wallet.cash', + key: 'wallet.cash', + type: 'Number', + customRender(data) { + return usePrice(data.record?.wallet[0]?.cash ?? 0, true, '') + } + }, + { + title: 'موجودی طلایی (گرم)', + dataIndex: 'wallet.gold', + key: 'wallet.gold', + type: 'Number', + filterable: false, + customRender(data) { + let sum = 0 + data.record.wallet.forEach((x) => (sum += x.gold)) + return sum.toFixed(3) + } + }, + { + title: 'اخرین بازدید', + dataIndex: 'last_seen_at', + key: 'last_seen_at', + type: 'DateTime', + customRender(data) { + return toJalali(data.record.last_seen_at) + } + }, + { + title: 'گنج(گرم)', + dataIndex: 'gold', + key: 'gold', + type: 'Number', + filterable: false, + }, + { + title: 'وضعیت کاربر', + dataIndex: 'active', + key: 'active', + type: 'Boolean', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + }, + { + title: 'وضعیت سفارش دهی', + dataIndex: 'trade_active', + key: 'trade_active', + sortable: false, + type: 'Boolean', + customRender: ({ record }) => { + return record.trade_active ? ( +
    + + مجاز + +
    + ) : ( +
    + + غیر مجاز + +
    + ) + } + }, + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + } +] diff --git a/src/pages/menuPages/customers/base/hooks/fundsColumns.tsx b/src/pages/menuPages/customers/base/hooks/fundsColumns.tsx new file mode 100644 index 0000000..f980126 --- /dev/null +++ b/src/pages/menuPages/customers/base/hooks/fundsColumns.tsx @@ -0,0 +1,54 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد قلک', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام قلک', + dataIndex: 'fund.title', + key: 'fund.title', + type: 'Text' + }, + { + title: 'موجودی طلا', + dataIndex: 'gold', + key: 'gold', + type: 'Number' + }, +] diff --git a/src/pages/menuPages/customers/base/hooks/referralColumns.tsx b/src/pages/menuPages/customers/base/hooks/referralColumns.tsx new file mode 100644 index 0000000..fd2c5c1 --- /dev/null +++ b/src/pages/menuPages/customers/base/hooks/referralColumns.tsx @@ -0,0 +1,163 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد کاربری', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'name', + key: 'name', + type: 'Text' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + }, + { + title: 'نوع کاربر', + dataIndex: 'type_str', + key: 'type_str', + type: 'Text' + }, + { + title: 'کد معرف', + dataIndex: 'referral_id', + key: 'referral_id', + type: 'Text' + }, + { + title: 'وضعیت کاربر', + dataIndex: 'active', + key: 'active', + type: 'Boolean', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + }, + { + title: 'وضعیت سفارش دهی', + dataIndex: 'active', + key: 'active', + filterable: false, + sortable: false, + customRender: ({ record }) => { + return record.trade_active === 1 ? ( +
    + + مجاز + +
    + ) : ( +
    + + غیر مجاز + +
    + ) + } + }, + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ +] diff --git a/src/pages/menuPages/customers/base/index.vue b/src/pages/menuPages/customers/base/index.vue new file mode 100644 index 0000000..40ef363 --- /dev/null +++ b/src/pages/menuPages/customers/base/index.vue @@ -0,0 +1,598 @@ + + + + + diff --git a/src/pages/menuPages/customers/index.vue b/src/pages/menuPages/customers/index.vue new file mode 100644 index 0000000..369c1b5 --- /dev/null +++ b/src/pages/menuPages/customers/index.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/pages/menuPages/customers/mobile/index.vue b/src/pages/menuPages/customers/mobile/index.vue new file mode 100644 index 0000000..0469052 --- /dev/null +++ b/src/pages/menuPages/customers/mobile/index.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/src/pages/menuPages/orders/components/table.vue b/src/pages/menuPages/orders/components/table.vue new file mode 100644 index 0000000..bd6989b --- /dev/null +++ b/src/pages/menuPages/orders/components/table.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/pages/menuPages/orders/hooks/orderColumns.tsx b/src/pages/menuPages/orders/hooks/orderColumns.tsx new file mode 100644 index 0000000..533982f --- /dev/null +++ b/src/pages/menuPages/orders/hooks/orderColumns.tsx @@ -0,0 +1,239 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalali, toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد سفارش', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نوع سفارش', + dataIndex: 'direction', + key: 'direction', + filterable: false, + customRender: ({ record }) => { + switch (record.direction) { + case 2: + return ( +
    + + فروش + +
    + ) + case 1: + return ( +
    + + خرید + +
    + ) + } + } + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'customer.name', + key: 'customer.name', + type: 'Text' + }, + { + title: 'شماره موبایل', + dataIndex: 'customer.mobile', + key: 'customer.mobile', + type: 'Number' + }, + { + title: 'مقدار (گرم)', + dataIndex: 'amount', + key: 'amount', + type: 'Text' + }, + /*{ + title: 'کارمزد ریالی', + dataIndex: 'service_charge_price', + key: 'service_charge_price', + type: 'Number', + customRender(data) { + return usePrice(data.record?.service_charge_price ?? 0, true, '') + } + // className: 'column-money' + },*/ + { + title: 'کارمزد طلایی', + dataIndex: 'service_charge', + key: 'service_charge', + type: 'Number', + customRender(data) { + return data.record?.service_charge + } + // className: 'column-money' + }, + { + title: 'قیمت هر گرم طلا برای مشتری (ریال)', + dataIndex: 'price', + key: 'price', + type: 'Text', + customRender(data) { + return usePrice(data.record?.price ?? 0, true, '') + } + }, + { + title: 'قیمت هر گرم طلا در لیمان', + dataIndex: 'limanPrice', + key: 'limanPrice', + type: 'Text', + customRender(data) { + return usePrice(data.record?.total_price_liman ?? 0, true, '') + } + }, + { + title: 'قیمت کل برای مشتری (ریال)', + dataIndex: 'total_price', + key: 'total_price', + type: 'Text', + customRender(data) { + return usePrice(data.record?.total_price ?? 0, true, '') + } + }, + + { + title: 'وضعیت', + dataIndex: 'sts', + key: 'sts', + filterable: false, + customRender: ({ record }) => { + switch (record.sts) { + case 1: + return ( +
    + + {record.sts_str} + +
    + ) + case 2: + return ( +
    + + {record.sts_str} + +
    + ) + default: + return ( +
    + + {record.sts_str} + +
    + ) + } + } + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalali(record.record.created_at) + } + }, + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + } +] diff --git a/src/pages/menuPages/orders/index.vue b/src/pages/menuPages/orders/index.vue new file mode 100644 index 0000000..6e4bcb8 --- /dev/null +++ b/src/pages/menuPages/orders/index.vue @@ -0,0 +1,445 @@ + + + + + diff --git a/src/pages/menuPages/priceTriggers/components/table.vue b/src/pages/menuPages/priceTriggers/components/table.vue new file mode 100644 index 0000000..2be1b4a --- /dev/null +++ b/src/pages/menuPages/priceTriggers/components/table.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/pages/menuPages/priceTriggers/hooks/priceTriggersColumns.tsx b/src/pages/menuPages/priceTriggers/hooks/priceTriggersColumns.tsx new file mode 100644 index 0000000..c976464 --- /dev/null +++ b/src/pages/menuPages/priceTriggers/hooks/priceTriggersColumns.tsx @@ -0,0 +1,208 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import {toJalali, toJalaliNoTime, toTime} from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد مشتری', + dataIndex: 'customer_id', + key: 'customer_id', + type: 'Number' + }, + { + title: 'قیمت هدف', + dataIndex: 'target_price', + key: 'target_price', + type: 'Number' + }, + { + title: 'شرط', + dataIndex: 'price_condition', + key: 'price_condition', + type: 'Text', + customRender: ({ record }) => { + return record.price_condition==">" ? ( + بزرگتر + ) : ( + کوچکتر + ) + } + }, + { + title: 'زمان ایجاد', + dataIndex: 'created_at', + key: 'created_at', + type: 'Text', + customRender: ({ record }) => { + return toJalali(record.created_at) + } + }, + { + title: 'زمان بروزرسانی', + dataIndex: 'updated_at', + key: 'updated_at', + type: 'Text', + customRender: ({ record }) => { + return toJalali(record.updated_at) + } + }, + { + title: 'زمان اعلام', + dataIndex: 'triggered_at', + key: 'triggered_at', + type: 'Text', + customRender: ({ record }) => { + return record.triggered_at? toJalali(record.triggered_at) : '_' + } + }, + { + title: 'وضعیت', + dataIndex: 'is_active', + key: 'is_active', + type: 'Boolean', + customRender: ({ record }) => { + return record.is_active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + }, + // customRender: ({ record }) => { + // if(record.is_active) { + // return ( + //
    + // + // فروش + // + //
    + // ) + // return ( + //
    + // + // خرید + // + //
    + // ) + // } + // } + }, + /* { + title: 'وضعیت', + dataIndex: 'active', + key: 'active', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + },*/ + /*{ + title: 'سمت', + dataIndex: 'post_user', + key: 'post_user', + type: 'Text' + }, + { + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + { + title: 'روش ارسال', + dataIndex: 'action', + key: 'action', + } +] diff --git a/src/pages/menuPages/priceTriggers/index.vue b/src/pages/menuPages/priceTriggers/index.vue new file mode 100644 index 0000000..c20ea33 --- /dev/null +++ b/src/pages/menuPages/priceTriggers/index.vue @@ -0,0 +1,248 @@ + + + + + diff --git a/src/pages/menuPages/priceTriggers/search/assets/svg/search.svg b/src/pages/menuPages/priceTriggers/search/assets/svg/search.svg new file mode 100644 index 0000000..6c08eae --- /dev/null +++ b/src/pages/menuPages/priceTriggers/search/assets/svg/search.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/menuPages/priceTriggers/search/components/HistoryCard.vue b/src/pages/menuPages/priceTriggers/search/components/HistoryCard.vue new file mode 100644 index 0000000..c8c46b3 --- /dev/null +++ b/src/pages/menuPages/priceTriggers/search/components/HistoryCard.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/pages/menuPages/priceTriggers/search/index.vue b/src/pages/menuPages/priceTriggers/search/index.vue new file mode 100644 index 0000000..1902295 --- /dev/null +++ b/src/pages/menuPages/priceTriggers/search/index.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/pages/menuPages/priceTriggers/search/model/History.ts b/src/pages/menuPages/priceTriggers/search/model/History.ts new file mode 100644 index 0000000..ac633ef --- /dev/null +++ b/src/pages/menuPages/priceTriggers/search/model/History.ts @@ -0,0 +1,6 @@ +export default interface History { + province: string + project: string + documentGroup: string + document: string +} \ No newline at end of file diff --git a/src/pages/menuPages/priceTriggers/search/model/item.ts b/src/pages/menuPages/priceTriggers/search/model/item.ts new file mode 100644 index 0000000..065ce61 --- /dev/null +++ b/src/pages/menuPages/priceTriggers/search/model/item.ts @@ -0,0 +1,4 @@ +export default interface Item { + value: String + key: String +} diff --git a/src/pages/menuPages/pricing/components/table.vue b/src/pages/menuPages/pricing/components/table.vue new file mode 100644 index 0000000..ba13b28 --- /dev/null +++ b/src/pages/menuPages/pricing/components/table.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/pages/menuPages/pricing/hooks/priceColumns.tsx b/src/pages/menuPages/pricing/hooks/priceColumns.tsx new file mode 100644 index 0000000..125f47d --- /dev/null +++ b/src/pages/menuPages/pricing/hooks/priceColumns.tsx @@ -0,0 +1,160 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد قیمت', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'کد کاربری', + dataIndex: 'user_id', + key: 'user_id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'user.name', + key: 'user.name', + type: 'Text' + }, + { + title: 'قیمت هر گرم طلا برای مشتری (ریال)', + dataIndex: 'price', + key: 'price', + type: 'Text', + customRender(data) { + return usePrice(data.record.price ?? 0, true, '') + } + }, + /* { + title: 'قیمت کل برای مشتری (ریال)', + dataIndex: 'price', + key: 'price', + type: 'Text' + },*/ + /* + { + title: 'وضعیت', + dataIndex: 'active', + key: 'active', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + }, +*/ + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + },*/ + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + }, + { + title: 'زمان ثبت', + dataIndex: 'time_at', + key: 'time_at', + type: 'DateTime' + } + /* { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + }*/ +] diff --git a/src/pages/menuPages/pricing/index.vue b/src/pages/menuPages/pricing/index.vue new file mode 100644 index 0000000..0f3a2b8 --- /dev/null +++ b/src/pages/menuPages/pricing/index.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/src/pages/menuPages/products/archive/components/table.vue b/src/pages/menuPages/products/archive/components/table.vue new file mode 100644 index 0000000..d0867b6 --- /dev/null +++ b/src/pages/menuPages/products/archive/components/table.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/pages/menuPages/products/archive/hooks/archiveColumns.tsx b/src/pages/menuPages/products/archive/hooks/archiveColumns.tsx new file mode 100644 index 0000000..2dce5cf --- /dev/null +++ b/src/pages/menuPages/products/archive/hooks/archiveColumns.tsx @@ -0,0 +1,163 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد کاربری', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'name', + key: 'name', + type: 'Text' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + }, +/* { + title: 'نام', + dataIndex: 'shop_name', + key: 'shop_name', + type: 'Text' + },*/ + { + title: 'وضعیت کاربر', + dataIndex: 'active', + key: 'active', + type: 'Boolean', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + }, + { + title: 'وضعیت سفارش دهی', + dataIndex: 'trade_active', + key: 'trade_active', + type: 'Boolean', + customRender: ({ record }) => { + return record.trade_active ? ( +
    + + مجاز + +
    + ) : ( +
    + + غیر مجاز + +
    + ) + } + }, + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + } +] diff --git a/src/pages/menuPages/products/archive/index.vue b/src/pages/menuPages/products/archive/index.vue new file mode 100644 index 0000000..3503778 --- /dev/null +++ b/src/pages/menuPages/products/archive/index.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/src/pages/menuPages/products/base/components/BaseCollapse.vue b/src/pages/menuPages/products/base/components/BaseCollapse.vue new file mode 100644 index 0000000..736df1c --- /dev/null +++ b/src/pages/menuPages/products/base/components/BaseCollapse.vue @@ -0,0 +1,71 @@ + + + + + \ No newline at end of file diff --git a/src/pages/menuPages/products/base/components/fundsTable.vue b/src/pages/menuPages/products/base/components/fundsTable.vue new file mode 100644 index 0000000..2e2fb27 --- /dev/null +++ b/src/pages/menuPages/products/base/components/fundsTable.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/pages/menuPages/products/base/components/referralsTable.vue b/src/pages/menuPages/products/base/components/referralsTable.vue new file mode 100644 index 0000000..e6c3fd7 --- /dev/null +++ b/src/pages/menuPages/products/base/components/referralsTable.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/pages/menuPages/products/base/components/table.vue b/src/pages/menuPages/products/base/components/table.vue new file mode 100644 index 0000000..44d0ff3 --- /dev/null +++ b/src/pages/menuPages/products/base/components/table.vue @@ -0,0 +1,611 @@ + + + + + diff --git a/src/pages/menuPages/products/base/hooks/customerColumns.tsx b/src/pages/menuPages/products/base/hooks/customerColumns.tsx new file mode 100644 index 0000000..5a81152 --- /dev/null +++ b/src/pages/menuPages/products/base/hooks/customerColumns.tsx @@ -0,0 +1,291 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import {toJalali, toJalaliNoTime, toTime} from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + // { + // title: 'کد کاربری', + // dataIndex: 'id', + // key: 'id', + // type: 'Number' + // // className: 'column-money' + // }, + { + title: 'نام', + dataIndex: 'title', + key: 'title', + type: 'Text' + }, + { + title: 'تصویر', + dataIndex: 'title', + key: 'title', + type: 'Text' + }, + { + title: 'وزن', + dataIndex: 'amount', + key: 'amount', + type: 'Number' + }, + { + title: 'واحد', + dataIndex: 'unit', + key: 'unit', + type: 'Text' + }, + { + title: 'دسته بندی', + dataIndex: 'group_type', + key: 'group_type', + type: 'Text' + }, + { + title: 'قیمت', + dataIndex: 'price', + key: 'price', + type: 'Text', + }, + { + title: 'متد', + dataIndex: 'reading_method', + key: 'reading_method', + type: 'Text', + customRender: (record) => { + return ( +
    + + {record?.record.reading_method ? record?.record.reading_method : 'دستی'} + +
    + ) + } + }, + /*{ + title: 'کارمزد درصدی موقع خرید', + dataIndex: 'percent_fee_buy', + key: 'percent_fee_buy', + type: 'Number' + }, + { + title: 'کارمزد درصدی موقع فروش', + dataIndex: 'percent_fee_sell', + key: 'percent_fee_sell', + type: 'Number' + },*/ + { + title: 'هزینه نقدی موقع خرید', + dataIndex: 'cash_fee_buy', + key: 'cash_fee_buy', + type: 'Number' + }, + { + title: 'هزینه نقدی موقع فروش', + dataIndex: 'cash_fee_sell', + key: 'cash_fee_sell', + type: 'Number' + }, + { + title: 'وضعیت محصول', + dataIndex: 'active', + key: 'active', + type: 'Boolean', + customRender: (record) => { + return ( +
    + + {record?.record.active ? 'باز' : 'بسته'} + +
    + ) + } + }, + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + filterable: false + } + + // { + // title: 'کد معرف', + // dataIndex: 'referral_id', + // key: 'referral_id', + // type: 'Text' + // }, + // { + // title: 'نام معرف کاربر', + // dataIndex: 'referral.name', + // key: 'referral.name', + // type: 'Text' + // }, + // { + // title: 'موجودی ریالی (ریال)', + // dataIndex: 'wallet.cash', + // key: 'wallet.cash', + // type: 'Number', + // customRender(data) { + // return usePrice(data.record?.wallet[0]?.cash ?? 0, true, '') + // } + // }, + // { + // title: 'موجودی طلایی (گرم)', + // dataIndex: 'wallet.gold', + // key: 'wallet.gold', + // type: 'Number', + // filterable: false, + // customRender(data) { + // let sum = 0 + // data.record.wallet.forEach((x) => (sum += x.gold)) + // return sum.toFixed(3) + // } + // }, + // { + // title: 'اخرین بازدید', + // dataIndex: 'last_seen_at', + // key: 'last_seen_at', + // type: 'DateTime', + // customRender(data) { + // return toJalali(data.record.last_seen_at) + // } + // }, + // { + // title: 'وضعیت کاربر', + // dataIndex: 'active', + // key: 'active', + // type: 'Boolean', + // customRender: ({ record }) => { + // return record.active ? ( + //
    + // + // فعال + // + //
    + // ) : ( + //
    + // + // غیر فعال + // + //
    + // ) + // } + // }, + // { + // title: 'وضعیت سفارش دهی', + // dataIndex: 'trade_active', + // key: 'trade_active', + // sortable: false, + // type: 'Boolean', + // customRender: ({ record }) => { + // return record.trade_active ? ( + //
    + // + // مجاز + // + //
    + // ) : ( + //
    + // + // غیر مجاز + // + //
    + // ) + // } + // }, + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + // { + // title: 'عملیات', + // dataIndex: 'action', + // key: 'action', + // slot: 'action', + // fixed: 'right', + // filterable: false + // } +] diff --git a/src/pages/menuPages/products/base/hooks/fundsColumns.tsx b/src/pages/menuPages/products/base/hooks/fundsColumns.tsx new file mode 100644 index 0000000..f980126 --- /dev/null +++ b/src/pages/menuPages/products/base/hooks/fundsColumns.tsx @@ -0,0 +1,54 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد قلک', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام قلک', + dataIndex: 'fund.title', + key: 'fund.title', + type: 'Text' + }, + { + title: 'موجودی طلا', + dataIndex: 'gold', + key: 'gold', + type: 'Number' + }, +] diff --git a/src/pages/menuPages/products/base/hooks/referralColumns.tsx b/src/pages/menuPages/products/base/hooks/referralColumns.tsx new file mode 100644 index 0000000..fd2c5c1 --- /dev/null +++ b/src/pages/menuPages/products/base/hooks/referralColumns.tsx @@ -0,0 +1,163 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد کاربری', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'name', + key: 'name', + type: 'Text' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + }, + { + title: 'نوع کاربر', + dataIndex: 'type_str', + key: 'type_str', + type: 'Text' + }, + { + title: 'کد معرف', + dataIndex: 'referral_id', + key: 'referral_id', + type: 'Text' + }, + { + title: 'وضعیت کاربر', + dataIndex: 'active', + key: 'active', + type: 'Boolean', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + }, + { + title: 'وضعیت سفارش دهی', + dataIndex: 'active', + key: 'active', + filterable: false, + sortable: false, + customRender: ({ record }) => { + return record.trade_active === 1 ? ( +
    + + مجاز + +
    + ) : ( +
    + + غیر مجاز + +
    + ) + } + }, + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ +] diff --git a/src/pages/menuPages/products/base/index.vue b/src/pages/menuPages/products/base/index.vue new file mode 100644 index 0000000..73da9b8 --- /dev/null +++ b/src/pages/menuPages/products/base/index.vue @@ -0,0 +1,842 @@ + + + + + diff --git a/src/pages/menuPages/products/index.vue b/src/pages/menuPages/products/index.vue new file mode 100644 index 0000000..1847504 --- /dev/null +++ b/src/pages/menuPages/products/index.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/pages/menuPages/products/mobile/index.vue b/src/pages/menuPages/products/mobile/index.vue new file mode 100644 index 0000000..0469052 --- /dev/null +++ b/src/pages/menuPages/products/mobile/index.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/src/pages/menuPages/setting/index.vue b/src/pages/menuPages/setting/index.vue new file mode 100644 index 0000000..3edc9cd --- /dev/null +++ b/src/pages/menuPages/setting/index.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/pages/menuPages/setting/limitedOrder/index.vue b/src/pages/menuPages/setting/limitedOrder/index.vue new file mode 100644 index 0000000..ecc83f5 --- /dev/null +++ b/src/pages/menuPages/setting/limitedOrder/index.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/src/pages/menuPages/sms/components/numbersTable.vue b/src/pages/menuPages/sms/components/numbersTable.vue new file mode 100644 index 0000000..ec9baf9 --- /dev/null +++ b/src/pages/menuPages/sms/components/numbersTable.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/pages/menuPages/sms/components/table.vue b/src/pages/menuPages/sms/components/table.vue new file mode 100644 index 0000000..88f1710 --- /dev/null +++ b/src/pages/menuPages/sms/components/table.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/src/pages/menuPages/sms/hooks/numberColumns.tsx b/src/pages/menuPages/sms/hooks/numberColumns.tsx new file mode 100644 index 0000000..0d431f4 --- /dev/null +++ b/src/pages/menuPages/sms/hooks/numberColumns.tsx @@ -0,0 +1,57 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + width: 100, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد', + dataIndex: 'id', + key: 'id', + type: 'Number', + width: 100 + // className: 'column-money' + }, + { + title: 'نام کاربر', + dataIndex: 'name', + key: 'name', + type: 'Text' + }, + { + title: 'شماره', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + // className: 'column-money' + } +] diff --git a/src/pages/menuPages/sms/hooks/smsColumns.tsx b/src/pages/menuPages/sms/hooks/smsColumns.tsx new file mode 100644 index 0000000..e66ebc1 --- /dev/null +++ b/src/pages/menuPages/sms/hooks/smsColumns.tsx @@ -0,0 +1,84 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalali, toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + width: 100, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد', + dataIndex: 'id', + key: 'id', + type: 'Number', + width: 100 + // className: 'column-money' + }, + { + title: 'تاریخ و ساعت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + width: 200, + customRender(data) { + return toJalali(data.record.created_at) + } + }, + { + title: 'شماره تلفن', + dataIndex: 'receiver', + key: 'receiver', + type: 'Text', + width: 200, + customRender(data){ + return data.record.person.mobile + } + }, + { + title: 'نام دریافت کننده', + dataIndex: 'receiver', + key: 'receiver', + type: 'Text', + width: 200, + customRender(data){ + if (data.record.person.name) + return data.record.person.name + return data.record.person.mobile + } + }, + + { + title: 'پیام', + dataIndex: 'sms', + key: 'sms', + type: 'Number' + // className: 'column-money' + } +] diff --git a/src/pages/menuPages/sms/index.vue b/src/pages/menuPages/sms/index.vue new file mode 100644 index 0000000..b438fd1 --- /dev/null +++ b/src/pages/menuPages/sms/index.vue @@ -0,0 +1,284 @@ + + + + + diff --git a/src/pages/menuPages/transactions/components/table.vue b/src/pages/menuPages/transactions/components/table.vue new file mode 100644 index 0000000..65cb362 --- /dev/null +++ b/src/pages/menuPages/transactions/components/table.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/src/pages/menuPages/transactions/hooks/transactionsColumns.tsx b/src/pages/menuPages/transactions/hooks/transactionsColumns.tsx new file mode 100644 index 0000000..801ba8d --- /dev/null +++ b/src/pages/menuPages/transactions/hooks/transactionsColumns.tsx @@ -0,0 +1,203 @@ +import type {BaseTableColumn} from '@core/type/baseTable' +import {toJalaliNoTime, toTime} from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import {usePrice} from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد تراکنش', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام تراکنش', + dataIndex: 'type_str', + key: 'type_str', + type: 'Text' + // className: 'column-money' + }, + { + title: 'علت تراکنش', + dataIndex: 'note', + key: 'note', + type: 'Text', + + + // className: 'column-money' + }, + { + title: 'نوع تراکنش', + dataIndex: 'active', + key: 'active', + filterable: false, + sortable: false, + customRender: ({record}) => { + return record.type === 4 || record.type === 3 ? ( +
    + + پول + +
    + ) : ( +
    + {/**/} + + طلا + +
    + ) + } + }, + { + title: 'نام مشتری', + dataIndex: 'customer.name', + key: 'customer.name', + type: 'Text' + }, + { + title: 'مقدار طلا طی تراکنش (گرم)', + dataIndex: 'gold', + key: 'gold', + type: 'Number', + customRender: ({record}) => { + return record.gold > 0 ? ( +
    +
    {record.gold}
    +
    + ) : ( +
    + {/**/} +
    {record.gold}
    +
    + ) + } + }, + { + title: 'مقدار پول طی تراکنش (ریال)', + dataIndex: 'cash', + key: 'cash', + type: 'Number', + customRender: ({record}) => { + return record.cash > 0 ? ( +
    +
    {usePrice(record?.cash ?? 0, true, '')}
    +
    + ) : ( +
    + {/**/} +
    {usePrice(record?.cash ?? 0, true, '')}
    +
    + ) + } + }, + /* { + title: 'شماره سفارش', + dataIndex: 'order_id', + key: 'order_id', + type: 'Text' + },*/ + /* { + title: 'شماره موبایل', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + },*/ + /* { + title: 'نام فروشگاه', + dataIndex: 'shop_name', + key: 'shop_name', + type: 'Text' + },*/ + { + title: 'تاریخ تراکنش', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + } + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + },*/ + /* { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + }*/ +] diff --git a/src/pages/menuPages/transactions/index.vue b/src/pages/menuPages/transactions/index.vue new file mode 100644 index 0000000..6510cfb --- /dev/null +++ b/src/pages/menuPages/transactions/index.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/src/pages/menuPages/users/components/table.vue b/src/pages/menuPages/users/components/table.vue new file mode 100644 index 0000000..2e7c887 --- /dev/null +++ b/src/pages/menuPages/users/components/table.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/src/pages/menuPages/users/hooks/usersColumns.tsx b/src/pages/menuPages/users/hooks/usersColumns.tsx new file mode 100644 index 0000000..03aee9e --- /dev/null +++ b/src/pages/menuPages/users/hooks/usersColumns.tsx @@ -0,0 +1,141 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد کاربری', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'name', + key: 'name', + type: 'Text' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + }, + /* { + title: 'وضعیت', + dataIndex: 'active', + key: 'active', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + },*/ + /*{ + title: 'سمت', + dataIndex: 'post_user', + key: 'post_user', + type: 'Text' + }, + { + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + } +] diff --git a/src/pages/menuPages/users/index.vue b/src/pages/menuPages/users/index.vue new file mode 100644 index 0000000..e22f479 --- /dev/null +++ b/src/pages/menuPages/users/index.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/src/pages/menuPages/users/search/assets/svg/search.svg b/src/pages/menuPages/users/search/assets/svg/search.svg new file mode 100644 index 0000000..6c08eae --- /dev/null +++ b/src/pages/menuPages/users/search/assets/svg/search.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/menuPages/users/search/components/HistoryCard.vue b/src/pages/menuPages/users/search/components/HistoryCard.vue new file mode 100644 index 0000000..c8c46b3 --- /dev/null +++ b/src/pages/menuPages/users/search/components/HistoryCard.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/pages/menuPages/users/search/index.vue b/src/pages/menuPages/users/search/index.vue new file mode 100644 index 0000000..1902295 --- /dev/null +++ b/src/pages/menuPages/users/search/index.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/pages/menuPages/users/search/model/History.ts b/src/pages/menuPages/users/search/model/History.ts new file mode 100644 index 0000000..ac633ef --- /dev/null +++ b/src/pages/menuPages/users/search/model/History.ts @@ -0,0 +1,6 @@ +export default interface History { + province: string + project: string + documentGroup: string + document: string +} \ No newline at end of file diff --git a/src/pages/menuPages/users/search/model/item.ts b/src/pages/menuPages/users/search/model/item.ts new file mode 100644 index 0000000..065ce61 --- /dev/null +++ b/src/pages/menuPages/users/search/model/item.ts @@ -0,0 +1,4 @@ +export default interface Item { + value: String + key: String +} diff --git a/src/pages/menuPages/wallet/components/table.vue b/src/pages/menuPages/wallet/components/table.vue new file mode 100644 index 0000000..d19ee7c --- /dev/null +++ b/src/pages/menuPages/wallet/components/table.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/src/pages/menuPages/wallet/hooks/walletColumns.tsx b/src/pages/menuPages/wallet/hooks/walletColumns.tsx new file mode 100644 index 0000000..e4f18ce --- /dev/null +++ b/src/pages/menuPages/wallet/hooks/walletColumns.tsx @@ -0,0 +1,157 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'کد کیف پول', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'نام مشتری', + dataIndex: 'customer.name', + key: 'customer.name', + type: 'Text' + }, + { + title: 'موجودی کیف پول (ریال)', + dataIndex: 'cash', + key: 'cash', + type: 'Text', + customRender(data) { + return usePrice(data.record.cash, true, '') + } + }, + { + title: 'موجودی کیف طلا (گرم)', + dataIndex: 'gold', + key: 'gold', + type: 'Text' + } + /* { + title: 'شماره موبایل', + dataIndex: 'mobile', + key: 'mobile', + type: 'Number' + },*/ + /* { + title: 'نام فروشگاه', + dataIndex: 'shop_name', + key: 'shop_name', + type: 'Text' + },*/ + /* { + title: 'وضعیت', + dataIndex: 'active', + key: 'active', + customRender: ({ record }) => { + return record.active ? ( +
    + + فعال + +
    + ) : ( +
    + + غیر فعال + +
    + ) + } + },*/ + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + /* { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + }*/ +] diff --git a/src/pages/menuPages/wallet/index.vue b/src/pages/menuPages/wallet/index.vue new file mode 100644 index 0000000..34179ce --- /dev/null +++ b/src/pages/menuPages/wallet/index.vue @@ -0,0 +1,330 @@ + + + + + diff --git a/src/pages/menuPages/withdraw/components/WithdrawSelector.vue b/src/pages/menuPages/withdraw/components/WithdrawSelector.vue new file mode 100644 index 0000000..180d6fc --- /dev/null +++ b/src/pages/menuPages/withdraw/components/WithdrawSelector.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/pages/menuPages/withdraw/components/WithdrawStatus.vue b/src/pages/menuPages/withdraw/components/WithdrawStatus.vue new file mode 100644 index 0000000..01a895c --- /dev/null +++ b/src/pages/menuPages/withdraw/components/WithdrawStatus.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/src/pages/menuPages/withdraw/components/table.vue b/src/pages/menuPages/withdraw/components/table.vue new file mode 100644 index 0000000..07fb1f5 --- /dev/null +++ b/src/pages/menuPages/withdraw/components/table.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/src/pages/menuPages/withdraw/factor/index.vue b/src/pages/menuPages/withdraw/factor/index.vue new file mode 100644 index 0000000..087a784 --- /dev/null +++ b/src/pages/menuPages/withdraw/factor/index.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/pages/menuPages/withdraw/hooks/withdrawColumns.tsx b/src/pages/menuPages/withdraw/hooks/withdrawColumns.tsx new file mode 100644 index 0000000..622e67f --- /dev/null +++ b/src/pages/menuPages/withdraw/hooks/withdrawColumns.tsx @@ -0,0 +1,226 @@ +import type { BaseTableColumn } from '@core/type/baseTable' +import { toJalali, toJalaliNoTime, toTime } from '@core/utils/useDataTime' +import CustomTag from '@/components/CustomTag.vue' +import { usePrice } from '@core/utils/usePrice' +import WithdrawStatus from "@/pages/menuPages/withdraw/components/WithdrawStatus.vue"; +/*import BudgetSelect from '@/components/BudgetSelect.vue' +import { useStaticApiListsStore } from '@/store/staticApisStore' +import type { FilterSelect } from '@/model/filterSelect' +import type { DocItem } from '@/model/docType'*/ + +//define store +//const store = useStaticApiListsStore() +//document types +/*let docTypes: DocItem[]*/ +/*onMounted(async () => { + docTypes = await store.readyDocTypeList() +}) +const filteredDocTypes: FilterSelect = docTypes?.map((x: DocItem) => { + return { + label: x.title, + value: x.id + } +})*/ + +export const cols: BaseTableColumn[] = [ + { + title: 'ردیف', + dataIndex: 'id', + key: 'id', + filterable: false, + sortable: false, + customRender: (record: any) => { + return record.index + 1 + } + }, + { + title: 'علت تراکنش', + dataIndex: 'note', + key: 'note', + type: 'Number' + // className: 'column-money' + }, + { + title: 'شماره پیگیری', + dataIndex: 'tracked_number', + key: 'tracked_number', + type: 'Number', + slot: 'tracked', + customRender: (record: any) => record.record.tracked_number ?? '__' + // className: 'column-money' + }, + { + title: 'کد سفارش', + dataIndex: 'id', + key: 'id', + type: 'Number' + // className: 'column-money' + }, + { + title: 'کد کاربر', + dataIndex: 'customer_id', + key: 'customer_id', + type: 'Number' + }, + { + title: 'نام و نام خانوادگی', + dataIndex: 'customer.name', + key: 'customer.name', + type: 'Text' + }, + { + title: 'مقدار (ریال)', + dataIndex: 'cash', + key: 'cash', + type: 'Number', + customRender: ({ record }) => { + return ( +
    +
    {usePrice(record.cash ?? 0, true, '')}
    +
    + ) + } + }, + { + title: 'طلا', + dataIndex: 'gold', + key: 'gold', + type: 'Number', + }, + { + title: 'شماره کارت', + dataIndex: 'bank_account.cart_number', + key: 'bank_account.cart_number', + type: 'Number', + customRender: (data) => { + return data.record.bank_account?.cart_number ?? '_' + } + }, + { + title: 'وضعیت', + dataIndex: 'sts', + key: 'sts', + filterable: false, + /*customRender: ({ record }) => { + switch (record.sts) { + case 1: + return ( +
    + + {record.sts_str} + +
    + ) + case 2: + return ( +
    + + {record.sts_str} + +
    + ) + case 4: + return ( +
    + + {record.sts_str} + +
    + ) + default: + return ( +
    + + {record.sts_str} + +
    + ) + } + }*/ + customRender: ({ record }) => { + return ( + {record?.sts_str} + ) + }, + }, + { + title: 'تاریخ ثبت', + dataIndex: 'created_at', + key: 'created_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalali(record.record.created_at) + } + }, + { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + width: 200, + slot: 'action', + filterable: false + } + /* { + title: 'تاریخ تایید', + dataIndex: 'updated_at', + key: 'updated_at', + type: 'DateTime', + customRender: (record: any) => { + return toJalaliNoTime(record.record.created_at) + } + },*/ + /*{ + title: 'نقش', + dataIndex: 'user_type_record', + key: 'user_type_record', + type: 'Select', + filterable: false, + sortable: false, + filterComponentProps: { + multiple: true + }, + filterField: 'user_type_obj.id', + filterComponent: ReadyUserTypeSelect, + /!* customRender: (record: any) => { + return record.record.user_type_record?.value + }*!/ + customRender: ({ record }) => { + const items = record.is_admin ? ( + + ادمین + + ) : ( + record.user_type_obj.map((item: { title: any }, index: any) => { + if (item) { + return ( + + {item?.title} + + ) + } + }) + ) + return
    {items}
    + } + }, + { + title: 'حوزه', + dataIndex: 'section', + key: 'section' + }, + { + title: 'شماره موبایل', + dataIndex: 'mobile', + type: 'Number', + key: 'mobile' + },*/ + + /* { + title: 'عملیات', + dataIndex: 'action', + key: 'action', + slot: 'action', + fixed: 'right', + filterable: false + }*/ +] diff --git a/src/pages/menuPages/withdraw/index.vue b/src/pages/menuPages/withdraw/index.vue new file mode 100644 index 0000000..68b7413 --- /dev/null +++ b/src/pages/menuPages/withdraw/index.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/src/pages/menuPages/withdraw/information/assets/order1.svg b/src/pages/menuPages/withdraw/information/assets/order1.svg new file mode 100644 index 0000000..483717d --- /dev/null +++ b/src/pages/menuPages/withdraw/information/assets/order1.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/menuPages/withdraw/information/components/WithdrawItems.vue b/src/pages/menuPages/withdraw/information/components/WithdrawItems.vue new file mode 100644 index 0000000..d973a41 --- /dev/null +++ b/src/pages/menuPages/withdraw/information/components/WithdrawItems.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/src/pages/menuPages/withdraw/information/hooks/status.ts b/src/pages/menuPages/withdraw/information/hooks/status.ts new file mode 100644 index 0000000..b27d073 --- /dev/null +++ b/src/pages/menuPages/withdraw/information/hooks/status.ts @@ -0,0 +1,46 @@ +import { message } from 'ant-design-vue' +import { updateSts } from '@/api/wallet' + +export const status = { + '50': { + icon: 'vuesax-linear:truck-tick', + color: '#16A34A', + bgColor: '#DCFCE7', + title: 'در انتظار ارسال' + }, + '51': { + icon: 'vuesax-linear:profile-tick', + color: '#2563EB', + bgColor: '#DBEAFE', + title: 'ارسال شده' + }, + '52': { + icon: 'vuesax-linear:empty-wallet-time', + color: '#EA580C', + bgColor: '#FFEDD5', + title: 'لغو شده' + }, + '53': { + icon: 'vuesax-linear:3d-cube-scan', + color: '#c62050', + bgColor: '#FFEDD5', + title: 'در انتظار تعیین مجدد قیمت' + }, +} + +export const changeStatus = async (id: number, status: any) => { + try { + await updateSts(id, { sts: status[0] }) + message.success(`وضعیت ثبت شد `) + } catch (e) { + console.log(e) + message.error('خطا در ثبت اطلاعات') + } +} + +const statusArray = Object.entries(status).map(([key, value]) => { + return { + key: key, + value: value.title + } +}) diff --git a/src/pages/menuPages/withdraw/information/index.vue b/src/pages/menuPages/withdraw/information/index.vue new file mode 100644 index 0000000..e1ac5f5 --- /dev/null +++ b/src/pages/menuPages/withdraw/information/index.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/src/pages/mobileMenu/index.vue b/src/pages/mobileMenu/index.vue new file mode 100644 index 0000000..fa6434d --- /dev/null +++ b/src/pages/mobileMenu/index.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..d7efa92 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,90 @@ +//import { routes } from '@/core/router/routes' +//import router from '@/core/router/index' +import { useRouterStore } from '@core/stores/router' +import type { Router, RouteRecordRaw } from 'vue-router' +//const _router = useRouter() +//import { cloneDeep } from 'lodash' + +export function setupRoutes(permissionsKeys: string[], router?: Router) { + //console.log('this is permission', permissionsKeys) + //console.log('this is use router', _router) + console.log('salammm') + const routerStore = useRouterStore() + const modules = import.meta.glob('./routes/*.ts', { eager: true }) + console.log(modules) + function walkInRoutes(routes: RouteRecordRaw) { + if (!routes.children) return + routes.children = routes?.children?.filter( + (item) => + !item.meta?.permissionsKey || + (item.meta?.permissionsKey && permissionsKeys.includes(item.meta?.permissionsKey)) + ) + for (const route of routes.children) { + /*if (!route.children || (route.children && route.children.length == 0)) { + //path.push(route.name) + //return + continue + }*/ + /*if (routes.children) { + }*/ + walkInRoutes(route) + /*if (route.children && route.children.length > 0) { + path.push(route.name) + const res = walkInRoutes(route.children) + if (!res) { + path.pop() + } else { + return true + } + }*/ + } + return + } + routerStore.routes = [ + { + path: '/:pathMatch(.*)*', + name: 'notFound', + component: () => import('@/core/pages/404.vue'), + meta: { + hideMenu: true + } + }, + { + name: 'factor', + path: '/withdraw/factor/:id', + component: () => import('@/pages/menuPages/withdraw/factor/index.vue'), + meta: { + permissionsKey: 'factor', + hideMenu: true + } + }, + ] + for (const modulesKey in modules) { + // console.log(modulesKey) + const route: RouteRecordRaw | undefined = modules[modulesKey].default ?? undefined + if (route) { + if (permissionsKeys.length && permissionsKeys[0] == '*') { + routerStore.routes.push(route) + if (router) { + router.addRoute(route) + } + } else { + if ( + !route?.meta?.permissionsKey || + (route.meta.permissionsKey && permissionsKeys.includes(route.meta.permissionsKey)) + ) { + walkInRoutes(route) + routerStore.routes.push(route) + if (router) { + router.addRoute(route) + } + } + } + } + } + // console.log(router) + //console.log('this is store', routerStore.routes) + /* if (router) { + console.log('this is router routes', router.getRoutes()) + }*/ +} diff --git a/src/router/routes/accounting.ts b/src/router/routes/accounting.ts new file mode 100644 index 0000000..64f2954 --- /dev/null +++ b/src/router/routes/accounting.ts @@ -0,0 +1,35 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Orders: RouteRecordRaw = { + name: 'accounting', + path: '/accounting', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'accountingMain' }, + meta: { + icon: 'vuesax-linear:calculator', + permissionsKey: 'accounting', + title: 'حسابداری', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 7 + }, + children: [ + { + name: 'accountingMain', + path: '', + component: () => import('@/pages/menuPages/accounting/index.vue'), + meta: { + permissionsKey: 'project', + icon: 'vuesax-linear:empty-wallet-time', + order: 3, + title: 'حسابداری', + disabled: false, + hideMenu: false + //hideChildren: false + } + } + ] +} + +export default Orders diff --git a/src/router/routes/balance.ts b/src/router/routes/balance.ts new file mode 100644 index 0000000..9cbb1a0 --- /dev/null +++ b/src/router/routes/balance.ts @@ -0,0 +1,31 @@ +import type { RouteRecordRaw } from 'vue-router' + +const balance: RouteRecordRaw = { + name: 'balance', + path: '/balance', + redirect: { name: 'balance' }, + meta: { + icon: 'vuesax-linear:cards', + title: 'تراز', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 20 + }, + children: [ + { + name: 'balanceMain', + path: '', + component: () => import('@/pages/balance/index.vue'), + meta: { + icon: 'vuesax-linear:money-send', + order: 30, + title: 'تراز', + disabled: false, + hideMenu: false + } + } + ] +} + +export default balance diff --git a/src/router/routes/cards.ts b/src/router/routes/cards.ts new file mode 100644 index 0000000..7c7408e --- /dev/null +++ b/src/router/routes/cards.ts @@ -0,0 +1,35 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Withdraw: RouteRecordRaw = { + name: 'accounts', + path: '/accounts', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'accountsMain' }, + meta: { + icon: 'vuesax-linear:cards', + // permissionsKey: 'orders', + title: 'حساب ها', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 6 + }, + children: [ + { + name: 'accountsMain', + path: '', + component: () => import('@/pages/menuPages/cards/index.vue'), + meta: { + // permissionsKey: 'project', + icon: 'vuesax-linear:money-send', + order: 3, + title: 'حساب ها', + disabled: false, + hideMenu: false + //hideChildren: false + } + } + ] +} + +export default Withdraw diff --git a/src/router/routes/customers.ts b/src/router/routes/customers.ts new file mode 100644 index 0000000..9076f85 --- /dev/null +++ b/src/router/routes/customers.ts @@ -0,0 +1,115 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Customers: RouteRecordRaw = { + name: 'customers', + path: '/customers', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'customerMain_limitedOrder' }, + meta: { + icon: 'vuesax-linear:people', + // permissionsKey: 'project', + title: 'مشتریان', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 2 + }, + children: [ + { + name: 'customersMain', + path: '', + component: () => import('@/pages/menuPages/customers/index.vue'), + meta: { + // permissionsKey: 'config', + icon: 'vuesax-linear:people', + title: 'مشتریان', + disabled: false, + hideMenu: true + //hideChildren: false + }, + children: [ + { + name: 'customerMain_limitedOrder', + path: 'list', + component: () => import('@/pages/menuPages/customers/base/index.vue'), + meta: { + // permissionsKey: 'config.limitedOrder', + icon: 'vuesax-linear:people', + title: 'لیست مشتریان' + } + }, + { + name: 'customerMain_archive', + path: 'archive', + component: () => import('@/pages/menuPages/customers/archive/index.vue'), + meta: { + // permissionsKey: 'user', + icon: 'vuesax-linear:save-2', + title: 'بایگانی' + } + } + ] + } + ] +} + +export default Customers +/* + +import type {RouteRecordRaw} from 'vue-router' + +const Customers: RouteRecordRaw = { + name: 'customers', + path: '/customers', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: {name: 'customersMain'}, + meta: { + icon: 'vuesax-linear:people', + // permissionsKey: 'config', + title: 'مشتریان عمده', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 3, + children: [ + { + name: 'settingMain', + path: '', + component: () => import('@/pages/menuPages/setting/index.vue'), + meta: { + permissionsKey: 'config', + icon: 'vuesax-linear:setting', + order: 5, + title: 'پیکربندی', + disabled: false, + hideMenu: true + //hideChildren: false + }, + children: [ + { + name: 'settingMain_limitedOrder', + path: 'limitedOrder', + component: () => import('@/pages/menuPages/setting/limitedOrder/index.vue'), + meta: { + permissionsKey: 'config.limitedOrder', + icon: 'vuesax-linear:document-text', + title: 'محدودیت سفارش' + } + }, + { + name: 'usersMain', + path: 'admins', + component: () => import('@/pages/menuPages/users/index.vue'), + meta: { + permissionsKey: 'user', + icon: 'vuesax-linear:profile', + title: 'لیست مدیران' + } + } + ] + } + ] + } + + export default Customers +*/ diff --git a/src/router/routes/dashboard.ts b/src/router/routes/dashboard.ts new file mode 100644 index 0000000..9b30310 --- /dev/null +++ b/src/router/routes/dashboard.ts @@ -0,0 +1,33 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Dashboard: RouteRecordRaw = { + name: 'dashboard', + path: '/dashboard', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'dashboardMain' }, + meta: { + icon: 'vuesax-linear:home-2', + title: 'میز کار', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 1 + }, + children: [ + { + name: 'dashboardMain', + path: '', + component: () => import('@/pages/dashboard/index.vue'), + meta: { + icon: 'vuesax-linear:home-2', + order: 1, + title: 'میز کار', + disabled: false, + hideMenu: true + //hideChildren: false + } + } + ] +} + +export default Dashboard diff --git a/src/router/routes/login.ts b/src/router/routes/login.ts new file mode 100644 index 0000000..64f5cc8 --- /dev/null +++ b/src/router/routes/login.ts @@ -0,0 +1,18 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Login: RouteRecordRaw = { + name: 'login', + path: '/login', + component: () => import('@/pages/login/index.vue'), + //redirect: { name: 'projectsMain' }, + meta: { + icon: 'vuesax-linear:bill', + //title: 'پروژه ها', + //disabled: false, + hideMenu: true, + hideChildren: true, + order: 3 + } +} + +export default Login diff --git a/src/router/routes/main.ts b/src/router/routes/main.ts new file mode 100644 index 0000000..e702f87 --- /dev/null +++ b/src/router/routes/main.ts @@ -0,0 +1,15 @@ +import type { RouteRecordRaw } from 'vue-router' + +const main: RouteRecordRaw = { + name: 'main', + path: '/', + component: () => import('@/pages/main/index.vue'), + redirect: { name: 'dashboard' }, + children: [], + meta: { + order: 2, + hideMenu: true + } +} + +export default main diff --git a/src/router/routes/mobile.ts b/src/router/routes/mobile.ts new file mode 100644 index 0000000..cb0950f --- /dev/null +++ b/src/router/routes/mobile.ts @@ -0,0 +1,33 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Dashboard: RouteRecordRaw = { + name: 'Mobile', + path: '/mobile', + component: () => import('@/pages/mobileMenu'), + redirect: { name: 'customerMobile' }, + meta: { + icon: 'vuesax-linear:home-2', + title: 'میز کار', + disabled: false, + hideMenu: true, + hideChildren: true, + order: 1 + }, + children: [ + { + name: 'customerMobile', + path: '', + component: () => import('@/pages/menuPages/customers/mobile/index.vue'), + meta: { + icon: 'vuesax-linear:home-2', + order: 1, + title: 'مشتریان', + disabled: false, + hideMenu: true + //hideChildren: false + } + } + ] +} + +export default Dashboard diff --git a/src/router/routes/orders.ts b/src/router/routes/orders.ts new file mode 100644 index 0000000..25408dc --- /dev/null +++ b/src/router/routes/orders.ts @@ -0,0 +1,35 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Orders: RouteRecordRaw = { + name: 'orders', + path: '/orders', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'ordersMain' }, + meta: { + icon: 'vuesax-linear:empty-wallet-time', + permissionsKey: 'orders', + title: 'سفارشات', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 7 + }, + children: [ + { + name: 'ordersMain', + path: '', + component: () => import('@/pages/menuPages/orders/index.vue'), + meta: { + permissionsKey: 'project', + icon: 'vuesax-linear:empty-wallet-time', + order: 3, + title: 'سفارشات', + disabled: false, + hideMenu: false + //hideChildren: false + } + } + ] +} + +export default Orders diff --git a/src/router/routes/pricing.ts b/src/router/routes/pricing.ts new file mode 100644 index 0000000..4a4f595 --- /dev/null +++ b/src/router/routes/pricing.ts @@ -0,0 +1,35 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Orders: RouteRecordRaw = { + name: 'pricing', + path: '/pricing', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'pricingMain' }, + meta: { + icon: 'vuesax-linear:dollar-circle', + permissionsKey: 'pricing', + title: 'قیمت گذاری', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 9 + }, + children: [ + { + name: 'pricingMain', + path: '', + component: () => import('@/pages/menuPages/pricing/index.vue'), + meta: { + permissionsKey: 'pricing', + icon: 'vuesax-linear:setting', + order: 3, + title: 'قیمت گذاری', + disabled: false, + hideMenu: false + //hideChildren: false + } + } + ] +} + +export default Orders diff --git a/src/router/routes/products.ts b/src/router/routes/products.ts new file mode 100644 index 0000000..45c9bd0 --- /dev/null +++ b/src/router/routes/products.ts @@ -0,0 +1,57 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Products: RouteRecordRaw = { + name: 'products', + path: '/products', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'productsMain_limitedOrder' }, + meta: { + icon: 'vuesax-linear:box', + // permissionsKey: 'project', + title: 'محصولات', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 3 + }, + children: [ + { + name: 'productsMain', + path: '', + component: () => import('@/pages/menuPages/products/index.vue'), + meta: { + // permissionsKey: 'config', + icon: 'vuesax-linear:box', + title: 'محصولات', + disabled: false, + hideMenu: true + //hideChildren: false + }, + children: [ + { + name: 'productsMain_limitedOrder', + path: 'list', + component: () => import('@/pages/menuPages/products/base/index.vue'), + meta: { + // permissionsKey: 'config.limitedOrder', + icon: 'vuesax-linear:box', + title: 'لیست محصولات' + } + }, + { + name: 'productsMain_archive', + path: 'archive', + component: () => import('@/pages/menuPages/products/archive/index.vue'), + meta: { + // permissionsKey: 'user', + icon: 'vuesax-linear:save-2', + title: 'بایگانی' + } + } + ] + } + ] +} + +export default Products + diff --git a/src/router/routes/setting.ts b/src/router/routes/setting.ts new file mode 100644 index 0000000..5fbdd18 --- /dev/null +++ b/src/router/routes/setting.ts @@ -0,0 +1,69 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Setting: RouteRecordRaw = { + name: 'settings', + path: '/settings', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'settingMain' }, + meta: { + icon: 'vuesax-linear:setting', + permissionsKey: 'config', + title: 'پیکربندی', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 10 + }, + children: [ + { + name: 'settingMain', + path: '', + component: () => import('@/pages/menuPages/setting/index.vue'), + meta: { + permissionsKey: 'config', + icon: 'vuesax-linear:setting', + order: 5, + title: 'پیکربندی', + disabled: false, + hideMenu: true + //hideChildren: false + }, + children: [ + { + name: 'settingMain_limitedOrder', + path: 'limitedOrder', + component: () => import('@/pages/menuPages/setting/limitedOrder/index.vue'), + meta: { + permissionsKey: 'config.limitedOrder', + icon: 'vuesax-linear:document-text', + title: '' + + '' + + 'محدودیت سفارش' + } + }, + { + name: 'usersMain', + path: 'admins', + component: () => import('@/pages/menuPages/users/index.vue'), + meta: { + permissionsKey: 'user', + icon: 'vuesax-linear:profile', + title: 'لیست مدیران' + } + }, + { + name: 'priceTriggers', + path: 'priceTriggers', + component: () => import('@/pages/menuPages/priceTriggers/index.vue'), + meta: { + permissionsKey: 'priceTriggers', + icon: 'vuesax-linear:notification-bing', + title: 'هشدار قیمت' + } + } + ] + } + ] +} + +export default Setting diff --git a/src/router/routes/singles.ts b/src/router/routes/singles.ts new file mode 100644 index 0000000..3f2c371 --- /dev/null +++ b/src/router/routes/singles.ts @@ -0,0 +1,117 @@ +/* +import type { RouteRecordRaw } from 'vue-router' + +const Customers: RouteRecordRaw = { + name: 'singles', + path: '/singles', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'singleMain_limitedOrder' }, + meta: { + icon: 'vuesax-linear:people', + // permissionsKey: 'project', + title: 'مشتریان تک', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 3 + }, + children: [ + { + name: 'singlesMain', + path: '', + component: () => import('@/pages/menuPages/singles/index.vue'), + meta: { + // permissionsKey: 'config', + icon: 'vuesax-linear:people', + title: 'مشتریان تک', + disabled: false, + hideMenu: true + //hideChildren: false + }, + children: [ + { + name: 'singleMain_limitedOrder', + path: 'list', + component: () => import('@/pages/menuPages/singles/base/index.vue'), + meta: { + // permissionsKey: 'config.limitedOrder', + icon: 'vuesax-linear:people', + title: 'لیست مشتریان' + } + }, + { + name: 'singleMain_archive', + path: 'archive', + component: () => import('@/pages/menuPages/singles/archive/index.vue'), + meta: { + // permissionsKey: 'user', + icon: 'vuesax-linear:save-2', + title: 'بایگانی' + } + } + ] + } + ] +} + +export default Customers +/!* + +import type {RouteRecordRaw} from 'vue-router' + +const Customers: RouteRecordRaw = { + name: 'customers', + path: '/customers', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: {name: 'customersMain'}, + meta: { + icon: 'vuesax-linear:people', + // permissionsKey: 'config', + title: 'مشتریان عمده', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 3, + children: [ + { + name: 'settingMain', + path: '', + component: () => import('@/pages/menuPages/setting/index.vue'), + meta: { + permissionsKey: 'config', + icon: 'vuesax-linear:setting', + order: 5, + title: 'پیکربندی', + disabled: false, + hideMenu: true + //hideChildren: false + }, + children: [ + { + name: 'settingMain_limitedOrder', + path: 'limitedOrder', + component: () => import('@/pages/menuPages/setting/limitedOrder/index.vue'), + meta: { + permissionsKey: 'config.limitedOrder', + icon: 'vuesax-linear:document-text', + title: 'محدودیت سفارش' + } + }, + { + name: 'usersMain', + path: 'admins', + component: () => import('@/pages/menuPages/users/index.vue'), + meta: { + permissionsKey: 'user', + icon: 'vuesax-linear:profile', + title: 'لیست مدیران' + } + } + ] + } + ] + } + + export default Customers +*!/ +*/ diff --git a/src/router/routes/sms.ts b/src/router/routes/sms.ts new file mode 100644 index 0000000..e84b268 --- /dev/null +++ b/src/router/routes/sms.ts @@ -0,0 +1,35 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Orders: RouteRecordRaw = { + name: 'sms', + path: '/sms', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'smsMain' }, + meta: { + icon: 'vuesax-linear:sms', + permissionsKey: 'sms', + title: 'پیامک ها', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 9 + }, + children: [ + { + name: 'smsMain', + path: '', + component: () => import('@/pages/menuPages/sms/index.vue'), + meta: { + permissionsKey: 'sms', + icon: 'vuesax-linear:setting', + order: 3, + title: 'پیامک ها', + disabled: false, + hideMenu: false + //hideChildren: false + } + } + ] +} + +export default Orders diff --git a/src/router/routes/transactions.ts b/src/router/routes/transactions.ts new file mode 100644 index 0000000..57d1199 --- /dev/null +++ b/src/router/routes/transactions.ts @@ -0,0 +1,35 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Transactions: RouteRecordRaw = { + name: 'transactions', + path: '/transactions', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'transactionsMain' }, + meta: { + icon: 'vuesax-linear:empty-wallet-change', + // permissionsKey: 'project', + title: 'گزارشات', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 5 + }, + children: [ + { + name: 'transactionsMain', + path: '', + component: () => import('@/pages/menuPages/transactions/index.vue'), + meta: { + // permissionsKey: 'wallet', + icon: 'vuesax-linear:wallet', + order: 3, + title: 'پروژه ها', + disabled: false, + hideMenu: false + //hideChildren: false + } + } + ] +} + +export default Transactions diff --git a/src/router/routes/wallet.ts b/src/router/routes/wallet.ts new file mode 100644 index 0000000..61ac1fd --- /dev/null +++ b/src/router/routes/wallet.ts @@ -0,0 +1,35 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Wallet: RouteRecordRaw = { + name: 'wallet', + path: '/wallet', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'walletMain' }, + meta: { + icon: 'vuesax-linear:wallet', + // permissionsKey: 'project', + title: 'کیف پول', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 4 + }, + children: [ + { + name: 'walletMain', + path: '', + component: () => import('@/pages/menuPages/wallet/index.vue'), + meta: { + // permissionsKey: 'wallet', + icon: 'vuesax-linear:wallet', + order: 3, + title: 'پروژه ها', + disabled: false, + hideMenu: false + //hideChildren: false + } + } + ] +} + +export default Wallet diff --git a/src/router/routes/withdraw.ts b/src/router/routes/withdraw.ts new file mode 100644 index 0000000..f7415da --- /dev/null +++ b/src/router/routes/withdraw.ts @@ -0,0 +1,35 @@ +import type { RouteRecordRaw } from 'vue-router' + +const Withdraw: RouteRecordRaw = { + name: 'withdraw', + path: '/withdraw', + component: () => import('@core/layouts/BasicLayout.vue'), + redirect: { name: 'withdrawMain' }, + meta: { + icon: 'vuesax-linear:money-change', + // permissionsKey: 'orders', + title: 'برداشت و واریز', + disabled: false, + hideMenu: false, + hideChildren: true, + order: 8 + }, + children: [ + { + name: 'withdrawMain', + path: '', + component: () => import('@/pages/menuPages/withdraw/index.vue'), + meta: { + // permissionsKey: 'project', + icon: 'vuesax-linear:money-change', + order: 3, + title: 'برداشت و واریز', + disabled: false, + hideMenu: false + //hideChildren: false + } + } + ] +} + +export default Withdraw diff --git a/src/store/configStore.ts b/src/store/configStore.ts new file mode 100644 index 0000000..1b10f81 --- /dev/null +++ b/src/store/configStore.ts @@ -0,0 +1,19 @@ +import {computed, ref} from 'vue' +import {defineStore} from 'pinia' + + +export const useConfigStore = defineStore('config', () => { + const config = ref() + + async function getConfigData() { + + let temp = window.__APP_CONFIG__ + config.value = temp.user + console.log(config.value) + } + + return { + config, + getConfigData + } +}) diff --git a/src/store/staticApisStore.ts b/src/store/staticApisStore.ts new file mode 100644 index 0000000..36dc082 --- /dev/null +++ b/src/store/staticApisStore.ts @@ -0,0 +1,201 @@ +import { defineStore } from 'pinia' + +interface State { + /* docGroupsData: Array | undefined + docTypeListData: Array | undefined + natureListData: Array | undefined + budgetListData: Array | undefined + projectTypeListData: Array | undefined + userTypeListData: Array | undefined + sectionListData: Array | undefined + projectListData: Array | undefined + processListData: Array | undefined + provincesListData: Array | undefined + cityListData: Array | undefined + usersListData: Array | undefined*/ + //myInfo: User | undefined + // treePermissionData: any + networkError: boolean +} + +export const useStaticApiListsStore = defineStore('staticApiLists', { + state: (): State => { + return { + /* docGroupsData: undefined, + docTypeListData: undefined, + natureListData: undefined, + budgetListData: undefined, + projectTypeListData: undefined, + userTypeListData: undefined, + usersListData: undefined, + sectionListData: undefined, + treePermissionData: undefined, + processListData: undefined, + provincesListData: undefined, + projectListData: undefined, + cityListData: undefined,*/ + // myInfo: undefined, + networkError: false + } + }, + // could also be defined as + // state: () => ({ count: 0 }) + actions: { + /* async getDocGroupList() { + try { + this.docGroupsData = await getDocGroupList() + return this.docGroupsData + } catch (e) { + this.networkError = true + } + }, + async getUsersList() { + try { + this.usersListData = await getUsersList() + return this.usersListData + } catch (e) { + this.networkError = true + } + }, + async getDocTypeList() { + try { + this.docTypeListData = await getDocTypeList() + return this.docTypeListData + } catch (e) { + this.networkError = true + } + }, + async getNatureConst() { + try { + this.natureListData = await getNatureConst() + // console.log('hell', this.natureListData) + return this.natureListData + } catch (e) { + this.networkError = true + } + }, + async getBudgetConst() { + try { + this.budgetListData = await getBudgetConst() + return this.budgetListData + } catch (e) { + this.networkError = true + } + }, + async getProjectTypeConst() { + try { + this.projectTypeListData = await getProjectConst() + return this.projectTypeListData + } catch (e) { + this.networkError = true + } + }, + async getUserTypeConst() { + try { + this.userTypeListData = await getUserTypeConst() + return this.userTypeListData + } catch (e) { + this.networkError = true + } + }, + async getSectionConst() { + try { + this.sectionListData = await getSectionConst() + return this.sectionListData + } catch (e) { + this.networkError = true + } + }, + async getProcessList() { + try { + this.processListData = await getProcessList() + return this.processListData + } catch (e) { + this.networkError = true + } + }, + async getTreeDataList() { + try { + this.treePermissionData = await getTreeData() + return this.treePermissionData + } catch (e) { + this.networkError = true + } + }, + async getProjectList() { + try { + this.projectListData = await getProjectList() + return this.projectListData + } catch (e) { + this.networkError = true + } + }, + async getProvincesList() { + try { + this.provincesListData = await getProvinces() + return this.provincesListData + } catch (e) { + this.networkError = true + } + }, + async getCityList() { + try { + this.cityListData = await getAllCities() + return this.cityListData + } catch (e) { + this.networkError = true + } + }, + async readyDocGroupList() { + return this.docGroupsData ?? (await this.getDocGroupList()) + }, + async readyDocTypeList() { + return this.docTypeListData ?? (await this.getDocTypeList()) + }, + async readyNatureConst() { + return this.natureListData ?? (await this.getNatureConst()) + }, + async readyBudgetConst() { + return this.budgetListData ?? (await this.getBudgetConst()) + }, + async readyProjectTypeConst() { + return this.projectTypeListData ?? (await this.getProjectTypeConst()) + }, + async readyUserTypeConst() { + return this.userTypeListData ?? (await this.getUserTypeConst()) + }, + async readySectionConst() { + return this.sectionListData ?? (await this.getSectionConst()) + }, + async readyProcessList() { + return this.processListData ?? (await this.getProcessList()) + }, + async readyTreeDataList() { + return this.treePermissionData ?? (await this.getTreeDataList()) + }, + async readyProjectList() { + return this.projectListData ?? (await this.getProjectList()) + }, + async readyProvincesList() { + return this.provincesListData ?? (await this.getProvincesList()) + }, + async readyCitiesList() { + return this.cityListData ?? (await this.getCityList()) + }, + async readyUserList() { + console.log('sasasasa', this.usersListData) + return this.usersListData ?? (await this.getUsersList()) + }*/ + /*async getWholeData() { + await this.getDocGroupList() + await this.getDocTypeList() + await this.getNatureConst() + await this.getProjectTypeConst() + await this.getBudgetConst() + await this.getUserTypeConst() + await this.getProjectList() + await this.getProcessList() + await this.getProvincesList() + }*/ + } +}) diff --git a/src/store/userStore.ts b/src/store/userStore.ts new file mode 100644 index 0000000..3c3b3ee --- /dev/null +++ b/src/store/userStore.ts @@ -0,0 +1,33 @@ +import { type ComputedRef, ref } from 'vue' +import type { User } from '@/model/user' +import { getMyInformation } from '@/api/user' +import { get } from 'lodash' +export const useUserStore = defineStore('user', () => { + const userInfo = ref(undefined) + + async function getMyInfo() { + try { + userInfo.value = await getMyInformation() + return userInfo.value + } catch (e) { + console.log(e) + } + } + + const permissions: ComputedRef = computed(() => { + const permissions: string[] = get(userInfo.value, 'permission', []) + const excludes: string[] = get(userInfo.value, 'exclude', []) + return permissions.filter((item) => !excludes.includes(item)) + }) + + function canAccess(permissionKey: string) { + if (isAdmin.value) return true + return permissions.value.includes(permissionKey) + } + + const isAdmin = computed(() => { + return userInfo.value?.is_admin + }) + + return { userInfo, getMyInfo, permissions, canAccess, isAdmin } +}) diff --git a/src/utils/axios.ts b/src/utils/axios.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/utils/config.ts b/src/utils/config.ts new file mode 100644 index 0000000..5a7135b --- /dev/null +++ b/src/utils/config.ts @@ -0,0 +1,9 @@ + +export function getConfigApp(key: string) { + const config = window.__APP_CONFIG__ ? window.__APP_CONFIG__.user:{} + + if (config) { + return config[key] + } + return null +} diff --git a/src/utils/confirmModal.ts b/src/utils/confirmModal.ts new file mode 100644 index 0000000..9da0396 --- /dev/null +++ b/src/utils/confirmModal.ts @@ -0,0 +1,95 @@ +import { Modal } from 'ant-design-vue' +import { createVNode } from 'vue' +import { ExclamationCircleOutlined } from '@ant-design/icons-vue' +import { deleteUser } from '@/api/user' +import { message } from 'ant-design-vue/es' + +//todo +export async function confirmDeleteItem( + type: string, + id: number, + functionDelete: (id: number) => Promise, + refreshTable: () => void +) { + Modal.confirm({ + title: `آیا از حذف ${type} اطمینان دارید؟`, + icon: createVNode(ExclamationCircleOutlined), + okText: 'تایید', + okType: 'danger', + centered: true, + cancelText: 'انصراف', + async onOk() { + // console.log('OK'); + // await deleteItem(id) + + // loading.value = true + // table?.value?.spinTable(true) + // @ts-ignore + try { + await functionDelete(id) + refreshTable() + console.log('finall') + message.success('با موفقیت حذف شد') + } catch (e) { + console.error(e) + // message.error('خطا در حذف') + } + + // setTimeout(Math.random() > 0.5 ? resolve : reject, 1000) + // table?.value?.fetch() + + // loading.value = false + // table?.value?.spinTable(false) + }, + onCancel() { + console.log('Cancel') + } + }) +} + +export async function confirmActOnApi( + title: string, + item: any, + functionApi: (item: any) => Promise, + refreshTable?: () => void +) { + Modal.confirm({ + title: title, + icon: createVNode(ExclamationCircleOutlined), + okText: 'تایید', + okType: 'danger', + centered: true, + cancelText: 'انصراف', + async onOk() { + // console.log('OK'); + // await deleteItem(id) + + // loading.value = true + // table?.value?.spinTable(true) + // @ts-ignore + try { + console.log('sasas') + await functionApi(item) + if (refreshTable) { + refreshTable() + } + // console.log('finall') + message.success('با موفقیت انجام شد') + Modal.destroyAll() + } catch (e) { + console.error(e) + // message.error('خطا در حذف') + } + + // setTimeout(Math.random() > 0.5 ? resolve : reject, 1000) + // table?.value?.fetch() + + // loading.value = false + // table?.value?.spinTable(false) + }, + onCancel() { + console.log('Cancel') + Modal.destroyAll() + } + }) +} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..db5d15c --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,26 @@ +import { tokenName } from '@root/config' +export const loading = ref(false) +export const loadingMore = ref(false) + +export function getToken() { + return localStorage.getItem(tokenName) +} + +export async function setToken(token: string) { + localStorage.setItem(tokenName, token) +} + +export async function setMyInfo(token: string) { + localStorage.setItem(tokenName, token) +} + +/*export function getMyInfo() { + return JSON.parse(localStorage.getItem('tamin_my_info') as string) +}*/ + +export function removeToken() { + return localStorage.removeItem(tokenName) +} +export function hotSelect(e: any) { + e.target?.select() +} \ No newline at end of file diff --git a/src/utils/inputRules.ts b/src/utils/inputRules.ts new file mode 100644 index 0000000..a78cbb6 --- /dev/null +++ b/src/utils/inputRules.ts @@ -0,0 +1,51 @@ +export function inputRules(title?: string) { + if (title) { + return [{ required: true, message: `پر کردن ${title} الزامی است` }] + } else { + return [{ required: true, message: `پر کردن مورد بالا الزامی است` }] + } +} + +export function inputRulesNumber(title?: string) { + if (title) { + return [ + { required: true, message: `پر کردن ${title} الزامی است` }, + { + required: true, + type: 'regexp', + pattern: /\d+/g, + message: 'لطفا اطلاعات را به صورت عدد و نقطه وارد کنید' + } + ] + } else { + return [ + { required: true, message: `پر کردن مورد بالا الزامی است` }, + { + required: true, + type: 'regexp', + pattern: /\d+/g, + message: 'لطفا اطلاعات را به صورت عدد و نقطه وارد کنید' + } + ] + } +} + +export function inputLenRules(len: number, title?: string) { + if (title) { + return [ + { required: true, message: `پر کردن ${title} الزامی است` }, + { len: len, message: `تعداد کاراکتر باید ${len} عدد باشد` } + ] + } else { + return [ + { required: true, message: 'پر کردن مورد بالا الزامی است' }, + { len: len, message: `تعداد کاراکتر باید ${len} عدد باشد` } + ] + } +} + +export const valueValidation = computed(() => { + const temp = inputRules() + temp.push({ pattern: /^[A-Za-z]*$/, message: 'فقط حروف انگلیسی مجاز است' }) + return temp +}) diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..5e52a37 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,9 @@ +/// + +declare global { + interface Window { + __APP_CONFIG__?: Record; + } +} + +export {}; diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..2cd85f5 --- /dev/null +++ b/todo.md @@ -0,0 +1,65 @@ +1-colors +2- menu and layout settings +3-axios +4-font +5-icon +--------------------------------------- +1- scroll style and hidden scroll +create git from base of panel +modal +dark/light +menu +setting +pwa +table engine +ant and config +tailwind or wind css or unocss +remove unused file +test out put and serve for test +config env or config json +win box (https://vue-winbox.vercel.app/) +form builder +date picker +utils - date time - count down timer - is - token - +scuripty locale storage +skeleton +nprogree +//basic +login +menu +router +color +date time +axios +back to top button +ecahrt - chart js +//important +pwa and config html and icon +color and config base +table engine base +card component +base modal +show page and content +hover for submenu popup + + +//todo for BaseTable +1- striped +4- cache page and set to url params +5- empty table +6- fix header action +7- fix bottom action +8-change page limit +9- table show column +10-did you mean table +11-fix typing english to persian language + + + +//todo for config prettire +1- axios +-base modal + + + + diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..fb16267 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "@vue/tsconfig/tsconfig.web.json", + "include": [ + "env.d.ts", + "src/**/*", + "src/**/*.vue", + "auto-imports.d.ts", + "components.d.ts" + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"], + "@root/*": ["./*"], + "@core/*": ["./src/core/*"] + } + }, +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..0fa5756 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,25 @@ +import { defineConfig, type UserConfigExport } from 'vite' +import { baseConfigVite } from './src/core/config/vite' +import { merge } from 'lodash' +import UnoCSS from 'unocss/vite' + +/** + * @link https://vitejs.dev/config/ + */ +const config: UserConfigExport = { + base:"/admin", + /** + * _sample change base config vite for base Url + */ + server: { + port: 3600 + }, +/* plugins: [ + UnoCSS({ + configFile: '../my-uno.config.ts' + }) + ],*/ + //base: '/admin' +} + +export default defineConfig(merge(baseConfigVite, config)) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..715089e --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5350 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@ant-design/colors@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz" + integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ== + dependencies: + "@ctrl/tinycolor" "^3.4.0" + +"@ant-design/icons-svg@^4.2.1": + version "4.3.1" + resolved "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz" + integrity sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g== + +"@ant-design/icons-vue@^6.1.0": + version "6.1.0" + resolved "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz" + integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA== + dependencies: + "@ant-design/colors" "^6.0.0" + "@ant-design/icons-svg" "^4.2.1" + +"@antfu/install-pkg@^0.1.1": + version "0.1.1" + resolved "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.1.1.tgz" + integrity sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ== + dependencies: + execa "^5.1.1" + find-up "^5.0.0" + +"@antfu/utils@^0.7.2", "@antfu/utils@^0.7.5", "@antfu/utils@^0.7.6": + version "0.7.7" + resolved "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.7.tgz" + integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg== + +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.6" + resolved "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz" + integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.11.1", "@babel/core@^7.23.3": + version "7.23.7" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": + version "7.23.7" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz" + integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== + dependencies: + "@babel/types" "^7.23.0" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.22.11", "@babel/parser@^7.22.15", "@babel/parser@^7.23.5", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-async-generator-functions@^7.23.7": + version "7.23.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz" + integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" + +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== + dependencies: + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== + dependencies: + "@babel/compat-data" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.23.3" + +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typescript@^7.23.3": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz" + integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.23.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.23.3" + +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.11.0": + version "7.23.8" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz" + integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.7" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.8" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.7" + babel-plugin-polyfill-corejs3 "^0.8.7" + babel-plugin-polyfill-regenerator "^0.5.4" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4": + version "7.23.8" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz" + integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.4.4": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@ctrl/tinycolor@^3.4.0": + version "3.6.1" + resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz" + integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@iconify/types@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + +"@iconify/utils@^2.1.5": + version "2.1.15" + resolved "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.15.tgz" + integrity sha512-8chdk3NhkYiqIVxPRBPN5wGnVYaTqc8XUagCNez84Ex7yK/oNrj1XINVn7zv+JljqZbF6r5B/bd1gRNlMSwYhg== + dependencies: + "@antfu/install-pkg" "^0.1.1" + "@antfu/utils" "^0.7.5" + "@iconify/types" "^2.0.0" + debug "^4.3.4" + kolorist "^1.8.0" + local-pkg "^0.4.3" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.24" + resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz" + integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== + +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/plugin-replace@^5.0.1": + version "5.0.5" + resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz" + integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + magic-string "^0.30.3" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.1.0": + version "5.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rushstack/eslint-patch@^1.2.0": + version "1.7.0" + resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.0.tgz" + integrity sha512-Jh4t/593gxs0lJZ/z3NnasKlplXT2f+4y/LZYuaKZW5KAaiVFL/fThhs+17EbUd53jUVJ0QudYCBGbN/psvaqg== + +"@simonwep/pickr@~1.8.0": + version "1.8.2" + resolved "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz" + integrity sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA== + dependencies: + core-js "^3.15.1" + nanopop "^2.1.0" + +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + +"@types/crypto-js@^4.1.1": + version "4.2.1" + resolved "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.1.tgz" + integrity sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/lodash@^4.14.195": + version "4.14.202" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + +"@types/node@*", "@types/node@^18.15.13": + version "18.19.8" + resolved "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz" + integrity sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg== + dependencies: + undici-types "~5.26.4" + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.5.6" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + +"@types/trusted-types@^2.0.2": + version "2.0.7" + resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + +"@types/web-bluetooth@^0.0.20": + version "0.0.20" + resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz" + integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== + +"@typescript-eslint/eslint-plugin@^5.59.1": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.59.1": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@unhead/dom@1.8.10", "@unhead/dom@^1.3.1": + version "1.8.10" + resolved "https://registry.npmjs.org/@unhead/dom/-/dom-1.8.10.tgz" + integrity sha512-dBeDbHrBjeU+eVgMsD91TGEazb1dwLrY0x/ve01CldMCmm+WcRu++SUW7s1QX84mzGH2EgFz78o1OPn6jpV3zw== + dependencies: + "@unhead/schema" "1.8.10" + "@unhead/shared" "1.8.10" + +"@unhead/schema@1.8.10", "@unhead/schema@^1.3.1": + version "1.8.10" + resolved "https://registry.npmjs.org/@unhead/schema/-/schema-1.8.10.tgz" + integrity sha512-cy8RGOPkwOVY5EmRoCgGV8AqLjy/226xBVTY54kBct02Om3hBdpB9FZa9frM910pPUXMI8PNmFgABO23O7IdJA== + dependencies: + hookable "^5.5.3" + zhead "^2.2.4" + +"@unhead/shared@1.8.10": + version "1.8.10" + resolved "https://registry.npmjs.org/@unhead/shared/-/shared-1.8.10.tgz" + integrity sha512-pEFryAs3EmV+ShDQx2ZBwUnt5l3RrMrXSMZ50oFf+MImKZNARVvD4+3I8fEI9wZh+Zq0JYG3UAfzo51MUP+Juw== + dependencies: + "@unhead/schema" "1.8.10" + +"@unhead/ssr@^1.3.1": + version "1.8.10" + resolved "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.8.10.tgz" + integrity sha512-7wKRKDd8c2NFmMyPetj8Ah5u2hXunDBZT5Y2DH83O16PiMxx4/uobGamTV1EfcqjTvOKJvAqkrYZNYSWss99NQ== + dependencies: + "@unhead/schema" "1.8.10" + "@unhead/shared" "1.8.10" + +"@unhead/vue@^1.3.1": + version "1.8.10" + resolved "https://registry.npmjs.org/@unhead/vue/-/vue-1.8.10.tgz" + integrity sha512-KF8pftHnxnlBlgNpKXWLTg3ZUtkuDCxRPUFSDBy9CtqRSX/qvAhLZ26mbqRVmHj8KigiRHP/wnPWNyGnUx20Bg== + dependencies: + "@unhead/schema" "1.8.10" + "@unhead/shared" "1.8.10" + hookable "^5.5.3" + unhead "1.8.10" + +"@unocss/astro@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/astro/-/astro-0.50.8.tgz" + integrity sha512-kphNlr0PWGzvkCgKx7RaZWQ45khieCCt9OffUnxbRRft+jodsVXIwzHn+bOhGtIKpEpZiOzxRzTYjfW/R6XnTw== + dependencies: + "@unocss/core" "0.50.8" + "@unocss/reset" "0.50.8" + "@unocss/vite" "0.50.8" + +"@unocss/cli@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/cli/-/cli-0.50.8.tgz" + integrity sha512-LBLt8oxGQSfTubOreXs8L7cxHvuYt4wA1MZ45jf4GT/C4moS8cqL7QFX66+MN/cNwvojqXSXQ2HtRJ1IZojfgA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@rollup/pluginutils" "^5.0.2" + "@unocss/config" "0.50.8" + "@unocss/core" "0.50.8" + "@unocss/preset-uno" "0.50.8" + cac "^6.7.14" + chokidar "^3.5.3" + colorette "^2.0.19" + consola "^2.15.3" + fast-glob "^3.2.12" + magic-string "^0.30.0" + pathe "^1.1.0" + perfect-debounce "^0.1.3" + +"@unocss/config@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/config/-/config-0.50.8.tgz" + integrity sha512-+Hzl99klLiIq7Lcc5EirTSfBqUH+5NOCmEkXXWcYKYyAk3BLnBU9Fk76P7HxchDwQ5zdwpC4Cq++LQlqbAw/Uw== + dependencies: + "@unocss/core" "0.50.8" + unconfig "^0.3.7" + +"@unocss/core@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/core/-/core-0.50.8.tgz" + integrity sha512-rWmyeNE0Na8dJPDynLVar0X22qMHFNhO+/F2FZDpG4tubTavXJJo9uvhZr/D381kiWxt+XZ38y6EAD4UMdBqMA== + +"@unocss/inspector@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/inspector/-/inspector-0.50.8.tgz" + integrity sha512-M963+B9iYGDI7m8KONppJ9EvrDowKWnzzmMLGf+D+qEXmXdnSztMZxEnOdg/caYyHJMw+4jlftyYRZB0VXnAGA== + dependencies: + gzip-size "^6.0.0" + sirv "^2.0.2" + +"@unocss/postcss@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/postcss/-/postcss-0.50.8.tgz" + integrity sha512-UbFD+25EkmBonZggKuQdunAU+1O6O83NcnMqSalhn4vhsr4yHeD4P+Omr+CnBcuOxkP4h2JYHzfzdpe4DZxKYg== + dependencies: + "@unocss/config" "0.50.8" + "@unocss/core" "0.50.8" + css-tree "^2.3.1" + fast-glob "^3.2.12" + magic-string "^0.30.0" + postcss "^8.4.21" + +"@unocss/preset-attributify@0.50.8", "@unocss/preset-attributify@^0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/preset-attributify/-/preset-attributify-0.50.8.tgz" + integrity sha512-aSL+I8OSjnom4RpvUcxIRjYETFhW5n51TA56yB9+ex78z5/EhIzOSS5PytGxJWj4hKUY5W9cZ7sCuUs0eaQ6VA== + dependencies: + "@unocss/core" "0.50.8" + +"@unocss/preset-icons@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/preset-icons/-/preset-icons-0.50.8.tgz" + integrity sha512-tQ05aP7ZRRP39+egB16gFMK6fkEdS8ob4rJeqUG6vEXiiAFWVbotI/NbHQapqk3wRthmyI3d9rUtxClJ2micvw== + dependencies: + "@iconify/utils" "^2.1.5" + "@unocss/core" "0.50.8" + ofetch "^1.0.1" + +"@unocss/preset-mini@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/preset-mini/-/preset-mini-0.50.8.tgz" + integrity sha512-/4sbOdyaqJMvFkw1xzo2+h6bZJHw6WCYw1mF+f0ydHzj8ruvwaj9ClDDOweW5cdrk3wzDzRZ6NPRahKqLwv6/Q== + dependencies: + "@unocss/core" "0.50.8" + +"@unocss/preset-tagify@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/preset-tagify/-/preset-tagify-0.50.8.tgz" + integrity sha512-CNm9wEmDGEsCvBgWTBOPhH5ts5iobQh5mBeZyH2uCKuQNX+Vc21tXLX78bCk2V4yJ7mpqUWokDNqgTaNhTZjnw== + dependencies: + "@unocss/core" "0.50.8" + +"@unocss/preset-typography@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/preset-typography/-/preset-typography-0.50.8.tgz" + integrity sha512-jraHusTmbJq9UHgQ43ifzVJobTyoJLuGzeGqBzgLNac+V4BltzqHghup6obA09asQio7xe+crFkTV4IXWNK1lA== + dependencies: + "@unocss/core" "0.50.8" + "@unocss/preset-mini" "0.50.8" + +"@unocss/preset-uno@0.50.8", "@unocss/preset-uno@^0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/preset-uno/-/preset-uno-0.50.8.tgz" + integrity sha512-BVgGpv+G9dauX6oRuno8ATOx6bjykiTGuy9NWZCG+/0vux0wplylQm/nSWYsEZZoxRwGOaAoNx93TeOPoofrXQ== + dependencies: + "@unocss/core" "0.50.8" + "@unocss/preset-mini" "0.50.8" + "@unocss/preset-wind" "0.50.8" + +"@unocss/preset-web-fonts@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/preset-web-fonts/-/preset-web-fonts-0.50.8.tgz" + integrity sha512-diGJVTC3W2lovRL9hlV7h4mdzKjoyJD1rlLai2QMZP/+UCsEwDcL9JFF0lZTlEN5GtcbgvcyPRZKB1/ituvjdg== + dependencies: + "@unocss/core" "0.50.8" + ofetch "^1.0.1" + +"@unocss/preset-wind@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/preset-wind/-/preset-wind-0.50.8.tgz" + integrity sha512-lF6MAJm2HVF8GJoBIIus1cpZL1ybisj8fl3KYEzVUFUWCwmNnxG4rr+CGnck3bDRYk2zmEvTwX+cISTCwq2u1Q== + dependencies: + "@unocss/core" "0.50.8" + "@unocss/preset-mini" "0.50.8" + +"@unocss/reset@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/reset/-/reset-0.50.8.tgz" + integrity sha512-2WoM6O9VyuHDPAnvCXr7LBJQ8ZRHDnuQAFsL1dWXp561Iq2l9whdNtPuMcozLGJGUUrFfVBXIrHY4sfxxScgWg== + +"@unocss/scope@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/scope/-/scope-0.50.8.tgz" + integrity sha512-QA4G9JYK8jrnU02qi1WBi45S+V0HKNUY0u6h5drYqRkcUho2YrpcfMagYi1A5XGg5ykmtP9e6vx1D9lij+JGnQ== + +"@unocss/transformer-attributify-jsx-babel@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/transformer-attributify-jsx-babel/-/transformer-attributify-jsx-babel-0.50.8.tgz" + integrity sha512-Eyt0irFRspHpngj+mDbREuVoqJ49csIhcls6NqerqrZKAI4/jYGNLFy99jyM1ry2L3sHwLP7rbT7AoFrWuLnvA== + dependencies: + "@unocss/core" "0.50.8" + +"@unocss/transformer-attributify-jsx@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.50.8.tgz" + integrity sha512-Ht2SfxWbkkFgZQE8KEicmOvxk2INQccuiH4gdyycj3y1tkOXU+Xm1QFruJT7+BPHr0QJp257nA0XmQD/Bhd1kA== + dependencies: + "@unocss/core" "0.50.8" + +"@unocss/transformer-compile-class@0.50.8", "@unocss/transformer-compile-class@^0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/transformer-compile-class/-/transformer-compile-class-0.50.8.tgz" + integrity sha512-2himb5VinZcx7d72nauoqLGk4niC0sFFK/09lmJxFj1jnZqqYBMS48V0PyUypabA5W+bHQ1TJwqcv95wMHIIzA== + dependencies: + "@unocss/core" "0.50.8" + +"@unocss/transformer-directives@0.50.8", "@unocss/transformer-directives@^0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/transformer-directives/-/transformer-directives-0.50.8.tgz" + integrity sha512-x/OdR5lK7Gy1Y4r6cOLG2LccWGWDyflz9cDv4DkZKg7pQShcjNFZ3UMAO+74fJO6Jvhvl9iDYpeTZo8009wr7A== + dependencies: + "@unocss/core" "0.50.8" + css-tree "^2.3.1" + +"@unocss/transformer-variant-group@0.50.8", "@unocss/transformer-variant-group@^0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/transformer-variant-group/-/transformer-variant-group-0.50.8.tgz" + integrity sha512-UjDsa3K3Bv11u3q8BYZ4ZrdMhlu937hiQct6sXzFIQcSnOwqOokr/h6V/8aB3hFiPWX/yQuIIQnQJjYTVWZYxw== + dependencies: + "@unocss/core" "0.50.8" + +"@unocss/vite@0.50.8": + version "0.50.8" + resolved "https://registry.npmjs.org/@unocss/vite/-/vite-0.50.8.tgz" + integrity sha512-pHk7D0jHAlBUKSp0y0dMuKesLSSv1O0fTNewUAz1NUpISTno3zizuKSpRs8OzCFInta6QeAVSaWe8K69PcfFog== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@rollup/pluginutils" "^5.0.2" + "@unocss/config" "0.50.8" + "@unocss/core" "0.50.8" + "@unocss/inspector" "0.50.8" + "@unocss/scope" "0.50.8" + "@unocss/transformer-directives" "0.50.8" + chokidar "^3.5.3" + fast-glob "^3.2.12" + magic-string "^0.30.0" + +"@vitejs/plugin-vue-jsx@^3.0.1": + version "3.1.0" + resolved "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz" + integrity sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA== + dependencies: + "@babel/core" "^7.23.3" + "@babel/plugin-transform-typescript" "^7.23.3" + "@vue/babel-plugin-jsx" "^1.1.5" + +"@vitejs/plugin-vue@^4.1.0": + version "4.6.2" + resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz" + integrity sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw== + +"@volar/language-core@1.11.1", "@volar/language-core@~1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz" + integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== + dependencies: + "@volar/source-map" "1.11.1" + +"@volar/source-map@1.11.1", "@volar/source-map@~1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz" + integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== + dependencies: + muggle-string "^0.3.1" + +"@volar/typescript@~1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz" + integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== + dependencies: + "@volar/language-core" "1.11.1" + path-browserify "^1.0.1" + +"@vue/babel-helper-vue-transform-on@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.0.tgz" + integrity sha512-Zn6iRYAVvWl835GCcNsLUroy+jwNjH1yd83hvKNSgbiCkzeZwXvEFCC1u0lVKwoqL7z0IcrtY3dkBMuMxwB1fw== + +"@vue/babel-plugin-jsx@^1.1.5": + version "1.2.0" + resolved "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.0.tgz" + integrity sha512-z0t7fjk03TqncyWYoChKQ4rWx1LXJaw1kNEDrUU5tbPWI2zkCPv2imQJOYlJ8GyTDoQ6/nD82asFcSxDRJ8YgQ== + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + "@vue/babel-helper-vue-transform-on" "1.2.0" + "@vue/babel-plugin-resolve-type" "1.2.0-beta.0" + camelcase "^6.3.0" + html-tags "^3.3.1" + svg-tags "^1.0.0" + +"@vue/babel-plugin-resolve-type@1.2.0-beta.0": + version "1.2.0-beta.0" + resolved "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.0-beta.0.tgz" + integrity sha512-zG5nXU+89UjXHVvvf0yehU0MDF1caJssCUF+bU5HWevEoR5qoRLt7wX6rNTtG/ZKHFUvB8BibIKL62Ix167Wxg== + dependencies: + "@babel/code-frame" "^7.22.10" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/parser" "^7.22.11" + "@vue/compiler-sfc" "^3.4.15" + +"@vue/compiler-core@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.13.tgz" + integrity sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/shared" "3.3.13" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-core@3.4.15": + version "3.4.15" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.15.tgz" + integrity sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw== + dependencies: + "@babel/parser" "^7.23.6" + "@vue/shared" "3.4.15" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.13.tgz" + integrity sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw== + dependencies: + "@vue/compiler-core" "3.3.13" + "@vue/shared" "3.3.13" + +"@vue/compiler-dom@3.4.15", "@vue/compiler-dom@^3.3.0": + version "3.4.15" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz" + integrity sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ== + dependencies: + "@vue/compiler-core" "3.4.15" + "@vue/shared" "3.4.15" + +"@vue/compiler-sfc@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.13.tgz" + integrity sha512-DQVmHEy/EKIgggvnGRLx21hSqnr1smUS9Aq8tfxiiot8UR0/pXKHN9k78/qQ7etyQTFj5em5nruODON7dBeumw== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.13" + "@vue/compiler-dom" "3.3.13" + "@vue/compiler-ssr" "3.3.13" + "@vue/reactivity-transform" "3.3.13" + "@vue/shared" "3.3.13" + estree-walker "^2.0.2" + magic-string "^0.30.5" + postcss "^8.4.32" + source-map-js "^1.0.2" + +"@vue/compiler-sfc@^3.4.15": + version "3.4.15" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz" + integrity sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA== + dependencies: + "@babel/parser" "^7.23.6" + "@vue/compiler-core" "3.4.15" + "@vue/compiler-dom" "3.4.15" + "@vue/compiler-ssr" "3.4.15" + "@vue/shared" "3.4.15" + estree-walker "^2.0.2" + magic-string "^0.30.5" + postcss "^8.4.33" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.13.tgz" + integrity sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw== + dependencies: + "@vue/compiler-dom" "3.3.13" + "@vue/shared" "3.3.13" + +"@vue/compiler-ssr@3.4.15": + version "3.4.15" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz" + integrity sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw== + dependencies: + "@vue/compiler-dom" "3.4.15" + "@vue/shared" "3.4.15" + +"@vue/devtools-api@^6.5.0": + version "6.5.1" + resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz" + integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA== + +"@vue/eslint-config-prettier@^7.1.0": + version "7.1.0" + resolved "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz" + integrity sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ== + dependencies: + eslint-config-prettier "^8.3.0" + eslint-plugin-prettier "^4.0.0" + +"@vue/eslint-config-typescript@^11.0.2": + version "11.0.3" + resolved "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz" + integrity sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw== + dependencies: + "@typescript-eslint/eslint-plugin" "^5.59.1" + "@typescript-eslint/parser" "^5.59.1" + vue-eslint-parser "^9.1.1" + +"@vue/language-core@1.8.27": + version "1.8.27" + resolved "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz" + integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA== + dependencies: + "@volar/language-core" "~1.11.1" + "@volar/source-map" "~1.11.1" + "@vue/compiler-dom" "^3.3.0" + "@vue/shared" "^3.3.0" + computeds "^0.0.1" + minimatch "^9.0.3" + muggle-string "^0.3.1" + path-browserify "^1.0.1" + vue-template-compiler "^2.7.14" + +"@vue/reactivity-transform@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.13.tgz" + integrity sha512-oWnydGH0bBauhXvh5KXUy61xr9gKaMbtsMHk40IK9M4gMuKPJ342tKFarY0eQ6jef8906m35q37wwA8DMZOm5Q== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.13" + "@vue/shared" "3.3.13" + estree-walker "^2.0.2" + magic-string "^0.30.5" + +"@vue/reactivity@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.13.tgz" + integrity sha512-fjzCxceMahHhi4AxUBzQqqVhuA21RJ0COaWTbIBl1PruGW1CeY97louZzLi4smpYx+CHfFPPU/CS8NybbGvPKQ== + dependencies: + "@vue/shared" "3.3.13" + +"@vue/runtime-core@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.13.tgz" + integrity sha512-1TzA5TvGuh2zUwMJgdfvrBABWZ7y8kBwBhm7BXk8rvdx2SsgcGfz2ruv2GzuGZNvL1aKnK8CQMV/jFOrxNQUMA== + dependencies: + "@vue/reactivity" "3.3.13" + "@vue/shared" "3.3.13" + +"@vue/runtime-dom@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.13.tgz" + integrity sha512-JJkpE8R/hJKXqVTgUoODwS5wqKtOsmJPEqmp90PDVGygtJ4C0PtOkcEYXwhiVEmef6xeXcIlrT3Yo5aQ4qkHhQ== + dependencies: + "@vue/runtime-core" "3.3.13" + "@vue/shared" "3.3.13" + csstype "^3.1.3" + +"@vue/server-renderer@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.13.tgz" + integrity sha512-vSnN+nuf6iSqTL3Qgx/9A+BT+0Zf/VJOgF5uMZrKjYPs38GMYyAU1coDyBNHauehXDaP+zl73VhwWv0vBRBHcg== + dependencies: + "@vue/compiler-ssr" "3.3.13" + "@vue/shared" "3.3.13" + +"@vue/shared@3.3.13": + version "3.3.13" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.13.tgz" + integrity sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA== + +"@vue/shared@3.4.15", "@vue/shared@^3.3.0": + version "3.4.15" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz" + integrity sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g== + +"@vue/tsconfig@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.1.3.tgz" + integrity sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg== + +"@vueuse/core@^10.1.2": + version "10.7.2" + resolved "https://registry.npmjs.org/@vueuse/core/-/core-10.7.2.tgz" + integrity sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ== + dependencies: + "@types/web-bluetooth" "^0.0.20" + "@vueuse/metadata" "10.7.2" + "@vueuse/shared" "10.7.2" + vue-demi ">=0.14.6" + +"@vueuse/head@^1.1.26": + version "1.3.1" + resolved "https://registry.npmjs.org/@vueuse/head/-/head-1.3.1.tgz" + integrity sha512-XCcHGfDzkGlHS7KIPJVYN//L7jpfASLsN7MUE19ndHVQLnPIDxqFLDl7IROsY81PKzawVAUe4OYVWcGixseWxA== + dependencies: + "@unhead/dom" "^1.3.1" + "@unhead/schema" "^1.3.1" + "@unhead/ssr" "^1.3.1" + "@unhead/vue" "^1.3.1" + +"@vueuse/metadata@10.7.2": + version "10.7.2" + resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.2.tgz" + integrity sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ== + +"@vueuse/shared@10.7.2": + version "10.7.2" + resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.2.tgz" + integrity sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA== + dependencies: + vue-demi ">=0.14.6" + +"@yr/monotone-cubic-spline@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz" + integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.10.0, acorn@^8.11.2, acorn@^8.11.3, acorn@^8.8.2, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.6.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ant-design-vue@^3.2.19: + version "3.2.20" + resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-3.2.20.tgz" + integrity sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg== + dependencies: + "@ant-design/colors" "^6.0.0" + "@ant-design/icons-vue" "^6.1.0" + "@babel/runtime" "^7.10.5" + "@ctrl/tinycolor" "^3.4.0" + "@simonwep/pickr" "~1.8.0" + array-tree-filter "^2.1.0" + async-validator "^4.0.0" + dayjs "^1.10.5" + dom-align "^1.12.1" + dom-scroll-into-view "^2.0.0" + lodash "^4.17.21" + lodash-es "^4.17.15" + resize-observer-polyfill "^1.5.1" + scroll-into-view-if-needed "^2.2.25" + shallow-equal "^1.0.0" + vue-types "^3.0.0" + warning "^4.0.0" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apexcharts@^3.45.1: + version "3.45.1" + resolved "https://registry.npmjs.org/apexcharts/-/apexcharts-3.45.1.tgz" + integrity sha512-pPjj/SA6dfPvR/IKRZF0STdfBGpBh3WRt7K0DFuW9P8erypYkX17EHu3/molPRfo2zSiQwTVpshHC5ncysqfkA== + dependencies: + "@yr/monotone-cubic-spline" "^1.0.3" + svg.draggable.js "^2.2.2" + svg.easing.js "^2.0.0" + svg.filter.js "^2.0.2" + svg.pathmorphing.js "^0.1.3" + svg.resize.js "^1.4.3" + svg.select.js "^3.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +async-validator@^4.0.0: + version "4.2.5" + resolved "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== + +async@^3.2.3: + version "3.2.5" + resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^1.3.6: + version "1.6.5" + resolved "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz" + integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-plugin-polyfill-corejs2@^0.4.7: + version "0.4.8" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.5.0" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.8.7: + version "0.8.7" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" + +babel-plugin-polyfill-regenerator@^0.5.4: + version "0.5.5" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.5.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + dependencies: + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +builtin-modules@^3.1.0: + version "3.3.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001565: + version "1.0.30001579" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz" + integrity sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA== + +chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.19: + version "2.0.20" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +compute-scroll-into-view@^1.0.20: + version "1.0.20" + resolved "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz" + integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== + +computeds@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz" + integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +copy-anything@^2.0.1: + version "2.0.6" + resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz" + integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== + dependencies: + is-what "^3.14.1" + +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.35.1" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz" + integrity sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw== + dependencies: + browserslist "^4.22.2" + +core-js@^3.15.1: + version "3.35.1" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz" + integrity sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw== + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-js@^4.1.1: + version "4.2.0" + resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +dayjalali@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dayjalali/-/dayjalali-1.0.1.tgz" + integrity sha512-f+uDwP9kQSjlDdGTJjMpWaHe9BaIkQjZRkk32SNj6pRNkJRc2bTmIW5AbEwVX3vwa5INDwi6K7+Cik67/PzWqA== + dependencies: + jalaali-js "^1.2.8" + +dayjs@^1.10.5: + version "1.11.10" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz" + integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +defu@^6.1.2: + version "6.1.4" + resolved "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +destr@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/destr/-/destr-2.0.2.tgz" + integrity sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-align@^1.12.1: + version "1.12.4" + resolved "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz" + integrity sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw== + +dom-scroll-into-view@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz" + integrity sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +echarts@^5.4.3: + version "5.4.3" + resolved "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz" + integrity sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA== + dependencies: + tslib "2.3.0" + zrender "5.4.4" + +ejs@^3.1.6: + version "3.1.9" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.601: + version "1.4.640" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.640.tgz" + integrity sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA== + +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +errno@^0.1.1: + version "0.1.8" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +esbuild@^0.18.10: + version "0.18.20" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== + optionalDependencies: + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +eslint-config-prettier@^8.3.0: + version "8.10.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-vue@^9.9.0: + version "9.20.1" + resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.20.1.tgz" + integrity sha512-GyCs8K3lkEvoyC1VV97GJhP1SvqsKCiWGHnbn0gVUYiUhaH2+nB+Dv1uekv1THFMPbBfYxukrzQdltw950k+LQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + natural-compare "^1.4.0" + nth-check "^2.1.1" + postcss-selector-parser "^6.0.13" + semver "^7.5.4" + vue-eslint-parser "^9.4.0" + xml-name-validator "^4.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1, eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.36.0: + version "8.56.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + 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" + text-table "^0.2.0" + +espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.0, esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.16.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + +follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hookable@^5.5.3: + version "5.5.3" + resolved "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz" + integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +idb@^7.0.1: + version "7.1.1" + resolved "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz" + integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + +ignore@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz" + integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-object@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz" + integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-what@^3.14.1: + version "3.14.1" + resolved "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jalaali-js@^1.1.0, jalaali-js@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.2.8.tgz" + integrity sha512-Jl/EwY84JwjW2wsWqeU4pNd22VNQ7EkjI36bDuLw31wH98WQW4fPjD0+mG7cdCK+Y8D6s9R3zLiQ3LaKu6bD8A== + +jalaliday@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/jalaliday/-/jalaliday-2.3.0.tgz" + integrity sha512-B/m3TqsRrTFED/HBDqON6rPKe0MpoLxNICZ5uZeZ/scHJUHKQNr1n+wdZSj8MxrY1Bmo05gllZeNEw4beXd2oQ== + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jiti@^1.20.0: + version "1.21.0" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.0, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kolorist@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz" + integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== + +less-loader@^11.1.2: + version "11.1.4" + resolved "https://registry.npmjs.org/less-loader/-/less-loader-11.1.4.tgz" + integrity sha512-6/GrYaB6QcW6Vj+/9ZPgKKs6G10YZai/l/eJ4SLwbzqNTBsAqt5hSLVF47TgsiBxV1P6eAU0GYRH3YRuQU9V3A== + +less@^4.1.3: + version "4.2.0" + resolved "https://registry.npmjs.org/less/-/less-4.2.0.tgz" + integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA== + dependencies: + copy-anything "^2.0.1" + parse-node-version "^1.0.1" + tslib "^2.3.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^3.1.0" + source-map "~0.6.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + +local-pkg@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz" + integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== + dependencies: + mlly "^1.4.2" + pkg-types "^1.0.3" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.15: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.30.0, magic-string@^0.30.3, magic-string@^0.30.5: + version "0.30.5" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz" + integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^7.4.2: + version "7.4.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +mlly@^1.2.0, mlly@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz" + integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + +moment-jalaali@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/moment-jalaali/-/moment-jalaali-0.10.0.tgz" + integrity sha512-XICH1+UHd3zyaE1bXWQBlhoXBqbzEyFfT0TrifNobHxLALRuTSwXn376bX8FmkYg9mZimevwwdd6EB57s5wuFA== + dependencies: + jalaali-js "^1.1.0" + moment "^2.22.2" + moment-timezone "^0.5.21" + rimraf "^3.0.2" + +moment-timezone@^0.5.21: + version "0.5.44" + resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.44.tgz" + integrity sha512-nv3YpzI/8lkQn0U6RkLd+f0W/zy/JnoR5/EyPz/dNkPTBjA2jNLCVxaiQ8QpeLymhSZvX0wCL5s27NQWdOPwAw== + dependencies: + moment "^2.29.4" + +moment@^2.22.2, moment@^2.29.4: + version "2.30.1" + resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +muggle-string@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz" + integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nanopop@^2.1.0: + version "2.4.1" + resolved "https://registry.npmjs.org/nanopop/-/nanopop-2.4.1.tgz" + integrity sha512-hhtYHTaQPmclHHCWmh2EJpWQ9FCA47kj2r/vXqI0ACeMi/qR9qFYDQRSx+luami7qw1OkBR4luJqS6ADoC3FPQ== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +needle@^3.1.0: + version "3.3.1" + resolved "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz" + integrity sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q== + dependencies: + iconv-lite "^0.6.3" + sax "^1.2.4" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch-native@^1.4.0: + version "1.6.1" + resolved "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.1.tgz" + integrity sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +ofetch@^1.0.1: + version "1.3.3" + resolved "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz" + integrity sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg== + dependencies: + destr "^2.0.1" + node-fetch-native "^1.4.0" + ufo "^1.3.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-node-version@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +perfect-debounce@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-0.1.3.tgz" + integrity sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinia@^2.0.33: + version "2.1.7" + resolved "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz" + integrity sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ== + dependencies: + "@vue/devtools-api" "^6.5.0" + vue-demi ">=0.14.5" + +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + +postcss-selector-parser@^6.0.13: + version "6.0.15" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz" + integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss@^8.4.21, postcss@^8.4.27, postcss@^8.4.32, postcss@^8.4.33: + version "8.4.33" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz" + integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.8.8: + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +pretty-bytes@^5.3.0: + version "5.6.0" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-bytes@^6.0.0: + version "6.1.1" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz" + integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resize-detector@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/resize-detector/-/resize-detector-0.3.0.tgz" + integrity sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1: + version "1.22.8" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup@^2.43.1: + version "2.79.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +rollup@^3.27.1, rollup@^3.7.2: + version "3.29.4" + resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz" + integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.3.0" + resolved "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + +scroll-into-view-if-needed@^2.2.25: + version "2.2.31" + resolved "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz" + integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== + dependencies: + compute-scroll-into-view "^1.0.20" + +scule@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/scule/-/scule-1.2.0.tgz" + integrity sha512-CRCmi5zHQnSoeCik9565PONMg0kfkvYmcSqrbOJY4txFfy1wvVULV4FDaiXhUblUgahdqz3F2NwHZ8i4eBTwUw== + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.6, semver@^7.3.7, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +set-function-length@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz" + integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== + dependencies: + define-data-property "^1.1.1" + function-bind "^1.1.2" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +shallow-equal@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.8.1" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sirv@^2.0.2: + version "2.0.4" + resolved "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== + dependencies: + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.16" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + +string.prototype.matchall@^4.0.6: + version "4.0.10" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" + side-channel "^1.0.4" + +string.prototype.padend@^3.0.0: + version "3.1.5" + resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz" + integrity sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-literal@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz" + integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== + dependencies: + acorn "^8.10.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz" + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + +svg.draggable.js@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz" + integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw== + dependencies: + svg.js "^2.0.1" + +svg.easing.js@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz" + integrity sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA== + dependencies: + svg.js ">=2.3.x" + +svg.filter.js@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz" + integrity sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw== + dependencies: + svg.js "^2.2.5" + +svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5: + version "2.7.1" + resolved "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz" + integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA== + +svg.pathmorphing.js@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz" + integrity sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww== + dependencies: + svg.js "^2.4.0" + +svg.resize.js@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz" + integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw== + dependencies: + svg.js "^2.6.5" + svg.select.js "^2.1.2" + +svg.select.js@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz" + integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ== + dependencies: + svg.js "^2.2.5" + +svg.select.js@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz" + integrity sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw== + dependencies: + svg.js "^2.6.5" + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terser@^5.0.0: + version "5.31.1" + resolved "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz" + integrity sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +tslib@2.3.0, tslib@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@~4.9.5: + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +ufo@^1.3.0, ufo@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz" + integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unconfig@^0.3.7: + version "0.3.11" + resolved "https://registry.npmjs.org/unconfig/-/unconfig-0.3.11.tgz" + integrity sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow== + dependencies: + "@antfu/utils" "^0.7.6" + defu "^6.1.2" + jiti "^1.20.0" + mlly "^1.4.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unhead@1.8.10: + version "1.8.10" + resolved "https://registry.npmjs.org/unhead/-/unhead-1.8.10.tgz" + integrity sha512-dth8FvZkLriO5ZWWOBIYBNSfGiwJtKcqpPWpSOk/Z0e2jdlgwoZEWZHFyte0EKvmbZxKcsWNMqIuv7dEmS5yZQ== + dependencies: + "@unhead/dom" "1.8.10" + "@unhead/schema" "1.8.10" + "@unhead/shared" "1.8.10" + hookable "^5.5.3" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unimport@^3.0.6: + version "3.7.1" + resolved "https://registry.npmjs.org/unimport/-/unimport-3.7.1.tgz" + integrity sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ== + dependencies: + "@rollup/pluginutils" "^5.1.0" + acorn "^8.11.2" + escape-string-regexp "^5.0.0" + estree-walker "^3.0.3" + fast-glob "^3.3.2" + local-pkg "^0.5.0" + magic-string "^0.30.5" + mlly "^1.4.2" + pathe "^1.1.1" + pkg-types "^1.0.3" + scule "^1.1.1" + strip-literal "^1.3.0" + unplugin "^1.5.1" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unocss@^0.50.8: + version "0.50.8" + resolved "https://registry.npmjs.org/unocss/-/unocss-0.50.8.tgz" + integrity sha512-3yqKkSm/SKCKxFolXNR12Mi64lr4PW95LSHKZ/a9Yzlf2PT1NirAn8/uJ8KoJJBNR2YWobtkLi4UplFz/8IAYA== + dependencies: + "@unocss/astro" "0.50.8" + "@unocss/cli" "0.50.8" + "@unocss/core" "0.50.8" + "@unocss/postcss" "0.50.8" + "@unocss/preset-attributify" "0.50.8" + "@unocss/preset-icons" "0.50.8" + "@unocss/preset-mini" "0.50.8" + "@unocss/preset-tagify" "0.50.8" + "@unocss/preset-typography" "0.50.8" + "@unocss/preset-uno" "0.50.8" + "@unocss/preset-web-fonts" "0.50.8" + "@unocss/preset-wind" "0.50.8" + "@unocss/reset" "0.50.8" + "@unocss/transformer-attributify-jsx" "0.50.8" + "@unocss/transformer-attributify-jsx-babel" "0.50.8" + "@unocss/transformer-compile-class" "0.50.8" + "@unocss/transformer-directives" "0.50.8" + "@unocss/transformer-variant-group" "0.50.8" + "@unocss/vite" "0.50.8" + +unplugin-auto-import@^0.15.3: + version "0.15.3" + resolved "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.15.3.tgz" + integrity sha512-RLT8SqbPn4bT7yBshZId0uPSofKWnwr66RyDaxWaFb/+f7OTDOWAsVNz+hOQLBWSjvbekr2xZY9ccS8TDHJbCQ== + dependencies: + "@antfu/utils" "^0.7.2" + "@rollup/pluginutils" "^5.0.2" + local-pkg "^0.4.3" + magic-string "^0.30.0" + minimatch "^9.0.0" + unimport "^3.0.6" + unplugin "^1.3.1" + +unplugin-vue-components@^0.24.1: + version "0.24.1" + resolved "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.24.1.tgz" + integrity sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA== + dependencies: + "@antfu/utils" "^0.7.2" + "@rollup/pluginutils" "^5.0.2" + chokidar "^3.5.3" + debug "^4.3.4" + fast-glob "^3.2.12" + local-pkg "^0.4.3" + magic-string "^0.30.0" + minimatch "^7.4.2" + resolve "^1.22.1" + unplugin "^1.1.0" + +unplugin@^1.1.0, unplugin@^1.3.1, unplugin@^1.5.1: + version "1.6.0" + resolved "https://registry.npmjs.org/unplugin/-/unplugin-1.6.0.tgz" + integrity sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ== + dependencies: + acorn "^8.11.2" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.6.1" + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vite-plugin-pwa@^0.14.7: + version "0.14.7" + resolved "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.7.tgz" + integrity sha512-dNJaf0fYOWncmjxv9HiSa2xrSjipjff7IkYE5oIUJ2x5HKu3cXgA8LRgzOwTc5MhwyFYRSU0xyN0Phbx3NsQYw== + dependencies: + "@rollup/plugin-replace" "^5.0.1" + debug "^4.3.4" + fast-glob "^3.2.12" + pretty-bytes "^6.0.0" + rollup "^3.7.2" + workbox-build "^6.5.4" + workbox-window "^6.5.4" + +vite@^4.5.5: + version "4.5.5" + resolved "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz" + integrity sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ== + dependencies: + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" + optionalDependencies: + fsevents "~2.3.2" + +vue-content-loader@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/vue-content-loader/-/vue-content-loader-2.0.1.tgz" + integrity sha512-pkof4+q2xmzNEdhqelxtJejeP/vQUJtLle4/v2ueG+HURqM9Q/GIGC8GJ2bVVWeLfTDET51jqimwQdmxJTlu0g== + +vue-demi@>=0.14.5, vue-demi@>=0.14.6: + version "0.14.6" + resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz" + integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== + +vue-demi@^0.13.11: + version "0.13.11" + resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz" + integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A== + +vue-echarts@^6.6.8: + version "6.6.8" + resolved "https://registry.npmjs.org/vue-echarts/-/vue-echarts-6.6.8.tgz" + integrity sha512-3EGrxKGCGjHnkhudRQQ4fkK5iJxxXNQ1fXvSWA/7mzR/oV7BBSHYvC3gDbG/WIW0A/Fcx2H8k5H3NDyWgjyi8g== + dependencies: + resize-detector "^0.3.0" + vue-demi "^0.13.11" + +vue-eslint-parser@^9.1.1, vue-eslint-parser@^9.4.0: + version "9.4.0" + resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.0.tgz" + integrity sha512-7KsNBb6gHFA75BtneJsoK/dbZ281whUIwFYdQxA68QrCrGMXYzUMbPDHGcOQ0OocIVKrWSKWXZ4mL7tonCXoUw== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + +vue-router@^4.1.6: + version "4.2.5" + resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz" + integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== + dependencies: + "@vue/devtools-api" "^6.5.0" + +vue-template-compiler@^2.7.14: + version "2.7.16" + resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz" + integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== + dependencies: + de-indent "^1.0.2" + he "^1.2.0" + +vue-tsc@^1.2.1: + version "1.8.27" + resolved "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz" + integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== + dependencies: + "@volar/typescript" "~1.11.1" + "@vue/language-core" "1.8.27" + semver "^7.5.4" + +vue-types@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz" + integrity sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw== + dependencies: + is-plain-object "3.0.1" + +vue3-apexcharts@^1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/vue3-apexcharts/-/vue3-apexcharts-1.4.4.tgz" + integrity sha512-TH89uZrxGjaDvkaYAISvj8+k6Bf1rUKFillc8oJirs5XZEPiwM1ELKZQ786wz0rfPqkSHHny2lqqUCK7Rw+LcQ== + +vue3-otp-input@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/vue3-otp-input/-/vue3-otp-input-0.4.1.tgz" + integrity sha512-wVl9i3DcWlO0C7fBI9V+RIP3crm/1tY72fuhvb3YM2JfbLoYofB96aPl5AgFhA0Cse5bQEMYtIvOeiqW3rfbAw== + +vue@3.3.13: + version "3.3.13" + resolved "https://registry.npmjs.org/vue/-/vue-3.3.13.tgz" + integrity sha512-LDnUpQvDgsfc0u/YgtAgTMXJlJQqjkxW1PVcOnJA5cshPleULDjHi7U45pl2VJYazSSvLH8UKcid/kzH8I0a0Q== + dependencies: + "@vue/compiler-dom" "3.3.13" + "@vue/compiler-sfc" "3.3.13" + "@vue/runtime-dom" "3.3.13" + "@vue/server-renderer" "3.3.13" + "@vue/shared" "3.3.13" + +warning@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +workbox-background-sync@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz" + integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg== + dependencies: + idb "^7.0.1" + workbox-core "6.6.1" + +workbox-broadcast-update@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz" + integrity sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ== + dependencies: + workbox-core "6.6.1" + +workbox-build@^6.5.4: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.1.tgz" + integrity sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.6.1" + workbox-broadcast-update "6.6.1" + workbox-cacheable-response "6.6.1" + workbox-core "6.6.1" + workbox-expiration "6.6.1" + workbox-google-analytics "6.6.1" + workbox-navigation-preload "6.6.1" + workbox-precaching "6.6.1" + workbox-range-requests "6.6.1" + workbox-recipes "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + workbox-streams "6.6.1" + workbox-sw "6.6.1" + workbox-window "6.6.1" + +workbox-cacheable-response@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz" + integrity sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag== + dependencies: + workbox-core "6.6.1" + +workbox-core@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.1.tgz" + integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw== + +workbox-expiration@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.1.tgz" + integrity sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A== + dependencies: + idb "^7.0.1" + workbox-core "6.6.1" + +workbox-google-analytics@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz" + integrity sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA== + dependencies: + workbox-background-sync "6.6.1" + workbox-core "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-navigation-preload@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz" + integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA== + dependencies: + workbox-core "6.6.1" + +workbox-precaching@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.1.tgz" + integrity sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A== + dependencies: + workbox-core "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-range-requests@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz" + integrity sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g== + dependencies: + workbox-core "6.6.1" + +workbox-recipes@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.1.tgz" + integrity sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g== + dependencies: + workbox-cacheable-response "6.6.1" + workbox-core "6.6.1" + workbox-expiration "6.6.1" + workbox-precaching "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-routing@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.1.tgz" + integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg== + dependencies: + workbox-core "6.6.1" + +workbox-strategies@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.1.tgz" + integrity sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw== + dependencies: + workbox-core "6.6.1" + +workbox-streams@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.1.tgz" + integrity sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q== + dependencies: + workbox-core "6.6.1" + workbox-routing "6.6.1" + +workbox-sw@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.1.tgz" + integrity sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ== + +workbox-window@6.6.1, workbox-window@^6.5.4: + version "6.6.1" + resolved "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.1.tgz" + integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.6.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zhead@^2.2.4: + version "2.2.4" + resolved "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz" + integrity sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag== + +zrender@5.4.4: + version "5.4.4" + resolved "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz" + integrity sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw== + dependencies: + tslib "2.3.0"