├── public ├── robots.txt ├── ogp.png ├── apple-touch-icon-180.png └── favicon.svg ├── .vscode └── extensions.json ├── .gitignore ├── src ├── components │ ├── icons │ │ ├── CanvasMarkersymbol.ts │ │ ├── PaletteIconSymbol.ts │ │ ├── CanvasAnchorMaker.vue │ │ └── PaletteIcon.vue │ ├── toolbar │ │ ├── items │ │ │ ├── switch │ │ │ │ ├── SwitchOption.ts │ │ │ │ ├── SwitchList.vue │ │ │ │ └── SwitchItem.vue │ │ │ ├── CheckItem.vue │ │ │ ├── startDrag.ts │ │ │ ├── color │ │ │ │ ├── ColorSelectItem.vue │ │ │ │ └── ColorSelector.vue │ │ │ ├── slider │ │ │ │ ├── Slider.vue │ │ │ │ └── SliderItem.vue │ │ │ └── PaletteItem.vue │ │ ├── SideToolbar.vue │ │ └── Toolbar.vue │ ├── common │ │ ├── PlaneBox.vue │ │ ├── PureButton.vue │ │ ├── CircleButton.vue │ │ ├── CloseButton.vue │ │ ├── Modal.vue │ │ ├── Toast.vue │ │ └── ConfirmBox.vue │ ├── modals │ │ ├── Modals.vue │ │ ├── StartDialog │ │ │ ├── IntroTutorial.vue │ │ │ └── StartDialog.vue │ │ └── ExportDialog.vue │ ├── PaintCanvas.vue │ └── CanvasOverlay.vue ├── consts │ ├── toolConsts.ts │ ├── appInfo.ts │ └── theme.ts ├── logics │ ├── utils │ │ ├── sleep.ts │ │ ├── mathUtil.ts │ │ ├── useOnPageVisible.ts │ │ ├── useDelay.ts │ │ └── semaphor.ts │ ├── versionCheck │ │ ├── isInPwa.ts │ │ ├── useVersionCheck.ts │ │ └── hasNewVersion.ts │ ├── graphics │ │ ├── blobToImg.ts │ │ ├── shareImg.ts │ │ ├── imgToBlob.ts │ │ ├── createAlphaImg.ts │ │ ├── copyToClipboard.ts │ │ └── cropImg.ts │ ├── canvas │ │ ├── usePenCount.ts │ │ ├── useExportImgs.ts │ │ └── useSymPaint.ts │ └── analytics │ │ └── logEvent.ts ├── main.ts ├── stores │ ├── ToolbarStore.ts │ ├── AppStore.ts │ ├── CanvasStore.ts │ └── ConfirmStore.ts ├── env.d.ts ├── style │ └── defaultStyle.scss └── App.vue ├── .prettierrc.json ├── .firebaserc ├── firebase.json ├── .eslintrc.json ├── tsconfig.json ├── .github └── workflows │ ├── firebase-hosting-merge.yml │ ├── firebase-hosting-pull-request.yml │ └── build.yml ├── vite.config.ts ├── README.md ├── package.json ├── index.html └── yarn-error.log /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-Agent: * 2 | Allow: / 3 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["johnsoncodehk.volar"] 3 | } 4 | -------------------------------------------------------------------------------- /public/ogp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuneco/miracle-pencil/HEAD/public/ogp.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | build 6 | .vscode 7 | *.local 8 | -------------------------------------------------------------------------------- /src/components/icons/CanvasMarkersymbol.ts: -------------------------------------------------------------------------------- 1 | export type CanvasMarkersymbol = 'rotate' | 'move' 2 | -------------------------------------------------------------------------------- /public/apple-touch-icon-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuneco/miracle-pencil/HEAD/public/apple-touch-icon-180.png -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 2, 4 | "semi": false, 5 | "singleQuote": true 6 | } 7 | -------------------------------------------------------------------------------- /src/consts/toolConsts.ts: -------------------------------------------------------------------------------- 1 | export const PEN_COUNT_RANGE_1 = {min: 1, max: 16} 2 | export const PEN_COUNT_RANGE_2 = {min: 2, max: 16} 3 | -------------------------------------------------------------------------------- /src/logics/utils/sleep.ts: -------------------------------------------------------------------------------- 1 | export const sleep = async (ms: number) => new Promise(resolve => { 2 | setTimeout(resolve, ms) 3 | }) 4 | -------------------------------------------------------------------------------- /src/logics/versionCheck/isInPwa.ts: -------------------------------------------------------------------------------- 1 | export const isInPwa = () => 2 | !!((navigator as unknown as any).standalone) || 3 | window.matchMedia('(display-mode: standalone)').matches 4 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | import { createPinia } from "pinia"; 4 | 5 | createApp(App).use(createPinia()).mount("#app"); 6 | -------------------------------------------------------------------------------- /src/stores/ToolbarStore.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | 3 | export const useToolbarStore = defineStore('toolbar', { 4 | state: () => ({ 5 | activeItemId: '', 6 | }), 7 | }) 8 | -------------------------------------------------------------------------------- /src/components/toolbar/items/switch/SwitchOption.ts: -------------------------------------------------------------------------------- 1 | import { PaletteIconSymbol } from "../../../icons/PaletteIconSymbol"; 2 | 3 | export type SwitchOption = { 4 | key: string 5 | label?: string 6 | icon?: PaletteIconSymbol 7 | } 8 | -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "miracle-pencil" 4 | }, 5 | "targets": { 6 | "miracle-pencil": { 7 | "hosting": { 8 | "release": [ 9 | "mirape" 10 | ] 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/consts/appInfo.ts: -------------------------------------------------------------------------------- 1 | export const REPOSITORY = 'https://github.com/yuneco/miracle-pencil' 2 | export const VERSION = '0.0.3' 3 | export const RELEASE_DATE = '2022.01.02' 4 | export const AUTHOR = '@yuneco' 5 | export const AUTHOR_TW = 'https://twitter.com/yuneco' 6 | -------------------------------------------------------------------------------- /src/logics/graphics/blobToImg.ts: -------------------------------------------------------------------------------- 1 | export const blobToImg = async (blob: Blob): Promise => { 2 | const img = new Image() 3 | img.src = URL.createObjectURL(blob) 4 | return new Promise(resolve => { 5 | img.onload = img.onabort = img.onerror = () => {resolve(img)} 6 | }) 7 | } -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | -------------------------------------------------------------------------------- /src/style/defaultStyle.scss: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | html, body, #app { 5 | margin: 0; 6 | position: relative; 7 | height: 100%; 8 | overflow: hidden; 9 | font-family: Avenir, Helvetica, Arial, sans-serif; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | -------------------------------------------------------------------------------- /src/consts/theme.ts: -------------------------------------------------------------------------------- 1 | export const theme = { 2 | appTheme: '#31505e', 3 | 4 | textColor: '#3a3a3a', 5 | themeColor: 'rgb(170 190 195)', 6 | themeDark: 'rgb(49 80 94)', 7 | themeLight: 'rgb(200 208 209)', 8 | 9 | danger: 'rgb(217 27 26)', 10 | 11 | anchorColor: ['#91bccc', '#eeaabb'] as [string, string], 12 | } as const 13 | -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "target": "release", 4 | "public": "build", 5 | "ignore": [ 6 | "firebase.json", 7 | "**/.*", 8 | "**/node_modules/**" 9 | ], 10 | "rewrites": [ 11 | { 12 | "source": "**", 13 | "destination": "/index.html" 14 | } 15 | ] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/components/icons/PaletteIconSymbol.ts: -------------------------------------------------------------------------------- 1 | export type PaletteIconSymbol = 2 | | '2nd' 3 | | 'count' 4 | | 'eraser' 5 | | 'freehand' 6 | | 'line' 7 | | 'mode_kaleido' 8 | | 'mode_mirror' 9 | | 'opacity' 10 | | 'pen' 11 | | 'width' 12 | | 'export' 13 | | 'other' 14 | | 'move' 15 | | 'rotate' 16 | | 'undo' 17 | | 'redo' 18 | | 'trash' 19 | | 'info' 20 | -------------------------------------------------------------------------------- /src/logics/utils/mathUtil.ts: -------------------------------------------------------------------------------- 1 | export const constraint = (v: number, min: number, max: number): number => { 2 | return Math.max(min, Math.min(max, v)) 3 | } 4 | 5 | /** 6 | * vをstep刻みに丸めます 7 | * @param v 8 | * @param step 9 | * @param start 10 | */ 11 | export const stepValue = (v: number, step: number, start = 0): number => { 12 | return start + Math.round((v - start) / step) * step 13 | } -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint:recommended", 4 | "@vue/typescript/recommended", 5 | "plugin:vue/vue3-recommended" 6 | ], 7 | "plugins": [ 8 | "vue", 9 | "@typescript-eslint", 10 | "prettier" 11 | ], 12 | "parserOptions": { 13 | "ecmaVersion": 2021 14 | }, 15 | "env": {"browser": true, "es2021": true}, 16 | "globals": { 17 | "defineProps": true 18 | }, 19 | "rules": {} 20 | } -------------------------------------------------------------------------------- /src/logics/graphics/shareImg.ts: -------------------------------------------------------------------------------- 1 | export const shareImage = async (pngImgBlob: Blob) => { 2 | const imgFile = new File([pngImgBlob], 'image.png', { 3 | type: pngImgBlob.type, 4 | lastModified: Date.now(), 5 | }) 6 | 7 | const data: ShareData = { 8 | files: [imgFile], 9 | title: 'Miracle Pencil', 10 | text: 'Made with https://mirape.web.app #ミラクルペンシル' 11 | } 12 | 13 | return navigator.share(data) 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/logics/utils/useOnPageVisible.ts: -------------------------------------------------------------------------------- 1 | import { onMounted, onUnmounted } from 'vue-demi' 2 | 3 | export const useOnPageVisible = (fn: () => void) => { 4 | const onchange = () => { 5 | if (document.visibilityState === 'visible') fn() 6 | } 7 | 8 | onMounted(() => { 9 | document.addEventListener('visibilitychange', onchange) 10 | }) 11 | 12 | onUnmounted(() => { 13 | document.removeEventListener('visibilitychange', onchange) 14 | }) 15 | } 16 | -------------------------------------------------------------------------------- /src/stores/AppStore.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | 3 | export type ModalName = undefined | 'start' | 'export' 4 | type AppState = { 5 | modal: ModalName | undefined 6 | toast: string 7 | } 8 | 9 | export const useAppStore = defineStore('app', { 10 | state: (): AppState => ({ 11 | modal: undefined, 12 | /** 13 | * トースト表示する文字列。セットは任意のコンポーネントから行えます。 14 | * Toastコンポーネントがトーストの表示及び一定時間後のクリアを自動で行います。 15 | */ 16 | toast: '', 17 | }), 18 | }) 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "useDefineForClassFields": true, 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "sourceMap": true, 10 | "resolveJsonModule": true, 11 | "esModuleInterop": true, 12 | "lib": ["esnext", "dom"], 13 | "forceConsistentCasingInFileNames": true 14 | }, 15 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] 16 | } 17 | -------------------------------------------------------------------------------- /src/logics/graphics/imgToBlob.ts: -------------------------------------------------------------------------------- 1 | export const imgToBlob = async (img: HTMLImageElement): Promise => { 2 | if (!img.naturalWidth || !img.naturalHeight) return 3 | const canvas = document.createElement('canvas') 4 | canvas.width = img.naturalWidth 5 | canvas.height = img.naturalHeight 6 | const ctx = canvas.getContext('2d') 7 | if (!ctx) return 8 | ctx.drawImage(img, 0, 0) 9 | 10 | return new Promise(resolve => { 11 | canvas.toBlob((blob) => { 12 | resolve(blob ?? undefined) 13 | }) 14 | }) 15 | } -------------------------------------------------------------------------------- /src/components/common/PlaneBox.vue: -------------------------------------------------------------------------------- 1 | 8 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/logics/utils/useDelay.ts: -------------------------------------------------------------------------------- 1 | import { onUnmounted, ref, Ref, shallowRef, watch } from 'vue' 2 | 3 | export const useDelayed = (inRef: Ref, delayMs: number) => { 4 | const outRef = shallowRef(inRef.value) 5 | let timers: NodeJS.Timeout[] = [] 6 | 7 | watch(inRef, () => { 8 | const val = inRef.value 9 | const id = setTimeout(() => { 10 | outRef.value = val 11 | timers = timers.filter((t) => t !== id) 12 | }, delayMs) 13 | timers.push(id) 14 | }) 15 | 16 | onUnmounted(() => { 17 | timers.forEach((t) => clearTimeout(t)) 18 | }) 19 | 20 | return outRef 21 | } 22 | -------------------------------------------------------------------------------- /src/logics/versionCheck/useVersionCheck.ts: -------------------------------------------------------------------------------- 1 | import { ref } from "vue" 2 | import { useOnPageVisible } from "../utils/useOnPageVisible" 3 | import { hasNewVersion } from "./hasNewVersion" 4 | import { isInPwa } from "./isInPwa" 5 | 6 | const MIN_INTERVAL_SEC = 60 7 | // PWAで動作している時は起動時に即座にチェックを行う 8 | let lastCheckedMs = isInPwa() ? 0 : Date.now() 9 | const hasNew = ref(false) 10 | 11 | const doCheck = async () => { 12 | const now = Date.now() 13 | if (now - lastCheckedMs < MIN_INTERVAL_SEC * 1000) return 14 | lastCheckedMs = now 15 | hasNew.value = await hasNewVersion() 16 | } 17 | 18 | export const useVersionCheck = () => { 19 | doCheck() 20 | useOnPageVisible(doCheck) 21 | return hasNew 22 | } 23 | -------------------------------------------------------------------------------- /src/logics/graphics/createAlphaImg.ts: -------------------------------------------------------------------------------- 1 | import { blobToImg } from "./blobToImg" 2 | 3 | export const createAlphaImg = async (img: HTMLImageElement): Promise => { 4 | const canvas = document.createElement('canvas') 5 | canvas.width = img.naturalWidth 6 | canvas.height = img.naturalHeight 7 | const ctx = canvas.getContext('2d') 8 | if (!ctx) return 9 | ctx.drawImage(img, 0, 0) 10 | ctx.globalCompositeOperation = 'source-atop' 11 | ctx.fillStyle = '#fff' 12 | ctx.fillRect(0, 0, canvas.width, canvas.height) 13 | 14 | return new Promise((resolve) => { 15 | canvas.toBlob((blob) => { 16 | if (!blob) return 17 | resolve(blobToImg(blob)) 18 | }) 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-merge.yml: -------------------------------------------------------------------------------- 1 | # This file was auto-generated by the Firebase CLI 2 | # https://github.com/firebase/firebase-tools 3 | 4 | name: Deploy to Firebase Hosting on merge 5 | 'on': 6 | push: 7 | branches: 8 | - master 9 | jobs: 10 | build_and_deploy: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - run: yarn install --network-concurrency 1 && yarn build 15 | - uses: FirebaseExtended/action-hosting-deploy@v0 16 | with: 17 | repoToken: '${{ secrets.GITHUB_TOKEN }}' 18 | firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_MIRACLE_PENCIL }}' 19 | channelId: live 20 | projectId: miracle-pencil 21 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-pull-request.yml: -------------------------------------------------------------------------------- 1 | # This file was auto-generated by the Firebase CLI 2 | # https://github.com/firebase/firebase-tools 3 | 4 | name: Deploy to Firebase Hosting on PR 5 | 'on': pull_request 6 | jobs: 7 | build_and_preview: 8 | if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}' 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - run: yarn install --network-concurrency 1 && yarn build 13 | - uses: FirebaseExtended/action-hosting-deploy@v0 14 | with: 15 | repoToken: '${{ secrets.GITHUB_TOKEN }}' 16 | firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_MIRACLE_PENCIL }}' 17 | projectId: miracle-pencil 18 | -------------------------------------------------------------------------------- /src/components/common/PureButton.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | 15 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import { defineConfig } from 'vite' 3 | import vue from '@vitejs/plugin-vue' 4 | import { VitePWA } from 'vite-plugin-pwa' 5 | import {theme} from './src/consts/theme' 6 | 7 | // https://vitejs.dev/config/ 8 | export default defineConfig({ 9 | plugins: [vue(), VitePWA({ 10 | manifest: { 11 | name: "Miracle Pencil", 12 | icons: [{ 13 | src: "favicon.svg", 14 | sizes: "any", 15 | type: "image/svg+xml", 16 | purpose: "any maskable" 17 | }], 18 | theme_color: theme.themeColor 19 | }, 20 | })], 21 | base: './', 22 | build: { 23 | outDir: 'build' 24 | }, 25 | resolve: { 26 | alias: { 27 | '@/': path.join(__dirname, './src/') 28 | } 29 | }, 30 | }) 31 | -------------------------------------------------------------------------------- /src/stores/CanvasStore.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | import { Coordinate, Point } from 'sym-paint' 3 | 4 | type MirCanvasTool = 5 | | 'draw' 6 | | 'scroll' 7 | | 'scroll:anchor' 8 | | 'zoomup' 9 | | 'zoomdown' 10 | | 'rotate' 11 | | 'rotate:anchor' 12 | 13 | export const useCanvasStore = defineStore('canvas', { 14 | state: () => ({ 15 | penColor: '#3399aa', 16 | penCount: [6, 0] as [number, number], 17 | isKaleido: [true, true] as [boolean, boolean], 18 | penWidth: 20, 19 | isStraight: false, 20 | isEraser: false, 21 | penOpacity: 100, 22 | tool: 'draw' as MirCanvasTool, 23 | coord: new Coordinate(), 24 | anchor: [new Coordinate(), new Coordinate({scroll: new Point(300, 0)})] as [Coordinate, Coordinate] 25 | }), 26 | }) 27 | -------------------------------------------------------------------------------- /src/components/modals/Modals.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: NodeJS with Webpack 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | pull_request: 7 | branches: [master] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [16] 16 | 17 | steps: 18 | - uses: actions/checkout@v2 19 | 20 | - name: Use Node.js ${{ matrix.node-version }} 21 | uses: actions/setup-node@v1 22 | with: 23 | node-version: ${{ matrix.node-version }} 24 | 25 | - name: Build 26 | run: | 27 | yarn cache clean 28 | yarn install --network-concurrency 1 29 | yarn install 30 | yarn build 31 | 32 | - name: Deploy 33 | uses: peaceiris/actions-gh-pages@v3 34 | with: 35 | github_token: ${{ secrets.GITHUB_TOKEN }} 36 | publish_dir: build 37 | -------------------------------------------------------------------------------- /src/logics/versionCheck/hasNewVersion.ts: -------------------------------------------------------------------------------- 1 | const getCurrentAppSrc = (): string | undefined => { 2 | const src = Array.from(document.querySelectorAll('script')) 3 | .map((el) => el.src) 4 | .filter((src) => src.includes('/assets/index.'))[0] 5 | return src ?? undefined 6 | } 7 | 8 | const isSrcExists = async (src: string): Promise => { 9 | try { 10 | const resp = await window.fetch(src, { method: 'HEAD' }) 11 | if (resp.status === 200 || resp.status === 304) return true 12 | if (resp.status === 404) return false 13 | return undefined 14 | } catch { 15 | return undefined 16 | } 17 | } 18 | 19 | export const hasNewVersion = async () => { 20 | const current = getCurrentAppSrc() 21 | if (!current) return false 22 | const isCurrentExists = await isSrcExists(current) 23 | if (isCurrentExists !== false) return false 24 | 25 | return true 26 | } 27 | -------------------------------------------------------------------------------- /src/logics/canvas/usePenCount.ts: -------------------------------------------------------------------------------- 1 | import { useCanvasStore } from '../../stores/CanvasStore' 2 | import { PEN_COUNT_RANGE_1, PEN_COUNT_RANGE_2 } from '../../consts/toolConsts' 3 | import { constraint } from '../utils/mathUtil' 4 | 5 | export const usePenCount = () => { 6 | const store = useCanvasStore() 7 | const changePenCount = (isUp: boolean) => { 8 | 9 | const [c1, c2] = store.$state.penCount 10 | if (c2) { 11 | const newC2 = constraint(c2 + (isUp ? 1 : -1), PEN_COUNT_RANGE_2.min, PEN_COUNT_RANGE_2.min) 12 | store.$state.penCount = [c1, newC2] 13 | } else { 14 | const newC1 = constraint(c1 + (isUp ? 1 : -1), PEN_COUNT_RANGE_1.min, PEN_COUNT_RANGE_1.max) 15 | store.$state.penCount = [newC1, c2] 16 | } 17 | } 18 | 19 | const penCountUp = () => changePenCount(true) 20 | const penCountDown = () => changePenCount(false) 21 | 22 | return { penCountUp, penCountDown } 23 | } 24 | -------------------------------------------------------------------------------- /src/components/toolbar/items/CheckItem.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # miracle pencil 2 | 3 | try now! https://mirape.web.app 4 | 5 | ## 操作方法 6 | 7 | 画面のパレット以外の操作方法は次の通りです 8 | 9 | ### PC(非タッチデバイス) 10 | 11 | ※ Windowsの場合はOption→Alt、Command→Controlで読み替えてください 12 | 13 | | 操作 | 機能 | 14 | | ---- | ---- | 15 | | Space + ドラッグ | キャンバスのスクロール | 16 | | Space + Option + ドラッグ | キャンバスの回転 | 17 | | Space + Command + クリック | 拡大 | 18 | | Space + Option + Command + クリック | 縮小 | 19 | | Space + Shift + ドラッグ | 対称軸の移動 | 20 | | Space + Shift + Option + ドラッグ | 対称軸の回転 | 21 | | Space + ドラッグ | 直線 | 22 | | Command + Z | 取り消し | 23 | | ↑ / ↓ | 分割数を増やす / 減らす | 24 | 25 | ### タブレット(iPadなどのタッチデバイス) 26 | 27 | | 操作 | 機能 | 28 | | ---- | ---- | 29 | | 二本指でスワイプ・ピンチ | キャンバスのスクロール・回転・拡大縮小 | 30 | | 三本指でスワイプ | 対称軸のスクロール・回転 | 31 | | 二本指でタップ | 取り消し | 32 | | 三本指でタップ | 対称軸をセンターに戻す | 33 | 34 | 35 | ### For developer 36 | 37 | Core program for canvas painting is in [https://github.com/yuneco/symmpaint](https://github.com/yuneco/symmpaint). 38 | ### Contact 39 | 40 | https://twitter.com/yuneco 41 | -------------------------------------------------------------------------------- /src/components/toolbar/items/startDrag.ts: -------------------------------------------------------------------------------- 1 | const MIN_MOVE = 5 2 | 3 | export const startDragX = (ev: PointerEvent, onchange: (dx: number) => void, onend: (isDrag: boolean) => void) => { 4 | document.body.style.cursor = 'ew-resize' 5 | const startX = ev.screenX 6 | let isDragStarted = false 7 | 8 | const onmove = (ev: PointerEvent) => { 9 | ev.preventDefault() 10 | const dx = ev.screenX - startX 11 | if (!isDragStarted && Math.abs(dx) < MIN_MOVE) return 12 | onchange(dx) 13 | isDragStarted = true 14 | } 15 | const onup = () => { 16 | document.body.removeEventListener('pointermove', onmove) 17 | document.body.removeEventListener('pointerup', onup) 18 | document.body.removeEventListener('pointercancel', onup) 19 | document.body.style.cursor = '' 20 | onend(isDragStarted) 21 | } 22 | 23 | document.body.addEventListener('pointermove', onmove) 24 | document.body.addEventListener('pointerup', onup) 25 | document.body.addEventListener('pointercancel', onup) 26 | } 27 | -------------------------------------------------------------------------------- /src/components/common/CircleButton.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 18 | 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "miracle-pencil", 3 | "version": "0.0.3", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vue-tsc --noEmit && vite build", 7 | "serve": "vite preview", 8 | "format": "prettier src/**/*.{ts,vue} --write", 9 | "upgrade-sympaint": "yarn upgrade sym-paint --network-concurrency 1" 10 | }, 11 | "dependencies": { 12 | "pinia": "^2.0.0", 13 | "sym-paint": "https://github.com/yuneco/symmpaint.git", 14 | "vue": "^3.2.16" 15 | }, 16 | "devDependencies": { 17 | "@types/gtag.js": "^0.0.8", 18 | "@types/node": "^16.11.10", 19 | "@typescript-eslint/eslint-plugin": "^5.6.0", 20 | "@typescript-eslint/parser": "^5.6.0", 21 | "@vitejs/plugin-vue": "^1.9.3", 22 | "@vue/eslint-config-typescript": "^9.1.0", 23 | "eslint": "^8.4.1", 24 | "eslint-config-prettier": "^8.3.0", 25 | "eslint-plugin-vue": "^8.2.0", 26 | "prettier": "^2.4.1", 27 | "sass": "^1.43.4", 28 | "typescript": "^4.4.3", 29 | "vite": "^2.6.4", 30 | "vite-plugin-pwa": "^0.11.12", 31 | "vue-tsc": "^0.3.0" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/logics/utils/semaphor.ts: -------------------------------------------------------------------------------- 1 | type Releaser = () => void 2 | type Resolve = (releaser: Releaser) => void 3 | 4 | export const createSemaphor = (max = 1) => { 5 | let rooms: Symbol[] = [] 6 | const waitingList: Resolve[] = [] 7 | 8 | /** 9 | * ロックを取得します。他の処理でいっぱいの場合、空きが出るまで待ちます。 10 | * @return ロック開放関数。処理が終わったら必ず呼び出してください。 11 | */ 12 | const enter = () => { 13 | const promise = new Promise((resolve) => { 14 | waitingList.push(resolve) 15 | }) 16 | tryNext() 17 | return promise 18 | } 19 | 20 | /** 21 | * ロックを開放します 22 | * @param room 割り当てられた部屋のキー 23 | */ 24 | const release = (room: Symbol) => { 25 | rooms = rooms.filter((r) => r !== room) 26 | tryNext() 27 | } 28 | 29 | /** 30 | * 部屋の空きがあり、待ちリストに待機している処理があれば、部屋を割り当てて処理を開始 31 | */ 32 | const tryNext = () => { 33 | if (rooms.length >= max) return 34 | const next = waitingList.shift() 35 | if (!next) return 36 | const room = Symbol() 37 | rooms.push(room) 38 | next(() => { 39 | release(room) 40 | }) 41 | } 42 | 43 | return enter 44 | } 45 | -------------------------------------------------------------------------------- /src/logics/graphics/copyToClipboard.ts: -------------------------------------------------------------------------------- 1 | import { imgToBlob } from "./imgToBlob" 2 | 3 | export const copyBlobImgToClipboard = async (imgPromise: Promise) => { 4 | // see: https://stackoverflow.com/questions/61187374/how-to-fix-the-cannot-find-name-clipboarditem-error 5 | let item: ClipboardItem | undefined 6 | try { 7 | // for safari 8 | item = new ClipboardItem({ 9 | 'image/png': imgPromise, 10 | }) 11 | } catch { 12 | // for chrome 13 | item = new ClipboardItem({ 14 | 'image/png': (await imgPromise) as unknown as ClipboardItemData, 15 | }) 16 | } 17 | await navigator.clipboard.write([item]) 18 | return true 19 | } 20 | 21 | export const copyImgToClipboard = async (img: HTMLImageElement) => { 22 | const promise = imgToBlob(img) 23 | if (!promise) { 24 | return false 25 | } 26 | const isCopied = await copyBlobImgToClipboard(promise.then(blob => { 27 | if (!blob) { 28 | throw new Error('failed to copy img') 29 | } 30 | return blob 31 | })).catch(err => { 32 | console.warn(err) 33 | return false 34 | }) 35 | return isCopied 36 | } -------------------------------------------------------------------------------- /src/components/toolbar/items/color/ColorSelectItem.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 43 | -------------------------------------------------------------------------------- /src/stores/ConfirmStore.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | import { createSemaphor } from '../logics/utils/semaphor' 3 | 4 | type Answer = 'yes' | 'no' 5 | type ConfirmKind = 'normal' | 'danger' 6 | 7 | type DialogContent = { 8 | message: string 9 | kind: ConfirmKind 10 | yesCaption: string 11 | noCaption?: string 12 | answer?: Answer 13 | } 14 | 15 | type StateType = { 16 | content?: DialogContent 17 | } 18 | 19 | type AnswerFunc = (answer: Answer) => void 20 | 21 | const enterLock = createSemaphor() 22 | let resolveAnswer: AnswerFunc | undefined = undefined 23 | 24 | export const useConfirmStore = defineStore('confirm', { 25 | state: (): StateType => ({ 26 | content: undefined 27 | }), 28 | 29 | actions: { 30 | async confirm(message: string, yesCaption: string, noCaption?: string, kind: ConfirmKind = 'normal') { 31 | const release = await enterLock() 32 | this.content = {message, yesCaption, noCaption, kind} 33 | const answer = await new Promise(resolve => { 34 | resolveAnswer = resolve 35 | }) 36 | release() 37 | this.content = undefined 38 | resolveAnswer = undefined 39 | return answer 40 | }, 41 | select(answer: 'yes' | 'no') { 42 | if (this.content) { 43 | this.content.answer = answer 44 | } 45 | resolveAnswer?.(answer) 46 | } 47 | } 48 | }) 49 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 32 | 33 | 61 | -------------------------------------------------------------------------------- /src/components/toolbar/items/color/ColorSelector.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 40 | 41 | 67 | -------------------------------------------------------------------------------- /src/components/PaintCanvas.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 36 | 37 | 64 | -------------------------------------------------------------------------------- /src/logics/canvas/useExportImgs.ts: -------------------------------------------------------------------------------- 1 | import { reactive, readonly } from 'vue' 2 | import { useSymPaint } from '../../logics/canvas/useSymPaint' 3 | import { blobToImg } from '../graphics/blobToImg' 4 | import { createAlphaImg } from '../graphics/createAlphaImg' 5 | import { cropImg } from '../graphics/cropImg' 6 | 7 | export type ExportImgKind = 'original' | 'cropped' | 'texture' 8 | type ImgInfo = { 9 | src: string 10 | size: { 11 | w: number 12 | h: number 13 | } 14 | } 15 | export type ExportImgsState = {[k in ExportImgKind]: ImgInfo | undefined} 16 | 17 | 18 | export const useExportImgs = () => { 19 | const { toImgBlob } = useSymPaint() 20 | const state = reactive({ 21 | original: undefined, 22 | cropped: undefined, 23 | texture: undefined 24 | }) 25 | 26 | const setImg = (kind: ExportImgKind, img: HTMLImageElement) => { 27 | state[kind] = { 28 | src: img.src, 29 | size: { 30 | w: img.naturalWidth, 31 | h: img.naturalHeight 32 | } 33 | } 34 | } 35 | 36 | const create = async () => { 37 | const blob = await toImgBlob() 38 | if (!blob) return 39 | const img = await blobToImg(blob) 40 | setImg('original', img) 41 | 42 | const cropped = await cropImg(img) 43 | if (cropped) { 44 | setImg('cropped', cropped) 45 | } 46 | 47 | const texture = cropped && await createAlphaImg(cropped) 48 | if (texture) { 49 | setImg('texture', texture) 50 | } 51 | } 52 | 53 | return { 54 | imgs: readonly(state), 55 | create 56 | } 57 | } -------------------------------------------------------------------------------- /src/components/common/CloseButton.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 69 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Miracle Pencil 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/components/CanvasOverlay.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 32 | 33 | 68 | -------------------------------------------------------------------------------- /src/components/icons/CanvasAnchorMaker.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 33 | -------------------------------------------------------------------------------- /src/components/toolbar/items/switch/SwitchList.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 48 | 49 | 85 | -------------------------------------------------------------------------------- /src/logics/analytics/logEvent.ts: -------------------------------------------------------------------------------- 1 | import { PaintCanvas } from 'sym-paint' 2 | import { ModalName } from '../../stores/AppStore' 3 | import { ExportImgKind } from '../canvas/useExportImgs' 4 | 5 | type ToolName = InstanceType['tool'] 6 | 7 | type ToolEvent = { 8 | category: 'tool' 9 | action: 'tool-change' 10 | value: ToolName 11 | } 12 | 13 | type ToolSettingOnOffEvent = { 14 | category: 'tool' 15 | action: 'tool-eraser' | 'tool-2nd' | 'tool-kaleido' 16 | value: 'on' | 'off' 17 | } 18 | 19 | type ModalEvent = { 20 | category: 'modal' 21 | action: 'modal-open' 22 | value: NonNullable 23 | } 24 | 25 | type ExportEvent = { 26 | category: 'export' 27 | action: 'export-copy' | 'export-share' 28 | value: ExportImgKind 29 | } 30 | 31 | type PaintActionEvent = { 32 | category: 'paintAction' 33 | action: 'undo' | 'clear' | 'stroke' 34 | value: '' 35 | } 36 | 37 | type CustomErrorEvent = { 38 | category: 'customError' 39 | action: string, 40 | value: string 41 | } 42 | 43 | type EventEntry = ToolEvent | ModalEvent | ExportEvent | PaintActionEvent | CustomErrorEvent | ToolSettingOnOffEvent 44 | 45 | export const logEvent = (ent: EventEntry) => { 46 | gtag("event", `${ent.action}${ent.value ? '-' + ent.value : ''}`, {event_categoy: ent.category, event_label: ent.value}) 47 | } 48 | 49 | export const logToolEvent = (tool: ToolName) => logEvent({category: 'tool', action: 'tool-change', value: tool}) 50 | export const logToolSettingEvent = (setting: ToolSettingOnOffEvent['action'], value: boolean) => logEvent({category: 'tool', action: setting, value: value ? 'on' : 'off'}) 51 | export const logModalEvent = (modal: NonNullable) => logEvent({category: 'modal', action: 'modal-open', value: modal}) 52 | export const logExportEvent = (action: 'export-copy' | 'export-share', kind: ExportImgKind) => logEvent({category: 'export', action, value: kind}) 53 | export const logPaintEvent = (action: 'undo' | 'clear' | 'stroke') => logEvent({category: 'paintAction', action, value: ''}) 54 | export const logCustomErrorEvent = (module: string, error: string) => logEvent({category: 'customError', action: module, value: error}) 55 | -------------------------------------------------------------------------------- /src/components/common/Modal.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 25 | 26 | 95 | -------------------------------------------------------------------------------- /src/components/common/Toast.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 33 | 34 | 90 | -------------------------------------------------------------------------------- /src/components/modals/StartDialog/IntroTutorial.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 49 | 50 | 106 | -------------------------------------------------------------------------------- /src/logics/graphics/cropImg.ts: -------------------------------------------------------------------------------- 1 | import { blobToImg } from './blobToImg' 2 | 3 | const getContentRect = (bin: ImageData): DOMRect | undefined => { 4 | const { data, width: w, height: h } = bin 5 | 6 | // is pixel transparent? 7 | const isTransparent = (x: number, y: number): boolean => 8 | data[(y * w + x) * 4 + 3] === 0 9 | // is row completely transparent? 10 | const isRowTransparent = (y: number) => { 11 | for (let x = 0; x < w; x++) if (!isTransparent(x, y)) return false 12 | return true 13 | } 14 | // get first row index that has non transparent pixel 15 | const getTop = () => { 16 | for (let y = 0; y < h; y++) if (!isRowTransparent(y)) return y 17 | return h 18 | } 19 | // get last row index that has non transparent pixel 20 | const getBottom = () => { 21 | for (let y = h - 1; y >= 0; y--) if (!isRowTransparent(y)) return y 22 | return -1 23 | } 24 | 25 | // is colummn completely transparent in specified row range? 26 | const isColTransparent = (x: number, yFrom: number, yTo: number) => { 27 | for (let y = yFrom; y <= yTo; y++) if (!isTransparent(x, y)) return false 28 | return true 29 | } 30 | // get first col index that has non transparent pixel 31 | const getLeft = (yFrom: number, yTo: number) => { 32 | for (let x = 0; x < w; x++) if (!isColTransparent(x, yFrom, yTo)) return x 33 | return w 34 | } 35 | // get last col index that has non transparent pixel 36 | const getRight = (yFrom: number, yTo: number) => { 37 | for (let x = w - 1; x >= 0; x--) if (!isColTransparent(x, yFrom, yTo)) return x 38 | return -1 39 | } 40 | 41 | const top = getTop() 42 | if (top === h) return undefined // No Content 43 | const bottom = getBottom() 44 | const left = getLeft(top, bottom) 45 | const right = getRight(top, bottom) 46 | return new DOMRect(left, top, right - left + 1, bottom - top + 1) 47 | } 48 | 49 | export const cropImg = async ( 50 | img: HTMLImageElement 51 | ): Promise => { 52 | const canvas = document.createElement('canvas') 53 | canvas.width = img.naturalWidth 54 | canvas.height = img.naturalHeight 55 | const ctx = canvas.getContext('2d') 56 | if (!ctx) return 57 | ctx.drawImage(img, 0, 0) 58 | const bin = ctx.getImageData(0, 0, canvas.width, canvas.height) 59 | const rect = getContentRect(bin) 60 | if (!rect) return 61 | const cropped = ctx.getImageData(rect.x, rect.y, rect.width, rect.height) 62 | canvas.width = rect.width 63 | canvas.height = rect.height 64 | ctx.putImageData(cropped, 0, 0) 65 | return new Promise((resolve) => { 66 | canvas.toBlob((blob) => { 67 | if (!blob) return 68 | resolve(blobToImg(blob)) 69 | }) 70 | }) 71 | } 72 | -------------------------------------------------------------------------------- /src/components/common/ConfirmBox.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 38 | 39 | 120 | -------------------------------------------------------------------------------- /src/components/toolbar/items/slider/Slider.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 91 | 92 | 135 | -------------------------------------------------------------------------------- /src/components/toolbar/items/PaletteItem.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 79 | 80 | 132 | -------------------------------------------------------------------------------- /src/components/toolbar/SideToolbar.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 95 | 96 | 144 | -------------------------------------------------------------------------------- /src/components/toolbar/items/slider/SliderItem.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 123 | 124 | 152 | -------------------------------------------------------------------------------- /src/components/modals/StartDialog/StartDialog.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 72 | 73 | 129 | -------------------------------------------------------------------------------- /src/components/toolbar/items/switch/SwitchItem.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 122 | 123 | 151 | -------------------------------------------------------------------------------- /src/components/modals/ExportDialog.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 132 | 133 | 178 | -------------------------------------------------------------------------------- /src/components/toolbar/Toolbar.vue: -------------------------------------------------------------------------------- 1 | 84 | 85 | 189 | 190 | 236 | -------------------------------------------------------------------------------- /src/logics/canvas/useSymPaint.ts: -------------------------------------------------------------------------------- 1 | import { PaintCanvas, Coordinate, utils, Point } from 'sym-paint' 2 | import { computed, reactive, ref, watch } from 'vue' 3 | import { theme } from '../../consts/theme' 4 | import { useCanvasStore } from '../../stores/CanvasStore' 5 | import { logCustomErrorEvent, logEvent, logPaintEvent, logToolEvent, logToolSettingEvent } from '../analytics/logEvent' 6 | import { usePenCount } from './usePenCount' 7 | 8 | const canvas = ref() 9 | const penCount = ref>() 10 | const canvasState = reactive({ 11 | /** Undo可能か? */ 12 | enableUndo: false, 13 | }) 14 | const updateCanvasState = () => { 15 | canvasState.enableUndo = (canvas.value?.historyCount ?? 0) > 0 16 | } 17 | 18 | const onKeydown = (ev: KeyboardEvent) => { 19 | if (ev.key === 'ArrowUp') { 20 | penCount.value?.penCountUp() 21 | } 22 | if (ev.key === 'ArrowDown') { 23 | penCount.value?.penCountDown() 24 | } 25 | if (ev.key === 'z' && ev.metaKey) { 26 | canvas.value?.undo() 27 | logPaintEvent('undo') 28 | } 29 | } 30 | window.removeEventListener('keydown', onKeydown) 31 | window.addEventListener('keydown', onKeydown) 32 | 33 | const init = (parent: HTMLElement) => { 34 | const store = useCanvasStore() 35 | penCount.value = usePenCount() 36 | const isAlreadyInited = !!canvas.value 37 | if (isAlreadyInited) { 38 | console.warn('SymPaint init called multiple times.') 39 | logCustomErrorEvent('useSymPaint', 'init duplicated') 40 | } 41 | 42 | const cv = new PaintCanvas(parent, parent.offsetWidth, parent.offsetHeight) 43 | cv.penCount = store.penCount 44 | cv.penColor = store.penColor 45 | cv.penWidth = store.penWidth 46 | cv.tool = store.isStraight ? 'draw:line' : 'draw' 47 | cv.isKaleido = store.isKaleido 48 | cv.penKind = store.isEraser ? 'eraser' : 'normal' 49 | cv.anchor = store.anchor[0] as Coordinate 50 | cv.childAnchor = store.anchor[1] as Coordinate 51 | cv.enableCapture = false //スタンプ機能は当面使用しない 52 | cv.anchorColor = theme.anchorColor // アンカー色はテーマの定数で指定 53 | 54 | // キャンバスからの変更要求を受け取りパレットの設定を変更 55 | cv.listenRequestZoom((scale) => { 56 | store.coord = store.coord.clone({ scale }) 57 | }) 58 | cv.listenRequestScrollTo(({ point, target }) => { 59 | if (target === 'canvas') { 60 | store.coord = store.coord.clone({ scroll: point }) 61 | } 62 | if (target === 'anchor') { 63 | const index = cv.hasSubPen ? 1 : 0 64 | store.anchor[index] = store.anchor[index].clone({ scroll: point }) 65 | } 66 | }) 67 | cv.listenRequestRotateTo(({ angle, target }) => { 68 | if (target === 'canvas') { 69 | store.coord = store.coord.clone({ angle }) 70 | } 71 | if (target === 'anchor') { 72 | const index = cv.hasSubPen ? 1 : 0 73 | store.anchor[index] = store.anchor[index].clone({ angle }) 74 | } 75 | }) 76 | cv.listenRequestUndo(() => { 77 | cv.undo() 78 | updateCanvasState() 79 | }) 80 | cv.listenRequestAnchorTransform((coord) => { 81 | cv.activeAnchor = coord 82 | }) 83 | cv.listenRequestAnchorReset(() => { 84 | cv.anchor = new Coordinate() 85 | }) 86 | cv.listenStrokeEnd(() => { 87 | updateCanvasState() 88 | }) 89 | 90 | const toolKeyWatcher = new utils.ToolKeyWatcher() 91 | toolKeyWatcher.listenChange((tool) => { 92 | if (tool === 'draw' || tool === 'draw:stamp') { 93 | // タスンプは現時点ではサポートしないため、通常のペンツールとして扱う 94 | store.tool = 'draw' 95 | store.isStraight = false 96 | return 97 | } 98 | if (tool === 'draw:line') { 99 | store.tool = 'draw' 100 | store.isStraight = true 101 | return 102 | } 103 | store.tool = tool 104 | }) 105 | 106 | watch( 107 | () => [store.penColor], 108 | () => { 109 | cv.penColor = store.penColor 110 | } 111 | ) 112 | watch( 113 | () => store.penCount, 114 | (newVal, oldVal) => { 115 | cv.penCount = store.penCount 116 | if (store.penCount[0] === 1) { 117 | cv.isKaleido = [false, store.isKaleido[1]] 118 | } 119 | const is2ndActivated = !!newVal[1] && !oldVal[1] 120 | const is2ndDeactivated = !newVal[1] && !!oldVal[1] 121 | if (is2ndActivated || is2ndDeactivated) logToolSettingEvent('tool-2nd', is2ndActivated) 122 | } 123 | ) 124 | watch( 125 | () => [store.penWidth], 126 | () => { 127 | cv.penWidth = store.penWidth 128 | } 129 | ) 130 | watch( 131 | () => [store.isStraight], 132 | () => { 133 | cv.tool = store.isStraight ? 'draw:line' : 'draw' 134 | logToolEvent(cv.tool) 135 | } 136 | ) 137 | watch( 138 | () => [store.isKaleido], 139 | () => { 140 | cv.isKaleido = store.isKaleido 141 | if (store.penCount[0] === 1) { 142 | cv.isKaleido = [false, store.isKaleido[1]] 143 | } 144 | logToolSettingEvent('tool-kaleido', store.isKaleido[cv.hasSubPen ? 1 : 0]) 145 | } 146 | ) 147 | watch( 148 | () => [store.isEraser], 149 | () => { 150 | cv.penKind = store.isEraser ? 'eraser' : 'normal' 151 | logToolSettingEvent('tool-eraser', store.isEraser) 152 | } 153 | ) 154 | watch( 155 | () => [store.penOpacity], 156 | () => { 157 | cv.penAlpha = store.penOpacity / 100 158 | } 159 | ) 160 | watch( 161 | () => [store.tool], 162 | () => { 163 | if (store.tool === 'draw') { 164 | cv.tool = store.isStraight ? 'draw:line' : 'draw' 165 | } else { 166 | cv.tool = store.tool 167 | } 168 | logToolEvent(cv.tool) 169 | } 170 | ) 171 | watch( 172 | () => [store.coord], 173 | () => { 174 | cv.coord = store.coord as Coordinate 175 | } 176 | ) 177 | watch( 178 | () => [store.anchor[0]], 179 | () => { 180 | cv.anchor = store.anchor[0] as Coordinate 181 | } 182 | ) 183 | watch( 184 | () => [store.anchor[1]], 185 | () => { 186 | cv.childAnchor = store.anchor[1] as Coordinate 187 | } 188 | ) 189 | 190 | canvas.value = cv 191 | } 192 | 193 | export const useSymPaint = () => { 194 | const store = useCanvasStore() 195 | 196 | const initCanvas = (parent: HTMLElement) => { 197 | init(parent) 198 | updateCanvasState() 199 | } 200 | 201 | // キャンバス状態の算出プロパティ 202 | const hasSubAnchor = computed(() => store.penCount[1] >= 1) 203 | const activeAnchor = computed(() => store.anchor[hasSubAnchor.value ? 1 : 0]) 204 | const activeAnchorColor = computed( 205 | () => theme.anchorColor[hasSubAnchor.value ? 1 : 0] 206 | ) 207 | const activeAnchorPos = computed(() => 208 | canvas.value?.canvas2displayPos(activeAnchor.value.scroll, 'current') 209 | ) 210 | const enableUndo = computed(() => canvasState.enableUndo) 211 | 212 | return { 213 | state: store, 214 | init: initCanvas, 215 | toImgBlob: () => canvas.value?.toImgBlob(), 216 | clear: () => { 217 | canvas.value?.clear(true) 218 | store.coord = new Coordinate() 219 | store.anchor = [ 220 | new Coordinate(), 221 | new Coordinate({ scroll: new Point(300, 0) }), 222 | ] 223 | store.penCount = [store.penCount[0], 0] 224 | updateCanvasState() 225 | logPaintEvent('clear') 226 | }, 227 | undo: () => { 228 | canvas.value?.undo() 229 | updateCanvasState() 230 | logPaintEvent('undo') 231 | }, 232 | view2canvas: (p: { x: number; y: number }) => 233 | canvas.value?.display2canvasPos(new Point(p.x, p.y), 'current'), 234 | canvas2view: (p: { x: number; y: number }) => 235 | canvas.value?.canvas2displayPos(new Point(p.x, p.y), 'current'), 236 | inited: computed(() => !!canvas.value), 237 | activeAnchor, 238 | activeAnchorColor, 239 | activeAnchorPos, 240 | enableUndo, 241 | } 242 | } 243 | -------------------------------------------------------------------------------- /public/favicon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/icons/PaletteIcon.vue: -------------------------------------------------------------------------------- 1 | 155 | 156 | 169 | -------------------------------------------------------------------------------- /yarn-error.log: -------------------------------------------------------------------------------- 1 | Arguments: 2 | /Users/yuki/.nodebrew/node/v16.9.1/bin/node /Users/yuki/.nodebrew/current/bin/yarn 3 | 4 | PATH: 5 | /Users/yuki/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/yuki/.nodebrew/current/bin 6 | 7 | Yarn version: 8 | 1.22.11 9 | 10 | Node version: 11 | 16.9.1 12 | 13 | Platform: 14 | darwin x64 15 | 16 | Trace: 17 | Error: ENOENT: no such file or directory, open '/Users/yuki/Library/Caches/Yarn/v6/npm-ansi-regex-5.0.1-082cb2c89c9fe8659a311a53bd6a4dc5301db304-integrity/node_modules/ansi-regex/.yarn-metadata.json' 18 | 19 | npm manifest: 20 | { 21 | "name": "flower-paint", 22 | "version": "0.0.0", 23 | "scripts": { 24 | "dev": "vite", 25 | "build": "vue-tsc --noEmit && vite build", 26 | "serve": "vite preview", 27 | "format": "prettier src/**/*.{ts,vue} --write" 28 | }, 29 | "dependencies": { 30 | "pinia": "^2.0.0", 31 | "sym-paint": "https://github.com/yuneco/symmpaint.git", 32 | "vue": "^3.2.16" 33 | }, 34 | "devDependencies": { 35 | "@types/node": "^16.11.10", 36 | "@typescript-eslint/eslint-plugin": "^5.6.0", 37 | "@typescript-eslint/parser": "^5.6.0", 38 | "@vitejs/plugin-vue": "^1.9.3", 39 | "@vue/eslint-config-typescript": "^9.1.0", 40 | "eslint": "^8.4.1", 41 | "eslint-config-prettier": "^8.3.0", 42 | "eslint-plugin-vue": "^8.2.0", 43 | "prettier": "^2.4.1", 44 | "sass": "^1.43.4", 45 | "typescript": "^4.4.3", 46 | "vite": "^2.6.4", 47 | "vue-tsc": "^0.3.0" 48 | } 49 | } 50 | 51 | yarn manifest: 52 | No manifest 53 | 54 | Lockfile: 55 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 56 | # yarn lockfile v1 57 | 58 | 59 | "@babel/helper-validator-identifier@^7.15.7": 60 | version "7.15.7" 61 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" 62 | integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== 63 | 64 | "@babel/parser@^7.16.4", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": 65 | version "7.16.6" 66 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" 67 | integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== 68 | 69 | "@babel/types@^7.6.1", "@babel/types@^7.9.6": 70 | version "7.16.0" 71 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" 72 | integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== 73 | dependencies: 74 | "@babel/helper-validator-identifier" "^7.15.7" 75 | to-fast-properties "^2.0.0" 76 | 77 | "@emmetio/abbreviation@^2.2.2": 78 | version "2.2.2" 79 | resolved "https://registry.yarnpkg.com/@emmetio/abbreviation/-/abbreviation-2.2.2.tgz#746762fd9e7a8c2ea604f580c62e3cfe250e6989" 80 | integrity sha512-TtE/dBnkTCct8+LntkqVrwqQao6EnPAs1YN3cUgxOxTaBlesBCY37ROUAVZrRlG64GNnVShdl/b70RfAI3w5lw== 81 | dependencies: 82 | "@emmetio/scanner" "^1.0.0" 83 | 84 | "@emmetio/css-abbreviation@^2.1.4": 85 | version "2.1.4" 86 | resolved "https://registry.yarnpkg.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz#90362e8a1122ce3b76f6c3157907d30182f53f54" 87 | integrity sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw== 88 | dependencies: 89 | "@emmetio/scanner" "^1.0.0" 90 | 91 | "@emmetio/scanner@^1.0.0": 92 | version "1.0.0" 93 | resolved "https://registry.yarnpkg.com/@emmetio/scanner/-/scanner-1.0.0.tgz#065b2af6233fe7474d44823e3deb89724af42b5f" 94 | integrity sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA== 95 | 96 | "@eslint/eslintrc@^1.0.5": 97 | version "1.0.5" 98 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" 99 | integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== 100 | dependencies: 101 | ajv "^6.12.4" 102 | debug "^4.3.2" 103 | espree "^9.2.0" 104 | globals "^13.9.0" 105 | ignore "^4.0.6" 106 | import-fresh "^3.2.1" 107 | js-yaml "^4.1.0" 108 | minimatch "^3.0.4" 109 | strip-json-comments "^3.1.1" 110 | 111 | "@humanwhocodes/config-array@^0.9.2": 112 | version "0.9.2" 113 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" 114 | integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== 115 | dependencies: 116 | "@humanwhocodes/object-schema" "^1.2.1" 117 | debug "^4.1.1" 118 | minimatch "^3.0.4" 119 | 120 | "@humanwhocodes/object-schema@^1.2.1": 121 | version "1.2.1" 122 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 123 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 124 | 125 | "@nodelib/fs.scandir@2.1.5": 126 | version "2.1.5" 127 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 128 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 129 | dependencies: 130 | "@nodelib/fs.stat" "2.0.5" 131 | run-parallel "^1.1.9" 132 | 133 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 134 | version "2.0.5" 135 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 136 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 137 | 138 | "@nodelib/fs.walk@^1.2.3": 139 | version "1.2.8" 140 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 141 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 142 | dependencies: 143 | "@nodelib/fs.scandir" "2.1.5" 144 | fastq "^1.6.0" 145 | 146 | "@types/json-schema@^7.0.9": 147 | version "7.0.9" 148 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" 149 | integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== 150 | 151 | "@types/node@^16.11.10": 152 | version "16.11.17" 153 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.17.tgz#ae146499772e33fc6382e1880bc567e41a528586" 154 | integrity sha512-C1vTZME8cFo8uxY2ui41xcynEotVkczIVI5AjLmy5pkpBv/FtG+jhtOlfcPysI8VRVwoOMv6NJm44LGnoMSWkw== 155 | 156 | "@typescript-eslint/eslint-plugin@^5.6.0": 157 | version "5.8.0" 158 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.0.tgz#52cd9305ceef98a5333f9492d519e6c6c7fe7d43" 159 | integrity sha512-spu1UW7QuBn0nJ6+psnfCc3iVoQAifjKORgBngKOmC8U/1tbe2YJMzYQqDGYB4JCss7L8+RM2kKLb1B1Aw9BNA== 160 | dependencies: 161 | "@typescript-eslint/experimental-utils" "5.8.0" 162 | "@typescript-eslint/scope-manager" "5.8.0" 163 | debug "^4.3.2" 164 | functional-red-black-tree "^1.0.1" 165 | ignore "^5.1.8" 166 | regexpp "^3.2.0" 167 | semver "^7.3.5" 168 | tsutils "^3.21.0" 169 | 170 | "@typescript-eslint/experimental-utils@5.8.0": 171 | version "5.8.0" 172 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.0.tgz#0916ffe98d34b3c95e3652efa0cace61a7b25728" 173 | integrity sha512-KN5FvNH71bhZ8fKtL+lhW7bjm7cxs1nt+hrDZWIqb6ViCffQcWyLunGrgvISgkRojIDcXIsH+xlFfI4RCDA0xA== 174 | dependencies: 175 | "@types/json-schema" "^7.0.9" 176 | "@typescript-eslint/scope-manager" "5.8.0" 177 | "@typescript-eslint/types" "5.8.0" 178 | "@typescript-eslint/typescript-estree" "5.8.0" 179 | eslint-scope "^5.1.1" 180 | eslint-utils "^3.0.0" 181 | 182 | "@typescript-eslint/parser@^5.6.0": 183 | version "5.8.0" 184 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.8.0.tgz#b39970b21c1d7bc4a6018507fb29b380328d2587" 185 | integrity sha512-Gleacp/ZhRtJRYs5/T8KQR3pAQjQI89Dn/k+OzyCKOsLiZH2/Vh60cFBTnFsHNI6WAD+lNUo/xGZ4NeA5u0Ipw== 186 | dependencies: 187 | "@typescript-eslint/scope-manager" "5.8.0" 188 | "@typescript-eslint/types" "5.8.0" 189 | "@typescript-eslint/typescript-estree" "5.8.0" 190 | debug "^4.3.2" 191 | 192 | "@typescript-eslint/scope-manager@5.8.0": 193 | version "5.8.0" 194 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.8.0.tgz#2371095b4fa4c7be6a80b380f4e1b49c715e16f4" 195 | integrity sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg== 196 | dependencies: 197 | "@typescript-eslint/types" "5.8.0" 198 | "@typescript-eslint/visitor-keys" "5.8.0" 199 | 200 | "@typescript-eslint/types@5.8.0": 201 | version "5.8.0" 202 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.8.0.tgz#e7fa74ec35d9dbe3560d039d3d8734986c3971e0" 203 | integrity sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg== 204 | 205 | "@typescript-eslint/typescript-estree@5.8.0": 206 | version "5.8.0" 207 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.0.tgz#900469ba9d5a37f4482b014ecce4a5dbb86cb4dd" 208 | integrity sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ== 209 | dependencies: 210 | "@typescript-eslint/types" "5.8.0" 211 | "@typescript-eslint/visitor-keys" "5.8.0" 212 | debug "^4.3.2" 213 | globby "^11.0.4" 214 | is-glob "^4.0.3" 215 | semver "^7.3.5" 216 | tsutils "^3.21.0" 217 | 218 | "@typescript-eslint/visitor-keys@5.8.0": 219 | version "5.8.0" 220 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.0.tgz#22d4ed96fe2451135299239feedb9fe1dcec780c" 221 | integrity sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug== 222 | dependencies: 223 | "@typescript-eslint/types" "5.8.0" 224 | eslint-visitor-keys "^3.0.0" 225 | 226 | "@vitejs/plugin-vue@^1.9.3": 227 | version "1.10.2" 228 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz#d718479e2789d8a94b63e00f23f1898ba239253a" 229 | integrity sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw== 230 | 231 | "@volar/code-gen@^0.27.24": 232 | version "0.27.24" 233 | resolved "https://registry.yarnpkg.com/@volar/code-gen/-/code-gen-0.27.24.tgz#ccdbe858951c1ee4e0c3979232d52412dc46756a" 234 | integrity sha512-s4j/QqOZUW03PeD6LmVYI00Q1C3CfJEOePDOQwDvCTUov4lFk0iSBtFyYhjlLyQ1pdtV1+TDTErkj2aMQtc4PA== 235 | dependencies: 236 | "@volar/shared" "^0.27.24" 237 | "@volar/source-map" "^0.27.24" 238 | 239 | "@volar/html2pug@^0.27.13": 240 | version "0.27.13" 241 | resolved "https://registry.yarnpkg.com/@volar/html2pug/-/html2pug-0.27.13.tgz#48dfa73ecf1ef1955a02a046d0c88845950fac85" 242 | integrity sha512-3NYgNA5F3PDsKbbpOrVdGy2S7ZYmZIbFmbp1A/27DDzjj/uIC9Pj7HXVvbYOzi8HcOxUPt0BMrh4TVzBUaCFww== 243 | dependencies: 244 | domelementtype "^2.2.0" 245 | domhandler "^4.2.0" 246 | htmlparser2 "^6.1.0" 247 | pug "^3.0.2" 248 | 249 | "@volar/shared@^0.27.24": 250 | version "0.27.24" 251 | resolved "https://registry.yarnpkg.com/@volar/shared/-/shared-0.27.24.tgz#a33457ec8ac0b0d367ed54c9e21913a5f8c2d6c2" 252 | integrity sha512-Mi8a4GQaiorfb+o4EqOXDZm9E/uBJXgScFgF+NhtcMBOUKHNMKQyLI7YRGumtyJTTdaX7nSDJjGGTkv23tcOtQ== 253 | dependencies: 254 | upath "^2.0.1" 255 | vscode-jsonrpc "^8.0.0-next.2" 256 | vscode-uri "^3.0.2" 257 | 258 | "@volar/source-map@^0.27.24": 259 | version "0.27.24" 260 | resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-0.27.24.tgz#60f2e070c169be82cbf7ffa296a30c2823c5205f" 261 | integrity sha512-2I5a7cXqekZ66D6lHep7ttJgvVVtPEBUIe1hnpcGbnXWNA2ya6f6jKNNyTmrXQyfkh32IEuaUd4kocR+3AKMag== 262 | dependencies: 263 | "@volar/shared" "^0.27.24" 264 | 265 | "@volar/transforms@^0.27.24": 266 | version "0.27.24" 267 | resolved "https://registry.yarnpkg.com/@volar/transforms/-/transforms-0.27.24.tgz#68ebc53dca2e36884e247c0866ec3d24ed815784" 268 | integrity sha512-sOHi1ZSapFlxn7yPl4MO5TXd9aWC0BVq2CgXAJ2EESb+ddh2uJbGQgLLNocX+MDh419cUuuFT2QAJpuWHhJcng== 269 | dependencies: 270 | "@volar/shared" "^0.27.24" 271 | vscode-languageserver "^8.0.0-next.2" 272 | 273 | "@vscode/emmet-helper@^2.7.0": 274 | version "2.8.3" 275 | resolved "https://registry.yarnpkg.com/@vscode/emmet-helper/-/emmet-helper-2.8.3.tgz#f7c2b4a4751d03bcf2b421f0fce5b521a0f64a18" 276 | integrity sha512-dkTSL+BaBBS8gFgPm/GMOU+XfxaMyI+Fl1IUYxEi8Iv24RfHf9/q2eCpV2hs7sncLcoKWEbMYe5gv4Ppmp2Oxw== 277 | dependencies: 278 | emmet "^2.3.0" 279 | jsonc-parser "^2.3.0" 280 | vscode-languageserver-textdocument "^1.0.1" 281 | vscode-languageserver-types "^3.15.1" 282 | vscode-nls "^5.0.0" 283 | vscode-uri "^2.1.2" 284 | 285 | "@vue/compiler-core@3.2.26": 286 | version "3.2.26" 287 | resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.26.tgz#9ab92ae624da51f7b6064f4679c2d4564f437cc8" 288 | integrity sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw== 289 | dependencies: 290 | "@babel/parser" "^7.16.4" 291 | "@vue/shared" "3.2.26" 292 | estree-walker "^2.0.2" 293 | source-map "^0.6.1" 294 | 295 | "@vue/compiler-dom@3.2.26", "@vue/compiler-dom@^3.2.19": 296 | version "3.2.26" 297 | resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.26.tgz#c7a7b55d50a7b7981dd44fc28211df1450482667" 298 | integrity sha512-smBfaOW6mQDxcT3p9TKT6mE22vjxjJL50GFVJiI0chXYGU/xzC05QRGrW3HHVuJrmLTLx5zBhsZ2dIATERbarg== 299 | dependencies: 300 | "@vue/compiler-core" "3.2.26" 301 | "@vue/shared" "3.2.26" 302 | 303 | "@vue/compiler-sfc@3.2.26": 304 | version "3.2.26" 305 | resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.26.tgz#3ce76677e4aa58311655a3bea9eb1cb804d2273f" 306 | integrity sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw== 307 | dependencies: 308 | "@babel/parser" "^7.16.4" 309 | "@vue/compiler-core" "3.2.26" 310 | "@vue/compiler-dom" "3.2.26" 311 | "@vue/compiler-ssr" "3.2.26" 312 | "@vue/reactivity-transform" "3.2.26" 313 | "@vue/shared" "3.2.26" 314 | estree-walker "^2.0.2" 315 | magic-string "^0.25.7" 316 | postcss "^8.1.10" 317 | source-map "^0.6.1" 318 | 319 | "@vue/compiler-ssr@3.2.26": 320 | version "3.2.26" 321 | resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.26.tgz#fd049523341fbf4ab5e88e25eef566d862894ba7" 322 | integrity sha512-2mywLX0ODc4Zn8qBoA2PDCsLEZfpUGZcyoFRLSOjyGGK6wDy2/5kyDOWtf0S0UvtoyVq95OTSGIALjZ4k2q/ag== 323 | dependencies: 324 | "@vue/compiler-dom" "3.2.26" 325 | "@vue/shared" "3.2.26" 326 | 327 | "@vue/devtools-api@^6.0.0-beta.21": 328 | version "6.0.0-beta.21.1" 329 | resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.21.1.tgz#f1410f53c42aa67fa3b01ca7bdba891f69d7bc97" 330 | integrity sha512-FqC4s3pm35qGVeXRGOjTsRzlkJjrBLriDS9YXbflHLsfA9FrcKzIyWnLXoNm+/7930E8rRakXuAc2QkC50swAw== 331 | 332 | "@vue/eslint-config-typescript@^9.1.0": 333 | version "9.1.0" 334 | resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-9.1.0.tgz#b98a64352b312085444a08b98728962e2a8425ab" 335 | integrity sha512-j/852/ZYQ5wDvCD3HE2q4uqJwJAceer2FwoEch1nFo+zTOsPrbzbE3cuWIs3kvu5hdFsGTMYwRwjI6fqZKDMxQ== 336 | dependencies: 337 | vue-eslint-parser "^8.0.0" 338 | 339 | "@vue/reactivity-transform@3.2.26": 340 | version "3.2.26" 341 | resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.26.tgz#6d8f20a4aa2d19728f25de99962addbe7c4d03e9" 342 | integrity sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ== 343 | dependencies: 344 | "@babel/parser" "^7.16.4" 345 | "@vue/compiler-core" "3.2.26" 346 | "@vue/shared" "3.2.26" 347 | estree-walker "^2.0.2" 348 | magic-string "^0.25.7" 349 | 350 | "@vue/reactivity@3.2.26", "@vue/reactivity@^3.2.19": 351 | version "3.2.26" 352 | resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.26.tgz#d529191e581521c3c12e29ef986d4c8a933a0f83" 353 | integrity sha512-h38bxCZLW6oFJVDlCcAiUKFnXI8xP8d+eO0pcDxx+7dQfSPje2AO6M9S9QO6MrxQB7fGP0DH0dYQ8ksf6hrXKQ== 354 | dependencies: 355 | "@vue/shared" "3.2.26" 356 | 357 | "@vue/runtime-core@3.2.26": 358 | version "3.2.26" 359 | resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.26.tgz#5c59cc440ed7a39b6dbd4c02e2d21c8d1988f0de" 360 | integrity sha512-BcYi7qZ9Nn+CJDJrHQ6Zsmxei2hDW0L6AB4vPvUQGBm2fZyC0GXd/4nVbyA2ubmuhctD5RbYY8L+5GUJszv9mQ== 361 | dependencies: 362 | "@vue/reactivity" "3.2.26" 363 | "@vue/shared" "3.2.26" 364 | 365 | "@vue/runtime-dom@3.2.26": 366 | version "3.2.26" 367 | resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.26.tgz#84d3ae2584488747717c2e072d5d9112c0d2e6c2" 368 | integrity sha512-dY56UIiZI+gjc4e8JQBwAifljyexfVCkIAu/WX8snh8vSOt/gMSEGwPRcl2UpYpBYeyExV8WCbgvwWRNt9cHhQ== 369 | dependencies: 370 | "@vue/runtime-core" "3.2.26" 371 | "@vue/shared" "3.2.26" 372 | csstype "^2.6.8" 373 | 374 | "@vue/server-renderer@3.2.26": 375 | version "3.2.26" 376 | resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.26.tgz#f16a4b9fbcc917417b4cea70c99afce2701341cf" 377 | integrity sha512-Jp5SggDUvvUYSBIvYEhy76t4nr1vapY/FIFloWmQzn7UxqaHrrBpbxrqPcTrSgGrcaglj0VBp22BKJNre4aA1w== 378 | dependencies: 379 | "@vue/compiler-ssr" "3.2.26" 380 | "@vue/shared" "3.2.26" 381 | 382 | "@vue/shared@3.2.26", "@vue/shared@^3.2.19": 383 | version "3.2.26" 384 | resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.26.tgz#7acd1621783571b9a82eca1f041b4a0a983481d9" 385 | integrity sha512-vPV6Cq+NIWbH5pZu+V+2QHE9y1qfuTq49uNWw4f7FDEeZaDU2H2cx5jcUZOAKW7qTrUS4k6qZPbMy1x4N96nbA== 386 | 387 | acorn-jsx@^5.3.1: 388 | version "5.3.2" 389 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 390 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 391 | 392 | acorn@^7.1.1: 393 | version "7.4.1" 394 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 395 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 396 | 397 | acorn@^8.6.0: 398 | version "8.6.0" 399 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" 400 | integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== 401 | 402 | ajv@^6.10.0, ajv@^6.12.4: 403 | version "6.12.6" 404 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 405 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 406 | dependencies: 407 | fast-deep-equal "^3.1.1" 408 | fast-json-stable-stringify "^2.0.0" 409 | json-schema-traverse "^0.4.1" 410 | uri-js "^4.2.2" 411 | 412 | ansi-colors@^4.1.1: 413 | version "4.1.1" 414 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 415 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 416 | 417 | ansi-regex@^5.0.1: 418 | version "5.0.1" 419 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 420 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 421 | 422 | ansi-styles@^4.1.0: 423 | version "4.3.0" 424 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 425 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 426 | dependencies: 427 | color-convert "^2.0.1" 428 | 429 | anymatch@~3.1.2: 430 | version "3.1.2" 431 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 432 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 433 | dependencies: 434 | normalize-path "^3.0.0" 435 | picomatch "^2.0.4" 436 | 437 | argparse@^2.0.1: 438 | version "2.0.1" 439 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 440 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 441 | 442 | array-union@^2.1.0: 443 | version "2.1.0" 444 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 445 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 446 | 447 | asap@~2.0.3: 448 | version "2.0.6" 449 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 450 | integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= 451 | 452 | assert-never@^1.2.1: 453 | version "1.2.1" 454 | resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" 455 | integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== 456 | 457 | babel-walk@3.0.0-canary-5: 458 | version "3.0.0-canary-5" 459 | resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" 460 | integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== 461 | dependencies: 462 | "@babel/types" "^7.9.6" 463 | 464 | balanced-match@^1.0.0: 465 | version "1.0.2" 466 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 467 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 468 | 469 | binary-extensions@^2.0.0: 470 | version "2.2.0" 471 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 472 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 473 | 474 | brace-expansion@^1.1.7: 475 | version "1.1.11" 476 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 477 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 478 | dependencies: 479 | balanced-match "^1.0.0" 480 | concat-map "0.0.1" 481 | 482 | braces@^3.0.1, braces@~3.0.2: 483 | version "3.0.2" 484 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 485 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 486 | dependencies: 487 | fill-range "^7.0.1" 488 | 489 | call-bind@^1.0.2: 490 | version "1.0.2" 491 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 492 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 493 | dependencies: 494 | function-bind "^1.1.1" 495 | get-intrinsic "^1.0.2" 496 | 497 | callsites@^3.0.0: 498 | version "3.1.0" 499 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 500 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 501 | 502 | chalk@^4.0.0: 503 | version "4.1.2" 504 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 505 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 506 | dependencies: 507 | ansi-styles "^4.1.0" 508 | supports-color "^7.1.0" 509 | 510 | character-parser@^2.2.0: 511 | version "2.2.0" 512 | resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" 513 | integrity sha1-x84o821LzZdE5f/CxfzeHHMmH8A= 514 | dependencies: 515 | is-regex "^1.0.3" 516 | 517 | "chokidar@>=3.0.0 <4.0.0": 518 | version "3.5.2" 519 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" 520 | integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== 521 | dependencies: 522 | anymatch "~3.1.2" 523 | braces "~3.0.2" 524 | glob-parent "~5.1.2" 525 | is-binary-path "~2.1.0" 526 | is-glob "~4.0.1" 527 | normalize-path "~3.0.0" 528 | readdirp "~3.6.0" 529 | optionalDependencies: 530 | fsevents "~2.3.2" 531 | 532 | color-convert@^2.0.1: 533 | version "2.0.1" 534 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 535 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 536 | dependencies: 537 | color-name "~1.1.4" 538 | 539 | color-name@~1.1.4: 540 | version "1.1.4" 541 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 542 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 543 | 544 | concat-map@0.0.1: 545 | version "0.0.1" 546 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 547 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 548 | 549 | constantinople@^4.0.1: 550 | version "4.0.1" 551 | resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" 552 | integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== 553 | dependencies: 554 | "@babel/parser" "^7.6.0" 555 | "@babel/types" "^7.6.1" 556 | 557 | cross-spawn@^7.0.2: 558 | version "7.0.3" 559 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 560 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 561 | dependencies: 562 | path-key "^3.1.0" 563 | shebang-command "^2.0.0" 564 | which "^2.0.1" 565 | 566 | csstype@^2.6.8: 567 | version "2.6.19" 568 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa" 569 | integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ== 570 | 571 | debug@^4.1.1, debug@^4.3.2: 572 | version "4.3.3" 573 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 574 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 575 | dependencies: 576 | ms "2.1.2" 577 | 578 | deep-is@^0.1.3: 579 | version "0.1.4" 580 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 581 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 582 | 583 | dir-glob@^3.0.1: 584 | version "3.0.1" 585 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 586 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 587 | dependencies: 588 | path-type "^4.0.0" 589 | 590 | doctrine@^3.0.0: 591 | version "3.0.0" 592 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 593 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 594 | dependencies: 595 | esutils "^2.0.2" 596 | 597 | doctypes@^1.1.0: 598 | version "1.1.0" 599 | resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" 600 | integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= 601 | 602 | dom-serializer@^1.0.1: 603 | version "1.3.2" 604 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" 605 | integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== 606 | dependencies: 607 | domelementtype "^2.0.1" 608 | domhandler "^4.2.0" 609 | entities "^2.0.0" 610 | 611 | domelementtype@^2.0.1, domelementtype@^2.2.0: 612 | version "2.2.0" 613 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" 614 | integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== 615 | 616 | domhandler@^4.0.0, domhandler@^4.2.0: 617 | version "4.3.0" 618 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" 619 | integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== 620 | dependencies: 621 | domelementtype "^2.2.0" 622 | 623 | domutils@^2.5.2: 624 | version "2.8.0" 625 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" 626 | integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== 627 | dependencies: 628 | dom-serializer "^1.0.1" 629 | domelementtype "^2.2.0" 630 | domhandler "^4.2.0" 631 | 632 | emmet@^2.3.0: 633 | version "2.3.5" 634 | resolved "https://registry.yarnpkg.com/emmet/-/emmet-2.3.5.tgz#7f80f9c3db6831d1ee2b458717b9c36a074b1a47" 635 | integrity sha512-LcWfTamJnXIdMfLvJEC5Ld3hY5/KHXgv1L1bp6I7eEvB0ZhacHZ1kX0BYovJ8FroEsreLcq7n7kZhRMsf6jkXQ== 636 | dependencies: 637 | "@emmetio/abbreviation" "^2.2.2" 638 | "@emmetio/css-abbreviation" "^2.1.4" 639 | 640 | enquirer@^2.3.5: 641 | version "2.3.6" 642 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 643 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 644 | dependencies: 645 | ansi-colors "^4.1.1" 646 | 647 | entities@^2.0.0: 648 | version "2.2.0" 649 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 650 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 651 | 652 | esbuild-android-arm64@0.13.15: 653 | version "0.13.15" 654 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44" 655 | integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg== 656 | 657 | esbuild-darwin-64@0.13.15: 658 | version "0.13.15" 659 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72" 660 | integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ== 661 | 662 | esbuild-darwin-arm64@0.13.15: 663 | version "0.13.15" 664 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a" 665 | integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ== 666 | 667 | esbuild-freebsd-64@0.13.15: 668 | version "0.13.15" 669 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85" 670 | integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA== 671 | 672 | esbuild-freebsd-arm64@0.13.15: 673 | version "0.13.15" 674 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52" 675 | integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ== 676 | 677 | esbuild-linux-32@0.13.15: 678 | version "0.13.15" 679 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69" 680 | integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g== 681 | 682 | esbuild-linux-64@0.13.15: 683 | version "0.13.15" 684 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3" 685 | integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA== 686 | 687 | esbuild-linux-arm64@0.13.15: 688 | version "0.13.15" 689 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1" 690 | integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA== 691 | 692 | esbuild-linux-arm@0.13.15: 693 | version "0.13.15" 694 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe" 695 | integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA== 696 | 697 | esbuild-linux-mips64le@0.13.15: 698 | version "0.13.15" 699 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7" 700 | integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg== 701 | 702 | esbuild-linux-ppc64le@0.13.15: 703 | version "0.13.15" 704 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2" 705 | integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ== 706 | 707 | esbuild-netbsd-64@0.13.15: 708 | version "0.13.15" 709 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038" 710 | integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w== 711 | 712 | esbuild-openbsd-64@0.13.15: 713 | version "0.13.15" 714 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7" 715 | integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g== 716 | 717 | esbuild-sunos-64@0.13.15: 718 | version "0.13.15" 719 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4" 720 | integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw== 721 | 722 | esbuild-windows-32@0.13.15: 723 | version "0.13.15" 724 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7" 725 | integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw== 726 | 727 | esbuild-windows-64@0.13.15: 728 | version "0.13.15" 729 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294" 730 | integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ== 731 | 732 | esbuild-windows-arm64@0.13.15: 733 | version "0.13.15" 734 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3" 735 | integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA== 736 | 737 | esbuild@^0.13.12: 738 | version "0.13.15" 739 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf" 740 | integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw== 741 | optionalDependencies: 742 | esbuild-android-arm64 "0.13.15" 743 | esbuild-darwin-64 "0.13.15" 744 | esbuild-darwin-arm64 "0.13.15" 745 | esbuild-freebsd-64 "0.13.15" 746 | esbuild-freebsd-arm64 "0.13.15" 747 | esbuild-linux-32 "0.13.15" 748 | esbuild-linux-64 "0.13.15" 749 | esbuild-linux-arm "0.13.15" 750 | esbuild-linux-arm64 "0.13.15" 751 | esbuild-linux-mips64le "0.13.15" 752 | esbuild-linux-ppc64le "0.13.15" 753 | esbuild-netbsd-64 "0.13.15" 754 | esbuild-openbsd-64 "0.13.15" 755 | esbuild-sunos-64 "0.13.15" 756 | esbuild-windows-32 "0.13.15" 757 | esbuild-windows-64 "0.13.15" 758 | esbuild-windows-arm64 "0.13.15" 759 | 760 | escape-string-regexp@^4.0.0: 761 | version "4.0.0" 762 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 763 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 764 | 765 | eslint-config-prettier@^8.3.0: 766 | version "8.3.0" 767 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" 768 | integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== 769 | 770 | eslint-plugin-vue@^8.2.0: 771 | version "8.2.0" 772 | resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.2.0.tgz#b404bc10e3f43b2b7aad4ebb3b38090a58040202" 773 | integrity sha512-cLIdTuOAMXyHeQ4drYKcZfoyzdwdBpH279X8/N0DgmotEI9yFKb5O/cAgoie/CkQZCH/MOmh0xw/KEfS90zY2A== 774 | dependencies: 775 | eslint-utils "^3.0.0" 776 | natural-compare "^1.4.0" 777 | semver "^7.3.5" 778 | vue-eslint-parser "^8.0.1" 779 | 780 | eslint-scope@^5.1.1: 781 | version "5.1.1" 782 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 783 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 784 | dependencies: 785 | esrecurse "^4.3.0" 786 | estraverse "^4.1.1" 787 | 788 | eslint-scope@^6.0.0: 789 | version "6.0.0" 790 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" 791 | integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== 792 | dependencies: 793 | esrecurse "^4.3.0" 794 | estraverse "^5.2.0" 795 | 796 | eslint-scope@^7.1.0: 797 | version "7.1.0" 798 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" 799 | integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== 800 | dependencies: 801 | esrecurse "^4.3.0" 802 | estraverse "^5.2.0" 803 | 804 | eslint-utils@^3.0.0: 805 | version "3.0.0" 806 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 807 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 808 | dependencies: 809 | eslint-visitor-keys "^2.0.0" 810 | 811 | eslint-visitor-keys@^2.0.0: 812 | version "2.1.0" 813 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 814 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 815 | 816 | eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0: 817 | version "3.1.0" 818 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" 819 | integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== 820 | 821 | eslint@^8.4.1: 822 | version "8.5.0" 823 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.5.0.tgz#ddd2c1afd8f412036f87ae2a063d2aa296d3175f" 824 | integrity sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg== 825 | dependencies: 826 | "@eslint/eslintrc" "^1.0.5" 827 | "@humanwhocodes/config-array" "^0.9.2" 828 | ajv "^6.10.0" 829 | chalk "^4.0.0" 830 | cross-spawn "^7.0.2" 831 | debug "^4.3.2" 832 | doctrine "^3.0.0" 833 | enquirer "^2.3.5" 834 | escape-string-regexp "^4.0.0" 835 | eslint-scope "^7.1.0" 836 | eslint-utils "^3.0.0" 837 | eslint-visitor-keys "^3.1.0" 838 | espree "^9.2.0" 839 | esquery "^1.4.0" 840 | esutils "^2.0.2" 841 | fast-deep-equal "^3.1.3" 842 | file-entry-cache "^6.0.1" 843 | functional-red-black-tree "^1.0.1" 844 | glob-parent "^6.0.1" 845 | globals "^13.6.0" 846 | ignore "^4.0.6" 847 | import-fresh "^3.0.0" 848 | imurmurhash "^0.1.4" 849 | is-glob "^4.0.0" 850 | js-yaml "^4.1.0" 851 | json-stable-stringify-without-jsonify "^1.0.1" 852 | levn "^0.4.1" 853 | lodash.merge "^4.6.2" 854 | minimatch "^3.0.4" 855 | natural-compare "^1.4.0" 856 | optionator "^0.9.1" 857 | progress "^2.0.0" 858 | regexpp "^3.2.0" 859 | semver "^7.2.1" 860 | strip-ansi "^6.0.1" 861 | strip-json-comments "^3.1.0" 862 | text-table "^0.2.0" 863 | v8-compile-cache "^2.0.3" 864 | 865 | espree@^9.0.0, espree@^9.2.0: 866 | version "9.2.0" 867 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" 868 | integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== 869 | dependencies: 870 | acorn "^8.6.0" 871 | acorn-jsx "^5.3.1" 872 | eslint-visitor-keys "^3.1.0" 873 | 874 | esquery@^1.4.0: 875 | version "1.4.0" 876 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 877 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 878 | dependencies: 879 | estraverse "^5.1.0" 880 | 881 | esrecurse@^4.3.0: 882 | version "4.3.0" 883 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 884 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 885 | dependencies: 886 | estraverse "^5.2.0" 887 | 888 | estraverse@^4.1.1: 889 | version "4.3.0" 890 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 891 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 892 | 893 | estraverse@^5.1.0, estraverse@^5.2.0: 894 | version "5.3.0" 895 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 896 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 897 | 898 | estree-walker@^2.0.2: 899 | version "2.0.2" 900 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 901 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 902 | 903 | esutils@^2.0.2: 904 | version "2.0.3" 905 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 906 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 907 | 908 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 909 | version "3.1.3" 910 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 911 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 912 | 913 | fast-glob@^3.1.1: 914 | version "3.2.7" 915 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" 916 | integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== 917 | dependencies: 918 | "@nodelib/fs.stat" "^2.0.2" 919 | "@nodelib/fs.walk" "^1.2.3" 920 | glob-parent "^5.1.2" 921 | merge2 "^1.3.0" 922 | micromatch "^4.0.4" 923 | 924 | fast-json-stable-stringify@^2.0.0: 925 | version "2.1.0" 926 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 927 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 928 | 929 | fast-levenshtein@^2.0.6: 930 | version "2.0.6" 931 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 932 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 933 | 934 | fastq@^1.6.0: 935 | version "1.13.0" 936 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 937 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 938 | dependencies: 939 | reusify "^1.0.4" 940 | 941 | file-entry-cache@^6.0.1: 942 | version "6.0.1" 943 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 944 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 945 | dependencies: 946 | flat-cache "^3.0.4" 947 | 948 | fill-range@^7.0.1: 949 | version "7.0.1" 950 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 951 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 952 | dependencies: 953 | to-regex-range "^5.0.1" 954 | 955 | flat-cache@^3.0.4: 956 | version "3.0.4" 957 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 958 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 959 | dependencies: 960 | flatted "^3.1.0" 961 | rimraf "^3.0.2" 962 | 963 | flatted@^3.1.0: 964 | version "3.2.4" 965 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" 966 | integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== 967 | 968 | fs.realpath@^1.0.0: 969 | version "1.0.0" 970 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 971 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 972 | 973 | fsevents@~2.3.2: 974 | version "2.3.2" 975 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 976 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 977 | 978 | function-bind@^1.1.1: 979 | version "1.1.1" 980 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 981 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 982 | 983 | functional-red-black-tree@^1.0.1: 984 | version "1.0.1" 985 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 986 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 987 | 988 | get-intrinsic@^1.0.2: 989 | version "1.1.1" 990 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 991 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 992 | dependencies: 993 | function-bind "^1.1.1" 994 | has "^1.0.3" 995 | has-symbols "^1.0.1" 996 | 997 | glob-parent@^5.1.2, glob-parent@~5.1.2: 998 | version "5.1.2" 999 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1000 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1001 | dependencies: 1002 | is-glob "^4.0.1" 1003 | 1004 | glob-parent@^6.0.1: 1005 | version "6.0.2" 1006 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1007 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1008 | dependencies: 1009 | is-glob "^4.0.3" 1010 | 1011 | glob@^7.1.3: 1012 | version "7.2.0" 1013 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 1014 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 1015 | dependencies: 1016 | fs.realpath "^1.0.0" 1017 | inflight "^1.0.4" 1018 | inherits "2" 1019 | minimatch "^3.0.4" 1020 | once "^1.3.0" 1021 | path-is-absolute "^1.0.0" 1022 | 1023 | globals@^13.6.0, globals@^13.9.0: 1024 | version "13.12.0" 1025 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" 1026 | integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== 1027 | dependencies: 1028 | type-fest "^0.20.2" 1029 | 1030 | globby@^11.0.4: 1031 | version "11.0.4" 1032 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" 1033 | integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== 1034 | dependencies: 1035 | array-union "^2.1.0" 1036 | dir-glob "^3.0.1" 1037 | fast-glob "^3.1.1" 1038 | ignore "^5.1.4" 1039 | merge2 "^1.3.0" 1040 | slash "^3.0.0" 1041 | 1042 | has-flag@^4.0.0: 1043 | version "4.0.0" 1044 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1045 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1046 | 1047 | has-symbols@^1.0.1, has-symbols@^1.0.2: 1048 | version "1.0.2" 1049 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 1050 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 1051 | 1052 | has-tostringtag@^1.0.0: 1053 | version "1.0.0" 1054 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" 1055 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 1056 | dependencies: 1057 | has-symbols "^1.0.2" 1058 | 1059 | has@^1.0.3: 1060 | version "1.0.3" 1061 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1062 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1063 | dependencies: 1064 | function-bind "^1.1.1" 1065 | 1066 | htmlparser2@^6.1.0: 1067 | version "6.1.0" 1068 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" 1069 | integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== 1070 | dependencies: 1071 | domelementtype "^2.0.1" 1072 | domhandler "^4.0.0" 1073 | domutils "^2.5.2" 1074 | entities "^2.0.0" 1075 | 1076 | ignore@^4.0.6: 1077 | version "4.0.6" 1078 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1079 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1080 | 1081 | ignore@^5.1.4, ignore@^5.1.8: 1082 | version "5.2.0" 1083 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 1084 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 1085 | 1086 | immutable@^4.0.0: 1087 | version "4.0.0" 1088 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" 1089 | integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== 1090 | 1091 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1092 | version "3.3.0" 1093 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1094 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1095 | dependencies: 1096 | parent-module "^1.0.0" 1097 | resolve-from "^4.0.0" 1098 | 1099 | imurmurhash@^0.1.4: 1100 | version "0.1.4" 1101 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1102 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1103 | 1104 | inflight@^1.0.4: 1105 | version "1.0.6" 1106 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1107 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1108 | dependencies: 1109 | once "^1.3.0" 1110 | wrappy "1" 1111 | 1112 | inherits@2: 1113 | version "2.0.4" 1114 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1115 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1116 | 1117 | is-binary-path@~2.1.0: 1118 | version "2.1.0" 1119 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1120 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1121 | dependencies: 1122 | binary-extensions "^2.0.0" 1123 | 1124 | is-core-module@^2.2.0: 1125 | version "2.8.0" 1126 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" 1127 | integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== 1128 | dependencies: 1129 | has "^1.0.3" 1130 | 1131 | is-expression@^4.0.0: 1132 | version "4.0.0" 1133 | resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" 1134 | integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== 1135 | dependencies: 1136 | acorn "^7.1.1" 1137 | object-assign "^4.1.1" 1138 | 1139 | is-extglob@^2.1.1: 1140 | version "2.1.1" 1141 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1142 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1143 | 1144 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1145 | version "4.0.3" 1146 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1147 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1148 | dependencies: 1149 | is-extglob "^2.1.1" 1150 | 1151 | is-number@^7.0.0: 1152 | version "7.0.0" 1153 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1154 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1155 | 1156 | is-promise@^2.0.0: 1157 | version "2.2.2" 1158 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" 1159 | integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== 1160 | 1161 | is-regex@^1.0.3: 1162 | version "1.1.4" 1163 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 1164 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1165 | dependencies: 1166 | call-bind "^1.0.2" 1167 | has-tostringtag "^1.0.0" 1168 | 1169 | isexe@^2.0.0: 1170 | version "2.0.0" 1171 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1172 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1173 | 1174 | js-stringify@^1.0.2: 1175 | version "1.0.2" 1176 | resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" 1177 | integrity sha1-Fzb939lyTyijaCrcYjCufk6Weds= 1178 | 1179 | js-yaml@^4.1.0: 1180 | version "4.1.0" 1181 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1182 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1183 | dependencies: 1184 | argparse "^2.0.1" 1185 | 1186 | json-schema-traverse@^0.4.1: 1187 | version "0.4.1" 1188 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1189 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1190 | 1191 | json-stable-stringify-without-jsonify@^1.0.1: 1192 | version "1.0.1" 1193 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1194 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1195 | 1196 | jsonc-parser@^2.3.0: 1197 | version "2.3.1" 1198 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" 1199 | integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== 1200 | 1201 | jsonc-parser@^3.0.0: 1202 | version "3.0.0" 1203 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" 1204 | integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== 1205 | 1206 | jstransformer@1.0.0: 1207 | version "1.0.0" 1208 | resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" 1209 | integrity sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM= 1210 | dependencies: 1211 | is-promise "^2.0.0" 1212 | promise "^7.0.1" 1213 | 1214 | levn@^0.4.1: 1215 | version "0.4.1" 1216 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1217 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1218 | dependencies: 1219 | prelude-ls "^1.2.1" 1220 | type-check "~0.4.0" 1221 | 1222 | lodash.merge@^4.6.2: 1223 | version "4.6.2" 1224 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1225 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1226 | 1227 | lodash@^4.17.21: 1228 | version "4.17.21" 1229 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1230 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1231 | 1232 | lru-cache@^6.0.0: 1233 | version "6.0.0" 1234 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1235 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1236 | dependencies: 1237 | yallist "^4.0.0" 1238 | 1239 | magic-string@^0.25.7: 1240 | version "0.25.7" 1241 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 1242 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 1243 | dependencies: 1244 | sourcemap-codec "^1.4.4" 1245 | 1246 | merge2@^1.3.0: 1247 | version "1.4.1" 1248 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1249 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1250 | 1251 | micromatch@^4.0.4: 1252 | version "4.0.4" 1253 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 1254 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 1255 | dependencies: 1256 | braces "^3.0.1" 1257 | picomatch "^2.2.3" 1258 | 1259 | minimatch@^3.0.4: 1260 | version "3.0.4" 1261 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1262 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1263 | dependencies: 1264 | brace-expansion "^1.1.7" 1265 | 1266 | ms@2.1.2: 1267 | version "2.1.2" 1268 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1269 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1270 | 1271 | nanoid@^3.1.30: 1272 | version "3.1.30" 1273 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" 1274 | integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== 1275 | 1276 | natural-compare@^1.4.0: 1277 | version "1.4.0" 1278 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1279 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1280 | 1281 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1282 | version "3.0.0" 1283 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1284 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1285 | 1286 | object-assign@^4.1.1: 1287 | version "4.1.1" 1288 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1289 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1290 | 1291 | once@^1.3.0: 1292 | version "1.4.0" 1293 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1294 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1295 | dependencies: 1296 | wrappy "1" 1297 | 1298 | optionator@^0.9.1: 1299 | version "0.9.1" 1300 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1301 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1302 | dependencies: 1303 | deep-is "^0.1.3" 1304 | fast-levenshtein "^2.0.6" 1305 | levn "^0.4.1" 1306 | prelude-ls "^1.2.1" 1307 | type-check "^0.4.0" 1308 | word-wrap "^1.2.3" 1309 | 1310 | parent-module@^1.0.0: 1311 | version "1.0.1" 1312 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1313 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1314 | dependencies: 1315 | callsites "^3.0.0" 1316 | 1317 | path-is-absolute@^1.0.0: 1318 | version "1.0.1" 1319 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1320 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1321 | 1322 | path-key@^3.1.0: 1323 | version "3.1.1" 1324 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1325 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1326 | 1327 | path-parse@^1.0.6: 1328 | version "1.0.7" 1329 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1330 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1331 | 1332 | path-type@^4.0.0: 1333 | version "4.0.0" 1334 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1335 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1336 | 1337 | picocolors@^1.0.0: 1338 | version "1.0.0" 1339 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1340 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1341 | 1342 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: 1343 | version "2.3.0" 1344 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 1345 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 1346 | 1347 | pinia@^2.0.0: 1348 | version "2.0.8" 1349 | resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.8.tgz#60fe185bcb3aa9e0ea306d62af001e891825fd2d" 1350 | integrity sha512-g8EC+RNrusQTxdOWLJBBmr3I0W1U+nm0ZJRMTG///xyWKhoeJ19KVD/LEWb6InVWPoBUtHmGwjNcUMg8cEq2Xw== 1351 | dependencies: 1352 | "@vue/devtools-api" "^6.0.0-beta.21" 1353 | vue-demi "*" 1354 | 1355 | postcss@^8.1.10, postcss@^8.4.5: 1356 | version "8.4.5" 1357 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" 1358 | integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== 1359 | dependencies: 1360 | nanoid "^3.1.30" 1361 | picocolors "^1.0.0" 1362 | source-map-js "^1.0.1" 1363 | 1364 | prelude-ls@^1.2.1: 1365 | version "1.2.1" 1366 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1367 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1368 | 1369 | prettier@^2.4.1: 1370 | version "2.5.1" 1371 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" 1372 | integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== 1373 | 1374 | progress@^2.0.0: 1375 | version "2.0.3" 1376 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1377 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1378 | 1379 | promise@^7.0.1: 1380 | version "7.3.1" 1381 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 1382 | integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== 1383 | dependencies: 1384 | asap "~2.0.3" 1385 | 1386 | pug-attrs@^3.0.0: 1387 | version "3.0.0" 1388 | resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" 1389 | integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== 1390 | dependencies: 1391 | constantinople "^4.0.1" 1392 | js-stringify "^1.0.2" 1393 | pug-runtime "^3.0.0" 1394 | 1395 | pug-code-gen@^3.0.2: 1396 | version "3.0.2" 1397 | resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce" 1398 | integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg== 1399 | dependencies: 1400 | constantinople "^4.0.1" 1401 | doctypes "^1.1.0" 1402 | js-stringify "^1.0.2" 1403 | pug-attrs "^3.0.0" 1404 | pug-error "^2.0.0" 1405 | pug-runtime "^3.0.0" 1406 | void-elements "^3.1.0" 1407 | with "^7.0.0" 1408 | 1409 | pug-error@^2.0.0: 1410 | version "2.0.0" 1411 | resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5" 1412 | integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ== 1413 | 1414 | pug-filters@^4.0.0: 1415 | version "4.0.0" 1416 | resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" 1417 | integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== 1418 | dependencies: 1419 | constantinople "^4.0.1" 1420 | jstransformer "1.0.0" 1421 | pug-error "^2.0.0" 1422 | pug-walk "^2.0.0" 1423 | resolve "^1.15.1" 1424 | 1425 | pug-lexer@^5.0.1: 1426 | version "5.0.1" 1427 | resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" 1428 | integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== 1429 | dependencies: 1430 | character-parser "^2.2.0" 1431 | is-expression "^4.0.0" 1432 | pug-error "^2.0.0" 1433 | 1434 | pug-linker@^4.0.0: 1435 | version "4.0.0" 1436 | resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" 1437 | integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== 1438 | dependencies: 1439 | pug-error "^2.0.0" 1440 | pug-walk "^2.0.0" 1441 | 1442 | pug-load@^3.0.0: 1443 | version "3.0.0" 1444 | resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" 1445 | integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== 1446 | dependencies: 1447 | object-assign "^4.1.1" 1448 | pug-walk "^2.0.0" 1449 | 1450 | pug-parser@^6.0.0: 1451 | version "6.0.0" 1452 | resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" 1453 | integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== 1454 | dependencies: 1455 | pug-error "^2.0.0" 1456 | token-stream "1.0.0" 1457 | 1458 | pug-runtime@^3.0.0, pug-runtime@^3.0.1: 1459 | version "3.0.1" 1460 | resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" 1461 | integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== 1462 | 1463 | pug-strip-comments@^2.0.0: 1464 | version "2.0.0" 1465 | resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" 1466 | integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== 1467 | dependencies: 1468 | pug-error "^2.0.0" 1469 | 1470 | pug-walk@^2.0.0: 1471 | version "2.0.0" 1472 | resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" 1473 | integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== 1474 | 1475 | pug@^3.0.2: 1476 | version "3.0.2" 1477 | resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535" 1478 | integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw== 1479 | dependencies: 1480 | pug-code-gen "^3.0.2" 1481 | pug-filters "^4.0.0" 1482 | pug-lexer "^5.0.1" 1483 | pug-linker "^4.0.0" 1484 | pug-load "^3.0.0" 1485 | pug-parser "^6.0.0" 1486 | pug-runtime "^3.0.1" 1487 | pug-strip-comments "^2.0.0" 1488 | 1489 | punycode@^2.1.0: 1490 | version "2.1.1" 1491 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1492 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1493 | 1494 | queue-microtask@^1.2.2: 1495 | version "1.2.3" 1496 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1497 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1498 | 1499 | readdirp@~3.6.0: 1500 | version "3.6.0" 1501 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1502 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1503 | dependencies: 1504 | picomatch "^2.2.1" 1505 | 1506 | regexpp@^3.2.0: 1507 | version "3.2.0" 1508 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1509 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1510 | 1511 | request-light@^0.5.4: 1512 | version "0.5.5" 1513 | resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.5.5.tgz#254ab0b38a1db2192170b599b05181934e14932b" 1514 | integrity sha512-AvjfJuhyT6dYfhtIBF+IpTPQco+Td1QJ6PsIJ5xui110vQ5p9HxHk+m1XJqXazLQT6CxxSx9eNv6R/+fu4bZig== 1515 | 1516 | resolve-from@^4.0.0: 1517 | version "4.0.0" 1518 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1519 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1520 | 1521 | resolve@^1.15.1, resolve@^1.20.0: 1522 | version "1.20.0" 1523 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 1524 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 1525 | dependencies: 1526 | is-core-module "^2.2.0" 1527 | path-parse "^1.0.6" 1528 | 1529 | reusify@^1.0.4: 1530 | version "1.0.4" 1531 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1532 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1533 | 1534 | rimraf@^3.0.2: 1535 | version "3.0.2" 1536 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1537 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1538 | dependencies: 1539 | glob "^7.1.3" 1540 | 1541 | rollup@^2.59.0: 1542 | version "2.61.1" 1543 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.61.1.tgz#1a5491f84543cf9e4caf6c61222d9a3f8f2ba454" 1544 | integrity sha512-BbTXlEvB8d+XFbK/7E5doIcRtxWPRiqr0eb5vQ0+2paMM04Ye4PZY5nHOQef2ix24l/L0SpLd5hwcH15QHPdvA== 1545 | optionalDependencies: 1546 | fsevents "~2.3.2" 1547 | 1548 | run-parallel@^1.1.9: 1549 | version "1.2.0" 1550 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1551 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1552 | dependencies: 1553 | queue-microtask "^1.2.2" 1554 | 1555 | sass@^1.43.4: 1556 | version "1.45.1" 1557 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.45.1.tgz#fa03951f924d1ba5762949567eaf660e608a1ab0" 1558 | integrity sha512-pwPRiq29UR0o4X3fiQyCtrESldXvUQAAE0QmcJTpsI4kuHHcLzZ54M1oNBVIXybQv8QF2zfkpFcTxp8ta97dUA== 1559 | dependencies: 1560 | chokidar ">=3.0.0 <4.0.0" 1561 | immutable "^4.0.0" 1562 | source-map-js ">=0.6.2 <2.0.0" 1563 | 1564 | semver@^7.2.1, semver@^7.3.5: 1565 | version "7.3.5" 1566 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 1567 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 1568 | dependencies: 1569 | lru-cache "^6.0.0" 1570 | 1571 | shebang-command@^2.0.0: 1572 | version "2.0.0" 1573 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1574 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1575 | dependencies: 1576 | shebang-regex "^3.0.0" 1577 | 1578 | shebang-regex@^3.0.0: 1579 | version "3.0.0" 1580 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1581 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1582 | 1583 | slash@^3.0.0: 1584 | version "3.0.0" 1585 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1586 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1587 | 1588 | "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1: 1589 | version "1.0.1" 1590 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" 1591 | integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== 1592 | 1593 | source-map@^0.6.1: 1594 | version "0.6.1" 1595 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1596 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1597 | 1598 | sourcemap-codec@^1.4.4: 1599 | version "1.4.8" 1600 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1601 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1602 | 1603 | strip-ansi@^6.0.1: 1604 | version "6.0.1" 1605 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1606 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1607 | dependencies: 1608 | ansi-regex "^5.0.1" 1609 | 1610 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1611 | version "3.1.1" 1612 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1613 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1614 | 1615 | supports-color@^7.1.0: 1616 | version "7.2.0" 1617 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1618 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1619 | dependencies: 1620 | has-flag "^4.0.0" 1621 | 1622 | text-table@^0.2.0: 1623 | version "0.2.0" 1624 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1625 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1626 | 1627 | to-fast-properties@^2.0.0: 1628 | version "2.0.0" 1629 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1630 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1631 | 1632 | to-regex-range@^5.0.1: 1633 | version "5.0.1" 1634 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1635 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1636 | dependencies: 1637 | is-number "^7.0.0" 1638 | 1639 | token-stream@1.0.0: 1640 | version "1.0.0" 1641 | resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" 1642 | integrity sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ= 1643 | 1644 | tslib@^1.8.1: 1645 | version "1.14.1" 1646 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1647 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1648 | 1649 | tsutils@^3.21.0: 1650 | version "3.21.0" 1651 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1652 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1653 | dependencies: 1654 | tslib "^1.8.1" 1655 | 1656 | type-check@^0.4.0, type-check@~0.4.0: 1657 | version "0.4.0" 1658 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1659 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1660 | dependencies: 1661 | prelude-ls "^1.2.1" 1662 | 1663 | type-fest@^0.20.2: 1664 | version "0.20.2" 1665 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1666 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1667 | 1668 | typescript@^4.4.3: 1669 | version "4.5.4" 1670 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" 1671 | integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== 1672 | 1673 | upath@^2.0.1: 1674 | version "2.0.1" 1675 | resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" 1676 | integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== 1677 | 1678 | uri-js@^4.2.2: 1679 | version "4.4.1" 1680 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1681 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1682 | dependencies: 1683 | punycode "^2.1.0" 1684 | 1685 | v8-compile-cache@^2.0.3: 1686 | version "2.3.0" 1687 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 1688 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 1689 | 1690 | vite@^2.6.4: 1691 | version "2.7.6" 1692 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.7.6.tgz#766c7524d27ba21ff27ab37aaffba7abf2e72917" 1693 | integrity sha512-PBNoc87rDYLtkpFU9dbVeGdbcyKzz6c34oScqivE3FEa3BhVa4ASupCzcz0eDIiSECovfLcQnLUJt9vhiEU08g== 1694 | dependencies: 1695 | esbuild "^0.13.12" 1696 | postcss "^8.4.5" 1697 | resolve "^1.20.0" 1698 | rollup "^2.59.0" 1699 | optionalDependencies: 1700 | fsevents "~2.3.2" 1701 | 1702 | void-elements@^3.1.0: 1703 | version "3.1.0" 1704 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" 1705 | integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= 1706 | 1707 | vscode-css-languageservice@^5.1.4: 1708 | version "5.1.9" 1709 | resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.9.tgz#9d473e5c61fa6d4d62719d9b8715ff6c644bf14e" 1710 | integrity sha512-/tFOWeZBL3Oc9Zc+2MAi3rEwiXJTSZsvjB+M7nSjWLbGPUIjukUA7YzLgsBoUfR35sPJYnXWUkL56PdfIYM8GA== 1711 | dependencies: 1712 | vscode-languageserver-textdocument "^1.0.1" 1713 | vscode-languageserver-types "^3.16.0" 1714 | vscode-nls "^5.0.0" 1715 | vscode-uri "^3.0.2" 1716 | 1717 | vscode-html-languageservice@^4.0.7: 1718 | version "4.2.1" 1719 | resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-4.2.1.tgz#b95077cffd19bf187e53c7bf79e3e0dd7edbc7cf" 1720 | integrity sha512-PgaToZVXJ44nFWEBuSINdDgVV6EnpC3MnXBsysR3O5TKcAfywbYeRGRy+Y4dVR7YeUgDvtb+JkJoSkaYC0mxXQ== 1721 | dependencies: 1722 | vscode-languageserver-textdocument "^1.0.1" 1723 | vscode-languageserver-types "^3.16.0" 1724 | vscode-nls "^5.0.0" 1725 | vscode-uri "^3.0.2" 1726 | 1727 | vscode-json-languageservice@^4.1.7: 1728 | version "4.1.10" 1729 | resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.1.10.tgz#5d5729fc4f3e02f41599e0104523a1877c25f0fb" 1730 | integrity sha512-IHliMEEYSY0tJjJt0ECb8ESx/nRXpoy9kN42WVQXgaqGyizFAf3jibSiezDQTrrY7f3kywXggCU+kkJEM+OLZQ== 1731 | dependencies: 1732 | jsonc-parser "^3.0.0" 1733 | vscode-languageserver-textdocument "^1.0.1" 1734 | vscode-languageserver-types "^3.16.0" 1735 | vscode-nls "^5.0.0" 1736 | vscode-uri "^3.0.2" 1737 | 1738 | vscode-jsonrpc@8.0.0-next.4, vscode-jsonrpc@^8.0.0-next.2: 1739 | version "8.0.0-next.4" 1740 | resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.4.tgz#c0da5e3536c0862e8189b1678a3a7c4900e6ecbd" 1741 | integrity sha512-i+wvza5Wd0YV/t9qhnS8I+dJdhJ1fHIhRW4f262rXXM9Mgts5VZhYrRZufGcai4y99RlbZvwaZhplQ6diRXkaA== 1742 | 1743 | vscode-languageserver-protocol@3.17.0-next.11: 1744 | version "3.17.0-next.11" 1745 | resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.11.tgz#0f2b2bc0d28026422340e4571373e018598e2e16" 1746 | integrity sha512-9FqHT7XvM6tWFsnLvRfuQA7Zh7wZZYAwA9dK85lYthA8M1aXpXEP9drXVvO/Fe03MUeJpKVf2e4/NvDaFUnttg== 1747 | dependencies: 1748 | vscode-jsonrpc "8.0.0-next.4" 1749 | vscode-languageserver-types "3.17.0-next.5" 1750 | 1751 | vscode-languageserver-textdocument@^1.0.1: 1752 | version "1.0.3" 1753 | resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz#879f2649bfa5a6e07bc8b392c23ede2dfbf43eff" 1754 | integrity sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A== 1755 | 1756 | vscode-languageserver-types@3.17.0-next.5: 1757 | version "3.17.0-next.5" 1758 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.5.tgz#0d176d39d215d55bffc9195112fb2b6d81ff5fbb" 1759 | integrity sha512-Zcfaw8BznhlJWB09LDR0dscXyxn9+liREqJnPF4pigeUCHwKxYapYqizwuCpMHQ/oLYiAvKwU+f28hPleYu7pA== 1760 | 1761 | vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.16.0: 1762 | version "3.16.0" 1763 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" 1764 | integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== 1765 | 1766 | vscode-languageserver@^8.0.0-next.2: 1767 | version "8.0.0-next.5" 1768 | resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.0-next.5.tgz#99f7f25dd658a1f000219f62c29ae557858f850c" 1769 | integrity sha512-3E2W0eWtGKb6QAJqspOnD0thrBRRo8IGUMV5jpDNMcMKvmtkcxMwsBh0VxdvuWaZ51PiNyR4L+B+GUvkYsyFEg== 1770 | dependencies: 1771 | vscode-languageserver-protocol "3.17.0-next.11" 1772 | 1773 | vscode-nls@^5.0.0: 1774 | version "5.0.0" 1775 | resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" 1776 | integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== 1777 | 1778 | vscode-pug-languageservice@^0.27.24: 1779 | version "0.27.24" 1780 | resolved "https://registry.yarnpkg.com/vscode-pug-languageservice/-/vscode-pug-languageservice-0.27.24.tgz#fa805c4d3e33dee3681e660a0767136738e68370" 1781 | integrity sha512-GSvsFB+rPhAD7cBlEKCVNNsFGIaOnp/0zyLw3WpYbXY24vJZafXu1kHvtYaaQXJRnIhqp5EI5p+EqpdI3hTBnw== 1782 | dependencies: 1783 | "@volar/code-gen" "^0.27.24" 1784 | "@volar/shared" "^0.27.24" 1785 | "@volar/source-map" "^0.27.24" 1786 | "@volar/transforms" "^0.27.24" 1787 | pug-lexer "^5.0.1" 1788 | pug-parser "^6.0.0" 1789 | vscode-languageserver "^8.0.0-next.2" 1790 | 1791 | vscode-typescript-languageservice@^0.27.25: 1792 | version "0.27.25" 1793 | resolved "https://registry.yarnpkg.com/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.27.25.tgz#acd211723b600108c25515388b75d55ce15bb056" 1794 | integrity sha512-nxpJI9MnF2rn5rKL/032Qrsq3T9DgM3slK5fwZp3suNdo90JG2zFTs3Ola8n62k7+KWu4A775obxyb4wLIW6Gw== 1795 | dependencies: 1796 | "@volar/shared" "^0.27.24" 1797 | semver "^7.3.5" 1798 | upath "^2.0.1" 1799 | vscode-languageserver "^8.0.0-next.2" 1800 | vscode-languageserver-textdocument "^1.0.1" 1801 | 1802 | vscode-uri@^2.1.2: 1803 | version "2.1.2" 1804 | resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" 1805 | integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== 1806 | 1807 | vscode-uri@^3.0.2: 1808 | version "3.0.3" 1809 | resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84" 1810 | integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA== 1811 | 1812 | vscode-vue-languageservice@^0.27.0: 1813 | version "0.27.30" 1814 | resolved "https://registry.yarnpkg.com/vscode-vue-languageservice/-/vscode-vue-languageservice-0.27.30.tgz#1f32b0203dd233582f74a457428519a6318f039e" 1815 | integrity sha512-nPnUNCMqqHfxcCPLyLWvmgbNCgos3SwvPcl/CzAnMbqcjLtNZppsdI7bKX3EEj0Jbg6SGLQ9NanIvZaMI1bsUA== 1816 | dependencies: 1817 | "@volar/code-gen" "^0.27.24" 1818 | "@volar/html2pug" "^0.27.13" 1819 | "@volar/shared" "^0.27.24" 1820 | "@volar/source-map" "^0.27.24" 1821 | "@volar/transforms" "^0.27.24" 1822 | "@vscode/emmet-helper" "^2.7.0" 1823 | "@vue/compiler-dom" "^3.2.19" 1824 | "@vue/reactivity" "^3.2.19" 1825 | "@vue/shared" "^3.2.19" 1826 | request-light "^0.5.4" 1827 | upath "^2.0.1" 1828 | vscode-css-languageservice "^5.1.4" 1829 | vscode-html-languageservice "^4.0.7" 1830 | vscode-json-languageservice "^4.1.7" 1831 | vscode-languageserver "^8.0.0-next.2" 1832 | vscode-languageserver-textdocument "^1.0.1" 1833 | vscode-pug-languageservice "^0.27.24" 1834 | vscode-typescript-languageservice "^0.27.25" 1835 | 1836 | vue-demi@*: 1837 | version "0.12.1" 1838 | resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.1.tgz#f7e18efbecffd11ab069d1472d7a06e319b4174c" 1839 | integrity sha512-QL3ny+wX8c6Xm1/EZylbgzdoDolye+VpCXRhI2hug9dJTP3OUJ3lmiKN3CsVV3mOJKwFi0nsstbgob0vG7aoIw== 1840 | 1841 | vue-eslint-parser@^8.0.0, vue-eslint-parser@^8.0.1: 1842 | version "8.0.1" 1843 | resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-8.0.1.tgz#25e08b20a414551531f3e19f999902e1ecf45f13" 1844 | integrity sha512-lhWjDXJhe3UZw2uu3ztX51SJAPGPey1Tff2RK3TyZURwbuI4vximQLzz4nQfCv8CZq4xx7uIiogHMMoSJPr33A== 1845 | dependencies: 1846 | debug "^4.3.2" 1847 | eslint-scope "^6.0.0" 1848 | eslint-visitor-keys "^3.0.0" 1849 | espree "^9.0.0" 1850 | esquery "^1.4.0" 1851 | lodash "^4.17.21" 1852 | semver "^7.3.5" 1853 | 1854 | vue-tsc@^0.3.0: 1855 | version "0.3.0" 1856 | resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-0.3.0.tgz#3b3872bf4f1d2e4409b57adbd826032e253db406" 1857 | integrity sha512-zaDRZBxwRIz1XjhNP92FqugG71st6BUMnA2EwPeXrAyzbEYVRz6TezNFceYl3QYqqN8CtaxbqUhaQEDj/ntoCA== 1858 | dependencies: 1859 | vscode-vue-languageservice "^0.27.0" 1860 | 1861 | vue@^3.2.16: 1862 | version "3.2.26" 1863 | resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.26.tgz#5db575583ecae495c7caa5c12fd590dffcbb763e" 1864 | integrity sha512-KD4lULmskL5cCsEkfhERVRIOEDrfEL9CwAsLYpzptOGjaGFNWo3BQ9g8MAb7RaIO71rmVOziZ/uEN/rHwcUIhg== 1865 | dependencies: 1866 | "@vue/compiler-dom" "3.2.26" 1867 | "@vue/compiler-sfc" "3.2.26" 1868 | "@vue/runtime-dom" "3.2.26" 1869 | "@vue/server-renderer" "3.2.26" 1870 | "@vue/shared" "3.2.26" 1871 | 1872 | which@^2.0.1: 1873 | version "2.0.2" 1874 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1875 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1876 | dependencies: 1877 | isexe "^2.0.0" 1878 | 1879 | with@^7.0.0: 1880 | version "7.0.2" 1881 | resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" 1882 | integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== 1883 | dependencies: 1884 | "@babel/parser" "^7.9.6" 1885 | "@babel/types" "^7.9.6" 1886 | assert-never "^1.2.1" 1887 | babel-walk "3.0.0-canary-5" 1888 | 1889 | word-wrap@^1.2.3: 1890 | version "1.2.3" 1891 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1892 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1893 | 1894 | wrappy@1: 1895 | version "1.0.2" 1896 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1897 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1898 | 1899 | yallist@^4.0.0: 1900 | version "4.0.0" 1901 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1902 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1903 | --------------------------------------------------------------------------------