├── .eslintrc.cjs ├── .gitignore ├── .prettierrc.json ├── README.md ├── dist ├── declarations │ └── index.d.ts ├── favicon.ico ├── vue-drag-scroller.cjs.js └── vue-drag-scroller.es.js ├── document ├── .gitattributes ├── .gitignore ├── docs │ ├── .vitepress │ │ ├── config.ts │ │ └── theme │ │ │ ├── custom.css │ │ │ └── index.ts │ ├── about.md │ ├── configs.md │ ├── contact.md │ ├── examples │ │ ├── Example1.vue │ │ ├── ExampleExceptChild.vue │ │ ├── ExampleExceptSpecChild.vue │ │ ├── ExampleOnlyHideScroll.vue │ │ ├── ExampleOnlyX.vue │ │ ├── ExampleOnlyY.vue │ │ ├── ExampleSpeed.vue │ │ ├── bg.avif │ │ └── test.vue │ ├── get-started.md │ ├── guide.md │ ├── index.md │ ├── installation.md │ ├── introduction.md │ ├── public │ │ ├── logo-big.svg │ │ └── logo.svg │ └── use.md ├── package.json ├── renovate.json └── scripts │ └── deploy.js ├── example ├── App.vue ├── assets │ ├── base.css │ ├── logo.svg │ ├── main.css │ └── preview.mp4 └── main.ts ├── index.html ├── package.json ├── public └── favicon.ico ├── server ├── assets │ ├── index-BaTH9yxT.js │ └── index-lU1t3W8O.css ├── favicon.ico └── index.html ├── src ├── index.ts └── types.d.ts ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── yarn.lock /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | require('@rushstack/eslint-patch/modern-module-resolution') 3 | 4 | module.exports = { 5 | root: true, 6 | 'extends': [ 7 | 'plugin:vue/vue3-essential', 8 | 'eslint:recommended', 9 | '@vue/eslint-config-typescript', 10 | '@vue/eslint-config-prettier/skip-formatting' 11 | ], 12 | parserOptions: { 13 | ecmaVersion: 'latest' 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist-ssr 13 | coverage 14 | *.local 15 | 16 | /cypress/videos/ 17 | /cypress/screenshots/ 18 | 19 | # Editor directories and files 20 | .vscode/* 21 | !.vscode/extensions.json 22 | .idea 23 | *.suo 24 | *.ntvs* 25 | *.njsproj 26 | *.sln 27 | *.sw? 28 | 29 | *.tsbuildinfo 30 | .vscode -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/prettierrc", 3 | "semi": false, 4 | "tabWidth": 2, 5 | "singleQuote": true, 6 | "printWidth": 100, 7 | "trailingComma": "none" 8 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue drag scroller ⚡️ 2 | 3 | ![image](https://github.com/huynamboz/vue-drag-scroller/assets/38585889/57cc7cf2-1273-4416-8fcb-df8262a4af49) 4 | 5 | 6 | 7 | [![npm version](https://img.shields.io/npm/v/vue-drag-scroller.svg)](https://www.npmjs.com/package/vue-drag-scroller) 8 | [![npm download](https://img.shields.io/npm/dm/vue-drag-scroller.svg)](https://www.npmjs.com/package/vue-drag-scroller) 9 | [![npm license](https://img.shields.io/npm/l/vue-drag-scroller.svg)](https://www.npmjs.com/package/vue-drag-scroller) 10 | 11 | This package help you drag to scroll easier🌟
12 | 13 | [Docs and demo](https://huynamboz.github.io/vue-drag-scroller/)

14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | https://github.com/huynamboz/vue-drag-scroller/assets/38585889/20139bab-0004-4249-8826-70959f6dbc77 22 | 23 | 24 | 25 | ## How to install🔖 26 | **NPM** 27 | 28 | npm install vue-drag-scroller 29 | **YARN** 30 | 31 | yarn add vue-drag-scroller 32 | 33 | ## Install🔖 34 | 35 | Use with vue 3:
36 | **Register global:** 37 | ```javascript 38 | //main.ts 39 | import { createApp } from 'vue' 40 | import VueDragScroller from "vue-drag-scroller" 41 | 42 | import App from './App.vue' 43 | 44 | const app = createApp(App) 45 | app.use(VueDragScroller) 46 | app.mount('#app') 47 | ``` 48 | 49 | ``` html 50 | //Example.vue 51 | 55 | ``` 56 | **Register local:** 57 | ```javascript 58 | // Example.vue 59 | 62 | 63 | 67 | ``` 68 | **Register in Nuxt:** 69 | ```javascript 70 | // plugins/vue-drag-scroller.js 71 | import VueDragScroller from 'vue-drag-scroller' 72 | 73 | export default defineNuxtPlugin((nuxtApp) => { 74 | nuxtApp.vueApp.use(VueDragScroller) 75 | }) 76 | ``` 77 | ```javascript 78 | // nuxt.config.js 79 | export default defineNuxtConfig({ 80 | plugins: ['~/plugins/vue-drag-scroller.ts'], 81 | }) 82 | ``` 83 | 84 | 85 | ## Config🔖 86 | ### Options: 87 | you can pass options to directive like this: 88 | ```javascript 89 | 103 | 104 | 108 | ``` 109 | | Name | Description | Type | Default | 110 | |--|--|--|--| 111 | | startScroll | Trigger when start scroll | Function | null | 112 | | endScroll | Trigger when end scroll | Function | null | 113 | | speed | Speed of scroll | Number | 1 | 114 | | hideScrollbar | Hide scrollbar | Boolean | false | 115 | | reverseDirection | Reverse direction of scroll | Boolean | false | 116 | ### Binding value: 117 | you can pass binding value to directive like this: 118 | ```javascript 119 | 123 | ``` 124 | 125 | ```javascript 126 | 130 | ``` 131 | 132 | | Name | Description | Type | Default | 133 | |--|--|--|--| 134 | | disablechild | Disable drag scroll in all child | Boolean | false | 135 | | onlyX | Only scroll in X axis | Boolean | false | 136 | | onlyY | Only scroll in Y axis | Boolean | false | 137 | 138 | Priority: disablechild > drag-scroller-disable > onlyX > onlyY 139 | ### Events (use in options): 140 | | Name | Description | 141 | |--|--| 142 | | startScroll | Trigger when start scroll| 143 | | endScroll | Trigger when end scroll| 144 | | onScrolling | Trigger when drag and move mouse| 145 | #### Example 146 | ```javascript 147 | 162 | 163 | // in component 164 | 168 | ``` 169 | - ### Events Listener with v-on or @ 170 | #### Example with @ 171 | ```javascript 172 | 180 | ``` 181 | #### Example with v-on 182 | ```javascript 183 | 191 | ``` 192 | - ### Drag parent except all child 193 | #### Example 194 | ```javascript 195 | 203 | ``` 204 | - ### Drag parent except particular child 205 | #### Example 206 | ```javascript 207 | 215 | ``` 216 | - ### Only scroll in X axis 217 | #### Example 218 | ```javascript 219 | 223 | ``` 224 | - ### Only scroll in Y axis 225 | #### Example 226 | ```javascript 227 | 231 | ``` 232 | - ### Hide scrollbar 233 | #### Example 234 | ```javascript 235 | 241 | ``` 242 | - ### Change speed of scroll 243 | #### Example 244 | ```javascript 245 | 251 | ``` 252 | - ### Change direction of scroll 253 | #### Example 254 | ```javascript 255 | 261 | ``` -------------------------------------------------------------------------------- /dist/declarations/index.d.ts: -------------------------------------------------------------------------------- 1 | import type { App, DirectiveBinding } from 'vue'; 2 | interface ICustomBinding extends DirectiveBinding { 3 | value: { 4 | startScroll?: (e: MouseEvent) => void; 5 | endScroll?: (e: MouseEvent) => void; 6 | onScrolling?: (e: MouseEvent) => void; 7 | speed?: number; 8 | hideScrollbar?: boolean; 9 | reverseDirection?: boolean; 10 | }; 11 | modifiers: { 12 | disablechild?: boolean; 13 | onlyX?: boolean; 14 | onlyY?: boolean; 15 | }; 16 | } 17 | declare const statefullDirective: { 18 | mounted(elem: HTMLElement, binding: ICustomBinding): void; 19 | unmounted(elem: HTMLElement): void; 20 | }; 21 | declare const VueDragScroller: { 22 | install(app: App): void; 23 | }; 24 | export { statefullDirective as dragScroller }; 25 | export { statefullDirective as vDragScroller }; 26 | export default VueDragScroller; 27 | -------------------------------------------------------------------------------- /dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huynamboz/vue-drag-scroller/32da26345eb7461078774e958591bdea3e35b051/dist/favicon.ico -------------------------------------------------------------------------------- /dist/vue-drag-scroller.cjs.js: -------------------------------------------------------------------------------- 1 | "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w="drag-scroller-disable",d=(()=>{const n=new WeakMap;return{mounted(r,l){let o=!1;const{onlyX:a,onlyY:c,disablechild:b}=l.modifiers,t=l.value??{},g=new Event("scrollStart",{bubbles:!0}),p=new Event("scrollMoving",{bubbles:!0}),L=new Event("scrollEnd",{bubbles:!0});t.hideScrollbar===!0&&(r.style.overflow="hidden");const D=e=>{if(b)return e===r;for(;e&&e.parentNode;){if(e&&(e!=null&&e.hasAttribute(w)))return!1;if(e===r)return!0;e=e.parentNode}return!1},f=e=>{o=D(e.target),r.dispatchEvent(g),o&&(t!=null&&t.startScroll)&&typeof(t==null?void 0:t.startScroll)=="function"&&t.startScroll(e)},v=e=>{r.dispatchEvent(L),o&&(t!=null&&t.endScroll)&&typeof(t==null?void 0:t.endScroll)=="function"&&t.endScroll(e),o=!1},i=e=>{if(!o)return!1;r.dispatchEvent(p),t!=null&&t.onScrolling&&typeof(t==null?void 0:t.onScrolling)=="function"&&t.onScrolling(e);const s=(t==null?void 0:t.speed)||1,S=t.reverseDirection?e.movementX*s:-e.movementX*s,E=t.reverseDirection?e.movementY*s:-e.movementY*s;return a?r.scrollLeft+=S:(c||(r.scrollLeft+=S),r.scrollTop+=E),u(e),!1};function u(e){var s;(e==null?void 0:e.target)instanceof HTMLImageElement&&e.preventDefault&&e.preventDefault(),(s=window.getSelection())==null||s.removeAllRanges()}n.set(r,{dragStart:f,dragEnd:v,drag:i,preventSelection:u}),r.addEventListener("pointerdown",f),r.addEventListener("dragstart",u),addEventListener("pointerup",v),addEventListener("pointermove",i)},unmounted(r){const{dragStart:l,dragEnd:o,drag:a,preventSelection:c}=n.get(r);r.removeEventListener("pointerdown",l),r.removeEventListener("dragstart",c),removeEventListener("pointerup",o),removeEventListener("pointermove",a)}}})(),h={install(n){n.directive("drag-scroller",d)}};exports.default=h;exports.dragScroller=d;exports.vDragScroller=d; 2 | -------------------------------------------------------------------------------- /dist/vue-drag-scroller.es.js: -------------------------------------------------------------------------------- 1 | const D = "drag-scroller-disable", w = /* @__PURE__ */ (() => { 2 | const n = /* @__PURE__ */ new WeakMap(); 3 | return { 4 | mounted(r, a) { 5 | let o = !1; 6 | const { onlyX: l, onlyY: c, disablechild: E } = a.modifiers, t = a.value ?? {}, p = new Event("scrollStart", { bubbles: !0 }), L = new Event("scrollMoving", { bubbles: !0 }), b = new Event("scrollEnd", { bubbles: !0 }); 7 | t.hideScrollbar === !0 && (r.style.overflow = "hidden"); 8 | const g = (e) => { 9 | if (E) 10 | return e === r; 11 | for (; e && e.parentNode; ) { 12 | if (e && (e != null && e.hasAttribute(D))) 13 | return !1; 14 | if (e === r) 15 | return !0; 16 | e = e.parentNode; 17 | } 18 | return !1; 19 | }, d = (e) => { 20 | o = g(e.target), r.dispatchEvent(p), o && (t != null && t.startScroll) && typeof (t == null ? void 0 : t.startScroll) == "function" && t.startScroll(e); 21 | }, u = (e) => { 22 | r.dispatchEvent(b), o && (t != null && t.endScroll) && typeof (t == null ? void 0 : t.endScroll) == "function" && t.endScroll(e), o = !1; 23 | }, v = (e) => { 24 | if (!o) return !1; 25 | r.dispatchEvent(L), t != null && t.onScrolling && typeof (t == null ? void 0 : t.onScrolling) == "function" && t.onScrolling(e); 26 | const s = (t == null ? void 0 : t.speed) || 1, i = t.reverseDirection ? e.movementX * s : -e.movementX * s, S = t.reverseDirection ? e.movementY * s : -e.movementY * s; 27 | return l ? r.scrollLeft += i : (c || (r.scrollLeft += i), r.scrollTop += S), f(e), !1; 28 | }; 29 | function f(e) { 30 | var s; 31 | (e == null ? void 0 : e.target) instanceof HTMLImageElement && e.preventDefault && e.preventDefault(), (s = window.getSelection()) == null || s.removeAllRanges(); 32 | } 33 | n.set(r, { dragStart: d, dragEnd: u, drag: v, preventSelection: f }), r.addEventListener("pointerdown", d), r.addEventListener("dragstart", f), addEventListener("pointerup", u), addEventListener("pointermove", v); 34 | }, 35 | unmounted(r) { 36 | const { dragStart: a, dragEnd: o, drag: l, preventSelection: c } = n.get(r); 37 | r.removeEventListener("pointerdown", a), r.removeEventListener("dragstart", c), removeEventListener("pointerup", o), removeEventListener("pointermove", l); 38 | } 39 | }; 40 | })(), h = { 41 | install(n) { 42 | n.directive("drag-scroller", w); 43 | } 44 | }; 45 | export { 46 | h as default, 47 | w as dragScroller, 48 | w as vDragScroller 49 | }; 50 | -------------------------------------------------------------------------------- /document/.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-detectable=true 2 | *.ts linguist-detectable=true 3 | *.js linguist-documentation=false 4 | *.md linguist-detectable=true 5 | -------------------------------------------------------------------------------- /document/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | vscode 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | /node_modules 43 | jspm_packages/ 44 | 45 | # TypeScript v1 declaration files 46 | typings/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Microbundle cache 58 | .rpt2_cache/ 59 | .rts2_cache_cjs/ 60 | .rts2_cache_es/ 61 | .rts2_cache_umd/ 62 | 63 | # Optional REPL history 64 | .node_repl_history 65 | 66 | # Output of 'npm pack' 67 | *.tgz 68 | 69 | # Yarn Integrity file 70 | .yarn-integrity 71 | 72 | # dotenv environment variables file 73 | .env 74 | .env.test 75 | 76 | # parcel-bundler cache (https://parceljs.org/) 77 | .cache 78 | 79 | # Next.js build output 80 | .next 81 | 82 | # Nuxt.js build / generate output 83 | .nuxt 84 | dist 85 | 86 | # Gatsby files 87 | .cache/ 88 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 89 | # https://nextjs.org/blog/next-9-1#public-directory-support 90 | # public 91 | 92 | # vuepress build output 93 | .vuepress/dist 94 | 95 | # Serverless directories 96 | .serverless/ 97 | 98 | # FuseBox cache 99 | .fusebox/ 100 | 101 | # DynamoDB Local files 102 | .dynamodb/ 103 | 104 | # TernJS port file 105 | .tern-port 106 | package-lock.json 107 | yarn.lock 108 | cache -------------------------------------------------------------------------------- /document/docs/.vitepress/config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | title: "Vue drag scroller", 3 | description: "An awesome docs template built by me", 4 | lang: 'en-US', 5 | cleanUrls: true, 6 | base: "/vue-drag-scroller/", 7 | // If this is disabled, when building it it will give deadlink errors if your markdown has the wrong links 8 | ignoreDeadLinks: true, 9 | head: [ 10 | [ 11 | 'script', 12 | { async: '', src: 'https://www.googletagmanager.com/gtag/js?id=G-QX1HCGN1JN' } 13 | ], 14 | [ 15 | 'script', 16 | {}, 17 | `window.dataLayer = window.dataLayer || []; 18 | function gtag(){dataLayer.push(arguments);} 19 | gtag('js', new Date()); 20 | gtag('config', 'G-QX1HCGN1JN');` 21 | ] 22 | ], 23 | themeConfig: { 24 | logo: "/logo.svg", 25 | siteTitle: "Vue drag scroller", 26 | search: { 27 | provider: "local", 28 | }, 29 | // Navbar Link 30 | nav: [ 31 | { text: "Guide", link: "/guide" }, 32 | { text: "Configs", link: "/configs" }, 33 | { 34 | // Dropdown Menu 35 | text: "Changelog", 36 | items: [ 37 | { text: "v1.8.2", link: "/" }, 38 | ], 39 | }, 40 | ], 41 | // Social Icons 42 | socialLinks: [ 43 | { icon: "github", link: "https://github.com/huynamboz/vue-drag-scroller" }, 44 | // { 45 | // icon: { 46 | // svg: '', 47 | // }, 48 | // link: "https://google.com", 49 | // }, 50 | ], 51 | // Sidebar 52 | sidebar: [ 53 | { 54 | text: "Getting started", 55 | collapsible: true, 56 | items: [ 57 | { text: "Introduction", link: "/introduction" }, 58 | { text: "Installation", link: "/installation" }, 59 | ], 60 | }, 61 | { 62 | text: "Usage", 63 | collapsible: false, 64 | items: [ 65 | { text: "How to use", link: "/use" }, 66 | { text: "Configs", link: "/configs" }, 67 | ], 68 | }, 69 | ], 70 | // you can disable the previous and next page here 71 | docFooter: { 72 | prev: false, 73 | next: true, 74 | }, 75 | editLink: { 76 | pattern: 'https://github.com/huynamboz/vue-drag-scroller/edit/dev/document/docs/:path', 77 | text: 'Edit this page on GitHub' 78 | }, 79 | footer: { 80 | message: "Released under the MIT License.", 81 | copyright: "Copyright © 2024 huynamboz", 82 | }, 83 | markdown: { 84 | theme: "material-palenight", 85 | lineNumbers: true, 86 | }, 87 | // Mobile Config only 88 | returnToTopLabel: 'Go to Top', 89 | sidebarMenuLabel: 'Menu', 90 | }, 91 | }; 92 | -------------------------------------------------------------------------------- /document/docs/.vitepress/theme/custom.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); 2 | :root { 3 | --vp-c-brand: #ff7340; 4 | --vp-c-brand-light: #ff5719; 5 | --vp-c-brand-lighter: #ff7340; 6 | --vp-c-brand-lighter: rgba(255, 135, 23, 0.25); 7 | --vp-c-brand-dark: #ff622d; 8 | --vp-c-brand-darker: #e23c00; 9 | 10 | --vp-c-sponsor: #fd1d7c; 11 | 12 | /* Typography */ 13 | --vp-font-family-base: "Inter", sans-serif; 14 | 15 | /* Code Snippet font */ 16 | --vp-font-family-mono: "DM Mono", monospace; 17 | } 18 | * { 19 | font-size: 16px; 20 | } 21 | /* Custom Stlye */ 22 | /* .custom-layout { 23 | background-color: var(--vp-c-bg-soft); 24 | color: var(--vp-c-text-1); 25 | padding: 1.5rem; 26 | display: flex; 27 | flex-direction: column; 28 | align-items: center; 29 | justify-content: center; 30 | text-align: center; 31 | gap: 1rem; 32 | min-height: 400px; 33 | max-width: 1152px; 34 | margin: 6rem auto 0; 35 | border-radius: 10px; 36 | } 37 | 38 | .custom-layout h1 { 39 | font-size: 2.2rem; 40 | font-weight: 600; 41 | } 42 | 43 | .custom-layout .btn { 44 | background-color: var(--vp-button-brand-bg); 45 | color: var(--vp-button-brand-text); 46 | border-radius: 20px; 47 | padding: 0.5rem 1.4rem; 48 | } */ 49 | 50 | .drag-container { 51 | width: 100%; 52 | height: 150px; 53 | overflow: auto; 54 | display: flex; 55 | gap: 150px; 56 | background-color: #f0f0f0; 57 | cursor: grab; 58 | } 59 | 60 | .drag-content { 61 | width: 100px; 62 | min-width: 100px; 63 | height: 100px; 64 | background-color: #ff9797; 65 | margin: 10px 0; 66 | display: flex; 67 | justify-content: center; 68 | align-items: center; 69 | text-align: center; 70 | } 71 | 72 | .bg-img { 73 | width: 1000px; 74 | min-width: 1000px; 75 | height: 1000px; 76 | object-fit: cover; 77 | } -------------------------------------------------------------------------------- /document/docs/.vitepress/theme/index.ts: -------------------------------------------------------------------------------- 1 | import DefaultTheme from "vitepress/theme"; 2 | import "./custom.css"; 3 | 4 | export default DefaultTheme; 5 | -------------------------------------------------------------------------------- /document/docs/about.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | Welcome to the about page. 4 | 5 | This markdown supports html elements like the `p` tag coupled with inline styles 6 | 7 |

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.

8 | 9 | Even satire code snippets with syntax highlighting are also supported. 😅 10 | 11 | ```js 12 | const lang = prompt("What is your favorite programming language?"); 13 | 14 | (lang === "JavaScript") | (lang === "javascript") | (lang === "js") 15 | ? alert("JavaScript to the world! 🚀🟡") 16 | : alert(`We don't permit such languages here 💩`); 17 | ``` 18 | 19 | Of course, images are not left out. 20 | 21 | adocs logo 22 | -------------------------------------------------------------------------------- /document/docs/configs.md: -------------------------------------------------------------------------------- 1 | # Configs 2 | 3 | 4 | 5 | Here is a list of all the configurations. 6 | 7 | ## General 8 | 9 | ### Example 10 | 11 | ```vue 12 | 26 | 27 | 31 | ``` 32 | 33 | | Name | Description | Type | Default | 34 | |--|--|--|--| 35 | | startScroll | Trigger when start scroll | Function | null | 36 | | endScroll | Trigger when end scroll | Function | null | 37 | | speed | Speed of scroll | Number | 1 | 38 | | hideScrollbar | Hide scrollbar | Boolean | false | 39 | | reverseDirection | Reverse direction of scroll | Boolean | false | 40 | 41 | ## Binding value: 42 | you can pass binding value to directive like this: 43 | ```vue 44 | 48 | ``` 49 | 50 | ```vue 51 | 55 | ``` 56 | 57 | | Name | Description | Type | Default | 58 | |--|--|--|--| 59 | | disablechild | Disable drag scroll in all child | Boolean | false | 60 | | onlyX | Only scroll in X axis | Boolean | false | 61 | | onlyY | Only scroll in Y axis | Boolean | false | 62 | 63 | Priority: disablechild > drag-scroller-disable > onlyX > onlyY 64 | ## Events (use in options): 65 | | Name | Description | 66 | |--|--| 67 | | startScroll | Trigger when start scroll| 68 | | endScroll | Trigger when end scroll| 69 | | onScrolling | Trigger when drag and move mouse| 70 | #### Example 71 | ```vue 72 | 87 | 88 | // in component 89 | 93 | ``` -------------------------------------------------------------------------------- /document/docs/contact.md: -------------------------------------------------------------------------------- 1 | # Contact 2 | 3 | 4 | 5 | Welcome to the contact page 6 | -------------------------------------------------------------------------------- /document/docs/examples/Example1.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /document/docs/examples/ExampleExceptChild.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /document/docs/examples/ExampleExceptSpecChild.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 15 | -------------------------------------------------------------------------------- /document/docs/examples/ExampleOnlyHideScroll.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /document/docs/examples/ExampleOnlyX.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | -------------------------------------------------------------------------------- /document/docs/examples/ExampleOnlyY.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | -------------------------------------------------------------------------------- /document/docs/examples/ExampleSpeed.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /document/docs/examples/bg.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huynamboz/vue-drag-scroller/32da26345eb7461078774e958591bdea3e35b051/document/docs/examples/bg.avif -------------------------------------------------------------------------------- /document/docs/examples/test.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /document/docs/get-started.md: -------------------------------------------------------------------------------- 1 | # Get Started 2 | 3 | Here's how to get started with [VitePress](https://vitepress.com) 4 | -------------------------------------------------------------------------------- /document/docs/guide.md: -------------------------------------------------------------------------------- 1 | ![banner](https://user-images.githubusercontent.com/62628408/201538130-a1008969-06ae-4aad-9ea0-b77384d6bac1.png) 2 | 3 | # How to build modern docs with VitePress 4 | 5 | ::: info 6 | Documentation is a crucial aspect of software development that is often neglected by developers due to the hassle of maintaining one, or even choosing the right tools to use. This is why it's important to use tools that simplify this process. In this tutorial, you'll learn how to build a complete docs site quickly by utilizing a modern tool called, VitePress. 7 | ::: 8 | 9 | ## Definition 10 | 11 | [VitePress](https://vitepress.vuejs.org/) is a simple and performant static site generator built on top of [Vite](https://vitejs.dev) for creating docs in a matter of minutes. It is powered by [Vuejs](https://vuejs.org/), and Vite with built in customizable components. VitePress powers some popular documentation sites like Vuejs, [Vitest](https://vitest.dev/), [faker.js](https://fakerjs.dev/), and Vite itself. 12 | 13 | ## Prerequisites 14 | 15 | To follow along with this tutorial, you need to have a basic understanding of the following: 16 | 17 | - [Markdown](https://daringfireball.net/projects/markdown/) syntax 18 | - Brief understanding of NPM and Vite 19 | 20 | Here's a screenshot of what you'll be building at the end of this tutorial. 21 | 22 | ![final-works](https://user-images.githubusercontent.com/62628408/201538907-fe67b791-02c4-413c-ae3d-02635b53e20b.png) 23 | 24 | ## Step. 1: Create a new project 25 | 26 | If you already have a folder created, you can skip this step to the next one if not, use the following command to create a project folder and move into the folder. 27 | 28 | ```bash 29 | mkdir project-name 30 | cd project-name 31 | ``` 32 | 33 | Next you need to initialize with your preferred package manager. I'll be using NPM for the rest of this guide. 34 | 35 | ```bash 36 | npm init 37 | // or use this command if you want to skip all the questions 38 | npm init -y 39 | ``` 40 | 41 | If you used the first command, you'll be prompted with certain questions, complete them as appropriate. After a successful operation, you should have a package.json file in your root directory; This is where the VitePress dev dependency will be installed. 42 | 43 | ## Step. 2: Install VitePress 44 | 45 | Next step is to add VitePress and Vue as dev dependencies to your project. 46 | 47 | ```bash 48 | npm install vue vitepress --save-dev 49 | // or 50 | npm install -D vue vitepress 51 | ``` 52 | 53 | You've successfully installed VitePress and Vue and added it as a dev dependency. Now you can start creating creating your respective doc files, but before you do that, I believe it's essential to explain how VitePress works. 54 | 55 | ## How does VitePress work? 56 | 57 | VitePress makes use of Markdown `.md` files for it's markup which is automatically converted into static HTML. In other for this to work, a special folder called `docs` is created in the root directory. 58 | 59 | This folder behaves similar to the `pages` folder in NextJS, where any `.js` file created in the directory is automatically treated as a web page. In this case a file called `index.md` will be the treated as `index.html` and serve as the root of your docs template. 60 | 61 | Now you understand how that works, you can now create your respective doc files. 62 | 63 | ## Step 3. Create respective files 64 | 65 | You can create the docs folder and the index.md file manually, or you can do it with the terminal like a hacker. 66 | 67 | ```bash 68 | mkdir docs && echo '# Hello VitePress' > docs/index.md 69 | ``` 70 | 71 | This command is simply creating a folder called docs and adding an index.md file containing a h1 element that says, "Hello World". 72 | 73 | ![create respective files](https://user-images.githubusercontent.com/62628408/201539157-0b662a53-4aad-4ce5-b22c-228aa618d7b8.png) 74 | 75 | With this, you can boot up your dev environment to see what has been created so far. 76 | 77 | ## Step 4: Boot up dev environment 78 | 79 | In other to run your docs locally, you need to add the following scripts inside the package.json file. Simply copy the code below and replace it with the "script" object. 80 | 81 | ```js 82 | // package.json 83 | "scripts": { 84 | "docs:dev": "vitepress dev docs", 85 | "docs:build": "vitepress build docs", 86 | "docs:serve": "vitepress serve docs" 87 | }, 88 | ``` 89 | 90 | Finally, the documentation site can be served on a local server by running the command below: 91 | 92 | ```bash 93 | npm run docs:dev 94 | ``` 95 | 96 | This will start a hot-reloading development server at `http://localhost:5173`, and you can visit it to see your docs site. 97 | 98 | ### Output 99 | 100 | ![boot-dev-server](https://user-images.githubusercontent.com/62628408/201539308-bfc07160-bac2-4e91-ae90-46f9f3acd3cc.png) 101 | 102 | All you had to do was add the markup and VitePress handled the looks from it's template engine. In the next session, you'll learn how you can customize the docs to fit your needs. 103 | 104 | ## How to customize your docs 105 | 106 | First create a `.vitepress` folder inside the docs directory you created earlier on. This is where all VitePress-specific files will be placed. Inside this new directory, you need a `config.js` file. Again, you can use the terminal command as a hacker. 107 | 108 | ```bash 109 | mkdir .vitepress && touch .vitepress/config.js 110 | ``` 111 | 112 | To test this config file, you can start by changing the meta title and description of your docs site. Copy this markup and paste into the `config.j`s file. 113 | 114 | ```js 115 | // .vitepress/config.js 116 | export default { 117 | title: "Vue drag scroller", 118 | description: "An awesome docs template built by me", 119 | }; 120 | ``` 121 | 122 | If you check the dev tools, you should see the changes in the meta title and description. 123 | 124 | ![title-and-description](https://user-images.githubusercontent.com/62628408/201539383-8b05db4c-dc00-4919-8bbc-f29cc77b2a00.png) 125 | 126 | ## Title and Logo 127 | 128 | In other to change the logo title and add an image, copy the markup below and paste it into a new object called `themeConfig` inside the same `config.js` file. This will overwrite the current title and add a logo your docs site. 129 | 130 | ```js 131 | // config.js 132 | export default { 133 | themeConfig: { 134 | logo: "/logo.svg", 135 | siteTitle: "Vue drag scroller", 136 | }, 137 | }; 138 | ``` 139 | 140 | For the image source, you can pass in an image URL or specify the path to a local image. To do it locally, make sure you place the image within the `public` directory. 141 | 142 | ### Output 143 | 144 | ![logo-and-title](https://user-images.githubusercontent.com/62628408/201539442-123b92cc-3c59-423d-a183-280ab8eb23be.png) 145 | 146 | ::: warning 147 | Note: files in the public directory are served at the root path. 148 | So instead of `../public/logo.svg`, just use `/logo.svg`. 149 | ::: 150 | 151 | ## Navbar 152 | 153 | Customizing the `Navbar` is a pretty straightforward process as well. Inside your `themeConfig` file, paste the markup below. Here we have an object that contains two properties. The anchor text `text`, and the path, `link` defines the URL path. 154 | 155 | ```js 156 | // .vitepress/config.js 157 | { 158 | // ... 159 | nav: [ 160 | { text: "About", link: "/about" }, 161 | { text: "Contact", link: "/contact" }, 162 | { text: "Guide", link: "/guide" }, 163 | { text: "Configs", link: "/configs" }, 164 | { text: "Changelog", link: "https://github.com/Evavic44" }, 165 | ], 166 | // ... 167 | } 168 | ``` 169 | 170 | Essentially navigating to `http://localhost:5173/about` should take you to an about page(though we haven't created that yet). 171 | 172 | ### Output 173 | 174 | ![navbar](https://user-images.githubusercontent.com/62628408/201539594-8e8f1d80-19dc-4335-b82b-fee5a23a5d30.png) 175 | 176 | Navigation links can also be dropdown menus too. To add one, simply replace any of the links property with the items object which contains an array of links. 177 | 178 | ```js 179 | // .vitepress/config.js 180 | { 181 | text: "Changelog", 182 | items: [ 183 | { text: "v0.0.1", link: "/item-1" }, 184 | { text: "v0.0.2", link: "/item-2" }, 185 | { text: "v0.0.3", link: "/item-3" }, 186 | ], 187 | }, 188 | ``` 189 | 190 | Now changelog will become a dropdown menu with the respective links you pass inside. 191 | 192 | ### Output 193 | 194 | ![dropdown-menu](https://user-images.githubusercontent.com/62628408/201539670-330a0e0f-ed81-46b0-87cf-0d2b0b0c387b.png) 195 | 196 | ## Social Icons 197 | 198 | Navigation menus usually have social icons visitors can use to visit your social platforms. To add that, define a new object called socialLinks inside themeConfig and simply pass in the social icon and the link you want it to navigate to. 199 | 200 | ```js 201 | // .vitepress/config.js 202 | socialLinks: [ 203 | { icon: "github", link: "https://github.com/Evavic44/adocs" }, 204 | { icon: "twitter", link: "https://twitter.com/victorekea" }, 205 | { icon: "discord", link: "", target: "_blank" }, 206 | ]; 207 | ``` 208 | 209 | By default only 7 popular icons are provided. If you want to add a custom icon, use the SVG property to define an svg image. 210 | 211 | ```js 212 | } 213 | "discord" 214 | "facebook" 215 | "github" 216 | "instagram" 217 | "linkedin" 218 | "slack" 219 | "twitter" 220 | "youtube" 221 | { svg: string }; 222 | { 223 | ``` 224 | 225 | ::: warning 226 | For the SVG icon, make sure you add the role="img" property, this allows the string convert it properly. 227 | ::: 228 | 229 | ![navbar-2](https://user-images.githubusercontent.com/62628408/201539773-a50280b7-91d4-4d4a-9ba7-a5c227fb9742.png) 230 | 231 | ## Sidebar 232 | 233 | VitePress also comes with built-in components like sidebar menus. To add a sidebar, create an object called sidebar and inside we add nested objects that takes in three values; the nested title, collapsible functionality (Default is set to true) and the nested links. 234 | 235 | ```js 236 | // .vitepress/config.js 237 | sidebar: [ 238 | { 239 | text: "Section A", 240 | collapsible: true, 241 | items: [ 242 | { text: "Introduction", link: "/introduction" }, 243 | { text: "Getting Started", link: "/getting-started" }, 244 | ], 245 | }, 246 | { 247 | text: "Section B", 248 | collapsible: false, 249 | items: [ 250 | { text: "Introduction", link: "/introduction" }, 251 | { text: "Getting Started", link: "/getting-started" }, 252 | ], 253 | }, 254 | { 255 | text: "Section C", 256 | collapsible: true, 257 | items: [ 258 | { text: "Introduction", link: "/introduction" }, 259 | { text: "Getting Started", link: "/getting-started" }, 260 | ], 261 | }, 262 | ], 263 | ``` 264 | 265 | By adding collapsible: "true" to the sidebar object, it shows a toggle button to hide/show each section. You can create as much sections as you want. 266 | 267 | ### Output 268 | 269 | ![sidebar-2](https://user-images.githubusercontent.com/62628408/201539859-92dffaf2-8886-4b11-86de-dd4847632536.png) 270 | 271 | You can see section B is not collapsible and we have that aesthetic next page button on the bottom of the page. 272 | 273 | ## Page Routing 274 | 275 | As explained earlier, VitePress automatically converts every `.md` file inside the root of the docs directory to static html that can be accessed in the address bar. For instance the `index.md` is converted to `index.html`, and `about.md`, about.html and so on. 276 | 277 | Since you've created your nav links and pointed them to their respective URLs, you can access these pages easily by creating them. 278 | 279 | ``` 280 | docs/ 281 | ├── .vitepress/ 282 | │ └── config.js 283 | ├── public/ 284 | │ └── logo.svg 285 | ├── about.md 286 | ├── contact.md 287 | ├── guide.md 288 | ├── configs.md 289 | └── get-started.md 290 | ``` 291 | 292 | Create these files inside your docs folder and add a simple markup inside them just to see how this works. This page is basic markdown so all your markdown syntax like links, code blocks, headings, etc works here. 293 | 294 | Just for testing purposes, copy this markdown content and paste it inside any of the `.md` file you just created. 295 | 296 | ```md 297 | # About 298 | 299 | Welcome to the about page. 300 | 301 | This markdown supports html elements like the `p` tag coupled with inline styles 302 | 303 |

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.

304 | 305 | Even satire code snippets with syntax highlighting are also supported. 😅 306 | 307 | const lang = prompt("What is your favorite programming language?"); 308 | 309 | (lang === "JavaScript") | (lang === "javascript") | (lang === "js") 310 | ? alert("JavaScript to the world! 🚀🟡") 311 | : alert(`We don't permit such languages here 💩`); 312 | 313 | Of course, images are not left out. 314 | 315 | adocs logo 316 | ``` 317 | 318 | ### Output 319 | 320 | ![page-routing](https://user-images.githubusercontent.com/62628408/201539985-9308aaff-e98b-44e0-ad48-e990e788fd12.gif) 321 | 322 | Great! You've set-up the docs, added a navigation menu with dropdown feature, added a sidebar, and customized the links to navigate to different pages. Next up, let's work on the home page. 323 | 324 | ## Customizing the home page. 325 | 326 | Just like every other components, VitePress provides us with markup for building the home page. I've broken it down into three parts: Hero, features, and footer section. 327 | 328 | ## Hero Section 329 | 330 | First, we'll start with the hero section. Replace the Hello World text in the `index.md` page with the following markup. 331 | 332 | ```bash 333 | # docs/index.md 334 | --- 335 | layout: home 336 | 337 | hero: 338 | name: Vue drag scroller 339 | text: Static docs template built with VitePress. 340 | image: 341 | src: /logo-big.svg 342 | alt: Vue drag scroller logo 343 | tagline: A free to use template for creating docs for your projects 344 | actions: 345 | - theme: brand 346 | text: Get Started 347 | link: /get-started 348 | - theme: alt 349 | text: View on GitHub 350 | link: https://github.com/evavic44/adocs-template 351 | --- 352 | ``` 353 | 354 | ## Features Section 355 | 356 | Additionally, you can also add a features section after the hero section. Simply paste the code below under the hero objects. 357 | 358 | ```bash 359 | # /docs/index.md 360 | --- 361 | link: https://github.com/evavic44/adocs-template 362 | 363 | features: 364 | - icon: ⚡️ 365 | title: Adocs, The DX that can't be beat 366 | details: Lorem ipsum... 367 | - icon: 🎉 368 | title: Power of Vue meets Markdown 369 | details: Lorem ipsum... 370 | - icon: 🔥 371 | title: Simple and minimal, always 372 | details: Lorem ipsum... 373 | - icon: 🎀 374 | title: Stylish and cool 375 | details: Lorem ipsum... 376 | --- 377 | ``` 378 | 379 | ### Output 380 | 381 | ![hero-redesign](https://user-images.githubusercontent.com/62628408/201540116-6546ba1f-dc43-4490-a6e5-b513eaf3ced6.png) 382 | 383 | ## Footer 384 | 385 | You can add a footer message on the bottom of the page but this will only show up in the home page. 386 | 387 | ::: warning 388 | The footer will not be displayed when the SideBar is visible. 389 | To add the footer component, go to the `config.js file` and paste the markup inside the `themeConfig` object 390 | ::: 391 | 392 | ```js 393 | // .vitepress/config.js 394 | footer: { 395 | message: "Released under the MIT License.", 396 | copyright: "Copyright © 2022-present Adocs", 397 | }, 398 | ``` 399 | 400 | ### Output 401 | 402 | ![footer](https://user-images.githubusercontent.com/62628408/201540337-4472a86e-f5cd-42d4-b40d-da1199148d2d.png) 403 | 404 | Aside from the markup, you can also customize the components using custom CSS to change things like fonts family, colors, layout, ETC. 405 | 406 | ## Custom CSS 407 | 408 | The default theme CSS is customized by overriding root level CSS variables. If you want, you can check out the full list of [css variables customizable](https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css). 409 | 410 | To do get started, create a `.vitepress/theme directory`, and inside this theme folder, add an `index.js` and `custom.css` file. If you've been following along, you can use the terminal command below to do this quickly. 411 | 412 | ```bash 413 | mkdir docs/.vitepress/theme && touch docs/.vitepress/theme/index.js && touch docs/.vitepress/theme/custom.css 414 | ``` 415 | 416 | If you ran into any issues with the terminal command, just create the files manually and move on to the next step. 417 | 418 | Here's an overview of the folder structure. 419 | 420 | ```bash 421 | docs/ 422 | ├── .vitepress/ 423 | │ ├── config.js 424 | │ └── theme/ 425 | │ ├── index.js 426 | │ └── custom.css 427 | ├── public/ 428 | │ └── logo.svg 429 | ├── about.md 430 | ├── contact.md 431 | ├── guide.md 432 | ├── configs.md 433 | └── get-started.md 434 | ``` 435 | 436 | After creating these files, inside the `.vitepress/theme/index.js file`, paste the import commands. 437 | 438 | ```js 439 | // .vitepress/theme/index.js 440 | import DefaultTheme from "vitepress/theme"; 441 | import "./custom.css"; 442 | 443 | export default DefaultTheme; 444 | ``` 445 | 446 | ### Color Theme 447 | 448 | The colors are controlled by the CSS variables. You can simply replace them with any colors you want. 449 | 450 | ::: tip 451 | This color has a provision for both light and dark mode. So make sure you change them accordingly. 452 | ::: 453 | 454 | Here's an example of my custom colors 455 | 456 | ```css 457 | /* .vitepress/theme/custom.css */ 458 | 459 | :root { 460 | --vp-c-brand: rgb(255, 115, 64); 461 | --vp-c-brand-light: rgb(255, 87, 25); 462 | --vp-c-brand-lighter: rgb(255, 115, 64); 463 | --vp-c-brand-dark: #ff622d; 464 | --vp-c-brand-darker: rgb(226, 60, 0); 465 | 466 | --vp-c-sponsor: #fd1d7c; 467 | } 468 | ``` 469 | 470 | If you don't see the effects immediately, try ending the server and starting it again. 471 | 472 | Aside from the color themes, you can also override other things like, font family, typography, layout, breakpoints, etc. 473 | 474 | ## Fonts 475 | 476 | [Google fonts](https://fonts.google.com/) can be imported inside the CSS file to override the default font family. 477 | 478 | ```css 479 | @import url(https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic); 480 | @import url(https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic); 481 | 482 | :root { 483 | --vp-c-brand: #ff7340; 484 | --vp-c-brand-light: #ff5719; 485 | --vp-c-brand-lighter: #ff7340; 486 | --vp-c-brand-lighter: rgba(255, 135, 23, 0.25); 487 | --vp-c-brand-dark: #ff622d; 488 | --vp-c-brand-darker: #e23c00; 489 | 490 | --vp-c-sponsor: #fd1d7c; 491 | 492 | /* Typography */ 493 | --vp-font-family-base: "Space Grotesk", "Inter var experimental", "Inter var", 494 | -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, 495 | "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; 496 | 497 | /* Code Snippet font */ 498 | --vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New", 499 | monospace; 500 | } 501 | ``` 502 | 503 | With the `--vp-font-family-base` variable you can change the main font and `--vp-font-family-mono,` the font for code snippets. 504 | 505 | ### Output 506 | 507 | ![banner](https://user-images.githubusercontent.com/62628408/201538130-a1008969-06ae-4aad-9ea0-b77384d6bac1.png) 508 | 509 | You've successfully customized the theme and changed the font family using CSS. Though there's more you can do in regards to styling, but at this point, I'm sure it's clearer how you can customize your docs with CSS. Let's discuss hosting in the next section. 510 | 511 | ## Hosting 512 | 513 | You can publish or host your docs site when you're done to different platforms like: [Netlify](https://netlify.com/), [Vercel](https://vercel.com), [AWS Amplify](https://aws.amazon.com/amplify/), etc. 514 | 515 | First, run the build command 516 | 517 | ```bash 518 | npm run docs:build 519 | ``` 520 | 521 | This should create a new dist folder that contains all the static files of your docs. In your hosting service, add these commands to their respective fields. 522 | Build command: npm run docs:build 523 | Output directory: docs/.vitepress/dist 524 | 525 | This should create a new `dist` folder that contains all the static files of your docs. In your hosting service, add these commands to their respective fields. 526 | 527 | - Build command: `npm run docs:build` 528 | - Output directory: `docs/.vitepress/dist` 529 | 530 | ![deploy-settings-vercel](https://user-images.githubusercontent.com/62628408/201540859-095ea3c0-5d97-4eb4-98a5-2601149d96ed.png) 531 | 532 | After editing the settings, save, and deploy. 533 | 534 | ## Conclusion 535 | 536 | In this tutorial, you've set-up a full-fledged documentation site and customized it using CSS and VitePress built-in components. However, this tutorial only covers a fragment of what is possible with VitePress, to learn more, check out the VitePress docs. 537 | 538 | ## Resources 539 | 540 | - [Live Demo](https://adocs.vercel.app) 541 | - [GitHub Repo](https://github.com/Evavic44/adocs) 542 | 543 |
544 | 545 | If you are an open source ardent like myself or you enjoy hearing about such cool projects, do follow me on my socials so you don't miss my next post. Cheers. 🍷 546 | 547 | [GitHub](https://github.com/evavic44) [Twitter](https://twitter/.com/victorekea) [Blog](https://eke.hashnode.dev) [Portfolio](https://victoreke.com) 548 | -------------------------------------------------------------------------------- /document/docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | 4 | # Hero section 5 | hero: 6 | name: Vue drag scroller 7 | text: A Vue directive help drag scroll easer. 8 | image: 9 | src: /logo-big.svg 10 | alt: Adocs logo 11 | tagline: 12 | actions: 13 | - theme: brand 14 | text: Get Started 15 | link: /introduction 16 | - theme: alt 17 | text: View on GitHub 18 | link: https://github.com/huynamboz/vue-drag-scroller 19 | 20 | # Features section 21 | features: 22 | - icon: ⚡️ 23 | title: Adocs, The DX that can't be beat 24 | details: Lorem ipsum... 25 | - icon: 🎉 26 | title: Power of Vue meets Markdown 27 | details: Lorem ipsum... 28 | - icon: 🔥 29 | title: Simple and minimal, always 30 | details: Lorem ipsum... 31 | - icon: 🎀 32 | title: Stylish and cool 33 | details: Lorem ipsum... 34 | 35 | # Meta property 36 | head: 37 | - - meta 38 | - property: og:type 39 | content: website 40 | - - meta 41 | - property: og:title 42 | content: Vue drag scroller 43 | - - meta 44 | - property: og:image 45 | content: https://user-images.githubusercontent.com/62628408/200117602-4b274d14-b1b2-4f61-8dcd-9f9482c677a0.png 46 | - - meta 47 | - property: og:url 48 | content: https://vitejs.dev/blog/announcing-vite3 49 | - - meta 50 | - name: title 51 | content: Vue drag scroller 52 | - - meta 53 | - name: twitter:card 54 | content: https://user-images.githubusercontent.com/62628408/200117602-4b274d14-b1b2-4f61-8dcd-9f9482c677a0.png 55 | - - link 56 | - rel: icon 57 | type: image/svg 58 | href: logo.svg 59 | --- 60 | 61 | 62 | 68 | -------------------------------------------------------------------------------- /document/docs/installation.md: -------------------------------------------------------------------------------- 1 | # How to Install 🔖 2 | 3 | ## NPM 4 | ::: code-group 5 | 6 | ```bash [npm] 7 | npm install vue-drag-scroller 8 | ``` 9 | 10 | 11 | ```bash [yarn] 12 | yarn add vue-drag-scroller 13 | ``` 14 | 15 | ``` bash [pnpm] 16 | pnpm add vue-drag-scroller 17 | ``` 18 | 19 | ::: 20 | 21 | ### CDN 22 | 23 | You can also include Vue Drag Scroller via CDN by adding the following script tag to your HTML file: 24 | 25 | ```html 26 | 27 | ``` 28 | 29 | ## Import 30 | 31 | ### Install to Vue 3 32 | 33 | - To use Vue Drag Scroller global in your Vue 3 application, import it as a plugin in your main.js file: 34 | 35 | ::: code-group 36 | 37 | ```javascript [main.js] 38 | import { createApp } from 'vue' 39 | import App from './App.vue' 40 | import VueDragScroller from 'vue-drag-scroller' 41 | 42 | const app = createApp(App) 43 | app.use(VueDragScroller) 44 | app.mount('#app') 45 | ``` 46 | 47 | ```vue [App.vue] 48 | 52 | ``` 53 | 54 | ::: 55 | 56 | - To use Vue Drag Scroller locally in your Vue 3 application, import it as a component in your single file component: 57 | 58 | ::: code-group 59 | 60 | ```vue [App.vue] 61 | 64 | 65 | 69 | ``` 70 | 71 | ::: 72 | 73 | ### Install to Nuxt.js (Only for Nuxt 3) 74 | 75 | To use Vue Drag Scroller in your Nuxt.js application, import it as a plugin in your nuxt.config.js file: 76 | 77 | ::: code-group 78 | 79 | ```javascript [plugins/vue-drag-scroller.js] 80 | import VueDragScroller from 'vue-drag-scroller' 81 | 82 | export default defineNuxtPlugin((nuxtApp) => { 83 | nuxtApp.vueApp.use(VueDragScroller) 84 | }) 85 | ``` 86 | 87 | ```javascript [nuxt.config.js] 88 | export default defineNuxtConfig({ 89 | plugins: ['~/plugins/vue-drag-scroller.ts'], 90 | }) 91 | ``` 92 | 93 | ```vue [App.vue] 94 | 98 | ``` 99 | 100 | ::: 101 | 102 | -------------------------------------------------------------------------------- /document/docs/introduction.md: -------------------------------------------------------------------------------- 1 | # Vue Drag Scroller 2 | 3 | ## Introduction 4 | 5 | **Vue Drag Scroller** is a powerful and easy-to-use library that enhances your Vue.js applications by enabling smooth drag-to-scroll functionality. This library makes it effortless to implement drag scrolling, offering a seamless user experience. 6 | 7 | ## Features 8 | 9 | - **Easy Integration**: Simple setup with support for both Vue 3 and Nuxt.js. 10 | - **Customizable Options**: Flexible configuration options to tailor the drag scrolling behavior to your needs. 11 | - **Event Handling**: Provides events for start, end, and ongoing scrolling, allowing for fine-grained control and interaction. 12 | - **Axis Control**: Allows scrolling to be restricted to either the X or Y axis. 13 | - **Scroll Speed and Direction**: Adjustable scroll speed and the ability to reverse the scroll direction. 14 | - **Scrollbar Visibility**: Option to hide or show the scrollbar based on your design requirements. 15 | - **Child Element Control**: Ability to disable drag scrolling for specific child elements or all child elements. 16 | 17 | ## Benefits 18 | 19 | - **Enhanced User Experience**: Smooth and intuitive drag scrolling improves the overall user experience. 20 | - **Customizable**: Tailor the scrolling behavior to fit your application’s needs perfectly. 21 | - **Event-Driven**: Utilize built-in events to create interactive and dynamic user interfaces. 22 | 23 | ## Get Started 24 | 25 | To start using Vue Drag Scroller, install it via NPM or YARN and integrate it into your Vue.js application. Enjoy the enhanced scrolling experience and provide your users with a fluid and engaging interface. 26 | 27 | For detailed documentation and examples, please visit our [docs and demo page](#). 28 | -------------------------------------------------------------------------------- /document/docs/public/logo-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /document/docs/public/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /document/docs/use.md: -------------------------------------------------------------------------------- 1 | # How to use 🔖 2 | 3 | 12 | ## Basic Usage 13 | 14 | To use the `VueDragScroller` directive, simply add it to the element you want to enable drag scrolling on. For example, to enable drag scrolling on a `div` element has class `container`, you can use the following code: 15 | 16 | 17 | 18 | 19 | 20 | ::: details Show code 21 | ```vue{2} 22 | 27 | 46 | ``` 47 | ::: 48 | 49 | ## Disable all child 50 | 51 | If you want to exclude all child elements from drag scrolling, you can use the `disablechild` modifier. For example, to exclude the first child element from drag scrolling, you can use the following code: 52 | 53 | 54 | 55 | 56 | 57 | ::: details Show code 58 | 59 | ```vue{2} 60 | 65 | 84 | ``` 85 | ::: 86 | 87 | ## Disable specific child 88 | 89 | If you want to exclude specific child elements from drag scrolling, you can use the `drag-scroller-disable` attribute. For example, to exclude the first child element from drag scrolling, you can use the following code: 90 | 91 | 92 | 93 | 94 | 95 | ::: details Show code 96 | ```vue{6,7,8} 97 | 106 | 125 | ``` 126 | ::: 127 | 128 | ## Only scroll in X axis 129 | 130 | If you want to scroll only in the X axis, you can use the `onlyX` modifier. For example, to scroll only in the X axis, you can use the following code: 131 | 132 | 133 | 134 | 135 | 136 | ::: details Show code 137 | 138 | ```vue{2} 139 | 144 | ``` 145 | ::: 146 | 147 | ## Only scroll in Y axis 148 | 149 | If you want to scroll only in the Y axis, you can use the `onlyY` modifier. For example, to scroll only in the Y axis, you can use the following code: 150 | 151 | 152 | 153 | 154 | 155 | ::: details Show code 156 | 157 | ```vue{2} 158 | 163 | ``` 164 | ::: 165 | 166 | ## Hide scrollbar 167 | 168 | If you want to hide the scrollbar, you can use option `hideScrollbar: true`. For example, to hide the scrollbar, you can use the following code: 169 | 170 | 171 | 172 | 173 | 174 | ::: details Show code 175 | 176 | ```vue{3} 177 | 182 | 183 | 188 | ``` 189 | ::: 190 | 191 | ## Speed 192 | 193 | If you want to change the speed of the scroll, you can use the `speed` option. For example, to change the speed of the scroll, you can use the following code: 194 | 195 | 196 | 197 | 198 | 199 | ::: details Show code 200 | 201 | ```vue{3} 202 | 207 | 208 | 213 | ``` 214 | ::: -------------------------------------------------------------------------------- /document/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.ts", 6 | "type": "module", 7 | "scripts": { 8 | "docs:dev": "vitepress dev docs", 9 | "docs:build": "vitepress build docs", 10 | "docs:serve": "vitepress serve docs", 11 | "deploy": "node scripts/deploy.js" 12 | }, 13 | "keywords": [], 14 | "author": "", 15 | "license": "ISC", 16 | "dependencies": { 17 | "vitepress": "^1.0.0-rc.45", 18 | "vue": "^3.4.21", 19 | "vue-drag-scroller": "^1.8.3" 20 | }, 21 | "devDependencies": { 22 | "gh-pages": "^6.1.1" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /document/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /document/scripts/deploy.js: -------------------------------------------------------------------------------- 1 | // var ghpages = require('gh-pages'); 2 | import ghpages from 'gh-pages'; 3 | 4 | ghpages.publish('docs/.vitepress/dist', {nojekyll: true}); -------------------------------------------------------------------------------- /example/App.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 142 | 143 | 195 | -------------------------------------------------------------------------------- /example/assets/base.css: -------------------------------------------------------------------------------- 1 | /* color palette from */ 2 | :root { 3 | --vt-c-white: #ffffff; 4 | --vt-c-white-soft: #f8f8f8; 5 | --vt-c-white-mute: #f2f2f2; 6 | 7 | --vt-c-black: #181818; 8 | --vt-c-black-soft: #222222; 9 | --vt-c-black-mute: #282828; 10 | 11 | --vt-c-indigo: #2c3e50; 12 | 13 | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); 14 | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); 15 | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); 16 | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); 17 | 18 | --vt-c-text-light-1: var(--vt-c-indigo); 19 | --vt-c-text-light-2: rgba(60, 60, 60, 0.66); 20 | --vt-c-text-dark-1: var(--vt-c-white); 21 | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); 22 | } 23 | 24 | /* semantic color variables for this project */ 25 | :root { 26 | --color-background: var(--vt-c-white); 27 | --color-background-soft: var(--vt-c-white-soft); 28 | --color-background-mute: var(--vt-c-white-mute); 29 | 30 | --color-border: var(--vt-c-divider-light-2); 31 | --color-border-hover: var(--vt-c-divider-light-1); 32 | 33 | --color-heading: var(--vt-c-text-light-1); 34 | --color-text: var(--vt-c-text-light-1); 35 | 36 | --section-gap: 160px; 37 | } 38 | 39 | @media (prefers-color-scheme: dark) { 40 | :root { 41 | --color-background: var(--vt-c-black); 42 | --color-background-soft: var(--vt-c-black-soft); 43 | --color-background-mute: var(--vt-c-black-mute); 44 | 45 | --color-border: var(--vt-c-divider-dark-2); 46 | --color-border-hover: var(--vt-c-divider-dark-1); 47 | 48 | --color-heading: var(--vt-c-text-dark-1); 49 | --color-text: var(--vt-c-text-dark-2); 50 | } 51 | } 52 | 53 | *, 54 | *::before, 55 | *::after { 56 | box-sizing: border-box; 57 | margin: 0; 58 | font-weight: normal; 59 | } 60 | 61 | body { 62 | min-height: 100vh; 63 | color: var(--color-text); 64 | background: var(--color-background); 65 | transition: 66 | color 0.5s, 67 | background-color 0.5s; 68 | line-height: 1.6; 69 | font-family: 70 | Inter, 71 | -apple-system, 72 | BlinkMacSystemFont, 73 | 'Segoe UI', 74 | Roboto, 75 | Oxygen, 76 | Ubuntu, 77 | Cantarell, 78 | 'Fira Sans', 79 | 'Droid Sans', 80 | 'Helvetica Neue', 81 | sans-serif; 82 | font-size: 15px; 83 | text-rendering: optimizeLegibility; 84 | -webkit-font-smoothing: antialiased; 85 | -moz-osx-font-smoothing: grayscale; 86 | } 87 | -------------------------------------------------------------------------------- /example/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /example/assets/main.css: -------------------------------------------------------------------------------- 1 | @import './base.css'; 2 | 3 | a, 4 | .green { 5 | text-decoration: none; 6 | color: hsla(160, 100%, 37%, 1); 7 | transition: 0.4s; 8 | padding: 3px; 9 | } 10 | 11 | @media (hover: hover) { 12 | a:hover { 13 | background-color: hsla(160, 100%, 37%, 0.2); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example/assets/preview.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huynamboz/vue-drag-scroller/32da26345eb7461078774e958591bdea3e35b051/example/assets/preview.mp4 -------------------------------------------------------------------------------- /example/main.ts: -------------------------------------------------------------------------------- 1 | import './assets/main.css' 2 | import { createApp } from 'vue' 3 | import VueDragScroller from "../node_modules/vue-drag-scroller" 4 | import App from './App.vue' 5 | 6 | const app = createApp(App) 7 | app.use(VueDragScroller) 8 | app.mount('#app') 9 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-drag-scroller", 3 | "version": "1.8.6", 4 | "type": "module", 5 | "license": "MIT", 6 | "description": "A vue directive that helps you scroll in a more natural way.", 7 | "module": "dist/vue-drag-scroller.es.js", 8 | "main": "dist/vue-drag-scroller.cjs.js", 9 | "types": "dist/declarations/index.d.ts", 10 | "exports": { 11 | ".": { 12 | "import": "./dist/vue-drag-scroller.es.js", 13 | "require": "./dist/vue-drag-scroller.cjs.js", 14 | "types": "./dist/declarations/index.d.ts" 15 | }, 16 | "./package.json": "./package.json", 17 | "./dist/*": "./dist/*", 18 | "./dist/declarations/index.d.ts": "./dist/declarations/index.d.ts" 19 | }, 20 | "scripts": { 21 | "dev": "vite --mode app", 22 | "deploy": "gh-pages -d server", 23 | "build-only": "run-p type-check \"build-only {@}\" --", 24 | "preview": "vite preview --mode app", 25 | "build-lib": "vue-tsc --noEmit && vite build --mode lib && npm run define", 26 | "build-app": "vue-tsc --noEmit && vite build --mode app", 27 | "type-check": "vue-tsc --noEmit --build --force", 28 | "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", 29 | "format": "prettier --write src/", 30 | "define": "vue-tsc --declaration --emitDeclarationOnly --outDir dist/declarations" 31 | }, 32 | "dependencies": { 33 | "vue": "^3.3.11" 34 | }, 35 | "devDependencies": { 36 | "@rushstack/eslint-patch": "^1.3.3", 37 | "@tsconfig/node18": "^18.2.2", 38 | "@types/node": "^18.19.3", 39 | "@vitejs/plugin-vue": "^4.5.2", 40 | "@vue/eslint-config-prettier": "^8.0.0", 41 | "@vue/eslint-config-typescript": "^12.0.0", 42 | "@vue/tsconfig": "^0.5.0", 43 | "eslint": "^8.49.0", 44 | "eslint-plugin-vue": "^9.17.0", 45 | "gh-pages": "^6.1.1", 46 | "npm-run-all2": "^6.1.1", 47 | "prettier": "^3.0.3", 48 | "typescript": "~5.3.0", 49 | "vite": "^5.0.10", 50 | "vue-tsc": "^1.8.25" 51 | }, 52 | "repository": { 53 | "type": "git", 54 | "url": "git+https://github.com/huynamboz/vue-drag-scroller.git" 55 | }, 56 | "homepage": "https://huynamboz.github.io/vue-drag-scroller/", 57 | "keywords": [ 58 | "vue3", 59 | "vue3-directive", 60 | "drag scroll", 61 | "drag to scroll" 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huynamboz/vue-drag-scroller/32da26345eb7461078774e958591bdea3e35b051/public/favicon.ico -------------------------------------------------------------------------------- /server/assets/index-BaTH9yxT.js: -------------------------------------------------------------------------------- 1 | (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function s(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function n(o){if(o.ep)return;o.ep=!0;const r=s(o);fetch(o.href,r)}})();/** 2 | * @vue/shared v3.4.23 3 | * (c) 2018-present Yuxi (Evan) You and Vue contributors 4 | * @license MIT 5 | **//*! #__NO_SIDE_EFFECTS__ */function ys(e,t){const s=new Set(e.split(","));return t?n=>s.has(n.toLowerCase()):n=>s.has(n)}const $={},Ge=[],le=()=>{},bo=()=>!1,jt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Es=e=>e.startsWith("onUpdate:"),Y=Object.assign,ws=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},xo=Object.prototype.hasOwnProperty,R=(e,t)=>xo.call(e,t),A=Array.isArray,ot=e=>Ht(e)==="[object Map]",yo=e=>Ht(e)==="[object Set]",P=e=>typeof e=="function",X=e=>typeof e=="string",pt=e=>typeof e=="symbol",z=e=>e!==null&&typeof e=="object",Cn=e=>(z(e)||P(e))&&P(e.then)&&P(e.catch),Eo=Object.prototype.toString,Ht=e=>Eo.call(e),wo=e=>Ht(e).slice(8,-1),So=e=>Ht(e)==="[object Object]",Ss=e=>X(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,rt=ys(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$t=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},Oo=/-(\w)/g,me=$t(e=>e.replace(Oo,(t,s)=>s?s.toUpperCase():"")),Co=/\B([A-Z])/g,Je=$t(e=>e.replace(Co,"-$1").toLowerCase()),Vt=$t(e=>e.charAt(0).toUpperCase()+e.slice(1)),kt=$t(e=>e?`on${Vt(e)}`:""),Be=(e,t)=>!Object.is(e,t),es=(e,t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:s})},To=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Gs;const In=()=>Gs||(Gs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Os(e){if(A(e)){const t={};for(let s=0;s{if(s){const n=s.split(Po);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Cs(e){let t="";if(X(e))t=e;else if(A(e))for(let s=0;s=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),Re()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Ie,s=Ue;try{return Ie=!0,Ue=this,this._runnings++,Ys(this),this.fn()}finally{Xs(this),this._runnings--,Ue=s,Ie=t}}stop(){var t;this.active&&(Ys(this),Xs(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function Ho(e){return e.value}function Ys(e){e._trackId++,e._depsLength=0}function Xs(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const s=new Map;return s.cleanup=e,s.computed=t,s},us=new WeakMap,De=Symbol(""),as=Symbol("");function se(e,t,s){if(Ie&&Ue){let n=us.get(e);n||us.set(e,n=new Map);let o=n.get(s);o||n.set(s,o=Ln(()=>n.delete(s))),Rn(Ue,o)}}function Ee(e,t,s,n,o,r){const i=us.get(e);if(!i)return;let c=[];if(t==="clear")c=[...i.values()];else if(s==="length"&&A(e)){const u=Number(n);i.forEach((d,h)=>{(h==="length"||!pt(h)&&h>=u)&&c.push(d)})}else switch(s!==void 0&&c.push(i.get(s)),t){case"add":A(e)?Ss(s)&&c.push(i.get("length")):(c.push(i.get(De)),ot(e)&&c.push(i.get(as)));break;case"delete":A(e)||(c.push(i.get(De)),ot(e)&&c.push(i.get(as)));break;case"set":ot(e)&&c.push(i.get(De));break}Is();for(const u of c)u&&Fn(u,4);Ps()}const $o=ys("__proto__,__v_isRef,__isVue"),Nn=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(pt)),Js=Vo();function Vo(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...s){const n=L(this);for(let r=0,i=this.length;r{e[t]=function(...s){Me(),Is();const n=L(this)[t].apply(this,s);return Ps(),Re(),n}}),e}function Uo(e){pt(e)||(e=String(e));const t=L(this);return se(t,"has",e),t.hasOwnProperty(e)}class jn{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){const o=this._isReadonly,r=this._isShallow;if(s==="__v_isReactive")return!o;if(s==="__v_isReadonly")return o;if(s==="__v_isShallow")return r;if(s==="__v_raw")return n===(o?r?ko:Un:r?Vn:$n).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const i=A(t);if(!o){if(i&&R(Js,s))return Reflect.get(Js,s,n);if(s==="hasOwnProperty")return Uo}const c=Reflect.get(t,s,n);return(pt(s)?Nn.has(s):$o(s))||(o||se(t,"get",s),r)?c:oe(c)?i&&Ss(s)?c:c.value:z(c)?o?Dn(c):Rs(c):c}}class Hn extends jn{constructor(t=!1){super(!1,t)}set(t,s,n,o){let r=t[s];if(!this._isShallow){const u=Rt(r);if(!ds(n)&&!Rt(n)&&(r=L(r),n=L(n)),!A(t)&&oe(r)&&!oe(n))return u?!1:(r.value=n,!0)}const i=A(t)&&Ss(s)?Number(s)e,Ut=e=>Reflect.getPrototypeOf(e);function yt(e,t,s=!1,n=!1){e=e.__v_raw;const o=L(e),r=L(t);s||(Be(t,r)&&se(o,"get",t),se(o,"get",r));const{has:i}=Ut(o),c=n?As:s?Ns:Ls;if(i.call(o,t))return c(e.get(t));if(i.call(o,r))return c(e.get(r));e!==o&&e.get(t)}function Et(e,t=!1){const s=this.__v_raw,n=L(s),o=L(e);return t||(Be(e,o)&&se(n,"has",e),se(n,"has",o)),e===o?s.has(e):s.has(e)||s.has(o)}function wt(e,t=!1){return e=e.__v_raw,!t&&se(L(e),"iterate",De),Reflect.get(e,"size",e)}function Zs(e){e=L(e);const t=L(this);return Ut(t).has.call(t,e)||(t.add(e),Ee(t,"add",e,e)),this}function Qs(e,t){t=L(t);const s=L(this),{has:n,get:o}=Ut(s);let r=n.call(s,e);r||(e=L(e),r=n.call(s,e));const i=o.call(s,e);return s.set(e,t),r?Be(t,i)&&Ee(s,"set",e,t):Ee(s,"add",e,t),this}function ks(e){const t=L(this),{has:s,get:n}=Ut(t);let o=s.call(t,e);o||(e=L(e),o=s.call(t,e)),n&&n.call(t,e);const r=t.delete(e);return o&&Ee(t,"delete",e,void 0),r}function en(){const e=L(this),t=e.size!==0,s=e.clear();return t&&Ee(e,"clear",void 0,void 0),s}function St(e,t){return function(n,o){const r=this,i=r.__v_raw,c=L(i),u=t?As:e?Ns:Ls;return!e&&se(c,"iterate",De),i.forEach((d,h)=>n.call(o,u(d),u(h),r))}}function Ot(e,t,s){return function(...n){const o=this.__v_raw,r=L(o),i=ot(r),c=e==="entries"||e===Symbol.iterator&&i,u=e==="keys"&&i,d=o[e](...n),h=s?As:t?Ns:Ls;return!t&&se(r,"iterate",u?as:De),{next(){const{value:x,done:w}=d.next();return w?{value:x,done:w}:{value:c?[h(x[0]),h(x[1])]:h(x),done:w}},[Symbol.iterator](){return this}}}}function Se(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function zo(){const e={get(r){return yt(this,r)},get size(){return wt(this)},has:Et,add:Zs,set:Qs,delete:ks,clear:en,forEach:St(!1,!1)},t={get(r){return yt(this,r,!1,!0)},get size(){return wt(this)},has:Et,add:Zs,set:Qs,delete:ks,clear:en,forEach:St(!1,!0)},s={get(r){return yt(this,r,!0)},get size(){return wt(this,!0)},has(r){return Et.call(this,r,!0)},add:Se("add"),set:Se("set"),delete:Se("delete"),clear:Se("clear"),forEach:St(!0,!1)},n={get(r){return yt(this,r,!0,!0)},get size(){return wt(this,!0)},has(r){return Et.call(this,r,!0)},add:Se("add"),set:Se("set"),delete:Se("delete"),clear:Se("clear"),forEach:St(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{e[r]=Ot(r,!1,!1),s[r]=Ot(r,!0,!1),t[r]=Ot(r,!1,!0),n[r]=Ot(r,!0,!0)}),[e,s,t,n]}const[qo,Go,Yo,Xo]=zo();function Ms(e,t){const s=t?e?Xo:Yo:e?Go:qo;return(n,o,r)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?n:Reflect.get(R(s,o)&&o in n?s:n,o,r)}const Jo={get:Ms(!1,!1)},Zo={get:Ms(!1,!0)},Qo={get:Ms(!0,!1)},$n=new WeakMap,Vn=new WeakMap,Un=new WeakMap,ko=new WeakMap;function er(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function tr(e){return e.__v_skip||!Object.isExtensible(e)?0:er(wo(e))}function Rs(e){return Rt(e)?e:Fs(e,!1,Bo,Jo,$n)}function sr(e){return Fs(e,!1,Wo,Zo,Vn)}function Dn(e){return Fs(e,!0,Ko,Qo,Un)}function Fs(e,t,s,n,o){if(!z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=o.get(e);if(r)return r;const i=tr(e);if(i===0)return e;const c=new Proxy(e,i===2?n:s);return o.set(e,c),c}function it(e){return Rt(e)?it(e.__v_raw):!!(e&&e.__v_isReactive)}function Rt(e){return!!(e&&e.__v_isReadonly)}function ds(e){return!!(e&&e.__v_isShallow)}function Bn(e){return e?!!e.__v_raw:!1}function L(e){const t=e&&e.__v_raw;return t?L(t):e}function nr(e){return Object.isExtensible(e)&&Tn(e,"__v_skip",!0),e}const Ls=e=>z(e)?Rs(e):e,Ns=e=>z(e)?Dn(e):e;class Kn{constructor(t,s,n,o){this.getter=t,this._setter=s,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Ts(()=>t(this._value),()=>ts(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const t=L(this);return(!t._cacheable||t.effect.dirty)&&Be(t._value,t._value=t.effect.run())&&ts(t,4),rr(t),t.effect._dirtyLevel>=2&&ts(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function or(e,t,s=!1){let n,o;const r=P(e);return r?(n=e,o=le):(n=e.get,o=e.set),new Kn(n,o,r||!o,s)}function rr(e){var t;Ie&&Ue&&(e=L(e),Rn(Ue,(t=e.dep)!=null?t:e.dep=Ln(()=>e.dep=void 0,e instanceof Kn?e:void 0)))}function ts(e,t=4,s){e=L(e);const n=e.dep;n&&Fn(n,t)}function oe(e){return!!(e&&e.__v_isRef===!0)}function ir(e){return oe(e)?e.value:e}const lr={get:(e,t,s)=>ir(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const o=e[t];return oe(o)&&!oe(s)?(o.value=s,!0):Reflect.set(e,t,s,n)}};function Wn(e){return it(e)?e:new Proxy(e,lr)}/** 10 | * @vue/runtime-core v3.4.23 11 | * (c) 2018-present Yuxi (Evan) You and Vue contributors 12 | * @license MIT 13 | **/function Pe(e,t,s,n){try{return n?e(...n):e()}catch(o){Dt(o,t,s)}}function ae(e,t,s,n){if(P(e)){const o=Pe(e,t,s,n);return o&&Cn(o)&&o.catch(r=>{Dt(r,t,s)}),o}if(A(e)){const o=[];for(let r=0;r>>1,o=J[n],r=at(o);r_e&&J.splice(t,1)}function dr(e){A(e)?Ye.push(...e):(!Oe||!Oe.includes(e,e.allowRecurse?$e+1:$e))&&Ye.push(e),qn()}function tn(e,t,s=ut?_e+1:0){for(;sat(s)-at(n));if(Ye.length=0,Oe){Oe.push(...t);return}for(Oe=t,$e=0;$ee.id==null?1/0:e.id,hr=(e,t)=>{const s=at(e)-at(t);if(s===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return s};function Yn(e){hs=!1,ut=!0,J.sort(hr);try{for(_e=0;_eX(T)?T.trim():T)),x&&(o=s.map(To))}let c,u=n[c=kt(t)]||n[c=kt(me(t))];!u&&r&&(u=n[c=kt(Je(t))]),u&&ae(u,e,6,o);const d=n[c+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,ae(d,e,6,o)}}function Xn(e,t,s=!1){const n=t.emitsCache,o=n.get(e);if(o!==void 0)return o;const r=e.emits;let i={},c=!1;if(!P(e)){const u=d=>{const h=Xn(d,t,!0);h&&(c=!0,Y(i,h))};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!r&&!c?(z(e)&&n.set(e,null),null):(A(r)?r.forEach(u=>i[u]=null):Y(i,r),z(e)&&n.set(e,i),i)}function Bt(e,t){return!e||!jt(t)?!1:(t=t.slice(2).replace(/Once$/,""),R(e,t[0].toLowerCase()+t.slice(1))||R(e,Je(t))||R(e,t))}let te=null,Kt=null;function Ft(e){const t=te;return te=e,Kt=e&&e.type.__scopeId||null,t}function gr(e){Kt=e}function vr(){Kt=null}function _r(e,t=te,s){if(!t||e._n)return e;const n=(...o)=>{n._d&&hn(-1);const r=Ft(t);let i;try{i=e(...o)}finally{Ft(r),n._d&&hn(1)}return i};return n._n=!0,n._c=!0,n._d=!0,n}function ss(e){const{type:t,vnode:s,proxy:n,withProxy:o,props:r,propsOptions:[i],slots:c,attrs:u,emit:d,render:h,renderCache:x,data:w,setupState:T,ctx:V,inheritAttrs:S}=e;let D,K;const re=Ft(e);try{if(s.shapeFlag&4){const q=o||n,ie=q;D=ve(h.call(ie,q,x,r,T,w,V)),K=u}else{const q=t;D=ve(q.length>1?q(r,{attrs:u,slots:c,emit:d}):q(r,null)),K=t.props?u:mr(u)}}catch(q){ft.length=0,Dt(q,e,1),D=Ae(dt)}let j=D;if(K&&S!==!1){const q=Object.keys(K),{shapeFlag:ie}=j;q.length&&ie&7&&(i&&q.some(Es)&&(K=br(K,i)),j=Xe(j,K))}return s.dirs&&(j=Xe(j),j.dirs=j.dirs?j.dirs.concat(s.dirs):s.dirs),s.transition&&(j.transition=s.transition),D=j,Ft(re),D}const mr=e=>{let t;for(const s in e)(s==="class"||s==="style"||jt(s))&&((t||(t={}))[s]=e[s]);return t},br=(e,t)=>{const s={};for(const n in e)(!Es(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function xr(e,t,s){const{props:n,children:o,component:r}=e,{props:i,children:c,patchFlag:u}=t,d=r.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&u>=0){if(u&1024)return!0;if(u&16)return n?sn(n,i,d):!!i;if(u&8){const h=t.dynamicProps;for(let x=0;xe.__isSuspense;function Ir(e,t){t&&t.pendingBranch?A(e)?t.effects.push(...e):t.effects.push(e):dr(e)}const Pr=Symbol.for("v-scx"),Ar=()=>It(Pr),Ct={};function ns(e,t,s){return Jn(e,t,s)}function Jn(e,t,{immediate:s,deep:n,flush:o,once:r,onTrack:i,onTrigger:c}=$){if(t&&r){const F=t;t=(...be)=>{F(...be),ie()}}const u=Z,d=F=>n===!0?F:Ve(F,n===!1?1:void 0);let h,x=!1,w=!1;if(oe(e)?(h=()=>e.value,x=ds(e)):it(e)?(h=()=>d(e),x=!0):A(e)?(w=!0,x=e.some(F=>it(F)||ds(F)),h=()=>e.map(F=>{if(oe(F))return F.value;if(it(F))return d(F);if(P(F))return Pe(F,u,2)})):P(e)?t?h=()=>Pe(e,u,2):h=()=>(T&&T(),ae(e,u,3,[V])):h=le,t&&n){const F=h;h=()=>Ve(F())}let T,V=F=>{T=j.onStop=()=>{Pe(F,u,4),T=j.onStop=void 0}},S;if(qt)if(V=le,t?s&&ae(t,u,3,[h(),w?[]:void 0,V]):h(),o==="sync"){const F=Ar();S=F.__watcherHandles||(F.__watcherHandles=[])}else return le;let D=w?new Array(e.length).fill(Ct):Ct;const K=()=>{if(!(!j.active||!j.dirty))if(t){const F=j.run();(n||x||(w?F.some((be,de)=>Be(be,D[de])):Be(F,D)))&&(T&&T(),ae(t,u,3,[F,D===Ct?void 0:w&&D[0]===Ct?[]:D,V]),D=F)}else j.run()};K.allowRecurse=!!t;let re;o==="sync"?re=K:o==="post"?re=()=>ee(K,u&&u.suspense):(K.pre=!0,u&&(K.id=u.uid),re=()=>Hs(K));const j=new Ts(h,le,re),q=jo(),ie=()=>{j.stop(),q&&ws(q.effects,j)};return t?s?K():D=j.run():o==="post"?ee(j.run.bind(j),u&&u.suspense):j.run(),S&&S.push(ie),ie}function Mr(e,t,s){const n=this.proxy,o=X(e)?e.includes(".")?Zn(n,e):()=>n[e]:e.bind(n,n);let r;P(t)?r=t:(r=t.handler,s=t);const i=vt(this),c=Jn(o,r.bind(n),s);return i(),c}function Zn(e,t){const s=t.split(".");return()=>{let n=e;for(let o=0;o0){if(s>=t)return e;s++}if(n=n||new Set,n.has(e))return e;if(n.add(e),oe(e))Ve(e.value,t,s,n);else if(A(e))for(let o=0;o{Ve(o,t,s,n)});else if(So(e))for(const o in e)Ve(e[o],t,s,n);return e}function tt(e,t){if(te===null)return e;const s=Gt(te)||te.proxy,n=e.dirs||(e.dirs=[]);for(let o=0;o!!e.type.__asyncLoader,Qn=e=>e.type.__isKeepAlive;function Fr(e,t){kn(e,"a",t)}function Lr(e,t){kn(e,"da",t)}function kn(e,t,s=Z){const n=e.__wdc||(e.__wdc=()=>{let o=s;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Wt(t,n,s),s){let o=s.parent;for(;o&&o.parent;)Qn(o.parent.vnode)&&Nr(n,t,s,o),o=o.parent}}function Nr(e,t,s,n){const o=Wt(t,e,n,!0);eo(()=>{ws(n[t],o)},s)}function Wt(e,t,s=Z,n=!1){if(s){const o=s[e]||(s[e]=[]),r=t.__weh||(t.__weh=(...i)=>{if(s.isUnmounted)return;Me();const c=vt(s),u=ae(t,s,e,i);return c(),Re(),u});return n?o.unshift(r):o.push(r),r}}const we=e=>(t,s=Z)=>(!qt||e==="sp")&&Wt(e,(...n)=>t(...n),s),jr=we("bm"),Hr=we("m"),$r=we("bu"),Vr=we("u"),Ur=we("bum"),eo=we("um"),Dr=we("sp"),Br=we("rtg"),Kr=we("rtc");function Wr(e,t=Z){Wt("ec",e,t)}const ps=e=>e?po(e)?Gt(e)||e.proxy:ps(e.parent):null,lt=Y(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ps(e.parent),$root:e=>ps(e.root),$emit:e=>e.emit,$options:e=>$s(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Hs(e.update)}),$nextTick:e=>e.n||(e.n=fr.bind(e.proxy)),$watch:e=>Mr.bind(e)}),os=(e,t)=>e!==$&&!e.__isScriptSetup&&R(e,t),zr={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:o,props:r,accessCache:i,type:c,appContext:u}=e;let d;if(t[0]!=="$"){const T=i[t];if(T!==void 0)switch(T){case 1:return n[t];case 2:return o[t];case 4:return s[t];case 3:return r[t]}else{if(os(n,t))return i[t]=1,n[t];if(o!==$&&R(o,t))return i[t]=2,o[t];if((d=e.propsOptions[0])&&R(d,t))return i[t]=3,r[t];if(s!==$&&R(s,t))return i[t]=4,s[t];gs&&(i[t]=0)}}const h=lt[t];let x,w;if(h)return t==="$attrs"&&se(e.attrs,"get",""),h(e);if((x=c.__cssModules)&&(x=x[t]))return x;if(s!==$&&R(s,t))return i[t]=4,s[t];if(w=u.config.globalProperties,R(w,t))return w[t]},set({_:e},t,s){const{data:n,setupState:o,ctx:r}=e;return os(o,t)?(o[t]=s,!0):n!==$&&R(n,t)?(n[t]=s,!0):R(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:o,propsOptions:r}},i){let c;return!!s[i]||e!==$&&R(e,i)||os(t,i)||(c=r[0])&&R(c,i)||R(n,i)||R(lt,i)||R(o.config.globalProperties,i)},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:R(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function on(e){return A(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let gs=!0;function qr(e){const t=$s(e),s=e.proxy,n=e.ctx;gs=!1,t.beforeCreate&&rn(t.beforeCreate,e,"bc");const{data:o,computed:r,methods:i,watch:c,provide:u,inject:d,created:h,beforeMount:x,mounted:w,beforeUpdate:T,updated:V,activated:S,deactivated:D,beforeDestroy:K,beforeUnmount:re,destroyed:j,unmounted:q,render:ie,renderTracked:F,renderTriggered:be,errorCaptured:de,serverPrefetch:Yt,expose:Fe,inheritAttrs:ke,components:_t,directives:mt,filters:Xt}=t;if(d&&Gr(d,n,null),i)for(const B in i){const H=i[B];P(H)&&(n[B]=H.bind(s))}if(o){const B=o.call(s,s);z(B)&&(e.data=Rs(B))}if(gs=!0,r)for(const B in r){const H=r[B],Le=P(H)?H.bind(s,s):P(H.get)?H.get.bind(s,s):le,bt=!P(H)&&P(H.set)?H.set.bind(s):le,Ne=Oi({get:Le,set:bt});Object.defineProperty(n,B,{enumerable:!0,configurable:!0,get:()=>Ne.value,set:he=>Ne.value=he})}if(c)for(const B in c)to(c[B],n,s,B);if(u){const B=P(u)?u.call(s):u;Reflect.ownKeys(B).forEach(H=>{kr(H,B[H])})}h&&rn(h,e,"c");function Q(B,H){A(H)?H.forEach(Le=>B(Le.bind(s))):H&&B(H.bind(s))}if(Q(jr,x),Q(Hr,w),Q($r,T),Q(Vr,V),Q(Fr,S),Q(Lr,D),Q(Wr,de),Q(Kr,F),Q(Br,be),Q(Ur,re),Q(eo,q),Q(Dr,Yt),A(Fe))if(Fe.length){const B=e.exposed||(e.exposed={});Fe.forEach(H=>{Object.defineProperty(B,H,{get:()=>s[H],set:Le=>s[H]=Le})})}else e.exposed||(e.exposed={});ie&&e.render===le&&(e.render=ie),ke!=null&&(e.inheritAttrs=ke),_t&&(e.components=_t),mt&&(e.directives=mt)}function Gr(e,t,s=le){A(e)&&(e=vs(e));for(const n in e){const o=e[n];let r;z(o)?"default"in o?r=It(o.from||n,o.default,!0):r=It(o.from||n):r=It(o),oe(r)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>r.value,set:i=>r.value=i}):t[n]=r}}function rn(e,t,s){ae(A(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function to(e,t,s,n){const o=n.includes(".")?Zn(s,n):()=>s[n];if(X(e)){const r=t[e];P(r)&&ns(o,r)}else if(P(e))ns(o,e.bind(s));else if(z(e))if(A(e))e.forEach(r=>to(r,t,s,n));else{const r=P(e.handler)?e.handler.bind(s):t[e.handler];P(r)&&ns(o,r,e)}}function $s(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:o,optionsCache:r,config:{optionMergeStrategies:i}}=e.appContext,c=r.get(t);let u;return c?u=c:!o.length&&!s&&!n?u=t:(u={},o.length&&o.forEach(d=>Lt(u,d,i,!0)),Lt(u,t,i)),z(t)&&r.set(t,u),u}function Lt(e,t,s,n=!1){const{mixins:o,extends:r}=t;r&&Lt(e,r,s,!0),o&&o.forEach(i=>Lt(e,i,s,!0));for(const i in t)if(!(n&&i==="expose")){const c=Yr[i]||s&&s[i];e[i]=c?c(e[i],t[i]):t[i]}return e}const Yr={data:ln,props:cn,emits:cn,methods:nt,computed:nt,beforeCreate:k,created:k,beforeMount:k,mounted:k,beforeUpdate:k,updated:k,beforeDestroy:k,beforeUnmount:k,destroyed:k,unmounted:k,activated:k,deactivated:k,errorCaptured:k,serverPrefetch:k,components:nt,directives:nt,watch:Jr,provide:ln,inject:Xr};function ln(e,t){return t?e?function(){return Y(P(e)?e.call(this,this):e,P(t)?t.call(this,this):t)}:t:e}function Xr(e,t){return nt(vs(e),vs(t))}function vs(e){if(A(e)){const t={};for(let s=0;s1)return s&&P(t)?t.call(n&&n.proxy):t}}const no=Object.create(null),_s=()=>Object.create(no),oo=e=>Object.getPrototypeOf(e)===no;function ei(e,t,s,n=!1){const o={},r=_s();e.propsDefaults=Object.create(null),ro(e,t,o,r);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);s?e.props=n?o:sr(o):e.type.props?e.props=o:e.props=r,e.attrs=r}function ti(e,t,s,n){const{props:o,attrs:r,vnode:{patchFlag:i}}=e,c=L(o),[u]=e.propsOptions;let d=!1;if((n||i>0)&&!(i&16)){if(i&8){const h=e.vnode.dynamicProps;for(let x=0;x{u=!0;const[w,T]=io(x,t,!0);Y(i,w),T&&c.push(...T)};!s&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!r&&!u)return z(e)&&n.set(e,Ge),Ge;if(A(r))for(let h=0;h-1,T[1]=S<0||V-1||R(T,"default"))&&c.push(x)}}}const d=[i,c];return z(e)&&n.set(e,d),d}function fn(e){return e[0]!=="$"&&!rt(e)}function un(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function an(e,t){return un(e)===un(t)}function dn(e,t){return A(t)?t.findIndex(s=>an(s,e)):P(t)&&an(t,e)?0:-1}const lo=e=>e[0]==="_"||e==="$stable",Vs=e=>A(e)?e.map(ve):[ve(e)],si=(e,t,s)=>{if(t._n)return t;const n=_r((...o)=>Vs(t(...o)),s);return n._c=!1,n},co=(e,t,s)=>{const n=e._ctx;for(const o in e){if(lo(o))continue;const r=e[o];if(P(r))t[o]=si(o,r,n);else if(r!=null){const i=Vs(r);t[o]=()=>i}}},fo=(e,t)=>{const s=Vs(t);e.slots.default=()=>s},ni=(e,t)=>{if(e.vnode.shapeFlag&32){const s=t._;s?(e.slots=L(t),Tn(e.slots,"_",s)):co(t,e.slots=_s())}else e.slots=_s(),t&&fo(e,t)},oi=(e,t,s)=>{const{vnode:n,slots:o}=e;let r=!0,i=$;if(n.shapeFlag&32){const c=t._;c?s&&c===1?r=!1:(Y(o,t),!s&&c===1&&delete o._):(r=!t.$stable,co(t,o)),i=t}else t&&(fo(e,t),i={default:1});if(r)for(const c in o)!lo(c)&&i[c]==null&&delete o[c]};function bs(e,t,s,n,o=!1){if(A(e)){e.forEach((w,T)=>bs(w,t&&(A(t)?t[T]:t),s,n,o));return}if(Tt(n)&&!o)return;const r=n.shapeFlag&4?Gt(n.component)||n.component.proxy:n.el,i=o?null:r,{i:c,r:u}=e,d=t&&t.r,h=c.refs===$?c.refs={}:c.refs,x=c.setupState;if(d!=null&&d!==u&&(X(d)?(h[d]=null,R(x,d)&&(x[d]=null)):oe(d)&&(d.value=null)),P(u))Pe(u,c,12,[i,h]);else{const w=X(u),T=oe(u);if(w||T){const V=()=>{if(e.f){const S=w?R(x,u)?x[u]:h[u]:u.value;o?A(S)&&ws(S,r):A(S)?S.includes(r)||S.push(r):w?(h[u]=[r],R(x,u)&&(x[u]=h[u])):(u.value=[r],e.k&&(h[e.k]=u.value))}else w?(h[u]=i,R(x,u)&&(x[u]=i)):T&&(u.value=i,e.k&&(h[e.k]=i))};i?(V.id=-1,ee(V,s)):V()}}}const ee=Ir;function ri(e){return ii(e)}function ii(e,t){const s=In();s.__VUE__=!0;const{insert:n,remove:o,patchProp:r,createElement:i,createText:c,createComment:u,setText:d,setElementText:h,parentNode:x,nextSibling:w,setScopeId:T=le,insertStaticContent:V}=e,S=(l,f,a,p=null,g=null,m=null,y=void 0,_=null,b=!!f.dynamicChildren)=>{if(l===f)return;l&&!st(l,f)&&(p=xt(l),he(l,g,m,!0),l=null),f.patchFlag===-2&&(b=!1,f.dynamicChildren=null);const{type:v,ref:E,shapeFlag:C}=f;switch(v){case zt:D(l,f,a,p);break;case dt:K(l,f,a,p);break;case Pt:l==null&&re(f,a,p,y);break;case ye:_t(l,f,a,p,g,m,y,_,b);break;default:C&1?ie(l,f,a,p,g,m,y,_,b):C&6?mt(l,f,a,p,g,m,y,_,b):(C&64||C&128)&&v.process(l,f,a,p,g,m,y,_,b,Ke)}E!=null&&g&&bs(E,l&&l.ref,m,f||l,!f)},D=(l,f,a,p)=>{if(l==null)n(f.el=c(f.children),a,p);else{const g=f.el=l.el;f.children!==l.children&&d(g,f.children)}},K=(l,f,a,p)=>{l==null?n(f.el=u(f.children||""),a,p):f.el=l.el},re=(l,f,a,p)=>{[l.el,l.anchor]=V(l.children,f,a,p,l.el,l.anchor)},j=({el:l,anchor:f},a,p)=>{let g;for(;l&&l!==f;)g=w(l),n(l,a,p),l=g;n(f,a,p)},q=({el:l,anchor:f})=>{let a;for(;l&&l!==f;)a=w(l),o(l),l=a;o(f)},ie=(l,f,a,p,g,m,y,_,b)=>{f.type==="svg"?y="svg":f.type==="math"&&(y="mathml"),l==null?F(f,a,p,g,m,y,_,b):Yt(l,f,g,m,y,_,b)},F=(l,f,a,p,g,m,y,_)=>{let b,v;const{props:E,shapeFlag:C,transition:O,dirs:I}=l;if(b=l.el=i(l.type,m,E&&E.is,E),C&8?h(b,l.children):C&16&&de(l.children,b,null,p,g,rs(l,m),y,_),I&&je(l,null,p,"created"),be(b,l,l.scopeId,y,p),E){for(const N in E)N!=="value"&&!rt(N)&&r(b,N,null,E[N],m,l.children,p,g,xe);"value"in E&&r(b,"value",null,E.value,m),(v=E.onVnodeBeforeMount)&&ge(v,p,l)}I&&je(l,null,p,"beforeMount");const M=li(g,O);M&&O.beforeEnter(b),n(b,f,a),((v=E&&E.onVnodeMounted)||M||I)&&ee(()=>{v&&ge(v,p,l),M&&O.enter(b),I&&je(l,null,p,"mounted")},g)},be=(l,f,a,p,g)=>{if(a&&T(l,a),p)for(let m=0;m{for(let v=b;v{const _=f.el=l.el;let{patchFlag:b,dynamicChildren:v,dirs:E}=f;b|=l.patchFlag&16;const C=l.props||$,O=f.props||$;let I;if(a&&He(a,!1),(I=O.onVnodeBeforeUpdate)&&ge(I,a,f,l),E&&je(f,l,a,"beforeUpdate"),a&&He(a,!0),v?Fe(l.dynamicChildren,v,_,a,p,rs(f,g),m):y||H(l,f,_,null,a,p,rs(f,g),m,!1),b>0){if(b&16)ke(_,f,C,O,a,p,g);else if(b&2&&C.class!==O.class&&r(_,"class",null,O.class,g),b&4&&r(_,"style",C.style,O.style,g),b&8){const M=f.dynamicProps;for(let N=0;N{I&&ge(I,a,f,l),E&&je(f,l,a,"updated")},p)},Fe=(l,f,a,p,g,m,y)=>{for(let _=0;_{if(a!==p){if(a!==$)for(const _ in a)!rt(_)&&!(_ in p)&&r(l,_,a[_],null,y,f.children,g,m,xe);for(const _ in p){if(rt(_))continue;const b=p[_],v=a[_];b!==v&&_!=="value"&&r(l,_,v,b,y,f.children,g,m,xe)}"value"in p&&r(l,"value",a.value,p.value,y)}},_t=(l,f,a,p,g,m,y,_,b)=>{const v=f.el=l?l.el:c(""),E=f.anchor=l?l.anchor:c("");let{patchFlag:C,dynamicChildren:O,slotScopeIds:I}=f;I&&(_=_?_.concat(I):I),l==null?(n(v,a,p),n(E,a,p),de(f.children||[],a,E,g,m,y,_,b)):C>0&&C&64&&O&&l.dynamicChildren?(Fe(l.dynamicChildren,O,a,g,m,y,_),(f.key!=null||g&&f===g.subTree)&&uo(l,f,!0)):H(l,f,a,E,g,m,y,_,b)},mt=(l,f,a,p,g,m,y,_,b)=>{f.slotScopeIds=_,l==null?f.shapeFlag&512?g.ctx.activate(f,a,p,y,b):Xt(f,a,p,g,m,y,b):Ds(l,f,b)},Xt=(l,f,a,p,g,m,y)=>{const _=l.component=mi(l,p,g);if(Qn(l)&&(_.ctx.renderer=Ke),bi(_),_.asyncDep){if(g&&g.registerDep(_,Q),!l.el){const b=_.subTree=Ae(dt);K(null,b,f,a)}}else Q(_,l,f,a,g,m,y)},Ds=(l,f,a)=>{const p=f.component=l.component;if(xr(l,f,a))if(p.asyncDep&&!p.asyncResolved){B(p,f,a);return}else p.next=f,ar(p.update),p.effect.dirty=!0,p.update();else f.el=l.el,p.vnode=f},Q=(l,f,a,p,g,m,y)=>{const _=()=>{if(l.isMounted){let{next:E,bu:C,u:O,parent:I,vnode:M}=l;{const We=ao(l);if(We){E&&(E.el=M.el,B(l,E,y)),We.asyncDep.then(()=>{l.isUnmounted||_()});return}}let N=E,U;He(l,!1),E?(E.el=M.el,B(l,E,y)):E=M,C&&es(C),(U=E.props&&E.props.onVnodeBeforeUpdate)&&ge(U,I,E,M),He(l,!0);const G=ss(l),ce=l.subTree;l.subTree=G,S(ce,G,x(ce.el),xt(ce),l,g,m),E.el=G.el,N===null&&yr(l,G.el),O&&ee(O,g),(U=E.props&&E.props.onVnodeUpdated)&&ee(()=>ge(U,I,E,M),g)}else{let E;const{el:C,props:O}=f,{bm:I,m:M,parent:N}=l,U=Tt(f);if(He(l,!1),I&&es(I),!U&&(E=O&&O.onVnodeBeforeMount)&&ge(E,N,f),He(l,!0),C&&Qt){const G=()=>{l.subTree=ss(l),Qt(C,l.subTree,l,g,null)};U?f.type.__asyncLoader().then(()=>!l.isUnmounted&&G()):G()}else{const G=l.subTree=ss(l);S(null,G,a,p,l,g,m),f.el=G.el}if(M&&ee(M,g),!U&&(E=O&&O.onVnodeMounted)){const G=f;ee(()=>ge(E,N,G),g)}(f.shapeFlag&256||N&&Tt(N.vnode)&&N.vnode.shapeFlag&256)&&l.a&&ee(l.a,g),l.isMounted=!0,f=a=p=null}},b=l.effect=new Ts(_,le,()=>Hs(v),l.scope),v=l.update=()=>{b.dirty&&b.run()};v.id=l.uid,He(l,!0),v()},B=(l,f,a)=>{f.component=l;const p=l.vnode.props;l.vnode=f,l.next=null,ti(l,f.props,p,a),oi(l,f.children,a),Me(),tn(l),Re()},H=(l,f,a,p,g,m,y,_,b=!1)=>{const v=l&&l.children,E=l?l.shapeFlag:0,C=f.children,{patchFlag:O,shapeFlag:I}=f;if(O>0){if(O&128){bt(v,C,a,p,g,m,y,_,b);return}else if(O&256){Le(v,C,a,p,g,m,y,_,b);return}}I&8?(E&16&&xe(v,g,m),C!==v&&h(a,C)):E&16?I&16?bt(v,C,a,p,g,m,y,_,b):xe(v,g,m,!0):(E&8&&h(a,""),I&16&&de(C,a,p,g,m,y,_,b))},Le=(l,f,a,p,g,m,y,_,b)=>{l=l||Ge,f=f||Ge;const v=l.length,E=f.length,C=Math.min(v,E);let O;for(O=0;OE?xe(l,g,m,!0,!1,C):de(f,a,p,g,m,y,_,b,C)},bt=(l,f,a,p,g,m,y,_,b)=>{let v=0;const E=f.length;let C=l.length-1,O=E-1;for(;v<=C&&v<=O;){const I=l[v],M=f[v]=b?Ce(f[v]):ve(f[v]);if(st(I,M))S(I,M,a,null,g,m,y,_,b);else break;v++}for(;v<=C&&v<=O;){const I=l[C],M=f[O]=b?Ce(f[O]):ve(f[O]);if(st(I,M))S(I,M,a,null,g,m,y,_,b);else break;C--,O--}if(v>C){if(v<=O){const I=O+1,M=IO)for(;v<=C;)he(l[v],g,m,!0),v++;else{const I=v,M=v,N=new Map;for(v=M;v<=O;v++){const ne=f[v]=b?Ce(f[v]):ve(f[v]);ne.key!=null&&N.set(ne.key,v)}let U,G=0;const ce=O-M+1;let We=!1,Ws=0;const et=new Array(ce);for(v=0;v=ce){he(ne,g,m,!0);continue}let pe;if(ne.key!=null)pe=N.get(ne.key);else for(U=M;U<=O;U++)if(et[U-M]===0&&st(ne,f[U])){pe=U;break}pe===void 0?he(ne,g,m,!0):(et[pe-M]=v+1,pe>=Ws?Ws=pe:We=!0,S(ne,f[pe],a,null,g,m,y,_,b),G++)}const zs=We?ci(et):Ge;for(U=zs.length-1,v=ce-1;v>=0;v--){const ne=M+v,pe=f[ne],qs=ne+1{const{el:m,type:y,transition:_,children:b,shapeFlag:v}=l;if(v&6){Ne(l.component.subTree,f,a,p);return}if(v&128){l.suspense.move(f,a,p);return}if(v&64){y.move(l,f,a,Ke);return}if(y===ye){n(m,f,a);for(let C=0;C_.enter(m),g);else{const{leave:C,delayLeave:O,afterLeave:I}=_,M=()=>n(m,f,a),N=()=>{C(m,()=>{M(),I&&I()})};O?O(m,M,N):N()}else n(m,f,a)},he=(l,f,a,p=!1,g=!1)=>{const{type:m,props:y,ref:_,children:b,dynamicChildren:v,shapeFlag:E,patchFlag:C,dirs:O}=l;if(_!=null&&bs(_,null,a,l,!0),E&256){f.ctx.deactivate(l);return}const I=E&1&&O,M=!Tt(l);let N;if(M&&(N=y&&y.onVnodeBeforeUnmount)&&ge(N,f,l),E&6)mo(l.component,a,p);else{if(E&128){l.suspense.unmount(a,p);return}I&&je(l,null,f,"beforeUnmount"),E&64?l.type.remove(l,f,a,g,Ke,p):v&&(m!==ye||C>0&&C&64)?xe(v,f,a,!1,!0):(m===ye&&C&384||!g&&E&16)&&xe(b,f,a),p&&Bs(l)}(M&&(N=y&&y.onVnodeUnmounted)||I)&&ee(()=>{N&&ge(N,f,l),I&&je(l,null,f,"unmounted")},a)},Bs=l=>{const{type:f,el:a,anchor:p,transition:g}=l;if(f===ye){_o(a,p);return}if(f===Pt){q(l);return}const m=()=>{o(a),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(l.shapeFlag&1&&g&&!g.persisted){const{leave:y,delayLeave:_}=g,b=()=>y(a,m);_?_(l.el,m,b):b()}else m()},_o=(l,f)=>{let a;for(;l!==f;)a=w(l),o(l),l=a;o(f)},mo=(l,f,a)=>{const{bum:p,scope:g,update:m,subTree:y,um:_}=l;p&&es(p),g.stop(),m&&(m.active=!1,he(y,l,f,a)),_&&ee(_,f),ee(()=>{l.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&l.asyncDep&&!l.asyncResolved&&l.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},xe=(l,f,a,p=!1,g=!1,m=0)=>{for(let y=m;yl.shapeFlag&6?xt(l.component.subTree):l.shapeFlag&128?l.suspense.next():w(l.anchor||l.el);let Jt=!1;const Ks=(l,f,a)=>{l==null?f._vnode&&he(f._vnode,null,null,!0):S(f._vnode||null,l,f,null,null,null,a),Jt||(Jt=!0,tn(),Gn(),Jt=!1),f._vnode=l},Ke={p:S,um:he,m:Ne,r:Bs,mt:Xt,mc:de,pc:H,pbc:Fe,n:xt,o:e};let Zt,Qt;return t&&([Zt,Qt]=t(Ke)),{render:Ks,hydrate:Zt,createApp:Qr(Ks,Zt)}}function rs({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function He({effect:e,update:t},s){e.allowRecurse=t.allowRecurse=s}function li(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function uo(e,t,s=!1){const n=e.children,o=t.children;if(A(n)&&A(o))for(let r=0;r>1,e[s[c]]0&&(t[n]=s[r-1]),s[r]=n)}}for(r=s.length,i=s[r-1];r-- >0;)s[r]=i,i=t[i];return s}function ao(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ao(t)}const fi=e=>e.__isTeleport,ye=Symbol.for("v-fgt"),zt=Symbol.for("v-txt"),dt=Symbol.for("v-cmt"),Pt=Symbol.for("v-stc"),ft=[];let ue=null;function ze(e=!1){ft.push(ue=e?null:[])}function ui(){ft.pop(),ue=ft[ft.length-1]||null}let ht=1;function hn(e){ht+=e}function ai(e){return e.dynamicChildren=ht>0?ue||Ge:null,ui(),ht>0&&ue&&ue.push(e),e}function qe(e,t,s,n,o,r){return ai(W(e,t,s,n,o,r,!0))}function di(e){return e?e.__v_isVNode===!0:!1}function st(e,t){return e.type===t.type&&e.key===t.key}const ho=({key:e})=>e??null,At=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?X(e)||oe(e)||P(e)?{i:te,r:e,k:t,f:!!s}:e:null);function W(e,t=null,s=null,n=0,o=null,r=e===ye?0:1,i=!1,c=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ho(t),ref:t&&At(t),scopeId:Kt,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:n,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:te};return c?(Us(u,s),r&128&&e.normalize(u)):s&&(u.shapeFlag|=X(s)?8:16),ht>0&&!i&&ue&&(u.patchFlag>0||r&6)&&u.patchFlag!==32&&ue.push(u),u}const Ae=hi;function hi(e,t=null,s=null,n=0,o=null,r=!1){if((!e||e===Sr)&&(e=dt),di(e)){const c=Xe(e,t,!0);return s&&Us(c,s),ht>0&&!r&&ue&&(c.shapeFlag&6?ue[ue.indexOf(e)]=c:ue.push(c)),c.patchFlag|=-2,c}if(Si(e)&&(e=e.__vccOpts),t){t=pi(t);let{class:c,style:u}=t;c&&!X(c)&&(t.class=Cs(c)),z(u)&&(Bn(u)&&!A(u)&&(u=Y({},u)),t.style=Os(u))}const i=X(e)?1:Tr(e)?128:fi(e)?64:z(e)?4:P(e)?2:0;return W(e,t,s,n,o,i,r,!0)}function pi(e){return e?Bn(e)||oo(e)?Y({},e):e:null}function Xe(e,t,s=!1){const{props:n,ref:o,patchFlag:r,children:i}=e,c=t?gi(n||{},t):n;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&ho(c),ref:t&&t.ref?s&&o?A(o)?o.concat(At(t)):[o,At(t)]:At(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Xe(e.ssContent),ssFallback:e.ssFallback&&Xe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ze(e=" ",t=0){return Ae(zt,null,e,t)}function gt(e,t){const s=Ae(Pt,null,e);return s.staticCount=t,s}function ve(e){return e==null||typeof e=="boolean"?Ae(dt):A(e)?Ae(ye,null,e.slice()):typeof e=="object"?Ce(e):Ae(zt,null,String(e))}function Ce(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Xe(e)}function Us(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(A(t))s=16;else if(typeof t=="object")if(n&65){const o=t.default;o&&(o._c&&(o._d=!1),Us(e,o()),o._c&&(o._d=!0));return}else{s=32;const o=t._;!o&&!oo(t)?t._ctx=te:o===3&&te&&(te.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else P(t)?(t={default:t,_ctx:te},s=32):(t=String(t),n&64?(s=16,t=[Ze(t)]):s=8);e.children=t,e.shapeFlag|=s}function gi(...e){const t={};for(let s=0;s{let o;return(o=e[s])||(o=e[s]=[]),o.push(n),r=>{o.length>1?o.forEach(i=>i(r)):o[0](r)}};Nt=t("__VUE_INSTANCE_SETTERS__",s=>Z=s),xs=t("__VUE_SSR_SETTERS__",s=>qt=s)}const vt=e=>{const t=Z;return Nt(e),e.scope.on(),()=>{e.scope.off(),Nt(t)}},pn=()=>{Z&&Z.scope.off(),Nt(null)};function po(e){return e.vnode.shapeFlag&4}let qt=!1;function bi(e,t=!1){t&&xs(t);const{props:s,children:n}=e.vnode,o=po(e);ei(e,s,o,t),ni(e,n);const r=o?xi(e,t):void 0;return t&&xs(!1),r}function xi(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,zr);const{setup:n}=s;if(n){const o=e.setupContext=n.length>1?Ei(e):null,r=vt(e);Me();const i=Pe(n,e,0,[e.props,o]);if(Re(),r(),Cn(i)){if(i.then(pn,pn),t)return i.then(c=>{gn(e,c,t)}).catch(c=>{Dt(c,e,0)});e.asyncDep=i}else gn(e,i,t)}else go(e,t)}function gn(e,t,s){P(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:z(t)&&(e.setupState=Wn(t)),go(e,s)}let vn;function go(e,t,s){const n=e.type;if(!e.render){if(!t&&vn&&!n.render){const o=n.template||$s(e).template;if(o){const{isCustomElement:r,compilerOptions:i}=e.appContext.config,{delimiters:c,compilerOptions:u}=n,d=Y(Y({isCustomElement:r,delimiters:c},i),u);n.render=vn(o,d)}}e.render=n.render||le}{const o=vt(e);Me();try{qr(e)}finally{Re(),o()}}}const yi={get(e,t){return se(e,"get",""),e[t]}};function Ei(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,yi),slots:e.slots,emit:e.emit,expose:t}}function Gt(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Wn(nr(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in lt)return lt[s](e)},has(t,s){return s in t||s in lt}}))}function wi(e,t=!0){return P(e)?e.displayName||e.name:e.name||t&&e.__name}function Si(e){return P(e)&&"__vccOpts"in e}const Oi=(e,t)=>or(e,t,qt),Ci="3.4.23";/** 14 | * @vue/runtime-dom v3.4.23 15 | * (c) 2018-present Yuxi (Evan) You and Vue contributors 16 | * @license MIT 17 | **/const Ti="http://www.w3.org/2000/svg",Ii="http://www.w3.org/1998/Math/MathML",Te=typeof document<"u"?document:null,_n=Te&&Te.createElement("template"),Pi={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const o=t==="svg"?Te.createElementNS(Ti,e):t==="mathml"?Te.createElementNS(Ii,e):Te.createElement(e,s?{is:s}:void 0);return e==="select"&&n&&n.multiple!=null&&o.setAttribute("multiple",n.multiple),o},createText:e=>Te.createTextNode(e),createComment:e=>Te.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Te.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,o,r){const i=s?s.previousSibling:t.lastChild;if(o&&(o===r||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),s),!(o===r||!(o=o.nextSibling)););else{_n.innerHTML=n==="svg"?`${e}`:n==="mathml"?`${e}`:e;const c=_n.content;if(n==="svg"||n==="mathml"){const u=c.firstChild;for(;u.firstChild;)c.appendChild(u.firstChild);c.removeChild(u)}t.insertBefore(c,s)}return[i?i.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Ai=Symbol("_vtc");function Mi(e,t,s){const n=e[Ai];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const mn=Symbol("_vod"),Ri=Symbol("_vsh"),Fi=Symbol(""),Li=/(^|;)\s*display\s*:/;function Ni(e,t,s){const n=e.style,o=X(s);let r=!1;if(s&&!o){if(t)if(X(t))for(const i of t.split(";")){const c=i.slice(0,i.indexOf(":")).trim();s[c]==null&&Mt(n,c,"")}else for(const i in t)s[i]==null&&Mt(n,i,"");for(const i in s)i==="display"&&(r=!0),Mt(n,i,s[i])}else if(o){if(t!==s){const i=n[Fi];i&&(s+=";"+i),n.cssText=s,r=Li.test(s)}}else t&&e.removeAttribute("style");mn in e&&(e[mn]=r?n.display:"",e[Ri]&&(n.display="none"))}const bn=/\s*!important$/;function Mt(e,t,s){if(A(s))s.forEach(n=>Mt(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=ji(e,t);bn.test(s)?e.setProperty(Je(n),s.replace(bn,""),"important"):e[n]=s}}const xn=["Webkit","Moz","ms"],is={};function ji(e,t){const s=is[t];if(s)return s;let n=me(t);if(n!=="filter"&&n in e)return is[t]=n;n=Vt(n);for(let o=0;ols||(Ki.then(()=>ls=0),ls=Date.now());function zi(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;ae(qi(n,s.value),t,5,[n])};return s.value=e,s.attached=Wi(),s}function qi(e,t){if(A(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(n=>o=>!o._stopped&&n&&n(o))}else return t}const Sn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Gi=(e,t,s,n,o,r,i,c,u)=>{const d=o==="svg";t==="class"?Mi(e,n,d):t==="style"?Ni(e,s,n):jt(t)?Es(t)||Di(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yi(e,t,n,d))?$i(e,t,n,r,i,c,u):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Hi(e,t,n,d))};function Yi(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Sn(t)&&P(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Sn(t)&&X(s)?!1:t in e}const Xi=Y({patchProp:Gi},Pi);let On;function Ji(){return On||(On=ri(Xi))}const Zi=(...e)=>{const t=Ji().createApp(...e),{mount:s}=t;return t.mount=n=>{const o=ki(n);if(!o)return;const r=t._component;!P(r)&&!r.render&&!r.template&&(r.template=o.innerHTML),o.innerHTML="";const i=s(o,!1,Qi(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),i},t};function Qi(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ki(e){return X(e)?document.querySelector(e):e}const el="drag-scroller-disable",tl=(()=>{const e=new WeakMap;return{mounted(t,s){let n=!1;const{onlyX:o,onlyY:r,disablechild:i}=s.modifiers,c=s.value??{},u=new Event("scrollStart",{bubbles:!0}),d=new Event("scrollMoving",{bubbles:!0}),h=new Event("scrollEnd",{bubbles:!0});c.hideScrollbar===!0&&(t.style.overflow="hidden");const x=S=>{if(i)return S===t;for(;S&&S.parentNode;){if(S&&S!=null&&S.hasAttribute(el))return!1;if(S===t)return!0;S=S.parentNode}return!1},w=S=>{n=x(S.target),t.dispatchEvent(u),n&&c!=null&&c.startScroll&&typeof(c==null?void 0:c.startScroll)=="function"&&c.startScroll(S)},T=S=>{t.dispatchEvent(h),n&&c!=null&&c.endScroll&&typeof(c==null?void 0:c.endScroll)=="function"&&c.endScroll(S),n=!1},V=S=>{if(!n)return!1;t.dispatchEvent(d),c!=null&&c.onScrolling&&typeof(c==null?void 0:c.onScrolling)=="function"&&c.onScrolling(S),S.stopPropagation&&S.stopPropagation(),S.preventDefault&&S.preventDefault(),S.cancelBubble=!0,S.returnValue=!1;const D=(c==null?void 0:c.speed)||1,K=c.reverseDirection?S.movementX*D:-S.movementX*D,re=c.reverseDirection?S.movementY*D:-S.movementY*D;o?t.scrollLeft+=K:(r||(t.scrollLeft+=K),t.scrollTop+=re)};e.set(t,{dragStart:w,dragEnd:T,drag:V}),t.addEventListener("pointerdown",w),addEventListener("pointerup",T),addEventListener("pointermove",V)},unmounted(t){const{dragStart:s,dragEnd:n,drag:o}=e.get(t);t.removeEventListener("pointerdown",s),removeEventListener("pointerup",n),removeEventListener("pointermove",o)}}})(),sl={install(e){e.directive("drag-scroller",tl)}},Qe=e=>(gr("data-v-19958249"),e=e(),vr(),e),nl=Qe(()=>W("a",{href:"https://github.com/huynamboz/vue-drag-scroller/blob/dev/example/App.vue"},[W("code",null,"https://github.com/huynamboz/vue-drag-scroller/blob/dev/example/App.vue")],-1)),ol={class:"container"},rl={class:"container--normal"},il=Qe(()=>W("p",null,[Ze("Normal option: "),W("code",null,"v-drag-scroller")],-1)),ll={class:"wrapper"},cl=gt('
',1),fl=[cl],ul={class:"container--normal"},al=Qe(()=>W("p",null,[Ze("Normal option: "),W("code",null,"v-drag-scroller.disablechild")],-1)),dl={class:"wrapper"},hl=gt('
',1),pl=[hl],gl={class:"container--normal"},vl=Qe(()=>W("p",null,[Ze("Only scroll horizontal: "),W("code",null,"v-drag-scroller.onlyX")],-1)),_l={class:"wrapper only"},ml=gt('
',3),bl=[ml],xl={class:"container--normal"},yl=Qe(()=>W("p",null,[Ze("Only scroll vertical: "),W("code",null,"v-drag-scroller.onlyX")],-1)),El={class:"wrapper only"},wl=gt('
',3),Sl=[wl],Ol={class:"container--normal"},Cl=Qe(()=>W("p",null,[Ze("Only scroll vertical: "),W("code",null,"v-drag-scroller.onlyX")],-1)),Tl=gt('
',3),Il=[Tl],Pl=Rr({__name:"App",setup(e){const o={startScroll:r=>{console.log("working",r)},endScroll:r=>{console.log("end scroll",r)},onScrolling:r=>{console.log("scrolling",r)},speed:1,reverseDirection:!0};return(r,i)=>{const c=Or("drag-scroller");return ze(),qe("body",null,[nl,W("div",ol,[W("div",rl,[il,tt((ze(),qe("div",ll,fl)),[[c,o]])]),W("div",ul,[al,tt((ze(),qe("div",dl,pl)),[[c,o,void 0,{disablechild:!0}]])]),W("div",gl,[vl,tt((ze(),qe("div",_l,bl)),[[c,o,void 0,{onlyX:!0}]])]),W("div",xl,[yl,tt((ze(),qe("div",El,Sl)),[[c,{...o,hideScrollbar:!0},void 0,{onlyY:!0}]])]),W("div",Ol,[Cl,tt((ze(),qe("div",{"on:scrollStart":i[0]||(i[0]=u=>console.log("Start custom",u)),"on:scrollMoving":i[1]||(i[1]=u=>console.log("Moving custom",u)),"on:scrollEnd":i[2]||(i[2]=u=>console.log("End custom",u)),class:"wrapper only"},Il,32)),[[c,{},void 0,{onlyY:!0}]])])])])}}}),Al=(e,t)=>{const s=e.__vccOpts||e;for(const[n,o]of t)s[n]=o;return s},Ml=Al(Pl,[["__scopeId","data-v-19958249"]]),vo=Zi(Ml);vo.use(sl);vo.mount("#app"); 18 | -------------------------------------------------------------------------------- /server/assets/index-lU1t3W8O.css: -------------------------------------------------------------------------------- 1 | :root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}@media (prefers-color-scheme: dark){:root{--color-background: var(--vt-c-black);--color-background-soft: var(--vt-c-black-soft);--color-background-mute: var(--vt-c-black-mute);--color-border: var(--vt-c-divider-dark-2);--color-border-hover: var(--vt-c-divider-dark-1);--color-heading: var(--vt-c-text-dark-1);--color-text: var(--vt-c-text-dark-2)}}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100vh;color:var(--color-text);background:var(--color-background);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a,.green{text-decoration:none;color:#00bd7e;transition:.4s;padding:3px}@media (hover: hover){a:hover{background-color:#00bd7e33}}body[data-v-19958249]{width:100%}.container[data-v-19958249]{display:flex;justify-content:center;gap:60px;flex-wrap:wrap;width:100%;flex-direction:column;align-items:center}.wrapper[data-v-19958249]{border-radius:10px;overflow:hidden;width:300px;background-color:#b8b8b8;overflow:auto;height:300px;white-space:nowrap;display:flex;align-items:center}.wrapper.only[data-v-19958249]{flex-direction:column;gap:20px;padding:40px}.wrapper.only .content[data-v-19958249]{height:100px;min-height:100px}.content[data-v-19958249]{height:70%;width:600px;background-color:brown;display:flex;align-items:center}.box[data-v-19958249]{display:inline-block;width:100px;height:100px;background-color:#e22727;margin:10px}.container--normal[data-v-19958249]{display:flex;gap:20px} 2 | -------------------------------------------------------------------------------- /server/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huynamboz/vue-drag-scroller/32da26345eb7461078774e958591bdea3e35b051/server/favicon.ico -------------------------------------------------------------------------------- /server/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type { App, DirectiveBinding } from 'vue' 2 | const CHILD_DISABLE = 'drag-scroller-disable' 3 | const CHILD_ENABLE = 'drag-scroller-enable' 4 | const HIDE_SCROLLBAR = 'hideScrollbar' 5 | interface ICustomBinding extends DirectiveBinding { 6 | value: { 7 | startScroll?: (e: MouseEvent) => void 8 | endScroll?: (e: MouseEvent) => void 9 | onScrolling?: (e: MouseEvent) => void 10 | speed?: number 11 | hideScrollbar?: boolean 12 | reverseDirection?: boolean 13 | } 14 | modifiers: { 15 | disablechild?: boolean 16 | onlyX?: boolean 17 | onlyY?: boolean 18 | } 19 | } 20 | 21 | const statefullDirective = (() => { 22 | const state = new WeakMap() 23 | return { 24 | mounted(elem: HTMLElement, binding: ICustomBinding) { 25 | let isDrag = false 26 | const { onlyX, onlyY, disablechild } = binding.modifiers 27 | 28 | 29 | const OptionBinding = binding.value ?? {} 30 | 31 | // custom event 32 | const eventStart = new Event('scrollStart', { bubbles: true }) 33 | const eventMoving = new Event('scrollMoving', { bubbles: true }) 34 | const eventEnd = new Event('scrollEnd', { bubbles: true }) 35 | 36 | // hide scrollbar 37 | if (OptionBinding.hideScrollbar === true) { 38 | elem.style.overflow = 'hidden' 39 | } 40 | 41 | const checkTag = (el: HTMLElement): boolean => { 42 | if (disablechild) { 43 | return el === elem 44 | } 45 | 46 | // check if element is child of elem and disabled 47 | while (el && el.parentNode) { 48 | if (el && el?.hasAttribute(CHILD_DISABLE)) { 49 | return false 50 | } else if (el === elem) { 51 | return true 52 | } 53 | el = el.parentNode as HTMLElement 54 | } 55 | return false 56 | } 57 | 58 | const dragStart = (e: MouseEvent): void => { 59 | isDrag = checkTag(e.target as HTMLElement) 60 | elem.dispatchEvent(eventStart) 61 | if ( 62 | isDrag && 63 | OptionBinding?.startScroll && 64 | typeof OptionBinding?.startScroll === 'function' 65 | ) { 66 | OptionBinding.startScroll(e) 67 | } 68 | } 69 | 70 | const dragEnd = (e: MouseEvent): void => { 71 | elem.dispatchEvent(eventEnd) 72 | if (isDrag && OptionBinding?.endScroll && typeof OptionBinding?.endScroll === 'function') { 73 | OptionBinding.endScroll(e) 74 | } 75 | isDrag = false 76 | } 77 | 78 | const drag = (ev: MouseEvent): any => { 79 | if (!isDrag) return false 80 | 81 | elem.dispatchEvent(eventMoving) 82 | if (OptionBinding?.onScrolling && typeof OptionBinding?.onScrolling === 'function') { 83 | OptionBinding.onScrolling(ev) 84 | } 85 | 86 | 87 | const speed = OptionBinding?.speed || 1 88 | const scrollLeftDelta = OptionBinding.reverseDirection ? ev.movementX * speed : -ev.movementX * speed; 89 | const scrollTopDelta = OptionBinding.reverseDirection ? ev.movementY * speed : -ev.movementY * speed; 90 | 91 | if (onlyX) { 92 | elem.scrollLeft += scrollLeftDelta; 93 | } else if (onlyY) { 94 | elem.scrollTop += scrollTopDelta; 95 | } else { 96 | elem.scrollLeft += scrollLeftDelta; 97 | elem.scrollTop += scrollTopDelta; 98 | } 99 | 100 | preventSelection(ev) 101 | return false 102 | } 103 | 104 | function preventSelection(ev: DragEvent | MouseEvent) { 105 | // prevent text selection when mouse move 106 | // if element is image then prevent default 107 | if (ev?.target instanceof HTMLImageElement) { 108 | if (ev.preventDefault) ev.preventDefault() 109 | } 110 | window.getSelection()?.removeAllRanges(); 111 | } 112 | 113 | state.set(elem, { dragStart, dragEnd, drag, preventSelection }) 114 | elem.addEventListener('pointerdown', dragStart) 115 | elem.addEventListener('dragstart', preventSelection) 116 | addEventListener('pointerup', dragEnd) 117 | addEventListener('pointermove', drag) 118 | }, 119 | unmounted(elem: HTMLElement) { 120 | const { dragStart, dragEnd, drag, preventSelection } = state.get(elem) 121 | elem.removeEventListener('pointerdown', dragStart) 122 | elem.removeEventListener('dragstart', preventSelection) 123 | removeEventListener('pointerup', dragEnd) 124 | removeEventListener('pointermove', drag) 125 | } 126 | } 127 | })() 128 | 129 | // export directive as plugin vue 130 | const VueDragScroller = { 131 | install(app: App) { 132 | app.directive('drag-scroller', statefullDirective) 133 | } 134 | } 135 | export { statefullDirective as dragScroller } 136 | export { statefullDirective as vDragScroller } 137 | export default VueDragScroller 138 | -------------------------------------------------------------------------------- /src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'vue-drag-scroller' { 2 | import VueDragScroller from './index.ts' 3 | import { dragScroller } from './index.ts' 4 | 5 | export { dragScroller } 6 | export default VueDragScroller 7 | } 8 | -------------------------------------------------------------------------------- /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 | "isolatedModules": true, 12 | "esModuleInterop": true, 13 | "lib": ["ESNext", "DOM"], 14 | "skipLibCheck": true 15 | }, 16 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], 17 | "references": [{ "path": "./tsconfig.node.json" }] 18 | } -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["vite.config.ts"] 9 | } -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig(({ mode }) => { 8 | const baseConfig = { 9 | resolve: { 10 | alias: { 11 | '@': fileURLToPath(new URL('./src', import.meta.url)) 12 | } 13 | } 14 | } 15 | if (mode === 'lib') { 16 | return { 17 | ...baseConfig, 18 | build: { 19 | lib: { 20 | entry: fileURLToPath(new URL('./src/index.ts', import.meta.url)), 21 | name: 'vue-drag-scroller', 22 | fileName: (format) => `vue-drag-scroller.${format}.js`, 23 | formats: ['es', 'cjs'], 24 | }, 25 | }, 26 | } 27 | } else if (mode === 'app') { 28 | return { 29 | ...baseConfig, 30 | base: '/vue-drag-scroller/', 31 | plugins: [ 32 | vue(), 33 | ], 34 | build: { 35 | outDir: 'server' 36 | }, 37 | rollupOptions: { 38 | external: ['vue'], 39 | output: { 40 | globals: { 41 | vue: 'Vue' 42 | } 43 | } 44 | } 45 | } 46 | } 47 | }) 48 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/helper-string-parser@^7.25.7": 6 | version "7.25.7" 7 | resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz" 8 | integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== 9 | 10 | "@babel/helper-validator-identifier@^7.25.7": 11 | version "7.25.7" 12 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz" 13 | integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== 14 | 15 | "@babel/parser@^7.25.3": 16 | version "7.25.8" 17 | resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz" 18 | integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== 19 | dependencies: 20 | "@babel/types" "^7.25.8" 21 | 22 | "@babel/types@^7.25.8": 23 | version "7.25.8" 24 | resolved "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz" 25 | integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== 26 | dependencies: 27 | "@babel/helper-string-parser" "^7.25.7" 28 | "@babel/helper-validator-identifier" "^7.25.7" 29 | to-fast-properties "^2.0.0" 30 | 31 | "@esbuild/darwin-x64@0.21.5": 32 | version "0.21.5" 33 | resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz" 34 | integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== 35 | 36 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": 37 | version "4.4.0" 38 | resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" 39 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 40 | dependencies: 41 | eslint-visitor-keys "^3.3.0" 42 | 43 | "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": 44 | version "4.11.1" 45 | resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz" 46 | integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== 47 | 48 | "@eslint/eslintrc@^2.1.4": 49 | version "2.1.4" 50 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" 51 | integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== 52 | dependencies: 53 | ajv "^6.12.4" 54 | debug "^4.3.2" 55 | espree "^9.6.0" 56 | globals "^13.19.0" 57 | ignore "^5.2.0" 58 | import-fresh "^3.2.1" 59 | js-yaml "^4.1.0" 60 | minimatch "^3.1.2" 61 | strip-json-comments "^3.1.1" 62 | 63 | "@eslint/js@8.57.1": 64 | version "8.57.1" 65 | resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz" 66 | integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== 67 | 68 | "@humanwhocodes/config-array@^0.13.0": 69 | version "0.13.0" 70 | resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz" 71 | integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== 72 | dependencies: 73 | "@humanwhocodes/object-schema" "^2.0.3" 74 | debug "^4.3.1" 75 | minimatch "^3.0.5" 76 | 77 | "@humanwhocodes/module-importer@^1.0.1": 78 | version "1.0.1" 79 | resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" 80 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 81 | 82 | "@humanwhocodes/object-schema@^2.0.3": 83 | version "2.0.3" 84 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" 85 | integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== 86 | 87 | "@jridgewell/sourcemap-codec@^1.5.0": 88 | version "1.5.0" 89 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" 90 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 91 | 92 | "@nodelib/fs.scandir@2.1.5": 93 | version "2.1.5" 94 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 95 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 96 | dependencies: 97 | "@nodelib/fs.stat" "2.0.5" 98 | run-parallel "^1.1.9" 99 | 100 | "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": 101 | version "2.0.5" 102 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 103 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 104 | 105 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 106 | version "1.2.8" 107 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 108 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 109 | dependencies: 110 | "@nodelib/fs.scandir" "2.1.5" 111 | fastq "^1.6.0" 112 | 113 | "@pkgr/core@^0.1.0": 114 | version "0.1.1" 115 | resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz" 116 | integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== 117 | 118 | "@rollup/rollup-darwin-x64@4.24.0": 119 | version "4.24.0" 120 | resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz" 121 | integrity sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ== 122 | 123 | "@rushstack/eslint-patch@^1.3.3": 124 | version "1.10.4" 125 | resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz" 126 | integrity sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA== 127 | 128 | "@tsconfig/node18@^18.2.2": 129 | version "18.2.4" 130 | resolved "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.4.tgz" 131 | integrity sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ== 132 | 133 | "@types/estree@1.0.6": 134 | version "1.0.6" 135 | resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz" 136 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== 137 | 138 | "@types/json-schema@^7.0.12": 139 | version "7.0.15" 140 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" 141 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== 142 | 143 | "@types/node@^18.0.0 || >=20.0.0", "@types/node@^18.19.3": 144 | version "18.19.56" 145 | resolved "https://registry.npmjs.org/@types/node/-/node-18.19.56.tgz" 146 | integrity sha512-4EMJlWwwGnVPflJAtM14p9eVSa6BOv5b92mCsh5zcM1UagNtEtrbbtaE6WE1tw2TabavatnwqXjlIpcAEuJJNg== 147 | dependencies: 148 | undici-types "~5.26.4" 149 | 150 | "@types/semver@^7.5.0": 151 | version "7.5.8" 152 | resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" 153 | integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== 154 | 155 | "@typescript-eslint/eslint-plugin@^6.7.0": 156 | version "6.21.0" 157 | resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz" 158 | integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== 159 | dependencies: 160 | "@eslint-community/regexpp" "^4.5.1" 161 | "@typescript-eslint/scope-manager" "6.21.0" 162 | "@typescript-eslint/type-utils" "6.21.0" 163 | "@typescript-eslint/utils" "6.21.0" 164 | "@typescript-eslint/visitor-keys" "6.21.0" 165 | debug "^4.3.4" 166 | graphemer "^1.4.0" 167 | ignore "^5.2.4" 168 | natural-compare "^1.4.0" 169 | semver "^7.5.4" 170 | ts-api-utils "^1.0.1" 171 | 172 | "@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.7.0": 173 | version "6.21.0" 174 | resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz" 175 | integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== 176 | dependencies: 177 | "@typescript-eslint/scope-manager" "6.21.0" 178 | "@typescript-eslint/types" "6.21.0" 179 | "@typescript-eslint/typescript-estree" "6.21.0" 180 | "@typescript-eslint/visitor-keys" "6.21.0" 181 | debug "^4.3.4" 182 | 183 | "@typescript-eslint/scope-manager@6.21.0": 184 | version "6.21.0" 185 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz" 186 | integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== 187 | dependencies: 188 | "@typescript-eslint/types" "6.21.0" 189 | "@typescript-eslint/visitor-keys" "6.21.0" 190 | 191 | "@typescript-eslint/type-utils@6.21.0": 192 | version "6.21.0" 193 | resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz" 194 | integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== 195 | dependencies: 196 | "@typescript-eslint/typescript-estree" "6.21.0" 197 | "@typescript-eslint/utils" "6.21.0" 198 | debug "^4.3.4" 199 | ts-api-utils "^1.0.1" 200 | 201 | "@typescript-eslint/types@6.21.0": 202 | version "6.21.0" 203 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz" 204 | integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== 205 | 206 | "@typescript-eslint/typescript-estree@6.21.0": 207 | version "6.21.0" 208 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz" 209 | integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== 210 | dependencies: 211 | "@typescript-eslint/types" "6.21.0" 212 | "@typescript-eslint/visitor-keys" "6.21.0" 213 | debug "^4.3.4" 214 | globby "^11.1.0" 215 | is-glob "^4.0.3" 216 | minimatch "9.0.3" 217 | semver "^7.5.4" 218 | ts-api-utils "^1.0.1" 219 | 220 | "@typescript-eslint/utils@6.21.0": 221 | version "6.21.0" 222 | resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz" 223 | integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== 224 | dependencies: 225 | "@eslint-community/eslint-utils" "^4.4.0" 226 | "@types/json-schema" "^7.0.12" 227 | "@types/semver" "^7.5.0" 228 | "@typescript-eslint/scope-manager" "6.21.0" 229 | "@typescript-eslint/types" "6.21.0" 230 | "@typescript-eslint/typescript-estree" "6.21.0" 231 | semver "^7.5.4" 232 | 233 | "@typescript-eslint/visitor-keys@6.21.0": 234 | version "6.21.0" 235 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz" 236 | integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== 237 | dependencies: 238 | "@typescript-eslint/types" "6.21.0" 239 | eslint-visitor-keys "^3.4.1" 240 | 241 | "@ungap/structured-clone@^1.2.0": 242 | version "1.2.0" 243 | resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" 244 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== 245 | 246 | "@vitejs/plugin-vue@^4.5.2": 247 | version "4.6.2" 248 | resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz" 249 | integrity sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw== 250 | 251 | "@volar/language-core@~1.11.1", "@volar/language-core@1.11.1": 252 | version "1.11.1" 253 | resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz" 254 | integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== 255 | dependencies: 256 | "@volar/source-map" "1.11.1" 257 | 258 | "@volar/source-map@~1.11.1", "@volar/source-map@1.11.1": 259 | version "1.11.1" 260 | resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz" 261 | integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== 262 | dependencies: 263 | muggle-string "^0.3.1" 264 | 265 | "@volar/typescript@~1.11.1": 266 | version "1.11.1" 267 | resolved "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz" 268 | integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== 269 | dependencies: 270 | "@volar/language-core" "1.11.1" 271 | path-browserify "^1.0.1" 272 | 273 | "@vue/compiler-core@3.5.12": 274 | version "3.5.12" 275 | resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz" 276 | integrity sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw== 277 | dependencies: 278 | "@babel/parser" "^7.25.3" 279 | "@vue/shared" "3.5.12" 280 | entities "^4.5.0" 281 | estree-walker "^2.0.2" 282 | source-map-js "^1.2.0" 283 | 284 | "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@3.5.12": 285 | version "3.5.12" 286 | resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz" 287 | integrity sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg== 288 | dependencies: 289 | "@vue/compiler-core" "3.5.12" 290 | "@vue/shared" "3.5.12" 291 | 292 | "@vue/compiler-sfc@3.5.12": 293 | version "3.5.12" 294 | resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz" 295 | integrity sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw== 296 | dependencies: 297 | "@babel/parser" "^7.25.3" 298 | "@vue/compiler-core" "3.5.12" 299 | "@vue/compiler-dom" "3.5.12" 300 | "@vue/compiler-ssr" "3.5.12" 301 | "@vue/shared" "3.5.12" 302 | estree-walker "^2.0.2" 303 | magic-string "^0.30.11" 304 | postcss "^8.4.47" 305 | source-map-js "^1.2.0" 306 | 307 | "@vue/compiler-ssr@3.5.12": 308 | version "3.5.12" 309 | resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz" 310 | integrity sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA== 311 | dependencies: 312 | "@vue/compiler-dom" "3.5.12" 313 | "@vue/shared" "3.5.12" 314 | 315 | "@vue/eslint-config-prettier@^8.0.0": 316 | version "8.0.0" 317 | resolved "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz" 318 | integrity sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg== 319 | dependencies: 320 | eslint-config-prettier "^8.8.0" 321 | eslint-plugin-prettier "^5.0.0" 322 | 323 | "@vue/eslint-config-typescript@^12.0.0": 324 | version "12.0.0" 325 | resolved "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz" 326 | integrity sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg== 327 | dependencies: 328 | "@typescript-eslint/eslint-plugin" "^6.7.0" 329 | "@typescript-eslint/parser" "^6.7.0" 330 | vue-eslint-parser "^9.3.1" 331 | 332 | "@vue/language-core@1.8.27": 333 | version "1.8.27" 334 | resolved "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz" 335 | integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA== 336 | dependencies: 337 | "@volar/language-core" "~1.11.1" 338 | "@volar/source-map" "~1.11.1" 339 | "@vue/compiler-dom" "^3.3.0" 340 | "@vue/shared" "^3.3.0" 341 | computeds "^0.0.1" 342 | minimatch "^9.0.3" 343 | muggle-string "^0.3.1" 344 | path-browserify "^1.0.1" 345 | vue-template-compiler "^2.7.14" 346 | 347 | "@vue/reactivity@3.5.12": 348 | version "3.5.12" 349 | resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz" 350 | integrity sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg== 351 | dependencies: 352 | "@vue/shared" "3.5.12" 353 | 354 | "@vue/runtime-core@3.5.12": 355 | version "3.5.12" 356 | resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz" 357 | integrity sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw== 358 | dependencies: 359 | "@vue/reactivity" "3.5.12" 360 | "@vue/shared" "3.5.12" 361 | 362 | "@vue/runtime-dom@3.5.12": 363 | version "3.5.12" 364 | resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz" 365 | integrity sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA== 366 | dependencies: 367 | "@vue/reactivity" "3.5.12" 368 | "@vue/runtime-core" "3.5.12" 369 | "@vue/shared" "3.5.12" 370 | csstype "^3.1.3" 371 | 372 | "@vue/server-renderer@3.5.12": 373 | version "3.5.12" 374 | resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz" 375 | integrity sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg== 376 | dependencies: 377 | "@vue/compiler-ssr" "3.5.12" 378 | "@vue/shared" "3.5.12" 379 | 380 | "@vue/shared@^3.3.0", "@vue/shared@3.5.12": 381 | version "3.5.12" 382 | resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz" 383 | integrity sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg== 384 | 385 | "@vue/tsconfig@^0.5.0": 386 | version "0.5.1" 387 | resolved "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz" 388 | integrity sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ== 389 | 390 | acorn-jsx@^5.3.2: 391 | version "5.3.2" 392 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 393 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 394 | 395 | "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: 396 | version "8.13.0" 397 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz" 398 | integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== 399 | 400 | ajv@^6.12.4: 401 | version "6.12.6" 402 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 403 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 404 | dependencies: 405 | fast-deep-equal "^3.1.1" 406 | fast-json-stable-stringify "^2.0.0" 407 | json-schema-traverse "^0.4.1" 408 | uri-js "^4.2.2" 409 | 410 | ansi-regex@^5.0.1: 411 | version "5.0.1" 412 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 413 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 414 | 415 | ansi-styles@^4.1.0: 416 | version "4.3.0" 417 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 418 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 419 | dependencies: 420 | color-convert "^2.0.1" 421 | 422 | ansi-styles@^6.2.1: 423 | version "6.2.1" 424 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" 425 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 426 | 427 | argparse@^2.0.1: 428 | version "2.0.1" 429 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 430 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 431 | 432 | array-union@^2.1.0: 433 | version "2.1.0" 434 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 435 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 436 | 437 | async@^3.2.4: 438 | version "3.2.6" 439 | resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" 440 | integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== 441 | 442 | balanced-match@^1.0.0: 443 | version "1.0.2" 444 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 445 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 446 | 447 | boolbase@^1.0.0: 448 | version "1.0.0" 449 | resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" 450 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 451 | 452 | brace-expansion@^1.1.7: 453 | version "1.1.11" 454 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 455 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 456 | dependencies: 457 | balanced-match "^1.0.0" 458 | concat-map "0.0.1" 459 | 460 | brace-expansion@^2.0.1: 461 | version "2.0.1" 462 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" 463 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 464 | dependencies: 465 | balanced-match "^1.0.0" 466 | 467 | braces@^3.0.3: 468 | version "3.0.3" 469 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" 470 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 471 | dependencies: 472 | fill-range "^7.1.1" 473 | 474 | callsites@^3.0.0: 475 | version "3.1.0" 476 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 477 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 478 | 479 | chalk@^4.0.0: 480 | version "4.1.2" 481 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 482 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 483 | dependencies: 484 | ansi-styles "^4.1.0" 485 | supports-color "^7.1.0" 486 | 487 | color-convert@^2.0.1: 488 | version "2.0.1" 489 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 490 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 491 | dependencies: 492 | color-name "~1.1.4" 493 | 494 | color-name@~1.1.4: 495 | version "1.1.4" 496 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 497 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 498 | 499 | commander@^11.0.0: 500 | version "11.1.0" 501 | resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz" 502 | integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== 503 | 504 | commondir@^1.0.1: 505 | version "1.0.1" 506 | resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" 507 | integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== 508 | 509 | computeds@^0.0.1: 510 | version "0.0.1" 511 | resolved "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz" 512 | integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== 513 | 514 | concat-map@0.0.1: 515 | version "0.0.1" 516 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 517 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 518 | 519 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 520 | version "7.0.3" 521 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 522 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 523 | dependencies: 524 | path-key "^3.1.0" 525 | shebang-command "^2.0.0" 526 | which "^2.0.1" 527 | 528 | cssesc@^3.0.0: 529 | version "3.0.0" 530 | resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" 531 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 532 | 533 | csstype@^3.1.3: 534 | version "3.1.3" 535 | resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" 536 | integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== 537 | 538 | de-indent@^1.0.2: 539 | version "1.0.2" 540 | resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz" 541 | integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== 542 | 543 | debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: 544 | version "4.3.7" 545 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" 546 | integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== 547 | dependencies: 548 | ms "^2.1.3" 549 | 550 | deep-is@^0.1.3: 551 | version "0.1.4" 552 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 553 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 554 | 555 | dir-glob@^3.0.1: 556 | version "3.0.1" 557 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 558 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 559 | dependencies: 560 | path-type "^4.0.0" 561 | 562 | doctrine@^3.0.0: 563 | version "3.0.0" 564 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 565 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 566 | dependencies: 567 | esutils "^2.0.2" 568 | 569 | email-addresses@^5.0.0: 570 | version "5.0.0" 571 | resolved "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz" 572 | integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== 573 | 574 | entities@^4.5.0: 575 | version "4.5.0" 576 | resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" 577 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== 578 | 579 | esbuild@^0.21.3: 580 | version "0.21.5" 581 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz" 582 | integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== 583 | optionalDependencies: 584 | "@esbuild/aix-ppc64" "0.21.5" 585 | "@esbuild/android-arm" "0.21.5" 586 | "@esbuild/android-arm64" "0.21.5" 587 | "@esbuild/android-x64" "0.21.5" 588 | "@esbuild/darwin-arm64" "0.21.5" 589 | "@esbuild/darwin-x64" "0.21.5" 590 | "@esbuild/freebsd-arm64" "0.21.5" 591 | "@esbuild/freebsd-x64" "0.21.5" 592 | "@esbuild/linux-arm" "0.21.5" 593 | "@esbuild/linux-arm64" "0.21.5" 594 | "@esbuild/linux-ia32" "0.21.5" 595 | "@esbuild/linux-loong64" "0.21.5" 596 | "@esbuild/linux-mips64el" "0.21.5" 597 | "@esbuild/linux-ppc64" "0.21.5" 598 | "@esbuild/linux-riscv64" "0.21.5" 599 | "@esbuild/linux-s390x" "0.21.5" 600 | "@esbuild/linux-x64" "0.21.5" 601 | "@esbuild/netbsd-x64" "0.21.5" 602 | "@esbuild/openbsd-x64" "0.21.5" 603 | "@esbuild/sunos-x64" "0.21.5" 604 | "@esbuild/win32-arm64" "0.21.5" 605 | "@esbuild/win32-ia32" "0.21.5" 606 | "@esbuild/win32-x64" "0.21.5" 607 | 608 | escape-string-regexp@^1.0.2: 609 | version "1.0.5" 610 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 611 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 612 | 613 | escape-string-regexp@^4.0.0: 614 | version "4.0.0" 615 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 616 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 617 | 618 | eslint-config-prettier@*, eslint-config-prettier@^8.8.0: 619 | version "8.10.0" 620 | resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz" 621 | integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== 622 | 623 | eslint-plugin-prettier@^5.0.0: 624 | version "5.2.1" 625 | resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz" 626 | integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== 627 | dependencies: 628 | prettier-linter-helpers "^1.0.0" 629 | synckit "^0.9.1" 630 | 631 | eslint-plugin-vue@^9.0.0, eslint-plugin-vue@^9.17.0: 632 | version "9.29.0" 633 | resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.29.0.tgz" 634 | integrity sha512-hamyjrBhNH6Li6R1h1VF9KHfshJlKgKEg3ARbGTn72CMNDSMhWbgC7NdkRDEh25AFW+4SDATzyNM+3gWuZii8g== 635 | dependencies: 636 | "@eslint-community/eslint-utils" "^4.4.0" 637 | globals "^13.24.0" 638 | natural-compare "^1.4.0" 639 | nth-check "^2.1.1" 640 | postcss-selector-parser "^6.0.15" 641 | semver "^7.6.3" 642 | vue-eslint-parser "^9.4.3" 643 | xml-name-validator "^4.0.0" 644 | 645 | eslint-scope@^7.1.1, eslint-scope@^7.2.2: 646 | version "7.2.2" 647 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" 648 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 649 | dependencies: 650 | esrecurse "^4.3.0" 651 | estraverse "^5.2.0" 652 | 653 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 654 | version "3.4.3" 655 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" 656 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 657 | 658 | "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.49.0, "eslint@>= 8.0.0", eslint@>=6.0.0, eslint@>=7.0.0, eslint@>=8.0.0: 659 | version "8.57.1" 660 | resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz" 661 | integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== 662 | dependencies: 663 | "@eslint-community/eslint-utils" "^4.2.0" 664 | "@eslint-community/regexpp" "^4.6.1" 665 | "@eslint/eslintrc" "^2.1.4" 666 | "@eslint/js" "8.57.1" 667 | "@humanwhocodes/config-array" "^0.13.0" 668 | "@humanwhocodes/module-importer" "^1.0.1" 669 | "@nodelib/fs.walk" "^1.2.8" 670 | "@ungap/structured-clone" "^1.2.0" 671 | ajv "^6.12.4" 672 | chalk "^4.0.0" 673 | cross-spawn "^7.0.2" 674 | debug "^4.3.2" 675 | doctrine "^3.0.0" 676 | escape-string-regexp "^4.0.0" 677 | eslint-scope "^7.2.2" 678 | eslint-visitor-keys "^3.4.3" 679 | espree "^9.6.1" 680 | esquery "^1.4.2" 681 | esutils "^2.0.2" 682 | fast-deep-equal "^3.1.3" 683 | file-entry-cache "^6.0.1" 684 | find-up "^5.0.0" 685 | glob-parent "^6.0.2" 686 | globals "^13.19.0" 687 | graphemer "^1.4.0" 688 | ignore "^5.2.0" 689 | imurmurhash "^0.1.4" 690 | is-glob "^4.0.0" 691 | is-path-inside "^3.0.3" 692 | js-yaml "^4.1.0" 693 | json-stable-stringify-without-jsonify "^1.0.1" 694 | levn "^0.4.1" 695 | lodash.merge "^4.6.2" 696 | minimatch "^3.1.2" 697 | natural-compare "^1.4.0" 698 | optionator "^0.9.3" 699 | strip-ansi "^6.0.1" 700 | text-table "^0.2.0" 701 | 702 | espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: 703 | version "9.6.1" 704 | resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" 705 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 706 | dependencies: 707 | acorn "^8.9.0" 708 | acorn-jsx "^5.3.2" 709 | eslint-visitor-keys "^3.4.1" 710 | 711 | esquery@^1.4.0, esquery@^1.4.2: 712 | version "1.6.0" 713 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" 714 | integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== 715 | dependencies: 716 | estraverse "^5.1.0" 717 | 718 | esrecurse@^4.3.0: 719 | version "4.3.0" 720 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 721 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 722 | dependencies: 723 | estraverse "^5.2.0" 724 | 725 | estraverse@^5.1.0, estraverse@^5.2.0: 726 | version "5.3.0" 727 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 728 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 729 | 730 | estree-walker@^2.0.2: 731 | version "2.0.2" 732 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" 733 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 734 | 735 | esutils@^2.0.2: 736 | version "2.0.3" 737 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 738 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 739 | 740 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 741 | version "3.1.3" 742 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 743 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 744 | 745 | fast-diff@^1.1.2: 746 | version "1.3.0" 747 | resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" 748 | integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== 749 | 750 | fast-glob@^3.2.9: 751 | version "3.3.2" 752 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" 753 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 754 | dependencies: 755 | "@nodelib/fs.stat" "^2.0.2" 756 | "@nodelib/fs.walk" "^1.2.3" 757 | glob-parent "^5.1.2" 758 | merge2 "^1.3.0" 759 | micromatch "^4.0.4" 760 | 761 | fast-json-stable-stringify@^2.0.0: 762 | version "2.1.0" 763 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 764 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 765 | 766 | fast-levenshtein@^2.0.6: 767 | version "2.0.6" 768 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 769 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 770 | 771 | fastq@^1.6.0: 772 | version "1.17.1" 773 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" 774 | integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== 775 | dependencies: 776 | reusify "^1.0.4" 777 | 778 | file-entry-cache@^6.0.1: 779 | version "6.0.1" 780 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 781 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 782 | dependencies: 783 | flat-cache "^3.0.4" 784 | 785 | filename-reserved-regex@^2.0.0: 786 | version "2.0.0" 787 | resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" 788 | integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== 789 | 790 | filenamify@^4.3.0: 791 | version "4.3.0" 792 | resolved "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz" 793 | integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== 794 | dependencies: 795 | filename-reserved-regex "^2.0.0" 796 | strip-outer "^1.0.1" 797 | trim-repeated "^1.0.0" 798 | 799 | fill-range@^7.1.1: 800 | version "7.1.1" 801 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" 802 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 803 | dependencies: 804 | to-regex-range "^5.0.1" 805 | 806 | find-cache-dir@^3.3.1: 807 | version "3.3.2" 808 | resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" 809 | integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== 810 | dependencies: 811 | commondir "^1.0.1" 812 | make-dir "^3.0.2" 813 | pkg-dir "^4.1.0" 814 | 815 | find-up@^4.0.0: 816 | version "4.1.0" 817 | resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" 818 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 819 | dependencies: 820 | locate-path "^5.0.0" 821 | path-exists "^4.0.0" 822 | 823 | find-up@^5.0.0: 824 | version "5.0.0" 825 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 826 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 827 | dependencies: 828 | locate-path "^6.0.0" 829 | path-exists "^4.0.0" 830 | 831 | flat-cache@^3.0.4: 832 | version "3.2.0" 833 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" 834 | integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== 835 | dependencies: 836 | flatted "^3.2.9" 837 | keyv "^4.5.3" 838 | rimraf "^3.0.2" 839 | 840 | flatted@^3.2.9: 841 | version "3.3.1" 842 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" 843 | integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== 844 | 845 | fs-extra@^11.1.1: 846 | version "11.2.0" 847 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" 848 | integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== 849 | dependencies: 850 | graceful-fs "^4.2.0" 851 | jsonfile "^6.0.1" 852 | universalify "^2.0.0" 853 | 854 | fs.realpath@^1.0.0: 855 | version "1.0.0" 856 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 857 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 858 | 859 | fsevents@~2.3.2, fsevents@~2.3.3: 860 | version "2.3.3" 861 | resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" 862 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 863 | 864 | gh-pages@^6.1.1: 865 | version "6.2.0" 866 | resolved "https://registry.npmjs.org/gh-pages/-/gh-pages-6.2.0.tgz" 867 | integrity sha512-HMXJ8th9u5wRXaZCnLcs/d3oVvCHiZkaP5KQExQljYGwJjQbSPyTdHe/Gc1IvYUR/rWiZLxNobIqfoMHKTKjHQ== 868 | dependencies: 869 | async "^3.2.4" 870 | commander "^11.0.0" 871 | email-addresses "^5.0.0" 872 | filenamify "^4.3.0" 873 | find-cache-dir "^3.3.1" 874 | fs-extra "^11.1.1" 875 | globby "^11.1.0" 876 | 877 | glob-parent@^5.1.2: 878 | version "5.1.2" 879 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 880 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 881 | dependencies: 882 | is-glob "^4.0.1" 883 | 884 | glob-parent@^6.0.2: 885 | version "6.0.2" 886 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 887 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 888 | dependencies: 889 | is-glob "^4.0.3" 890 | 891 | glob@^7.1.3: 892 | version "7.2.3" 893 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 894 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 895 | dependencies: 896 | fs.realpath "^1.0.0" 897 | inflight "^1.0.4" 898 | inherits "2" 899 | minimatch "^3.1.1" 900 | once "^1.3.0" 901 | path-is-absolute "^1.0.0" 902 | 903 | globals@^13.19.0, globals@^13.24.0: 904 | version "13.24.0" 905 | resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" 906 | integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== 907 | dependencies: 908 | type-fest "^0.20.2" 909 | 910 | globby@^11.1.0: 911 | version "11.1.0" 912 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" 913 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 914 | dependencies: 915 | array-union "^2.1.0" 916 | dir-glob "^3.0.1" 917 | fast-glob "^3.2.9" 918 | ignore "^5.2.0" 919 | merge2 "^1.4.1" 920 | slash "^3.0.0" 921 | 922 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 923 | version "4.2.11" 924 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" 925 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 926 | 927 | graphemer@^1.4.0: 928 | version "1.4.0" 929 | resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" 930 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 931 | 932 | has-flag@^4.0.0: 933 | version "4.0.0" 934 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 935 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 936 | 937 | he@^1.2.0: 938 | version "1.2.0" 939 | resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" 940 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 941 | 942 | ignore@^5.2.0, ignore@^5.2.4: 943 | version "5.3.2" 944 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" 945 | integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== 946 | 947 | import-fresh@^3.2.1: 948 | version "3.3.0" 949 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 950 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 951 | dependencies: 952 | parent-module "^1.0.0" 953 | resolve-from "^4.0.0" 954 | 955 | imurmurhash@^0.1.4: 956 | version "0.1.4" 957 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 958 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 959 | 960 | inflight@^1.0.4: 961 | version "1.0.6" 962 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 963 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 964 | dependencies: 965 | once "^1.3.0" 966 | wrappy "1" 967 | 968 | inherits@2: 969 | version "2.0.4" 970 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 971 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 972 | 973 | is-extglob@^2.1.1: 974 | version "2.1.1" 975 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 976 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 977 | 978 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 979 | version "4.0.3" 980 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 981 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 982 | dependencies: 983 | is-extglob "^2.1.1" 984 | 985 | is-number@^7.0.0: 986 | version "7.0.0" 987 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 988 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 989 | 990 | is-path-inside@^3.0.3: 991 | version "3.0.3" 992 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" 993 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 994 | 995 | isexe@^2.0.0: 996 | version "2.0.0" 997 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 998 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 999 | 1000 | js-yaml@^4.1.0: 1001 | version "4.1.0" 1002 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 1003 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1004 | dependencies: 1005 | argparse "^2.0.1" 1006 | 1007 | json-buffer@3.0.1: 1008 | version "3.0.1" 1009 | resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" 1010 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1011 | 1012 | json-parse-even-better-errors@^3.0.0: 1013 | version "3.0.2" 1014 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz" 1015 | integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== 1016 | 1017 | json-schema-traverse@^0.4.1: 1018 | version "0.4.1" 1019 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1020 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1021 | 1022 | json-stable-stringify-without-jsonify@^1.0.1: 1023 | version "1.0.1" 1024 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 1025 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1026 | 1027 | jsonfile@^6.0.1: 1028 | version "6.1.0" 1029 | resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" 1030 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 1031 | dependencies: 1032 | universalify "^2.0.0" 1033 | optionalDependencies: 1034 | graceful-fs "^4.1.6" 1035 | 1036 | keyv@^4.5.3: 1037 | version "4.5.4" 1038 | resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" 1039 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 1040 | dependencies: 1041 | json-buffer "3.0.1" 1042 | 1043 | levn@^0.4.1: 1044 | version "0.4.1" 1045 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 1046 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1047 | dependencies: 1048 | prelude-ls "^1.2.1" 1049 | type-check "~0.4.0" 1050 | 1051 | locate-path@^5.0.0: 1052 | version "5.0.0" 1053 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" 1054 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1055 | dependencies: 1056 | p-locate "^4.1.0" 1057 | 1058 | locate-path@^6.0.0: 1059 | version "6.0.0" 1060 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 1061 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1062 | dependencies: 1063 | p-locate "^5.0.0" 1064 | 1065 | lodash.merge@^4.6.2: 1066 | version "4.6.2" 1067 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 1068 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1069 | 1070 | lodash@^4.17.21: 1071 | version "4.17.21" 1072 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 1073 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1074 | 1075 | magic-string@^0.30.11: 1076 | version "0.30.12" 1077 | resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz" 1078 | integrity sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw== 1079 | dependencies: 1080 | "@jridgewell/sourcemap-codec" "^1.5.0" 1081 | 1082 | make-dir@^3.0.2: 1083 | version "3.1.0" 1084 | resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" 1085 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1086 | dependencies: 1087 | semver "^6.0.0" 1088 | 1089 | memorystream@^0.3.1: 1090 | version "0.3.1" 1091 | resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" 1092 | integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== 1093 | 1094 | merge2@^1.3.0, merge2@^1.4.1: 1095 | version "1.4.1" 1096 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 1097 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1098 | 1099 | micromatch@^4.0.4: 1100 | version "4.0.8" 1101 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" 1102 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 1103 | dependencies: 1104 | braces "^3.0.3" 1105 | picomatch "^2.3.1" 1106 | 1107 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1108 | version "3.1.2" 1109 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 1110 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1111 | dependencies: 1112 | brace-expansion "^1.1.7" 1113 | 1114 | minimatch@^9.0.0: 1115 | version "9.0.5" 1116 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" 1117 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 1118 | dependencies: 1119 | brace-expansion "^2.0.1" 1120 | 1121 | minimatch@^9.0.3: 1122 | version "9.0.5" 1123 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" 1124 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 1125 | dependencies: 1126 | brace-expansion "^2.0.1" 1127 | 1128 | minimatch@9.0.3: 1129 | version "9.0.3" 1130 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" 1131 | integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== 1132 | dependencies: 1133 | brace-expansion "^2.0.1" 1134 | 1135 | ms@^2.1.3: 1136 | version "2.1.3" 1137 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 1138 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1139 | 1140 | muggle-string@^0.3.1: 1141 | version "0.3.1" 1142 | resolved "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz" 1143 | integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== 1144 | 1145 | nanoid@^3.3.7: 1146 | version "3.3.7" 1147 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" 1148 | integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== 1149 | 1150 | natural-compare@^1.4.0: 1151 | version "1.4.0" 1152 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 1153 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1154 | 1155 | npm-normalize-package-bin@^3.0.0: 1156 | version "3.0.1" 1157 | resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" 1158 | integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== 1159 | 1160 | npm-run-all2@^6.1.1: 1161 | version "6.2.3" 1162 | resolved "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.2.3.tgz" 1163 | integrity sha512-5RsxC7jEc/RjxOYBVdEfrJf5FsJ0pHA7jr2/OxrThXknajETCTYjigOCG3iaGjdYIKEQlDuCG0ir0T1HTva8pg== 1164 | dependencies: 1165 | ansi-styles "^6.2.1" 1166 | cross-spawn "^7.0.3" 1167 | memorystream "^0.3.1" 1168 | minimatch "^9.0.0" 1169 | pidtree "^0.6.0" 1170 | read-package-json-fast "^3.0.2" 1171 | shell-quote "^1.7.3" 1172 | 1173 | nth-check@^2.1.1: 1174 | version "2.1.1" 1175 | resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" 1176 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 1177 | dependencies: 1178 | boolbase "^1.0.0" 1179 | 1180 | once@^1.3.0: 1181 | version "1.4.0" 1182 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1183 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1184 | dependencies: 1185 | wrappy "1" 1186 | 1187 | optionator@^0.9.3: 1188 | version "0.9.4" 1189 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" 1190 | integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== 1191 | dependencies: 1192 | deep-is "^0.1.3" 1193 | fast-levenshtein "^2.0.6" 1194 | levn "^0.4.1" 1195 | prelude-ls "^1.2.1" 1196 | type-check "^0.4.0" 1197 | word-wrap "^1.2.5" 1198 | 1199 | p-limit@^2.2.0: 1200 | version "2.3.0" 1201 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" 1202 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1203 | dependencies: 1204 | p-try "^2.0.0" 1205 | 1206 | p-limit@^3.0.2: 1207 | version "3.1.0" 1208 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 1209 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1210 | dependencies: 1211 | yocto-queue "^0.1.0" 1212 | 1213 | p-locate@^4.1.0: 1214 | version "4.1.0" 1215 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" 1216 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1217 | dependencies: 1218 | p-limit "^2.2.0" 1219 | 1220 | p-locate@^5.0.0: 1221 | version "5.0.0" 1222 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 1223 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1224 | dependencies: 1225 | p-limit "^3.0.2" 1226 | 1227 | p-try@^2.0.0: 1228 | version "2.2.0" 1229 | resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" 1230 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1231 | 1232 | parent-module@^1.0.0: 1233 | version "1.0.1" 1234 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1235 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1236 | dependencies: 1237 | callsites "^3.0.0" 1238 | 1239 | path-browserify@^1.0.1: 1240 | version "1.0.1" 1241 | resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" 1242 | integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== 1243 | 1244 | path-exists@^4.0.0: 1245 | version "4.0.0" 1246 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 1247 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1248 | 1249 | path-is-absolute@^1.0.0: 1250 | version "1.0.1" 1251 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1252 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1253 | 1254 | path-key@^3.1.0: 1255 | version "3.1.1" 1256 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1257 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1258 | 1259 | path-type@^4.0.0: 1260 | version "4.0.0" 1261 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 1262 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1263 | 1264 | picocolors@^1.1.0: 1265 | version "1.1.1" 1266 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" 1267 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== 1268 | 1269 | picomatch@^2.3.1: 1270 | version "2.3.1" 1271 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1272 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1273 | 1274 | pidtree@^0.6.0: 1275 | version "0.6.0" 1276 | resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" 1277 | integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== 1278 | 1279 | pkg-dir@^4.1.0: 1280 | version "4.2.0" 1281 | resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" 1282 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1283 | dependencies: 1284 | find-up "^4.0.0" 1285 | 1286 | postcss-selector-parser@^6.0.15: 1287 | version "6.1.2" 1288 | resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" 1289 | integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== 1290 | dependencies: 1291 | cssesc "^3.0.0" 1292 | util-deprecate "^1.0.2" 1293 | 1294 | postcss@^8.4.43, postcss@^8.4.47: 1295 | version "8.4.47" 1296 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz" 1297 | integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== 1298 | dependencies: 1299 | nanoid "^3.3.7" 1300 | picocolors "^1.1.0" 1301 | source-map-js "^1.2.1" 1302 | 1303 | prelude-ls@^1.2.1: 1304 | version "1.2.1" 1305 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 1306 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1307 | 1308 | prettier-linter-helpers@^1.0.0: 1309 | version "1.0.0" 1310 | resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" 1311 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 1312 | dependencies: 1313 | fast-diff "^1.1.2" 1314 | 1315 | prettier@^3.0.3, "prettier@>= 3.0.0", prettier@>=3.0.0: 1316 | version "3.3.3" 1317 | resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz" 1318 | integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== 1319 | 1320 | punycode@^2.1.0: 1321 | version "2.3.1" 1322 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" 1323 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 1324 | 1325 | queue-microtask@^1.2.2: 1326 | version "1.2.3" 1327 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1328 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1329 | 1330 | read-package-json-fast@^3.0.2: 1331 | version "3.0.2" 1332 | resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz" 1333 | integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== 1334 | dependencies: 1335 | json-parse-even-better-errors "^3.0.0" 1336 | npm-normalize-package-bin "^3.0.0" 1337 | 1338 | resolve-from@^4.0.0: 1339 | version "4.0.0" 1340 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1341 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1342 | 1343 | reusify@^1.0.4: 1344 | version "1.0.4" 1345 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1346 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1347 | 1348 | rimraf@^3.0.2: 1349 | version "3.0.2" 1350 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1351 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1352 | dependencies: 1353 | glob "^7.1.3" 1354 | 1355 | rollup@^4.20.0: 1356 | version "4.24.0" 1357 | resolved "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz" 1358 | integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg== 1359 | dependencies: 1360 | "@types/estree" "1.0.6" 1361 | optionalDependencies: 1362 | "@rollup/rollup-android-arm-eabi" "4.24.0" 1363 | "@rollup/rollup-android-arm64" "4.24.0" 1364 | "@rollup/rollup-darwin-arm64" "4.24.0" 1365 | "@rollup/rollup-darwin-x64" "4.24.0" 1366 | "@rollup/rollup-linux-arm-gnueabihf" "4.24.0" 1367 | "@rollup/rollup-linux-arm-musleabihf" "4.24.0" 1368 | "@rollup/rollup-linux-arm64-gnu" "4.24.0" 1369 | "@rollup/rollup-linux-arm64-musl" "4.24.0" 1370 | "@rollup/rollup-linux-powerpc64le-gnu" "4.24.0" 1371 | "@rollup/rollup-linux-riscv64-gnu" "4.24.0" 1372 | "@rollup/rollup-linux-s390x-gnu" "4.24.0" 1373 | "@rollup/rollup-linux-x64-gnu" "4.24.0" 1374 | "@rollup/rollup-linux-x64-musl" "4.24.0" 1375 | "@rollup/rollup-win32-arm64-msvc" "4.24.0" 1376 | "@rollup/rollup-win32-ia32-msvc" "4.24.0" 1377 | "@rollup/rollup-win32-x64-msvc" "4.24.0" 1378 | fsevents "~2.3.2" 1379 | 1380 | run-parallel@^1.1.9: 1381 | version "1.2.0" 1382 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1383 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1384 | dependencies: 1385 | queue-microtask "^1.2.2" 1386 | 1387 | semver@^6.0.0: 1388 | version "6.3.1" 1389 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" 1390 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 1391 | 1392 | semver@^7.3.6, semver@^7.5.4, semver@^7.6.3: 1393 | version "7.6.3" 1394 | resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" 1395 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 1396 | 1397 | shebang-command@^2.0.0: 1398 | version "2.0.0" 1399 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1400 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1401 | dependencies: 1402 | shebang-regex "^3.0.0" 1403 | 1404 | shebang-regex@^3.0.0: 1405 | version "3.0.0" 1406 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1407 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1408 | 1409 | shell-quote@^1.7.3: 1410 | version "1.8.1" 1411 | resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" 1412 | integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== 1413 | 1414 | slash@^3.0.0: 1415 | version "3.0.0" 1416 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 1417 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1418 | 1419 | source-map-js@^1.2.0, source-map-js@^1.2.1: 1420 | version "1.2.1" 1421 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" 1422 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== 1423 | 1424 | strip-ansi@^6.0.1: 1425 | version "6.0.1" 1426 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1427 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1428 | dependencies: 1429 | ansi-regex "^5.0.1" 1430 | 1431 | strip-json-comments@^3.1.1: 1432 | version "3.1.1" 1433 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1434 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1435 | 1436 | strip-outer@^1.0.1: 1437 | version "1.0.1" 1438 | resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" 1439 | integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== 1440 | dependencies: 1441 | escape-string-regexp "^1.0.2" 1442 | 1443 | supports-color@^7.1.0: 1444 | version "7.2.0" 1445 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1446 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1447 | dependencies: 1448 | has-flag "^4.0.0" 1449 | 1450 | synckit@^0.9.1: 1451 | version "0.9.2" 1452 | resolved "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz" 1453 | integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== 1454 | dependencies: 1455 | "@pkgr/core" "^0.1.0" 1456 | tslib "^2.6.2" 1457 | 1458 | text-table@^0.2.0: 1459 | version "0.2.0" 1460 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 1461 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1462 | 1463 | to-fast-properties@^2.0.0: 1464 | version "2.0.0" 1465 | resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" 1466 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 1467 | 1468 | to-regex-range@^5.0.1: 1469 | version "5.0.1" 1470 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1471 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1472 | dependencies: 1473 | is-number "^7.0.0" 1474 | 1475 | trim-repeated@^1.0.0: 1476 | version "1.0.0" 1477 | resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" 1478 | integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== 1479 | dependencies: 1480 | escape-string-regexp "^1.0.2" 1481 | 1482 | ts-api-utils@^1.0.1: 1483 | version "1.3.0" 1484 | resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz" 1485 | integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== 1486 | 1487 | tslib@^2.6.2: 1488 | version "2.8.0" 1489 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz" 1490 | integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== 1491 | 1492 | type-check@^0.4.0, type-check@~0.4.0: 1493 | version "0.4.0" 1494 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 1495 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1496 | dependencies: 1497 | prelude-ls "^1.2.1" 1498 | 1499 | type-fest@^0.20.2: 1500 | version "0.20.2" 1501 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1502 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1503 | 1504 | typescript@*, typescript@>=4.2.0, typescript@~5.3.0: 1505 | version "5.3.3" 1506 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" 1507 | integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== 1508 | 1509 | undici-types@~5.26.4: 1510 | version "5.26.5" 1511 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" 1512 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1513 | 1514 | universalify@^2.0.0: 1515 | version "2.0.1" 1516 | resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" 1517 | integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== 1518 | 1519 | uri-js@^4.2.2: 1520 | version "4.4.1" 1521 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 1522 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1523 | dependencies: 1524 | punycode "^2.1.0" 1525 | 1526 | util-deprecate@^1.0.2: 1527 | version "1.0.2" 1528 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 1529 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1530 | 1531 | "vite@^4.0.0 || ^5.0.0", vite@^5.0.10: 1532 | version "5.4.9" 1533 | resolved "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz" 1534 | integrity sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg== 1535 | dependencies: 1536 | esbuild "^0.21.3" 1537 | postcss "^8.4.43" 1538 | rollup "^4.20.0" 1539 | optionalDependencies: 1540 | fsevents "~2.3.3" 1541 | 1542 | "vue-drag-scroller@file:../../../.nvm/versions/node/v20.18.0/lib/node_modules/vue-drag-scroller": 1543 | version "1.8.5" 1544 | resolved "file:../../../.nvm/versions/node/v20.18.0/lib/node_modules/vue-drag-scroller" 1545 | dependencies: 1546 | vue "^3.3.11" 1547 | 1548 | vue-eslint-parser@^9.3.1, vue-eslint-parser@^9.4.3: 1549 | version "9.4.3" 1550 | resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz" 1551 | integrity sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg== 1552 | dependencies: 1553 | debug "^4.3.4" 1554 | eslint-scope "^7.1.1" 1555 | eslint-visitor-keys "^3.3.0" 1556 | espree "^9.3.1" 1557 | esquery "^1.4.0" 1558 | lodash "^4.17.21" 1559 | semver "^7.3.6" 1560 | 1561 | vue-template-compiler@^2.7.14: 1562 | version "2.7.16" 1563 | resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz" 1564 | integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== 1565 | dependencies: 1566 | de-indent "^1.0.2" 1567 | he "^1.2.0" 1568 | 1569 | vue-tsc@^1.8.25: 1570 | version "1.8.27" 1571 | resolved "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz" 1572 | integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== 1573 | dependencies: 1574 | "@volar/typescript" "~1.11.1" 1575 | "@vue/language-core" "1.8.27" 1576 | semver "^7.5.4" 1577 | 1578 | vue@^3.2.25, vue@^3.3.11, vue@3.5.12: 1579 | version "3.5.12" 1580 | resolved "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz" 1581 | integrity sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg== 1582 | dependencies: 1583 | "@vue/compiler-dom" "3.5.12" 1584 | "@vue/compiler-sfc" "3.5.12" 1585 | "@vue/runtime-dom" "3.5.12" 1586 | "@vue/server-renderer" "3.5.12" 1587 | "@vue/shared" "3.5.12" 1588 | 1589 | which@^2.0.1: 1590 | version "2.0.2" 1591 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1592 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1593 | dependencies: 1594 | isexe "^2.0.0" 1595 | 1596 | word-wrap@^1.2.5: 1597 | version "1.2.5" 1598 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" 1599 | integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== 1600 | 1601 | wrappy@1: 1602 | version "1.0.2" 1603 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1604 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1605 | 1606 | xml-name-validator@^4.0.0: 1607 | version "4.0.0" 1608 | resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" 1609 | integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== 1610 | 1611 | yocto-queue@^0.1.0: 1612 | version "0.1.0" 1613 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1614 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1615 | --------------------------------------------------------------------------------