├── .docs
├── .gitignore
├── public
│ ├── cactus.jpg
│ ├── logo.svg
│ ├── layers-black.svg
│ ├── layers-white.svg
│ ├── mix-black.svg
│ ├── mix-white.svg
│ ├── spartial-black.svg
│ └── spartial-white.svg
├── .vitepress
│ ├── theme
│ │ ├── Layout.vue
│ │ ├── custom.css
│ │ └── index.js
│ ├── components
│ │ ├── examples
│ │ │ ├── BasicCarousel.vue
│ │ │ ├── ImageCarousel.vue
│ │ │ ├── MultipleCarousel.vue
│ │ │ ├── RandomCarousel.vue
│ │ │ ├── AutoplayCarousel.vue
│ │ │ └── PreviewCarousel.vue
│ │ └── HeroCarousel.vue
│ └── config.js
├── package.json
├── getting-started.md
├── index.md
├── api.md
└── examples.md
├── static
├── snap.jpg
├── cactus.jpg
├── logo-snap.jpg
└── snap.svg
├── examples
├── nuxt-app
│ ├── server
│ │ └── tsconfig.json
│ ├── tsconfig.json
│ ├── plugins
│ │ └── vue-snap.ts
│ ├── nuxt.config.ts
│ ├── .gitignore
│ ├── package.json
│ ├── app.vue
│ └── README.md
└── vite
│ ├── main.js
│ ├── index.html
│ ├── vite.config.js
│ ├── package.json
│ └── App.vue
├── tea.yaml
├── tsconfig.json
├── .npmignore
├── .gitignore
├── .editorconfig
├── src
├── entry.ts
├── components
│ ├── Slide.vue
│ └── Carousel.vue
├── utils
│ └── helpers.ts
└── hooks
│ └── useCarousel.ts
├── tsconfig.app.json
├── dist
├── vue-snap.css
├── vue-snap.js
├── vue-snap.umd.js
└── vue-snap.es.js
├── config
└── vite.config.ts
├── .github
└── workflows
│ └── main.yml
├── tsconfig.node.json
├── LICENSE.md
├── eslint.config.js
├── package.json
├── README.md
├── CHANGELOG.md
└── pnpm-lock.yaml
/.docs/.gitignore:
--------------------------------------------------------------------------------
1 | .vercel
2 | .vitepress/cache
3 | .vitepress/dist
4 |
--------------------------------------------------------------------------------
/static/snap.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bartdominiak/vue-snap/HEAD/static/snap.jpg
--------------------------------------------------------------------------------
/static/cactus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bartdominiak/vue-snap/HEAD/static/cactus.jpg
--------------------------------------------------------------------------------
/static/logo-snap.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bartdominiak/vue-snap/HEAD/static/logo-snap.jpg
--------------------------------------------------------------------------------
/.docs/public/cactus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bartdominiak/vue-snap/HEAD/.docs/public/cactus.jpg
--------------------------------------------------------------------------------
/examples/nuxt-app/server/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../.nuxt/tsconfig.server.json"
3 | }
4 |
--------------------------------------------------------------------------------
/examples/nuxt-app/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // https://nuxt.com/docs/guide/concepts/typescript
3 | "extends": "./.nuxt/tsconfig.json"
4 | }
5 |
--------------------------------------------------------------------------------
/tea.yaml:
--------------------------------------------------------------------------------
1 | # https://tea.xyz/what-is-this-file
2 | ---
3 | version: 1.0.0
4 | codeOwners:
5 | - '0x3093770c121DB913F50758a167C31F786D270CB3'
6 | quorum: 1
7 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/nuxt-app/plugins/vue-snap.ts:
--------------------------------------------------------------------------------
1 | import VueSnap from 'vue-snap'
2 |
3 | export default defineNuxtPlugin((nuxtApp) => {
4 | nuxtApp.vueApp.use(VueSnap);
5 | })
6 |
--------------------------------------------------------------------------------
/examples/nuxt-app/nuxt.config.ts:
--------------------------------------------------------------------------------
1 | // https://nuxt.com/docs/api/configuration/nuxt-config
2 | export default defineNuxtConfig({
3 | css: [ 'vue-snap/dist/vue-snap.css']
4 | })
5 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | scripts
2 | static
3 | config
4 | storybook-static
5 | examples
6 | .travis.yml
7 | .eslintrc
8 | .editorconfig
9 | .gitignore
10 | .docs
11 | .github
12 | .husky
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | // Common
2 | node_modules
3 | .DS_Store
4 |
5 | // Analyser
6 | dist/stats.json
7 | dist/report.html
8 |
9 | .vercel
10 | .docs/.vitepress/dist
11 | .docs/.vitepress/cache
12 |
--------------------------------------------------------------------------------
/examples/vite/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 |
4 | import VueSnap from 'vue-snap'
5 | import 'vue-snap/dist/vue-snap.css'
6 |
7 | const myApp = createApp(App)
8 |
9 | myApp.use(VueSnap)
10 | myApp.mount('#app')
11 |
--------------------------------------------------------------------------------
/examples/vite/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Vite App
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | end_of_line = lf
5 | charset = utf-8
6 | trim_trailing_whitespace = true
7 | insert_final_newline = true
8 |
9 | [*.{css,scss}]
10 | indent_style = space
11 | indent_size = 4
12 |
13 | [*.{js,json,vue}]
14 | indent_style = space
15 | indent_size = 2
16 |
--------------------------------------------------------------------------------
/examples/nuxt-app/.gitignore:
--------------------------------------------------------------------------------
1 | # Nuxt dev/build outputs
2 | .output
3 | .data
4 | .nuxt
5 | .nitro
6 | .cache
7 | dist
8 |
9 | # Node dependencies
10 | node_modules
11 |
12 | # Logs
13 | logs
14 | *.log
15 |
16 | # Misc
17 | .DS_Store
18 | .fleet
19 | .idea
20 |
21 | # Local env files
22 | .env
23 | .env.*
24 | !.env.example
25 |
--------------------------------------------------------------------------------
/examples/vite/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import vue from "@vitejs/plugin-vue";
3 | import vueDevTools from "vite-plugin-vue-devtools";
4 | import { createHtmlPlugin } from "vite-plugin-html";
5 |
6 | // https://vite.dev/config/
7 | export default defineConfig({
8 | plugins: [ vue(), vueDevTools(), createHtmlPlugin({} )],
9 | });
10 |
--------------------------------------------------------------------------------
/src/entry.ts:
--------------------------------------------------------------------------------
1 | import type { App } from 'vue'
2 | import Carousel from './components/Carousel.vue'
3 | import Slide from './components/Slide.vue'
4 |
5 | export const VueSnap = {
6 | install: (app: App) => {
7 | app.component('Carousel', Carousel)
8 | app.component('Slide', Slide)
9 | }
10 | }
11 |
12 | export { Carousel, Slide };
13 |
14 | export default VueSnap;
15 |
--------------------------------------------------------------------------------
/.docs/.vitepress/theme/Layout.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
--------------------------------------------------------------------------------
/src/components/Slide.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
25 |
--------------------------------------------------------------------------------
/examples/vite/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite",
3 | "version": "0.1.0",
4 | "scripts": {
5 | "dev": "vite",
6 | "build": "vite build"
7 | },
8 | "dependencies": {
9 | "vue": "^3.5.16",
10 | "vue-snap": "^1.1.0"
11 | },
12 | "devDependencies": {
13 | "@vitejs/plugin-vue": "^5.2.4",
14 | "vite": "^6.3.5",
15 | "vite-plugin-html": "^3.2.2",
16 | "vite-plugin-vue-devtools": "^7.7.7"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/examples/nuxt-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nuxt-app",
3 | "private": true,
4 | "type": "module",
5 | "scripts": {
6 | "build": "nuxt build",
7 | "dev": "nuxt dev",
8 | "generate": "nuxt generate",
9 | "preview": "nuxt preview",
10 | "postinstall": "nuxt prepare"
11 | },
12 | "dependencies": {
13 | "nuxt": "^3.17.5",
14 | "vue": "^3.5.16",
15 | "vue-router": "^4.5.1",
16 | "vue-snap": "^1.1.0"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@vue/tsconfig/tsconfig.dom.json",
3 | "compilerOptions": {
4 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5 |
6 | /* Linting */
7 | "strict": true,
8 | "noUnusedLocals": true,
9 | "noUnusedParameters": true,
10 | "erasableSyntaxOnly": true,
11 | "noFallthroughCasesInSwitch": true,
12 | "noUncheckedSideEffectImports": true
13 | },
14 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
15 | }
16 |
--------------------------------------------------------------------------------
/.docs/.vitepress/theme/custom.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --vp-c-brand-1: var(--vp-c-green-1);
3 | --vp-c-brand-2: var(--vp-c-green-2);
4 | --vp-c-brand-3: var(--vp-c-green-3);
5 | }
6 |
7 | .image-container {
8 | all: unset!important;
9 | }
10 |
11 | /* .image {
12 | all: unset!important;
13 | }
14 |
15 | @media (min-width: 960px) {
16 | .image {
17 | flex-grow: 1;
18 | order: 2;
19 | margin: 0;
20 | min-height: 100%;
21 | }
22 | } */
23 |
24 | .image {
25 | margin: 20px auto!important;
26 | }
27 |
28 | .image-bg {
29 | all: unset!important;
30 | }
31 |
--------------------------------------------------------------------------------
/dist/vue-snap.css:
--------------------------------------------------------------------------------
1 | .vs-carousel{position:relative}.vs-carousel__wrapper{display:flex;overflow-x:scroll;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;margin:0;padding:0;list-style:none}.vs-carousel__slide{flex:0 0 100%;height:100%;scroll-snap-align:start;display:flex;justify-content:center;align-items:center;outline:none;margin:0;padding:0}.vs-carousel__arrows{position:absolute;top:0;bottom:0;margin:auto;width:48px;height:48px;padding:0;cursor:pointer;border:0}.vs-carousel__arrows:disabled{cursor:not-allowed}.vs-carousel__arrows--left{left:0}.vs-carousel__arrows--right{right:0}
2 |
--------------------------------------------------------------------------------
/.docs/public/logo.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/.docs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "docs",
3 | "version": "0.7.1",
4 | "description": "Vue Snap documentation site",
5 | "type": "module",
6 | "engines": {
7 | "node": ">=18"
8 | },
9 | "devDependencies": {
10 | "lodash": "^4.17.21",
11 | "sass-embedded": "^1.89.2",
12 | "vite": "^6.3.5",
13 | "vite-plugin-html": "^3.2.2",
14 | "vite-plugin-vue-devtools": "^7.7.7",
15 | "vitepress": "^1.6.3"
16 | },
17 | "scripts": {
18 | "docs:dev": "vitepress dev",
19 | "docs:build": "vitepress build",
20 | "docs:preview": "vitepress preview"
21 | },
22 | "dependencies": {
23 | "vitepress-plugin-group-icons": "^1.6.0",
24 | "vue-snap": "^1.1.0"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/config/vite.config.ts:
--------------------------------------------------------------------------------
1 | import vue from '@vitejs/plugin-vue';
2 | import { resolve } from 'path';
3 |
4 | import { defineConfig } from 'vite'
5 |
6 | export default defineConfig({
7 | plugins: [ vue() ],
8 | build: {
9 | minify: true,
10 | lib: {
11 | entry: resolve(__dirname, '../src/entry.ts'),
12 | name: 'VueSnap',
13 | formats: ['es', 'umd', 'iife'],
14 | fileName: (format) => {
15 | if (format === 'iife') return 'vue-snap.js';
16 | return `vue-snap.${format}.js`;
17 | }
18 | },
19 | rollupOptions: {
20 | external: ['vue'],
21 | output: {
22 | globals: {
23 | vue: 'Vue',
24 | }
25 | }
26 | }
27 | }
28 | });
29 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on: [push]
4 |
5 | jobs:
6 | test:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - name: Checkout
10 | uses: actions/checkout@v4
11 |
12 | - uses: pnpm/action-setup@v4
13 | name: Install pnpm
14 | with:
15 | version: 10
16 | run_install: false
17 |
18 | - name: Install Node.js
19 | uses: actions/setup-node@v4
20 | with:
21 | node-version: '22.16'
22 | cache: 'pnpm'
23 |
24 | - name: Install dependencies
25 | run: pnpm install
26 |
27 | - name: Run linter
28 | run: pnpm lint
29 |
30 | - name: Run tests
31 | run: pnpm test
32 |
33 | - name: Run release
34 | run: pnpm release
35 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4 | "target": "ES2022",
5 | "lib": ["dom", "ES2023"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "verbatimModuleSyntax": true,
13 | "moduleDetection": "force",
14 | "noEmit": true,
15 |
16 | /* Linting */
17 | "strict": true,
18 | "noUnusedLocals": true,
19 | "noUnusedParameters": true,
20 | "erasableSyntaxOnly": true,
21 | "noFallthroughCasesInSwitch": true,
22 | "noUncheckedSideEffectImports": true
23 | },
24 | "include": ["vite.config.ts", "src/**/*.ts", "src/**/*.vue"]
25 | }
26 |
--------------------------------------------------------------------------------
/.docs/.vitepress/components/examples/BasicCarousel.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Slide {{ slide + 1 }}
5 |
6 |
7 |
8 |
9 |
12 |
13 |
14 |
38 |
--------------------------------------------------------------------------------
/static/snap.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/src/utils/helpers.ts:
--------------------------------------------------------------------------------
1 | export const isClient = typeof window !== 'undefined'
2 |
3 | export const approximatelyEqual = (v1: number, v2: number, epsilon = 5): boolean => {
4 | return Math.abs(v1 - v2) <= epsilon
5 | }
6 |
7 | export function debounce void>(
8 | fn: T,
9 | wait: number
10 | ): {
11 | (...args: Parameters): void;
12 | cancel: () => void;
13 | } {
14 | let timeoutId: ReturnType | null = null;
15 |
16 | const debounced = (...args: Parameters) => {
17 | if (timeoutId) clearTimeout(timeoutId);
18 | timeoutId = setTimeout(() => {
19 | fn(...args);
20 | }, wait);
21 | };
22 |
23 | debounced.cancel = () => {
24 | if (timeoutId) clearTimeout(timeoutId);
25 | timeoutId = null;
26 | };
27 |
28 | return debounced;
29 | }
30 |
--------------------------------------------------------------------------------
/.docs/.vitepress/components/examples/ImageCarousel.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
12 |
13 |
39 |
--------------------------------------------------------------------------------
/examples/vite/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Slide {{ slide + 1 }}
5 |
6 |
7 |
8 |
9 |
12 |
13 |
45 |
--------------------------------------------------------------------------------
/.docs/.vitepress/components/examples/MultipleCarousel.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Slide {{ slide + 1 }}
5 |
6 |
7 |
8 |
9 |
12 |
13 |
47 |
--------------------------------------------------------------------------------
/examples/nuxt-app/app.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Slide 1
5 |
6 |
7 | Slide 2
8 |
9 |
10 | Slide 3
11 |
12 |
13 | Slide 4
14 |
15 |
16 | Slide 5
17 |
18 |
19 |
20 |
21 |
51 |
--------------------------------------------------------------------------------
/.docs/public/layers-black.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/.docs/public/layers-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 brt
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/examples/nuxt-app/README.md:
--------------------------------------------------------------------------------
1 | # Nuxt Minimal Starter
2 |
3 | Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
4 |
5 | ## Setup
6 |
7 | Make sure to install dependencies:
8 |
9 | ```bash
10 | # npm
11 | npm install
12 |
13 | # pnpm
14 | pnpm install
15 |
16 | # yarn
17 | yarn install
18 |
19 | # bun
20 | bun install
21 | ```
22 |
23 | ## Development Server
24 |
25 | Start the development server on `http://localhost:3000`:
26 |
27 | ```bash
28 | # npm
29 | npm run dev
30 |
31 | # pnpm
32 | pnpm dev
33 |
34 | # yarn
35 | yarn dev
36 |
37 | # bun
38 | bun run dev
39 | ```
40 |
41 | ## Production
42 |
43 | Build the application for production:
44 |
45 | ```bash
46 | # npm
47 | npm run build
48 |
49 | # pnpm
50 | pnpm build
51 |
52 | # yarn
53 | yarn build
54 |
55 | # bun
56 | bun run build
57 | ```
58 |
59 | Locally preview production build:
60 |
61 | ```bash
62 | # npm
63 | npm run preview
64 |
65 | # pnpm
66 | pnpm preview
67 |
68 | # yarn
69 | yarn preview
70 |
71 | # bun
72 | bun run preview
73 | ```
74 |
75 | Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
76 |
--------------------------------------------------------------------------------
/.docs/getting-started.md:
--------------------------------------------------------------------------------
1 | # Getting started
2 |
3 | ## Requirements
4 | - **Vue 3**
5 | - **Node.js v20+**
6 |
7 | ## Installation
8 |
9 | ::: code-group
10 |
11 | ```bash [npm]
12 | npm install vue-snap
13 | ```
14 |
15 | ```bash [pnpm]
16 | pnpm install vue-snap
17 | ```
18 |
19 | ```bash [yarn]
20 | yarn install vue-snap
21 | ```
22 |
23 | :::
24 |
25 | ## Global Registration
26 | ```js
27 | import { createApp } from 'vue';
28 | import VueSnap from 'vue-snap';
29 | import 'vue-snap/dist/vue-snap.css';
30 |
31 | const myApp = createApp(App);
32 |
33 | myApp.use(VueSnap);
34 | ```
35 |
36 | ## Local Registration
37 | ```js
38 | import { Carousel, Slide } from 'vue-snap';
39 | import 'vue-snap/dist/vue-snap.css';
40 |
41 | export default {
42 | components: {
43 | Carousel,
44 | Slide
45 | }
46 | };
47 | ```
48 |
49 | ## Nuxt
50 |
51 | ### 1. Create a plugin
52 |
53 | `plugins/vue-snap.ts`
54 |
55 | ```ts
56 | import VueSnap from 'vue-snap'
57 |
58 | export default defineNuxtPlugin((nuxtApp) => {
59 | nuxtApp.vueApp.use(VueSnap);
60 | });
61 | ```
62 |
63 | ### 2. Import Styles
64 |
65 | `nuxt.config.ts`
66 |
67 | ```ts
68 | export default defineNuxtConfig({
69 | css: ['vue-snap/dist/vue-snap.css']
70 | });
71 | ```
72 |
--------------------------------------------------------------------------------
/.docs/public/mix-black.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/.docs/public/mix-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/.docs/public/spartial-black.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/.docs/public/spartial-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/.docs/.vitepress/components/examples/RandomCarousel.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | Slide {{ slide + 1 }}
8 |
9 |
10 |
11 |
12 |
25 |
26 |
60 |
--------------------------------------------------------------------------------
/.docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: home
3 |
4 | hero:
5 | name: "Vue Snap"
6 | text: "Scroll Snap Carousel"
7 | actions:
8 | - theme: brand
9 | text: Getting started
10 | link: /getting-started
11 | - theme: alt
12 | text: Examples
13 | link: /examples
14 | features:
15 | - icon:
16 | light: /mix-black.svg
17 | dark: /mix-white.svg
18 | title: Lightweight
19 | details: Just 4KB, fast and efficient.
20 | - icon:
21 | light: /layers-black.svg
22 | dark: /layers-white.svg
23 | title: Modern
24 | details: Built with native CSS Scroll Snapping.
25 | - icon:
26 | light: /spartial-black.svg
27 | dark: /spartial-white.svg
28 | title: Modular
29 | details: Easily customizable, with minimal effort.
30 | ---
31 |
32 | ### About
33 | The idea behind this plugin is to create a fully responsive and well-optimized carousel. We’ve used modern CSS features like [Scroll Snapping](https://developers.google.com/web/updates/2018/07/css-scroll-snap), which allows the carousel wrapper to lock onto specific slides or positions after the user finishes scrolling. This approach helps us minimize the library size by including only the essential parts, and it avoids heavy JavaScript computations or CSS hacks.
34 |
35 |
36 | ### Examples
37 |
38 |
39 |
--------------------------------------------------------------------------------
/.docs/.vitepress/config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vitepress'
2 | import { groupIconMdPlugin, groupIconVitePlugin } from 'vitepress-plugin-group-icons'
3 |
4 | // https://vitepress.dev/reference/site-config
5 | export default defineConfig({
6 | lang: 'en-US',
7 | title: "VueSnap",
8 | description: "CSS Scroll Snap Carousel",
9 | themeConfig: {
10 | logo: '/logo.svg',
11 | nav: [
12 | { text: 'Home', link: '/' },
13 | { text: 'Getting Started', link: '/getting-started' },
14 | { text: 'Examples', link: '/examples' },
15 | { text: 'API', link: '/api' },
16 | ],
17 |
18 | sidebar: [
19 | {
20 | text: 'VueSnap',
21 | items: [
22 | { text: 'Getting Started', link: '/getting-started' },
23 | { text: 'Examples', link: '/examples' },
24 | { text: 'API', link: '/api' },
25 | ]
26 | },
27 | ],
28 |
29 | socialLinks: [
30 | { icon: 'github', link: 'https://github.com/bartdominiak/vue-snap' }
31 | ],
32 | footer: {
33 | // message: 'Released under the MIT License',
34 | copyright: 'Copyright © 2025'
35 | }
36 | },
37 | markdown: {
38 | config(md) {
39 | md.use(groupIconMdPlugin)
40 | },
41 | },
42 | vite: {
43 | plugins: [
44 | groupIconVitePlugin(),
45 | ],
46 | }
47 | })
48 |
--------------------------------------------------------------------------------
/.docs/.vitepress/theme/index.js:
--------------------------------------------------------------------------------
1 | // .vitepress/theme/index.js
2 | import MyLayout from './Layout.vue';
3 | import HeroCarousel from '../components/HeroCarousel.vue';
4 | import BasicCarousel from '../components/examples/BasicCarousel.vue';
5 | import MultipleCarousel from '../components/examples/MultipleCarousel.vue';
6 | import ImageCarousel from '../components/examples/ImageCarousel.vue';
7 | import PreviewCarousel from '../components/examples/PreviewCarousel.vue';
8 | import AutoplayCarousel from '../components/examples/AutoplayCarousel.vue';
9 | import RandomCarousel from '../components/examples/RandomCarousel.vue';
10 | import DefaultTheme from 'vitepress/theme';
11 | import VueSnap from 'vue-snap';
12 | import 'vue-snap/dist/vue-snap.css';
13 | import './custom.css';
14 | import 'virtual:group-icons.css';
15 |
16 | export default {
17 | extends: DefaultTheme,
18 | Layout: MyLayout,
19 | enhanceApp({ app }) {
20 | app.component('HeroCarousel', HeroCarousel);
21 | app.component('BasicCarousel', BasicCarousel);
22 | app.component('MultipleCarousel', MultipleCarousel);
23 | app.component('ImageCarousel', ImageCarousel);
24 | app.component('PreviewCarousel', PreviewCarousel);
25 | app.component('AutoplayCarousel', AutoplayCarousel);
26 | app.component('RandomCarousel', RandomCarousel);
27 | app.use(VueSnap);
28 | },
29 | }
30 |
--------------------------------------------------------------------------------
/eslint.config.js:
--------------------------------------------------------------------------------
1 | import globals from "globals";
2 | import pluginVue from "eslint-plugin-vue";
3 | import pluginTS from "@typescript-eslint/eslint-plugin";
4 | import tsParser from "@typescript-eslint/parser";
5 | import vueParser from "vue-eslint-parser";
6 | import { defineConfig } from "eslint/config";
7 |
8 | export default defineConfig([
9 | {
10 | files: ["**/*.js"],
11 | languageOptions: {
12 | sourceType: "script",
13 | globals: globals.browser,
14 | },
15 | },
16 |
17 | {
18 | files: ["**/*.{ts}"],
19 | languageOptions: {
20 | globals: globals.browser,
21 | parser: tsParser,
22 | parserOptions: {
23 | ecmaVersion: 2023,
24 | sourceType: "module",
25 | ecmaFeatures: {
26 | jsx: true,
27 | },
28 | },
29 | },
30 | plugins: {
31 | "@typescript-eslint": pluginTS,
32 | }
33 | },
34 |
35 | {
36 | files: ["**/*.vue"],
37 | languageOptions: {
38 | globals: globals.browser,
39 | parser: vueParser,
40 | parserOptions: {
41 | parser: tsParser,
42 | ecmaVersion: 2023,
43 | sourceType: "module",
44 | extraFileExtensions: [".vue"],
45 | },
46 | },
47 | plugins: {
48 | vue: pluginVue,
49 | "@typescript-eslint": pluginTS,
50 | },
51 | },
52 |
53 | pluginVue.configs["flat/recommended"],
54 | {
55 | rules: {
56 | 'vue/multi-word-component-names': 'off',
57 | },
58 | },
59 | ]);
60 |
--------------------------------------------------------------------------------
/.docs/.vitepress/components/examples/AutoplayCarousel.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 | Slide {{ slide + 1 }}
10 |
11 |
12 |
13 |
14 |
35 |
36 |
70 |
--------------------------------------------------------------------------------
/.docs/.vitepress/components/HeroCarousel.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 | Slide {{ slide + 1 }}
10 |
11 |
12 |
13 |
14 |
35 |
36 |
68 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-snap",
3 | "version": "1.1.0",
4 | "type": "module",
5 | "description": "Lightweight Carousel based on CSS Scroll Snap",
6 | "main": "dist/vue-snap.umd.js",
7 | "module": "dist/vue-snap.es.js",
8 | "unpkg": "dist/vue-snap.js",
9 | "engines": {
10 | "node": ">=20"
11 | },
12 | "exports": {
13 | ".": {
14 | "import": "./dist/vue-snap.es.js",
15 | "require": "./dist/vue-snap.umd.js"
16 | },
17 | "./dist/vue-snap.css": "./dist/vue-snap.css"
18 | },
19 | "scripts": {
20 | "release": "vue-tsc -b && vite build -c ./config/vite.config.ts",
21 | "lint": "eslint 'src/**/*.{ts,vue}'",
22 | "test": "test --passWithNoTests"
23 | },
24 | "repository": {
25 | "type": "git",
26 | "url": "https://github.com/bartdominiak/vue-snap.git"
27 | },
28 | "keywords": [
29 | "vue",
30 | "vue-snap",
31 | "carousel",
32 | "slider",
33 | "scroll-snap"
34 | ],
35 | "author": "smugers@gmail.com",
36 | "license": "MIT",
37 | "bugs": {
38 | "url": "https://github.com/bartdominiak/vue-snap/issues"
39 | },
40 | "homepage": "https://github.com/bartdominiak/vue-snap#README",
41 | "peerDependencies": {
42 | "vue": "^3.5.16"
43 | },
44 | "devDependencies": {
45 | "@eslint/eslintrc": "^3.3.1",
46 | "@eslint/js": "^9.29.0",
47 | "@typescript-eslint/eslint-plugin": "^8.34.1",
48 | "@typescript-eslint/parser": "^8.34.1",
49 | "@vitejs/plugin-vue": "^5.2.4",
50 | "@vue/tsconfig": "^0.7.0",
51 | "eslint": "^9.29.0",
52 | "eslint-plugin-vue": "^10.2.0",
53 | "globals": "^16.2.0",
54 | "lodash": "^4.17.21",
55 | "sass-embedded": "^1.89.2",
56 | "typescript": "~5.8.3",
57 | "vite": "^6.3.5",
58 | "vue-eslint-parser": "^10.1.3",
59 | "vue-tsc": "^2.2.10"
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/.docs/api.md:
--------------------------------------------------------------------------------
1 | # API
2 |
3 | # Vue Snap Carousel – API
4 |
5 | ## Props
6 |
7 | | Prop | Type | Default | Description |
8 | |---------------------|---------|-------------------------------------------------------|----------------------------------------------------|
9 | | `hideArrows` | Boolean | `false` | Hides navigation arrows |
10 | | `hideArrowsOnBound` | Boolean | `false` | Hides arrows when at the first or last slide |
11 | | `tag` | String | `'ul'` | HTML tag used for the slide container |
12 | | `i18n` | Object | `{ slideLeft: 'Slide left', slideRight: 'Slide right' }` | Translations for accessibility and tooltips |
13 |
14 | ## Events
15 |
16 | | Event | Payload | Description |
17 | |----------------|------------|------------------------------------------|
18 | | `mounted` | - | Emitted when the carousel is mounted |
19 | | `slide-change` | `Number` | Emitted on slide change (new index) |
20 | | `left-bound` | `Boolean` | Emitted when the first slide is reached |
21 | | `right-bound` | `Boolean` | Emitted when the last slide is reached |
22 |
23 | ## Slots
24 |
25 | | Slot | Description |
26 | |-----------|--------------------------------|
27 | | `default` | Slot for slide content |
28 | | `arrows` | Slot for custom arrow controls |
29 |
30 | ## Functions
31 |
32 | | Method | Parameters | Description |
33 | |---------------|-------------------------------|-----------------------------------------------|
34 | | `goToSlide` | `index: Number` | Navigates to a specific slide by index |
35 | | `changeSlide` | `direction: Number (1 or -1)` | Moves forward (1) or backward (-1) one slide |
36 |
--------------------------------------------------------------------------------
/dist/vue-snap.js:
--------------------------------------------------------------------------------
1 | var VueSnap=function(c,e){"use strict";const b=typeof window<"u",C=(l,t,n=5)=>Math.abs(l-t)<=n;function k(l,t){let n=null;const i=(...d)=>{n&&clearTimeout(n),n=setTimeout(()=>{l(...d)},t)};return i.cancel=()=>{n&&clearTimeout(n),n=null},i}const E=100;function T(l,t){const n=e.ref(!0),i=e.ref(!1),d=e.ref(0),a=()=>t.value?Array.from(t.value.children??[]).map(o=>({offsetLeft:o.offsetLeft,offsetWidth:o.offsetWidth})):[],S=o=>t.value?o.findIndex(({offsetLeft:s})=>C(s,t.value.scrollLeft,10)):-1,h=o=>{if(!t.value)return;const{scrollLeft:s,offsetWidth:f,scrollWidth:B}=t.value;o!==d.value&&l("slideChange",o),d.value=o;const _=o===0,O=C(s+f,B,10);_?(n.value=!0,l("leftBound",!0)):n.value=!1,O?(i.value=!0,l("rightBound",!0)):i.value=!1},m=o=>{const s=a(),f=S(s);if(f===-1)return;const B=f+o,_=s[B];!_||!t.value||t.value.scrollTo({left:_.offsetLeft,behavior:"smooth"})},r=o=>{const f=a()[o];!f||!t.value||t.value.scrollTo({left:f.offsetLeft,behavior:"smooth"})},u=()=>{const o=a(),s=S(o);s!==-1&&h(s)},g=k(u,E);return e.onMounted(()=>{!b||!t.value||(u(),t.value.addEventListener("scroll",g),l("mounted",!0))}),e.onBeforeUnmount(()=>{!b||!t.value||t.value.removeEventListener("scroll",g)}),{goToSlide:r,changeSlide:m,isBoundLeft:n,isBoundRight:i}}const I={class:"vs-carousel"},R=["aria-label","disabled"],p=["aria-label","disabled"],w=e.defineComponent({__name:"Carousel",props:{tag:{default:"ul"},hideArrowsOnBound:{type:Boolean,default:!1},i18n:{default:()=>({slideLeft:"Slide left",slideRight:"Slide right"})}},emits:["mounted","slideChange","leftBound","rightBound"],setup(l,{expose:t,emit:n}){const i=n,d=e.ref(null),{changeSlide:a,goToSlide:S,isBoundLeft:h,isBoundRight:m}=T(i,d);return t({changeSlide:a,goToSlide:S}),(r,u)=>(e.openBlock(),e.createElementBlock("div",I,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.tag),{ref_key:"vsWrapper",ref:d,class:"vs-carousel__wrapper"},{default:e.withCtx(()=>[e.renderSlot(r.$slots,"default")]),_:3},512)),e.renderSlot(r.$slots,"arrows",e.normalizeProps(e.guardReactiveProps({changeSlide:e.unref(a),isBoundLeft:e.unref(h),isBoundRight:e.unref(m)})),()=>[e.withDirectives(e.createElementVNode("button",{type:"button","aria-label":r.i18n.slideLeft,disabled:e.unref(h),class:"vs-carousel__arrows vs-carousel__arrows--left",onClick:u[0]||(u[0]=g=>e.unref(a)(-1))}," ← ",8,R),[[e.vShow,r.hideArrowsOnBound?!e.unref(h):!0]]),e.withDirectives(e.createElementVNode("button",{type:"button","aria-label":r.i18n.slideRight,disabled:e.unref(m),class:"vs-carousel__arrows vs-carousel__arrows--right",onClick:u[1]||(u[1]=g=>e.unref(a)(1))}," → ",8,p),[[e.vShow,r.hideArrowsOnBound?!e.unref(m):!0]])])]))}}),L=e.defineComponent({__name:"Slide",props:{tag:{type:String,default:"li"}},setup(l){return(t,n)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.tag),{ref:"vsSlide",class:"vs-carousel__slide",tabindex:"0"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},512))}}),y={install:l=>{l.component("Carousel",w),l.component("Slide",L)}};return c.Carousel=w,c.Slide=L,c.VueSnap=y,c.default=y,Object.defineProperties(c,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),c}({},Vue);
2 |
--------------------------------------------------------------------------------
/src/components/Carousel.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
13 |
17 |
27 |
28 |
38 |
39 |
40 |
41 |
42 |
74 |
75 |
128 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-snap
2 |
3 | > 🌿 Modern, lightweight Vue 3 Carousel powered by CSS Scroll Snap.
4 |
5 |
6 |

7 |
8 |
9 | [](https://badge.fury.io/js/vue-snap)
10 | 
11 | [](https://github.com/bartdominiak/vue-snap/blob/master/LICENSE.md)
12 | [](https://madewithvuejs.com/p/vuesnap/shield-link)
13 |
14 | ## Table of Contents
15 | - [Docs](https://vue-snap.vercel.app/)
16 | - [About](#about)
17 | - [Examples/Stories](#examplesstories)
18 | - [Installation & Usage](#installation--usage)
19 | - [Examples Usage](#examples-usage)
20 | - [Contribution](#contribution)
21 | - [License](#license)
22 |
23 | ## About
24 | The idea behind this plugin is to create a fully responsive and well-optimized carousel. We’ve used modern CSS features like [Scroll Snapping](https://developers.google.com/web/updates/2018/07/css-scroll-snap), which allows the carousel wrapper to lock onto specific slides or positions after the user finishes scrolling. This approach helps us minimize the library size by including only the essential parts, and it avoids heavy JavaScript computations or CSS hacks.
25 |
26 | ## Examples/Stories
27 | - 📕 [Example](https://vue-snap.vercel.app/examples.html)
28 | - 📺 [Props/Events/Slots](https://vue-snap.vercel.app/api.html)
29 |
30 | - **Lightweight** – Only 4KB, fast and efficient.
31 | - **No calculations or heavy logic** – performance-first approach
32 | - **Fully responsive** – most customization is handled via CSS (e.g. number of visible slides)
33 | - **ESM bundle with tree-shaking** – dead code is automatically eliminated
34 | - **SSR support** – works with frameworks like Nuxt.js 🎉 [More here](https://github.com/bartdominiak/vue-snap/tree/master/examples)
35 | - **Vue 3 support** 🎉 [More here](#installation--usage)
36 | - **Modern browser support** – compatible with all common browsers [More here](https://caniuse.com/css-snappoints)
37 |
38 | ## Installation & Usage
39 | ### Installation
40 |
41 | ```terminal
42 | pnpm add vue-snap
43 | yarn add vue-snap
44 | npm install vue-snap
45 | ```
46 |
47 | ### Usage - Globally
48 |
49 | ```js
50 | import { createApp } from 'vue'
51 | import App from './App.vue'
52 |
53 | import VueSnap from 'vue-snap'
54 | import 'vue-snap/dist/vue-snap.css'
55 |
56 | const myApp = createApp(App)
57 |
58 | myApp.use(VueSnap)
59 | myApp.mount('#app')
60 | ```
61 |
62 | ### Usage - Locally
63 |
64 | ```js
65 | import { Carousel, Slide } from 'vue-snap'
66 | import 'vue-snap/dist/vue-snap.css'
67 |
68 | export default {
69 | components: {
70 | Carousel,
71 | Slide
72 | }
73 | }
74 | ```
75 |
76 | ## Examples usage
77 | Check out [examples](https://github.com/bartdominiak/vue-snap/tree/master/examples) folder for more details or [documentation](https://vue-snap.vercel.app/)
78 |
79 | ## Contribution
80 | If you have a feature request then feel free to start a new issue, or just grab existing one.
81 |
82 | ## License
83 | MIT
84 |
--------------------------------------------------------------------------------
/dist/vue-snap.umd.js:
--------------------------------------------------------------------------------
1 | (function(s,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(s=typeof globalThis<"u"?globalThis:s||self,e(s.VueSnap={},s.Vue))})(this,function(s,e){"use strict";const b=typeof window<"u",C=(l,t,n=5)=>Math.abs(l-t)<=n;function y(l,t){let n=null;const a=(...u)=>{n&&clearTimeout(n),n=setTimeout(()=>{l(...u)},t)};return a.cancel=()=>{n&&clearTimeout(n),n=null},a}const T=100;function k(l,t){const n=e.ref(!0),a=e.ref(!1),u=e.ref(0),d=()=>t.value?Array.from(t.value.children??[]).map(o=>({offsetLeft:o.offsetLeft,offsetWidth:o.offsetWidth})):[],S=o=>t.value?o.findIndex(({offsetLeft:r})=>C(r,t.value.scrollLeft,10)):-1,h=o=>{if(!t.value)return;const{scrollLeft:r,offsetWidth:c,scrollWidth:B}=t.value;o!==u.value&&l("slideChange",o),u.value=o;const _=o===0,O=C(r+c,B,10);_?(n.value=!0,l("leftBound",!0)):n.value=!1,O?(a.value=!0,l("rightBound",!0)):a.value=!1},m=o=>{const r=d(),c=S(r);if(c===-1)return;const B=c+o,_=r[B];!_||!t.value||t.value.scrollTo({left:_.offsetLeft,behavior:"smooth"})},i=o=>{const c=d()[o];!c||!t.value||t.value.scrollTo({left:c.offsetLeft,behavior:"smooth"})},f=()=>{const o=d(),r=S(o);r!==-1&&h(r)},g=y(f,T);return e.onMounted(()=>{!b||!t.value||(f(),t.value.addEventListener("scroll",g),l("mounted",!0))}),e.onBeforeUnmount(()=>{!b||!t.value||t.value.removeEventListener("scroll",g)}),{goToSlide:i,changeSlide:m,isBoundLeft:n,isBoundRight:a}}const E={class:"vs-carousel"},I=["aria-label","disabled"],R=["aria-label","disabled"],w=e.defineComponent({__name:"Carousel",props:{tag:{default:"ul"},hideArrowsOnBound:{type:Boolean,default:!1},i18n:{default:()=>({slideLeft:"Slide left",slideRight:"Slide right"})}},emits:["mounted","slideChange","leftBound","rightBound"],setup(l,{expose:t,emit:n}){const a=n,u=e.ref(null),{changeSlide:d,goToSlide:S,isBoundLeft:h,isBoundRight:m}=k(a,u);return t({changeSlide:d,goToSlide:S}),(i,f)=>(e.openBlock(),e.createElementBlock("div",E,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.tag),{ref_key:"vsWrapper",ref:u,class:"vs-carousel__wrapper"},{default:e.withCtx(()=>[e.renderSlot(i.$slots,"default")]),_:3},512)),e.renderSlot(i.$slots,"arrows",e.normalizeProps(e.guardReactiveProps({changeSlide:e.unref(d),isBoundLeft:e.unref(h),isBoundRight:e.unref(m)})),()=>[e.withDirectives(e.createElementVNode("button",{type:"button","aria-label":i.i18n.slideLeft,disabled:e.unref(h),class:"vs-carousel__arrows vs-carousel__arrows--left",onClick:f[0]||(f[0]=g=>e.unref(d)(-1))}," ← ",8,I),[[e.vShow,i.hideArrowsOnBound?!e.unref(h):!0]]),e.withDirectives(e.createElementVNode("button",{type:"button","aria-label":i.i18n.slideRight,disabled:e.unref(m),class:"vs-carousel__arrows vs-carousel__arrows--right",onClick:f[1]||(f[1]=g=>e.unref(d)(1))}," → ",8,R),[[e.vShow,i.hideArrowsOnBound?!e.unref(m):!0]])])]))}}),L=e.defineComponent({__name:"Slide",props:{tag:{type:String,default:"li"}},setup(l){return(t,n)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.tag),{ref:"vsSlide",class:"vs-carousel__slide",tabindex:"0"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},512))}}),p={install:l=>{l.component("Carousel",w),l.component("Slide",L)}};s.Carousel=w,s.Slide=L,s.VueSnap=p,s.default=p,Object.defineProperties(s,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
2 |
--------------------------------------------------------------------------------
/.docs/.vitepress/components/examples/PreviewCarousel.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 | Slide {{ slide + 1 }}
10 |
11 |
12 |
13 |
19 |
20 | Slide {{ slide + 1 }}
21 |
22 |
23 |
24 |
30 |
31 | Slide {{ slide + 1 }}
32 |
33 |
34 |
35 |
36 |
61 |
62 |
163 |
--------------------------------------------------------------------------------
/src/hooks/useCarousel.ts:
--------------------------------------------------------------------------------
1 | import { ref, onMounted, onBeforeUnmount } from 'vue';
2 | import { isClient, approximatelyEqual, debounce } from '../utils/helpers';
3 | import type { Ref } from 'vue';
4 |
5 | const SCROLL_DEBOUNCE = 100;
6 |
7 | type CarouselEmits = {
8 | (e: 'mounted', value: boolean): void;
9 | (e: 'slideChange', index: number): void;
10 | (e: 'leftBound', value: boolean): void;
11 | (e: 'rightBound', value: boolean): void;
12 | };
13 |
14 | type Slide = {
15 | offsetLeft: number;
16 | offsetWidth: number;
17 | };
18 |
19 | export function useCarousel(emit: CarouselEmits, vsWrapper: Ref) {
20 | const isBoundLeft = ref(true);
21 | const isBoundRight = ref(false);
22 | const currentIndex = ref(0);
23 |
24 | const getSlides = (): Slide[] => {
25 | if (!vsWrapper.value) return [];
26 |
27 | return Array.from(vsWrapper.value.children ?? []).map(
28 | (child: Element): Slide => ({
29 | offsetLeft: (child as HTMLElement).offsetLeft,
30 | offsetWidth: (child as HTMLElement).offsetWidth,
31 | })
32 | );
33 | };
34 |
35 | const getCurrentIndex = (slides: Slide[]) => {
36 | if (!vsWrapper.value) return -1;
37 | return slides.findIndex(({ offsetLeft }) => approximatelyEqual(offsetLeft, vsWrapper.value!.scrollLeft, 10));
38 | }
39 |
40 | const updateBoundaries = (index: number) => {
41 | if (!vsWrapper.value) return;
42 |
43 | const { scrollLeft, offsetWidth, scrollWidth } = vsWrapper.value;
44 |
45 | if (index !== currentIndex.value) {
46 | emit('slideChange', index);
47 | }
48 |
49 | currentIndex.value = index;
50 |
51 | const atStart = index === 0;
52 | const atEnd = approximatelyEqual(scrollLeft + offsetWidth, scrollWidth, 10);
53 |
54 | if (atStart) {
55 | isBoundLeft.value = true;
56 | emit('leftBound', true);
57 | } else {
58 | isBoundLeft.value = false;
59 | }
60 |
61 | if (atEnd) {
62 | isBoundRight.value = true;
63 | emit('rightBound', true);
64 | } else {
65 | isBoundRight.value = false;
66 | }
67 | };
68 |
69 | const changeSlide = (direction: number) => {
70 | const slides = getSlides();
71 | const currentIndex = getCurrentIndex(slides);
72 |
73 | if (currentIndex === -1) return;
74 |
75 | const nextIndex = currentIndex + direction;
76 | const targetSlide = slides[nextIndex];
77 |
78 | if (!targetSlide || !vsWrapper.value) return;
79 |
80 | vsWrapper.value.scrollTo({ left: targetSlide.offsetLeft, behavior: 'smooth' });
81 | // emit('slideChange', nextIndex);
82 | };
83 |
84 | const goToSlide = (index: number) => {
85 | const slides = getSlides();
86 | const targetSlide = slides[index];
87 |
88 | if (!targetSlide || !vsWrapper.value) return;
89 |
90 | vsWrapper.value.scrollTo({ left: targetSlide.offsetLeft, behavior: 'smooth' });
91 | // emit('slideChange', index);
92 | };
93 |
94 | const refreshSlideState = () => {
95 | const slides = getSlides();
96 | const currentIndex = getCurrentIndex(slides);
97 |
98 | if (currentIndex === -1) return;
99 |
100 | updateBoundaries(currentIndex);
101 | };
102 |
103 | const handleScroll = debounce(refreshSlideState, SCROLL_DEBOUNCE);
104 |
105 | onMounted(() => {
106 | if (!isClient || !vsWrapper.value) return;
107 |
108 | refreshSlideState();
109 | vsWrapper.value.addEventListener('scroll', handleScroll);
110 | emit('mounted', true);
111 | });
112 |
113 | onBeforeUnmount(() => {
114 | if (!isClient || !vsWrapper.value) return;
115 |
116 | vsWrapper.value.removeEventListener('scroll', handleScroll);
117 | });
118 |
119 | return {
120 | goToSlide,
121 | changeSlide,
122 | isBoundLeft,
123 | isBoundRight,
124 | };
125 | }
126 |
--------------------------------------------------------------------------------
/dist/vue-snap.es.js:
--------------------------------------------------------------------------------
1 | import { ref as _, onMounted as $, onBeforeUnmount as O, defineComponent as I, createElementBlock as A, openBlock as B, createBlock as R, renderSlot as b, resolveDynamicComponent as T, withCtx as k, normalizeProps as x, guardReactiveProps as D, unref as r, withDirectives as C, createElementVNode as L, vShow as w } from "vue";
2 | const y = typeof window < "u", E = (n, e, t = 5) => Math.abs(n - e) <= t;
3 | function M(n, e) {
4 | let t = null;
5 | const u = (...a) => {
6 | t && clearTimeout(t), t = setTimeout(() => {
7 | n(...a);
8 | }, e);
9 | };
10 | return u.cancel = () => {
11 | t && clearTimeout(t), t = null;
12 | }, u;
13 | }
14 | const N = 100;
15 | function P(n, e) {
16 | const t = _(!0), u = _(!1), a = _(0), i = () => e.value ? Array.from(e.value.children ?? []).map(
17 | (o) => ({
18 | offsetLeft: o.offsetLeft,
19 | offsetWidth: o.offsetWidth
20 | })
21 | ) : [], v = (o) => e.value ? o.findIndex(({ offsetLeft: l }) => E(l, e.value.scrollLeft, 10)) : -1, c = (o) => {
22 | if (!e.value) return;
23 | const { scrollLeft: l, offsetWidth: f, scrollWidth: S } = e.value;
24 | o !== a.value && n("slideChange", o), a.value = o;
25 | const g = o === 0, p = E(l + f, S, 10);
26 | g ? (t.value = !0, n("leftBound", !0)) : t.value = !1, p ? (u.value = !0, n("rightBound", !0)) : u.value = !1;
27 | }, h = (o) => {
28 | const l = i(), f = v(l);
29 | if (f === -1) return;
30 | const S = f + o, g = l[S];
31 | !g || !e.value || e.value.scrollTo({ left: g.offsetLeft, behavior: "smooth" });
32 | }, s = (o) => {
33 | const f = i()[o];
34 | !f || !e.value || e.value.scrollTo({ left: f.offsetLeft, behavior: "smooth" });
35 | }, d = () => {
36 | const o = i(), l = v(o);
37 | l !== -1 && c(l);
38 | }, m = M(d, N);
39 | return $(() => {
40 | !y || !e.value || (d(), e.value.addEventListener("scroll", m), n("mounted", !0));
41 | }), O(() => {
42 | !y || !e.value || e.value.removeEventListener("scroll", m);
43 | }), {
44 | goToSlide: s,
45 | changeSlide: h,
46 | isBoundLeft: t,
47 | isBoundRight: u
48 | };
49 | }
50 | const U = { class: "vs-carousel" }, V = ["aria-label", "disabled"], q = ["aria-label", "disabled"], z = /* @__PURE__ */ I({
51 | __name: "Carousel",
52 | props: {
53 | tag: { default: "ul" },
54 | hideArrowsOnBound: { type: Boolean, default: !1 },
55 | i18n: { default: () => ({
56 | slideLeft: "Slide left",
57 | slideRight: "Slide right"
58 | }) }
59 | },
60 | emits: ["mounted", "slideChange", "leftBound", "rightBound"],
61 | setup(n, { expose: e, emit: t }) {
62 | const u = t, a = _(null), { changeSlide: i, goToSlide: v, isBoundLeft: c, isBoundRight: h } = P(u, a);
63 | return e({
64 | changeSlide: i,
65 | goToSlide: v
66 | }), (s, d) => (B(), A("div", U, [
67 | (B(), R(T(s.tag), {
68 | ref_key: "vsWrapper",
69 | ref: a,
70 | class: "vs-carousel__wrapper"
71 | }, {
72 | default: k(() => [
73 | b(s.$slots, "default")
74 | ]),
75 | _: 3
76 | }, 512)),
77 | b(s.$slots, "arrows", x(D({ changeSlide: r(i), isBoundLeft: r(c), isBoundRight: r(h) })), () => [
78 | C(L("button", {
79 | type: "button",
80 | "aria-label": s.i18n.slideLeft,
81 | disabled: r(c),
82 | class: "vs-carousel__arrows vs-carousel__arrows--left",
83 | onClick: d[0] || (d[0] = (m) => r(i)(-1))
84 | }, " ← ", 8, V), [
85 | [w, s.hideArrowsOnBound ? !r(c) : !0]
86 | ]),
87 | C(L("button", {
88 | type: "button",
89 | "aria-label": s.i18n.slideRight,
90 | disabled: r(h),
91 | class: "vs-carousel__arrows vs-carousel__arrows--right",
92 | onClick: d[1] || (d[1] = (m) => r(i)(1))
93 | }, " → ", 8, q), [
94 | [w, s.hideArrowsOnBound ? !r(h) : !0]
95 | ])
96 | ])
97 | ]));
98 | }
99 | }), j = /* @__PURE__ */ I({
100 | __name: "Slide",
101 | props: {
102 | /**
103 | * Custom tag
104 | */
105 | tag: {
106 | type: String,
107 | default: "li"
108 | }
109 | },
110 | setup(n) {
111 | return (e, t) => (B(), R(T(n.tag), {
112 | ref: "vsSlide",
113 | class: "vs-carousel__slide",
114 | tabindex: "0"
115 | }, {
116 | default: k(() => [
117 | b(e.$slots, "default")
118 | ]),
119 | _: 3
120 | }, 512));
121 | }
122 | }), G = {
123 | install: (n) => {
124 | n.component("Carousel", z), n.component("Slide", j);
125 | }
126 | };
127 | export {
128 | z as Carousel,
129 | j as Slide,
130 | G as VueSnap,
131 | G as default
132 | };
133 |
--------------------------------------------------------------------------------
/.docs/examples.md:
--------------------------------------------------------------------------------
1 | # Examples
2 | This page demonstrates some of the examples of vue-snap usage.
3 |
4 | ## Basic
5 |
6 |
7 |
8 | ::: code-group
9 |
10 | ```html [App.vue]
11 |
12 |
13 | Slide {{ slide + 1 }}
14 |
15 |
16 |
17 |
20 | ```
21 |
22 | ```scss [styles.scss]
23 | .my-carousel {
24 | .vs-carousel__wrapper {
25 | height: 200px;
26 | }
27 | }
28 | ```
29 |
30 | ```css [styles.css]
31 | .my-carousel .vs-carousel__wrapper {
32 | height: 200px;
33 | }
34 | ```
35 |
36 | :::
37 |
38 | ## Multiple Slides
39 |
40 |
41 |
42 | ::: code-group
43 |
44 | ```html [App.vue]
45 |
46 |
47 | Slide {{ slide + 1 }}
48 |
49 |
50 |
51 |
54 | ```
55 |
56 | ```scss [styles.scss]
57 | .my-carousel {
58 | .vs-carousel__wrapper {
59 | height: 200px;
60 | }
61 |
62 | .vs-carousel__slide {
63 | flex: 0 0 100%;
64 |
65 | @media (min-width: 500px) {
66 | flex: 0 0 50%;
67 | }
68 |
69 | @media (min-width: 768px) {
70 | flex: 0 0 33.33%;
71 | }
72 | }
73 | }
74 | ```
75 |
76 | ```css [styles.css]
77 | .my-carousel .vs-carousel__wrapper {
78 | height: 200px;
79 | }
80 |
81 | .my-carousel .vs-carousel__slide {
82 | flex: 0 0 100%;
83 | }
84 |
85 | @media (min-width: 500px) {
86 | .my-carousel .vs-carousel__slide {
87 | flex: 0 0 50%;
88 | }
89 | }
90 |
91 | @media (min-width: 768px) {
92 | .my-carousel .vs-carousel__slide {
93 | flex: 0 0 33.33%;
94 | }
95 | }
96 | ```
97 |
98 | :::
99 |
100 | ## Multiple Images
101 |
102 |
103 |
104 | ::: code-group
105 |
106 | ```html [App.vue]
107 |
108 |
109 |
110 |
111 |
112 |
113 |
116 | ```
117 |
118 | ```scss [styles.scss]
119 | .my-carousel-images {
120 | .vs-carousel__wrapper {
121 | height: 200px;
122 | }
123 |
124 | .vs-carousel__slide {
125 | flex: 0 0 100%;
126 |
127 | @media (min-width: 500px) {
128 | flex: 0 0 50%;
129 | }
130 |
131 | @media (min-width: 768px) {
132 | flex: 0 0 33.33%;
133 | }
134 |
135 | @media (min-width: 1024px) {
136 | flex: 0 0 25%;
137 | }
138 | }
139 | }
140 | ```
141 |
142 | ```css [styles.css]
143 | .my-carousel-images .vs-carousel__wrapper {
144 | height: 200px;
145 | }
146 |
147 | .my-carousel-images .vs-carousel__slide {
148 | flex: 0 0 100%;
149 | }
150 |
151 | @media (min-width: 500px) {
152 | .my-carousel-images .vs-carousel__slide {
153 | flex: 0 0 50%;
154 | }
155 | }
156 |
157 | @media (min-width: 768px) {
158 | .my-carousel-images .vs-carousel__slide {
159 | flex: 0 0 33.33%;
160 | }
161 | }
162 |
163 | @media (min-width: 1024px) {
164 | .my-carousel-images .vs-carousel__slide {
165 | flex: 0 0 25%;
166 | }
167 | }
168 | ```
169 |
170 | :::
171 |
172 | ## Autoplay
173 |
174 |
175 | ::: code-group
176 |
177 | ```html [App.vue]
178 |
179 |
185 |
186 | Slide {{ slide + 1 }}
187 |
188 |
189 |
190 |
191 |
212 | ```
213 |
214 | ```scss [styles.scss]
215 | .my-carousel {
216 | .vs-carousel__wrapper {
217 | height: 200px;
218 | }
219 |
220 | .vs-carousel__slide {
221 | flex: 0 0 100%;
222 |
223 | @media (min-width: 500px) {
224 | flex: 0 0 50%;
225 | }
226 |
227 | @media (min-width: 768px) {
228 | flex: 0 0 33.33%;
229 | }
230 | }
231 | }
232 | ```
233 |
234 | ```css [styles.css]
235 | .my-carousel .vs-carousel__wrapper {
236 | height: 200px;
237 | }
238 |
239 | .my-carousel .vs-carousel__slide {
240 | flex: 0 0 100%;
241 | }
242 |
243 | @media (min-width: 500px) {
244 | .my-carousel .vs-carousel__slide {
245 | flex: 0 0 50%;
246 | }
247 | }
248 |
249 | @media (min-width: 768px) {
250 | .my-carousel .vs-carousel__slide {
251 | flex: 0 0 33.33%;
252 | }
253 | }
254 | ```
255 |
256 | :::
257 |
258 | ## Slide to X
259 |
260 |
261 | ::: code-group
262 |
263 | ```html [App.vue]
264 |
265 |
271 |
272 | Slide {{ slide + 1 }}
273 |
274 |
275 |
276 |
277 |
290 | ```
291 |
292 | ```scss [styles.scss]
293 | .my-carousel {
294 | .vs-carousel__wrapper {
295 | height: 200px;
296 | }
297 |
298 | .vs-carousel__slide {
299 | flex: 0 0 100%;
300 |
301 | @media (min-width: 500px) {
302 | flex: 0 0 50%;
303 | }
304 |
305 | @media (min-width: 768px) {
306 | flex: 0 0 33.33%;
307 | }
308 | }
309 | }
310 | ```
311 |
312 | ```css [styles.css]
313 | .my-carousel .vs-carousel__wrapper {
314 | height: 200px;
315 | }
316 |
317 | .my-carousel .vs-carousel__slide {
318 | flex: 0 0 100%;
319 | }
320 |
321 | @media (min-width: 500px) {
322 | .my-carousel .vs-carousel__slide {
323 | flex: 0 0 50%;
324 | }
325 | }
326 |
327 | @media (min-width: 768px) {
328 | .my-carousel .vs-carousel__slide {
329 | flex: 0 0 33.33%;
330 | }
331 | }
332 | ```
333 |
334 | :::
335 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 | All notable changes to this project will be documented in this file.
3 |
4 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6 |
7 | ## [Unreleased]
8 |
9 | ## [1.1.0] - 2025-06-21
10 | ## Updated
11 | - Refactored core logic into a custom useCarousel hook
12 | - Removed unnecessary logic (e.g. resize events, lodash/debounce)
13 | - Simplified and optimized carousel calculations
14 | - Minified entire carousel bundle to just 4KB
15 |
16 | ## [1.0.3] - 2025-06-15
17 |
18 | ### Fixed
19 | - Package.json import/export destination files
20 |
21 | ## [1.0.2] - 2025-06-15
22 |
23 | ### Fixed
24 | - Package.json import/export destination files
25 |
26 | ## [1.0.1] - 2025-06-15
27 |
28 | ### Fixed
29 | - Package.json import/export destination files
30 |
31 | ## [1.0.0] - 2025-06-15
32 |
33 | ### Added
34 | - Vitepress docs
35 | ### Fixed
36 | - Github Workflow Pipeline
37 | ### Removed
38 | - Rollup configs
39 | - Storybook
40 |
41 | ## [0.7.1] - 2021-05-07
42 |
43 | ### Added
44 | - Mounted event
45 | ### Fixed
46 | - Prevent duplicated event page trigger
47 |
48 | ## [0.7.0] - 2021-02-08
49 | ### Removed
50 | - maxPages and its calculation (#55)
51 |
52 | ### Updated
53 | - Replace changeSlide with simpler goToSlide, for consistent behavior with exposed go-to-page API + removal of dependent method that is not in use anymore (#55)
54 | - Split getting current page index from setting it, supporting passing the index from outside, for example goToSlide method, so in some cases the index will change, even if there was no scroll event. (#55)
55 |
56 | ### Fixed
57 | - Fix support for calculating a proper current slide index, when there is nothing left to scroll (#55)
58 |
59 | ## [0.6.7] - 2021-02-08
60 | ### Added
61 | - Go to slide API (#54)
62 |
63 | ## [0.6.6] - 2020-12-06
64 | ### Updated
65 | - Rollback rollup-plugin-vue(6.0.0 => 5.1.9)
66 |
67 | ## [0.6.5] - 2020-12-05
68 | ### Updated
69 | - Dependencies
70 |
71 | ## [0.6.4] - 2020-11-29
72 | ### Added
73 | - changeSlide, BoundLeft, BoundRight inside slot-scope
74 |
75 | ## [0.6.3] - 2020-11-23
76 | ### Updated
77 | - elementScrollBy function name (#47)
78 | - Dependencies
79 |
80 | ## [0.6.2] - 2020-11-01
81 | ### Fixed
82 | - Slide children method
83 |
84 | ## [0.6.1] - 2020-09-24
85 | ### Updated
86 | - Yarn lock file
87 |
88 | ## [0.6.0] - 2020-09-24
89 | ### Removed
90 | - Removed maximum node version range (#41)
91 | - Node version max range (#41)
92 |
93 | ### Added
94 | - Added dynamic tag support (#41)
95 | - Added i18n support with proper validation (#41)
96 | - Reset list-style CSS (#41)
97 |
98 | ## [0.5.2] - 2020-09-21
99 | ### Updated
100 | - Rollup configs
101 | - Vue@2 and Vue@3 examples
102 | - Docs
103 | - Dependencies
104 | - TravisCI Config (Auto-deploy only Vue@2 version)
105 |
106 | ## [0.5.1] - 2020-09-17
107 | ### Updated
108 | - Docs
109 |
110 | ## [0.5.0] - 2020-09-17
111 | ### Added
112 | - Emit page and bound events (#35)
113 | - Slot/Props/Event descriptions
114 |
115 | ### Updated
116 | - seamless-scroll-polyfill (1.1.0 => 1.2.1)
117 | - Stories markups
118 |
119 | ## [0.4.0] - 2020-09-15
120 | ### Added
121 | - Ability to disable arrows and arrowsOnBound (#30)
122 |
123 | ### Fixed
124 | - Created onResizefn/onScrollFn variables to avoid memory leaks (#28)
125 | - Improve bound calculation precision (#28)
126 | - Avoiding undefined ref (#28)
127 | - Decrease MutationObserver scope only to vsWrapper
128 |
129 | ### Updated
130 | - Renamed Navigation slot to Arrows (#30)
131 |
132 | ## [0.3.4] - 2020-09-15
133 | ### Fixed
134 | - seamless-scroll-polyfill(^1.1.0 => 1.1.0)
135 |
136 | ## [0.3.3] - 2020-09-15
137 | ### Fixed
138 | - TravisCI Config with proper ENV variables
139 |
140 | ## [0.3.2] - 2020-09-15
141 | ### Added
142 | - Automated travis deployment
143 |
144 | ## [0.3.1] - 2020-09-14
145 | ### Updated
146 | - TravisCI configs
147 |
148 | ## [0.3.0] - 2020-09-05
149 | ### Added
150 | - Dynamic slides support (#25)
151 |
152 | ### Updated
153 | - Dependencies
154 |
155 | ## [0.2.0] - 2020-08-29
156 | ### Added
157 | - VueLazy lib
158 |
159 | ### Updated
160 | - Dependencies
161 |
162 | ### Deleted
163 | - Static height in wrapper (#22)
164 | - Old directives
165 |
166 | ## [0.1.0-beta.9] - 2020-08-26
167 | ### Updated
168 | - Dependencies
169 |
170 | ### Added
171 | - Missing type for button arrows (#21)
172 |
173 | ## [0.1.0-beta.8] - 2020-07-12
174 | ### Deleted
175 | - develop branch
176 |
177 | ### Updated
178 | - trigger deployment only on tag release
179 |
180 | ## [0.1.0-beta.7] - 2020-07-12
181 | ### Updated
182 | - changed spread to Array.from (reduce bundle size)
183 |
184 | ## [0.1.0-beta.6] - 2020-07-12
185 | ### Fixed
186 | - storybook typo
187 |
188 | ## [0.1.0-beta.5] - 2020-07-12
189 | ### Added
190 | - storybook-static folder to .npmignore
191 |
192 | ## [0.1.0-beta.4] - 2020-07-12
193 | ### Fixed
194 | - tag typo
195 |
196 | ## [0.1.0-beta.3] - 2020-07-12
197 | ### Added
198 | - non-regular slide widths Support (#16)
199 | - SSR Support (#13)
200 | - Event optimisation with debounce
201 | - Reorganize methods, and load only on need (like Events: Scroll, Resize, or on init)
202 |
203 | ### Updated
204 | - docs with new installation proccess
205 |
206 | ### Moved
207 | - rollup configs to seperate folders
208 |
209 | ## [0.1.0-beta.2] - 2020-06-24
210 | ### Added
211 | - Rollup init
212 |
213 | ### Deleted
214 | - Webpack configs
215 |
216 | ## [0.1.0-beta.1] - 2020-06-17
217 | ### Fixed
218 | - Docs: example relative url
219 |
220 | ### Added
221 | - seamless-scroll-polyfill package
222 |
223 | ### Deleted
224 | - Docs: removed example url
225 | - scss-loader and reduce final bundle size
226 | - comments in final bundle
227 |
228 | ### Moved
229 | - Vue as peerDependency
230 |
231 | ## [0.1.0-alpha.8] - 2020-06-14
232 | ### Fixed
233 | - Docs: Workaround for non-supported SSR plugin
234 |
235 | ## [0.1.0-alpha.7] - 2020-06-14
236 | ### Added
237 | - Docs: Intersection-observer polyfill
238 |
239 | ### Fixed
240 | - Docs: taking VueSnap from dist folder (compiled version)
241 |
242 | ## [0.1.0-alpha.6] - 2020-06-14
243 | ### Added
244 | - Scroll Smooth polyfill (#11)
245 |
246 | ## [0.1.0-alpha.5] - 2020-06-14
247 | ### Added
248 | - Lazyload support
249 | - Lazyload examples to docs and storybook
250 |
251 | ## [0.1.0-alpha.4] - 2020-06-13
252 | ### Added
253 | - Examples to docs
254 | - Babel presets
255 |
256 | ## [0.1.0-alpha.3] - 2020-06-13
257 | ### Added
258 | - docs & storybook deployment
259 |
260 | ## [0.1.0-alpha.2] - 2020-06-13
261 | ### Added
262 | - initialize eslint #8
263 | - initilize git hooks (husky) #8
264 | - initialize VuePress #6
265 | - Storybook Addons (docs, a11y, actions, knobs, viewport, storysource) #2
266 | - props/slots preview #2
267 | - initilize travis #7
268 |
269 | ## [0.1.0-alpha.1] - 2020-06-12
270 | ### Added
271 | - Project init
272 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | vue:
12 | specifier: ^3.5.16
13 | version: 3.5.16(typescript@5.8.3)
14 | devDependencies:
15 | '@eslint/eslintrc':
16 | specifier: ^3.3.1
17 | version: 3.3.1
18 | '@eslint/js':
19 | specifier: ^9.29.0
20 | version: 9.29.0
21 | '@typescript-eslint/eslint-plugin':
22 | specifier: ^8.34.1
23 | version: 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0)(typescript@5.8.3))(eslint@9.29.0)(typescript@5.8.3)
24 | '@typescript-eslint/parser':
25 | specifier: ^8.34.1
26 | version: 8.34.1(eslint@9.29.0)(typescript@5.8.3)
27 | '@vitejs/plugin-vue':
28 | specifier: ^5.2.4
29 | version: 5.2.4(vite@6.3.5(sass-embedded@1.89.2))(vue@3.5.16(typescript@5.8.3))
30 | '@vue/tsconfig':
31 | specifier: ^0.7.0
32 | version: 0.7.0(typescript@5.8.3)(vue@3.5.16(typescript@5.8.3))
33 | eslint:
34 | specifier: ^9.29.0
35 | version: 9.29.0
36 | eslint-plugin-vue:
37 | specifier: ^10.2.0
38 | version: 10.2.0(eslint@9.29.0)(vue-eslint-parser@10.1.3(eslint@9.29.0))
39 | globals:
40 | specifier: ^16.2.0
41 | version: 16.2.0
42 | lodash:
43 | specifier: ^4.17.21
44 | version: 4.17.21
45 | sass-embedded:
46 | specifier: ^1.89.2
47 | version: 1.89.2
48 | typescript:
49 | specifier: ~5.8.3
50 | version: 5.8.3
51 | vite:
52 | specifier: ^6.3.5
53 | version: 6.3.5(sass-embedded@1.89.2)
54 | vue-eslint-parser:
55 | specifier: ^10.1.3
56 | version: 10.1.3(eslint@9.29.0)
57 | vue-tsc:
58 | specifier: ^2.2.10
59 | version: 2.2.10(typescript@5.8.3)
60 |
61 | packages:
62 |
63 | '@babel/helper-string-parser@7.27.1':
64 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
65 | engines: {node: '>=6.9.0'}
66 |
67 | '@babel/helper-validator-identifier@7.27.1':
68 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
69 | engines: {node: '>=6.9.0'}
70 |
71 | '@babel/parser@7.27.5':
72 | resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
73 | engines: {node: '>=6.0.0'}
74 | hasBin: true
75 |
76 | '@babel/types@7.27.6':
77 | resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
78 | engines: {node: '>=6.9.0'}
79 |
80 | '@bufbuild/protobuf@2.5.2':
81 | resolution: {integrity: sha512-foZ7qr0IsUBjzWIq+SuBLfdQCpJ1j8cTuNNT4owngTHoN5KsJb8L9t65fzz7SCeSWzescoOil/0ldqiL041ABg==}
82 |
83 | '@esbuild/aix-ppc64@0.25.5':
84 | resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
85 | engines: {node: '>=18'}
86 | cpu: [ppc64]
87 | os: [aix]
88 |
89 | '@esbuild/android-arm64@0.25.5':
90 | resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
91 | engines: {node: '>=18'}
92 | cpu: [arm64]
93 | os: [android]
94 |
95 | '@esbuild/android-arm@0.25.5':
96 | resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
97 | engines: {node: '>=18'}
98 | cpu: [arm]
99 | os: [android]
100 |
101 | '@esbuild/android-x64@0.25.5':
102 | resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
103 | engines: {node: '>=18'}
104 | cpu: [x64]
105 | os: [android]
106 |
107 | '@esbuild/darwin-arm64@0.25.5':
108 | resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
109 | engines: {node: '>=18'}
110 | cpu: [arm64]
111 | os: [darwin]
112 |
113 | '@esbuild/darwin-x64@0.25.5':
114 | resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
115 | engines: {node: '>=18'}
116 | cpu: [x64]
117 | os: [darwin]
118 |
119 | '@esbuild/freebsd-arm64@0.25.5':
120 | resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
121 | engines: {node: '>=18'}
122 | cpu: [arm64]
123 | os: [freebsd]
124 |
125 | '@esbuild/freebsd-x64@0.25.5':
126 | resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
127 | engines: {node: '>=18'}
128 | cpu: [x64]
129 | os: [freebsd]
130 |
131 | '@esbuild/linux-arm64@0.25.5':
132 | resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
133 | engines: {node: '>=18'}
134 | cpu: [arm64]
135 | os: [linux]
136 |
137 | '@esbuild/linux-arm@0.25.5':
138 | resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
139 | engines: {node: '>=18'}
140 | cpu: [arm]
141 | os: [linux]
142 |
143 | '@esbuild/linux-ia32@0.25.5':
144 | resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
145 | engines: {node: '>=18'}
146 | cpu: [ia32]
147 | os: [linux]
148 |
149 | '@esbuild/linux-loong64@0.25.5':
150 | resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
151 | engines: {node: '>=18'}
152 | cpu: [loong64]
153 | os: [linux]
154 |
155 | '@esbuild/linux-mips64el@0.25.5':
156 | resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
157 | engines: {node: '>=18'}
158 | cpu: [mips64el]
159 | os: [linux]
160 |
161 | '@esbuild/linux-ppc64@0.25.5':
162 | resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
163 | engines: {node: '>=18'}
164 | cpu: [ppc64]
165 | os: [linux]
166 |
167 | '@esbuild/linux-riscv64@0.25.5':
168 | resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
169 | engines: {node: '>=18'}
170 | cpu: [riscv64]
171 | os: [linux]
172 |
173 | '@esbuild/linux-s390x@0.25.5':
174 | resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
175 | engines: {node: '>=18'}
176 | cpu: [s390x]
177 | os: [linux]
178 |
179 | '@esbuild/linux-x64@0.25.5':
180 | resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
181 | engines: {node: '>=18'}
182 | cpu: [x64]
183 | os: [linux]
184 |
185 | '@esbuild/netbsd-arm64@0.25.5':
186 | resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
187 | engines: {node: '>=18'}
188 | cpu: [arm64]
189 | os: [netbsd]
190 |
191 | '@esbuild/netbsd-x64@0.25.5':
192 | resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
193 | engines: {node: '>=18'}
194 | cpu: [x64]
195 | os: [netbsd]
196 |
197 | '@esbuild/openbsd-arm64@0.25.5':
198 | resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
199 | engines: {node: '>=18'}
200 | cpu: [arm64]
201 | os: [openbsd]
202 |
203 | '@esbuild/openbsd-x64@0.25.5':
204 | resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
205 | engines: {node: '>=18'}
206 | cpu: [x64]
207 | os: [openbsd]
208 |
209 | '@esbuild/sunos-x64@0.25.5':
210 | resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
211 | engines: {node: '>=18'}
212 | cpu: [x64]
213 | os: [sunos]
214 |
215 | '@esbuild/win32-arm64@0.25.5':
216 | resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
217 | engines: {node: '>=18'}
218 | cpu: [arm64]
219 | os: [win32]
220 |
221 | '@esbuild/win32-ia32@0.25.5':
222 | resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
223 | engines: {node: '>=18'}
224 | cpu: [ia32]
225 | os: [win32]
226 |
227 | '@esbuild/win32-x64@0.25.5':
228 | resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
229 | engines: {node: '>=18'}
230 | cpu: [x64]
231 | os: [win32]
232 |
233 | '@eslint-community/eslint-utils@4.7.0':
234 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
235 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
236 | peerDependencies:
237 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
238 |
239 | '@eslint-community/regexpp@4.12.1':
240 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
241 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
242 |
243 | '@eslint/config-array@0.20.1':
244 | resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==}
245 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
246 |
247 | '@eslint/config-helpers@0.2.2':
248 | resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
249 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
250 |
251 | '@eslint/core@0.14.0':
252 | resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
253 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
254 |
255 | '@eslint/eslintrc@3.3.1':
256 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
257 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
258 |
259 | '@eslint/js@9.29.0':
260 | resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
261 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
262 |
263 | '@eslint/object-schema@2.1.6':
264 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
265 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
266 |
267 | '@eslint/plugin-kit@0.3.1':
268 | resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==}
269 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
270 |
271 | '@humanfs/core@0.19.1':
272 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
273 | engines: {node: '>=18.18.0'}
274 |
275 | '@humanfs/node@0.16.6':
276 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
277 | engines: {node: '>=18.18.0'}
278 |
279 | '@humanwhocodes/module-importer@1.0.1':
280 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
281 | engines: {node: '>=12.22'}
282 |
283 | '@humanwhocodes/retry@0.3.1':
284 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
285 | engines: {node: '>=18.18'}
286 |
287 | '@humanwhocodes/retry@0.4.3':
288 | resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
289 | engines: {node: '>=18.18'}
290 |
291 | '@jridgewell/sourcemap-codec@1.5.0':
292 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
293 |
294 | '@nodelib/fs.scandir@2.1.5':
295 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
296 | engines: {node: '>= 8'}
297 |
298 | '@nodelib/fs.stat@2.0.5':
299 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
300 | engines: {node: '>= 8'}
301 |
302 | '@nodelib/fs.walk@1.2.8':
303 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
304 | engines: {node: '>= 8'}
305 |
306 | '@rollup/rollup-android-arm-eabi@4.42.0':
307 | resolution: {integrity: sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==}
308 | cpu: [arm]
309 | os: [android]
310 |
311 | '@rollup/rollup-android-arm64@4.42.0':
312 | resolution: {integrity: sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==}
313 | cpu: [arm64]
314 | os: [android]
315 |
316 | '@rollup/rollup-darwin-arm64@4.42.0':
317 | resolution: {integrity: sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==}
318 | cpu: [arm64]
319 | os: [darwin]
320 |
321 | '@rollup/rollup-darwin-x64@4.42.0':
322 | resolution: {integrity: sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==}
323 | cpu: [x64]
324 | os: [darwin]
325 |
326 | '@rollup/rollup-freebsd-arm64@4.42.0':
327 | resolution: {integrity: sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==}
328 | cpu: [arm64]
329 | os: [freebsd]
330 |
331 | '@rollup/rollup-freebsd-x64@4.42.0':
332 | resolution: {integrity: sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==}
333 | cpu: [x64]
334 | os: [freebsd]
335 |
336 | '@rollup/rollup-linux-arm-gnueabihf@4.42.0':
337 | resolution: {integrity: sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==}
338 | cpu: [arm]
339 | os: [linux]
340 |
341 | '@rollup/rollup-linux-arm-musleabihf@4.42.0':
342 | resolution: {integrity: sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==}
343 | cpu: [arm]
344 | os: [linux]
345 |
346 | '@rollup/rollup-linux-arm64-gnu@4.42.0':
347 | resolution: {integrity: sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==}
348 | cpu: [arm64]
349 | os: [linux]
350 |
351 | '@rollup/rollup-linux-arm64-musl@4.42.0':
352 | resolution: {integrity: sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==}
353 | cpu: [arm64]
354 | os: [linux]
355 |
356 | '@rollup/rollup-linux-loongarch64-gnu@4.42.0':
357 | resolution: {integrity: sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==}
358 | cpu: [loong64]
359 | os: [linux]
360 |
361 | '@rollup/rollup-linux-powerpc64le-gnu@4.42.0':
362 | resolution: {integrity: sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==}
363 | cpu: [ppc64]
364 | os: [linux]
365 |
366 | '@rollup/rollup-linux-riscv64-gnu@4.42.0':
367 | resolution: {integrity: sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==}
368 | cpu: [riscv64]
369 | os: [linux]
370 |
371 | '@rollup/rollup-linux-riscv64-musl@4.42.0':
372 | resolution: {integrity: sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==}
373 | cpu: [riscv64]
374 | os: [linux]
375 |
376 | '@rollup/rollup-linux-s390x-gnu@4.42.0':
377 | resolution: {integrity: sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==}
378 | cpu: [s390x]
379 | os: [linux]
380 |
381 | '@rollup/rollup-linux-x64-gnu@4.42.0':
382 | resolution: {integrity: sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==}
383 | cpu: [x64]
384 | os: [linux]
385 |
386 | '@rollup/rollup-linux-x64-musl@4.42.0':
387 | resolution: {integrity: sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==}
388 | cpu: [x64]
389 | os: [linux]
390 |
391 | '@rollup/rollup-win32-arm64-msvc@4.42.0':
392 | resolution: {integrity: sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==}
393 | cpu: [arm64]
394 | os: [win32]
395 |
396 | '@rollup/rollup-win32-ia32-msvc@4.42.0':
397 | resolution: {integrity: sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==}
398 | cpu: [ia32]
399 | os: [win32]
400 |
401 | '@rollup/rollup-win32-x64-msvc@4.42.0':
402 | resolution: {integrity: sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==}
403 | cpu: [x64]
404 | os: [win32]
405 |
406 | '@types/estree@1.0.7':
407 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
408 |
409 | '@types/json-schema@7.0.15':
410 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
411 |
412 | '@typescript-eslint/eslint-plugin@8.34.1':
413 | resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==}
414 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
415 | peerDependencies:
416 | '@typescript-eslint/parser': ^8.34.1
417 | eslint: ^8.57.0 || ^9.0.0
418 | typescript: '>=4.8.4 <5.9.0'
419 |
420 | '@typescript-eslint/parser@8.34.1':
421 | resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==}
422 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
423 | peerDependencies:
424 | eslint: ^8.57.0 || ^9.0.0
425 | typescript: '>=4.8.4 <5.9.0'
426 |
427 | '@typescript-eslint/project-service@8.34.1':
428 | resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==}
429 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
430 | peerDependencies:
431 | typescript: '>=4.8.4 <5.9.0'
432 |
433 | '@typescript-eslint/scope-manager@8.34.1':
434 | resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==}
435 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
436 |
437 | '@typescript-eslint/tsconfig-utils@8.34.1':
438 | resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==}
439 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
440 | peerDependencies:
441 | typescript: '>=4.8.4 <5.9.0'
442 |
443 | '@typescript-eslint/type-utils@8.34.1':
444 | resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==}
445 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
446 | peerDependencies:
447 | eslint: ^8.57.0 || ^9.0.0
448 | typescript: '>=4.8.4 <5.9.0'
449 |
450 | '@typescript-eslint/types@8.34.1':
451 | resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==}
452 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
453 |
454 | '@typescript-eslint/typescript-estree@8.34.1':
455 | resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==}
456 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
457 | peerDependencies:
458 | typescript: '>=4.8.4 <5.9.0'
459 |
460 | '@typescript-eslint/utils@8.34.1':
461 | resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==}
462 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
463 | peerDependencies:
464 | eslint: ^8.57.0 || ^9.0.0
465 | typescript: '>=4.8.4 <5.9.0'
466 |
467 | '@typescript-eslint/visitor-keys@8.34.1':
468 | resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==}
469 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
470 |
471 | '@vitejs/plugin-vue@5.2.4':
472 | resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
473 | engines: {node: ^18.0.0 || >=20.0.0}
474 | peerDependencies:
475 | vite: ^5.0.0 || ^6.0.0
476 | vue: ^3.2.25
477 |
478 | '@volar/language-core@2.4.14':
479 | resolution: {integrity: sha512-X6beusV0DvuVseaOEy7GoagS4rYHgDHnTrdOj5jeUb49fW5ceQyP9Ej5rBhqgz2wJggl+2fDbbojq1XKaxDi6w==}
480 |
481 | '@volar/source-map@2.4.14':
482 | resolution: {integrity: sha512-5TeKKMh7Sfxo8021cJfmBzcjfY1SsXsPMMjMvjY7ivesdnybqqS+GxGAoXHAOUawQTwtdUxgP65Im+dEmvWtYQ==}
483 |
484 | '@volar/typescript@2.4.14':
485 | resolution: {integrity: sha512-p8Z6f/bZM3/HyCdRNFZOEEzts51uV8WHeN8Tnfnm2EBv6FDB2TQLzfVx7aJvnl8ofKAOnS64B2O8bImBFaauRw==}
486 |
487 | '@vue/compiler-core@3.5.16':
488 | resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==}
489 |
490 | '@vue/compiler-dom@3.5.16':
491 | resolution: {integrity: sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==}
492 |
493 | '@vue/compiler-sfc@3.5.16':
494 | resolution: {integrity: sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==}
495 |
496 | '@vue/compiler-ssr@3.5.16':
497 | resolution: {integrity: sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==}
498 |
499 | '@vue/compiler-vue2@2.7.16':
500 | resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
501 |
502 | '@vue/language-core@2.2.10':
503 | resolution: {integrity: sha512-+yNoYx6XIKuAO8Mqh1vGytu8jkFEOH5C8iOv3i8Z/65A7x9iAOXA97Q+PqZ3nlm2lxf5rOJuIGI/wDtx/riNYw==}
504 | peerDependencies:
505 | typescript: '*'
506 | peerDependenciesMeta:
507 | typescript:
508 | optional: true
509 |
510 | '@vue/reactivity@3.5.16':
511 | resolution: {integrity: sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==}
512 |
513 | '@vue/runtime-core@3.5.16':
514 | resolution: {integrity: sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==}
515 |
516 | '@vue/runtime-dom@3.5.16':
517 | resolution: {integrity: sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==}
518 |
519 | '@vue/server-renderer@3.5.16':
520 | resolution: {integrity: sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==}
521 | peerDependencies:
522 | vue: 3.5.16
523 |
524 | '@vue/shared@3.5.16':
525 | resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==}
526 |
527 | '@vue/tsconfig@0.7.0':
528 | resolution: {integrity: sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==}
529 | peerDependencies:
530 | typescript: 5.x
531 | vue: ^3.4.0
532 | peerDependenciesMeta:
533 | typescript:
534 | optional: true
535 | vue:
536 | optional: true
537 |
538 | acorn-jsx@5.3.2:
539 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
540 | peerDependencies:
541 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
542 |
543 | acorn@8.15.0:
544 | resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
545 | engines: {node: '>=0.4.0'}
546 | hasBin: true
547 |
548 | ajv@6.12.6:
549 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
550 |
551 | alien-signals@1.0.13:
552 | resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==}
553 |
554 | ansi-styles@4.3.0:
555 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
556 | engines: {node: '>=8'}
557 |
558 | argparse@2.0.1:
559 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
560 |
561 | balanced-match@1.0.2:
562 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
563 |
564 | boolbase@1.0.0:
565 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
566 |
567 | brace-expansion@1.1.11:
568 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
569 |
570 | brace-expansion@2.0.2:
571 | resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
572 |
573 | braces@3.0.3:
574 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
575 | engines: {node: '>=8'}
576 |
577 | buffer-builder@0.2.0:
578 | resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==}
579 |
580 | callsites@3.1.0:
581 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
582 | engines: {node: '>=6'}
583 |
584 | chalk@4.1.2:
585 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
586 | engines: {node: '>=10'}
587 |
588 | color-convert@2.0.1:
589 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
590 | engines: {node: '>=7.0.0'}
591 |
592 | color-name@1.1.4:
593 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
594 |
595 | colorjs.io@0.5.2:
596 | resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
597 |
598 | concat-map@0.0.1:
599 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
600 |
601 | cross-spawn@7.0.6:
602 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
603 | engines: {node: '>= 8'}
604 |
605 | cssesc@3.0.0:
606 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
607 | engines: {node: '>=4'}
608 | hasBin: true
609 |
610 | csstype@3.1.3:
611 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
612 |
613 | de-indent@1.0.2:
614 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
615 |
616 | debug@4.4.1:
617 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
618 | engines: {node: '>=6.0'}
619 | peerDependencies:
620 | supports-color: '*'
621 | peerDependenciesMeta:
622 | supports-color:
623 | optional: true
624 |
625 | deep-is@0.1.4:
626 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
627 |
628 | entities@4.5.0:
629 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
630 | engines: {node: '>=0.12'}
631 |
632 | esbuild@0.25.5:
633 | resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
634 | engines: {node: '>=18'}
635 | hasBin: true
636 |
637 | escape-string-regexp@4.0.0:
638 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
639 | engines: {node: '>=10'}
640 |
641 | eslint-plugin-vue@10.2.0:
642 | resolution: {integrity: sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==}
643 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
644 | peerDependencies:
645 | eslint: ^8.57.0 || ^9.0.0
646 | vue-eslint-parser: ^10.0.0
647 |
648 | eslint-scope@8.4.0:
649 | resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
650 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
651 |
652 | eslint-visitor-keys@3.4.3:
653 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
654 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
655 |
656 | eslint-visitor-keys@4.2.1:
657 | resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
658 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
659 |
660 | eslint@9.29.0:
661 | resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==}
662 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
663 | hasBin: true
664 | peerDependencies:
665 | jiti: '*'
666 | peerDependenciesMeta:
667 | jiti:
668 | optional: true
669 |
670 | espree@10.4.0:
671 | resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
672 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
673 |
674 | esquery@1.6.0:
675 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
676 | engines: {node: '>=0.10'}
677 |
678 | esrecurse@4.3.0:
679 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
680 | engines: {node: '>=4.0'}
681 |
682 | estraverse@5.3.0:
683 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
684 | engines: {node: '>=4.0'}
685 |
686 | estree-walker@2.0.2:
687 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
688 |
689 | esutils@2.0.3:
690 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
691 | engines: {node: '>=0.10.0'}
692 |
693 | fast-deep-equal@3.1.3:
694 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
695 |
696 | fast-glob@3.3.3:
697 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
698 | engines: {node: '>=8.6.0'}
699 |
700 | fast-json-stable-stringify@2.1.0:
701 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
702 |
703 | fast-levenshtein@2.0.6:
704 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
705 |
706 | fastq@1.19.1:
707 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
708 |
709 | fdir@6.4.6:
710 | resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
711 | peerDependencies:
712 | picomatch: ^3 || ^4
713 | peerDependenciesMeta:
714 | picomatch:
715 | optional: true
716 |
717 | file-entry-cache@8.0.0:
718 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
719 | engines: {node: '>=16.0.0'}
720 |
721 | fill-range@7.1.1:
722 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
723 | engines: {node: '>=8'}
724 |
725 | find-up@5.0.0:
726 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
727 | engines: {node: '>=10'}
728 |
729 | flat-cache@4.0.1:
730 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
731 | engines: {node: '>=16'}
732 |
733 | flatted@3.3.3:
734 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
735 |
736 | fsevents@2.3.3:
737 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
738 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
739 | os: [darwin]
740 |
741 | glob-parent@5.1.2:
742 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
743 | engines: {node: '>= 6'}
744 |
745 | glob-parent@6.0.2:
746 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
747 | engines: {node: '>=10.13.0'}
748 |
749 | globals@14.0.0:
750 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
751 | engines: {node: '>=18'}
752 |
753 | globals@16.2.0:
754 | resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==}
755 | engines: {node: '>=18'}
756 |
757 | graphemer@1.4.0:
758 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
759 |
760 | has-flag@4.0.0:
761 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
762 | engines: {node: '>=8'}
763 |
764 | he@1.2.0:
765 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
766 | hasBin: true
767 |
768 | ignore@5.3.2:
769 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
770 | engines: {node: '>= 4'}
771 |
772 | ignore@7.0.5:
773 | resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
774 | engines: {node: '>= 4'}
775 |
776 | immutable@5.1.3:
777 | resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==}
778 |
779 | import-fresh@3.3.1:
780 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
781 | engines: {node: '>=6'}
782 |
783 | imurmurhash@0.1.4:
784 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
785 | engines: {node: '>=0.8.19'}
786 |
787 | is-extglob@2.1.1:
788 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
789 | engines: {node: '>=0.10.0'}
790 |
791 | is-glob@4.0.3:
792 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
793 | engines: {node: '>=0.10.0'}
794 |
795 | is-number@7.0.0:
796 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
797 | engines: {node: '>=0.12.0'}
798 |
799 | isexe@2.0.0:
800 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
801 |
802 | js-yaml@4.1.0:
803 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
804 | hasBin: true
805 |
806 | json-buffer@3.0.1:
807 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
808 |
809 | json-schema-traverse@0.4.1:
810 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
811 |
812 | json-stable-stringify-without-jsonify@1.0.1:
813 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
814 |
815 | keyv@4.5.4:
816 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
817 |
818 | levn@0.4.1:
819 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
820 | engines: {node: '>= 0.8.0'}
821 |
822 | locate-path@6.0.0:
823 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
824 | engines: {node: '>=10'}
825 |
826 | lodash.merge@4.6.2:
827 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
828 |
829 | lodash@4.17.21:
830 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
831 |
832 | magic-string@0.30.17:
833 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
834 |
835 | merge2@1.4.1:
836 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
837 | engines: {node: '>= 8'}
838 |
839 | micromatch@4.0.8:
840 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
841 | engines: {node: '>=8.6'}
842 |
843 | minimatch@3.1.2:
844 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
845 |
846 | minimatch@9.0.5:
847 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
848 | engines: {node: '>=16 || 14 >=14.17'}
849 |
850 | ms@2.1.3:
851 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
852 |
853 | muggle-string@0.4.1:
854 | resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
855 |
856 | nanoid@3.3.11:
857 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
858 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
859 | hasBin: true
860 |
861 | natural-compare@1.4.0:
862 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
863 |
864 | nth-check@2.1.1:
865 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
866 |
867 | optionator@0.9.4:
868 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
869 | engines: {node: '>= 0.8.0'}
870 |
871 | p-limit@3.1.0:
872 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
873 | engines: {node: '>=10'}
874 |
875 | p-locate@5.0.0:
876 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
877 | engines: {node: '>=10'}
878 |
879 | parent-module@1.0.1:
880 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
881 | engines: {node: '>=6'}
882 |
883 | path-browserify@1.0.1:
884 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
885 |
886 | path-exists@4.0.0:
887 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
888 | engines: {node: '>=8'}
889 |
890 | path-key@3.1.1:
891 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
892 | engines: {node: '>=8'}
893 |
894 | picocolors@1.1.1:
895 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
896 |
897 | picomatch@2.3.1:
898 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
899 | engines: {node: '>=8.6'}
900 |
901 | picomatch@4.0.2:
902 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
903 | engines: {node: '>=12'}
904 |
905 | postcss-selector-parser@6.1.2:
906 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
907 | engines: {node: '>=4'}
908 |
909 | postcss@8.5.4:
910 | resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==}
911 | engines: {node: ^10 || ^12 || >=14}
912 |
913 | prelude-ls@1.2.1:
914 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
915 | engines: {node: '>= 0.8.0'}
916 |
917 | punycode@2.3.1:
918 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
919 | engines: {node: '>=6'}
920 |
921 | queue-microtask@1.2.3:
922 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
923 |
924 | resolve-from@4.0.0:
925 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
926 | engines: {node: '>=4'}
927 |
928 | reusify@1.1.0:
929 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
930 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
931 |
932 | rollup@4.42.0:
933 | resolution: {integrity: sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==}
934 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
935 | hasBin: true
936 |
937 | run-parallel@1.2.0:
938 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
939 |
940 | rxjs@7.8.2:
941 | resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
942 |
943 | sass-embedded-android-arm64@1.89.2:
944 | resolution: {integrity: sha512-+pq7a7AUpItNyPu61sRlP6G2A8pSPpyazASb+8AK2pVlFayCSPAEgpwpCE9A2/Xj86xJZeMizzKUHxM2CBCUxA==}
945 | engines: {node: '>=14.0.0'}
946 | cpu: [arm64]
947 | os: [android]
948 |
949 | sass-embedded-android-arm@1.89.2:
950 | resolution: {integrity: sha512-oHAPTboBHRZlDBhyRB6dvDKh4KvFs+DZibDHXbkSI6dBZxMTT+Yb2ivocHnctVGucKTLQeT7+OM5DjWHyynL/A==}
951 | engines: {node: '>=14.0.0'}
952 | cpu: [arm]
953 | os: [android]
954 |
955 | sass-embedded-android-riscv64@1.89.2:
956 | resolution: {integrity: sha512-HfJJWp/S6XSYvlGAqNdakeEMPOdhBkj2s2lN6SHnON54rahKem+z9pUbCriUJfM65Z90lakdGuOfidY61R9TYg==}
957 | engines: {node: '>=14.0.0'}
958 | cpu: [riscv64]
959 | os: [android]
960 |
961 | sass-embedded-android-x64@1.89.2:
962 | resolution: {integrity: sha512-BGPzq53VH5z5HN8de6jfMqJjnRe1E6sfnCWFd4pK+CAiuM7iw5Fx6BQZu3ikfI1l2GY0y6pRXzsVLdp/j4EKEA==}
963 | engines: {node: '>=14.0.0'}
964 | cpu: [x64]
965 | os: [android]
966 |
967 | sass-embedded-darwin-arm64@1.89.2:
968 | resolution: {integrity: sha512-UCm3RL/tzMpG7DsubARsvGUNXC5pgfQvP+RRFJo9XPIi6elopY5B6H4m9dRYDpHA+scjVthdiDwkPYr9+S/KGw==}
969 | engines: {node: '>=14.0.0'}
970 | cpu: [arm64]
971 | os: [darwin]
972 |
973 | sass-embedded-darwin-x64@1.89.2:
974 | resolution: {integrity: sha512-D9WxtDY5VYtMApXRuhQK9VkPHB8R79NIIR6xxVlN2MIdEid/TZWi1MHNweieETXhWGrKhRKglwnHxxyKdJYMnA==}
975 | engines: {node: '>=14.0.0'}
976 | cpu: [x64]
977 | os: [darwin]
978 |
979 | sass-embedded-linux-arm64@1.89.2:
980 | resolution: {integrity: sha512-2N4WW5LLsbtrWUJ7iTpjvhajGIbmDR18ZzYRywHdMLpfdPApuHPMDF5CYzHbS+LLx2UAx7CFKBnj5LLjY6eFgQ==}
981 | engines: {node: '>=14.0.0'}
982 | cpu: [arm64]
983 | os: [linux]
984 |
985 | sass-embedded-linux-arm@1.89.2:
986 | resolution: {integrity: sha512-leP0t5U4r95dc90o8TCWfxNXwMAsQhpWxTkdtySDpngoqtTy3miMd7EYNYd1znI0FN1CBaUvbdCMbnbPwygDlA==}
987 | engines: {node: '>=14.0.0'}
988 | cpu: [arm]
989 | os: [linux]
990 |
991 | sass-embedded-linux-musl-arm64@1.89.2:
992 | resolution: {integrity: sha512-nTyuaBX6U1A/cG7WJh0pKD1gY8hbg1m2SnzsyoFG+exQ0lBX/lwTLHq3nyhF+0atv7YYhYKbmfz+sjPP8CZ9lw==}
993 | engines: {node: '>=14.0.0'}
994 | cpu: [arm64]
995 | os: [linux]
996 |
997 | sass-embedded-linux-musl-arm@1.89.2:
998 | resolution: {integrity: sha512-Z6gG2FiVEEdxYHRi2sS5VIYBmp17351bWtOCUZ/thBM66+e70yiN6Eyqjz80DjL8haRUegNQgy9ZJqsLAAmr9g==}
999 | engines: {node: '>=14.0.0'}
1000 | cpu: [arm]
1001 | os: [linux]
1002 |
1003 | sass-embedded-linux-musl-riscv64@1.89.2:
1004 | resolution: {integrity: sha512-N6oul+qALO0SwGY8JW7H/Vs0oZIMrRMBM4GqX3AjM/6y8JsJRxkAwnfd0fDyK+aICMFarDqQonQNIx99gdTZqw==}
1005 | engines: {node: '>=14.0.0'}
1006 | cpu: [riscv64]
1007 | os: [linux]
1008 |
1009 | sass-embedded-linux-musl-x64@1.89.2:
1010 | resolution: {integrity: sha512-K+FmWcdj/uyP8GiG9foxOCPfb5OAZG0uSVq80DKgVSC0U44AdGjvAvVZkrgFEcZ6cCqlNC2JfYmslB5iqdL7tg==}
1011 | engines: {node: '>=14.0.0'}
1012 | cpu: [x64]
1013 | os: [linux]
1014 |
1015 | sass-embedded-linux-riscv64@1.89.2:
1016 | resolution: {integrity: sha512-g9nTbnD/3yhOaskeqeBQETbtfDQWRgsjHok6bn7DdAuwBsyrR3JlSFyqKc46pn9Xxd9SQQZU8AzM4IR+sY0A0w==}
1017 | engines: {node: '>=14.0.0'}
1018 | cpu: [riscv64]
1019 | os: [linux]
1020 |
1021 | sass-embedded-linux-x64@1.89.2:
1022 | resolution: {integrity: sha512-Ax7dKvzncyQzIl4r7012KCMBvJzOz4uwSNoyoM5IV6y5I1f5hEwI25+U4WfuTqdkv42taCMgpjZbh9ERr6JVMQ==}
1023 | engines: {node: '>=14.0.0'}
1024 | cpu: [x64]
1025 | os: [linux]
1026 |
1027 | sass-embedded-win32-arm64@1.89.2:
1028 | resolution: {integrity: sha512-j96iJni50ZUsfD6tRxDQE2QSYQ2WrfHxeiyAXf41Kw0V4w5KYR/Sf6rCZQLMTUOHnD16qTMVpQi20LQSqf4WGg==}
1029 | engines: {node: '>=14.0.0'}
1030 | cpu: [arm64]
1031 | os: [win32]
1032 |
1033 | sass-embedded-win32-x64@1.89.2:
1034 | resolution: {integrity: sha512-cS2j5ljdkQsb4PaORiClaVYynE9OAPZG/XjbOMxpQmjRIf7UroY4PEIH+Waf+y47PfXFX9SyxhYuw2NIKGbEng==}
1035 | engines: {node: '>=14.0.0'}
1036 | cpu: [x64]
1037 | os: [win32]
1038 |
1039 | sass-embedded@1.89.2:
1040 | resolution: {integrity: sha512-Ack2K8rc57kCFcYlf3HXpZEJFNUX8xd8DILldksREmYXQkRHI879yy8q4mRDJgrojkySMZqmmmW1NxrFxMsYaA==}
1041 | engines: {node: '>=16.0.0'}
1042 | hasBin: true
1043 |
1044 | semver@7.7.2:
1045 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
1046 | engines: {node: '>=10'}
1047 | hasBin: true
1048 |
1049 | shebang-command@2.0.0:
1050 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1051 | engines: {node: '>=8'}
1052 |
1053 | shebang-regex@3.0.0:
1054 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1055 | engines: {node: '>=8'}
1056 |
1057 | source-map-js@1.2.1:
1058 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1059 | engines: {node: '>=0.10.0'}
1060 |
1061 | strip-json-comments@3.1.1:
1062 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1063 | engines: {node: '>=8'}
1064 |
1065 | supports-color@7.2.0:
1066 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1067 | engines: {node: '>=8'}
1068 |
1069 | supports-color@8.1.1:
1070 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
1071 | engines: {node: '>=10'}
1072 |
1073 | sync-child-process@1.0.2:
1074 | resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==}
1075 | engines: {node: '>=16.0.0'}
1076 |
1077 | sync-message-port@1.1.3:
1078 | resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==}
1079 | engines: {node: '>=16.0.0'}
1080 |
1081 | tinyglobby@0.2.14:
1082 | resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
1083 | engines: {node: '>=12.0.0'}
1084 |
1085 | to-regex-range@5.0.1:
1086 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1087 | engines: {node: '>=8.0'}
1088 |
1089 | ts-api-utils@2.1.0:
1090 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
1091 | engines: {node: '>=18.12'}
1092 | peerDependencies:
1093 | typescript: '>=4.8.4'
1094 |
1095 | tslib@2.8.1:
1096 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1097 |
1098 | type-check@0.4.0:
1099 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1100 | engines: {node: '>= 0.8.0'}
1101 |
1102 | typescript@5.8.3:
1103 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
1104 | engines: {node: '>=14.17'}
1105 | hasBin: true
1106 |
1107 | uri-js@4.4.1:
1108 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1109 |
1110 | util-deprecate@1.0.2:
1111 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1112 |
1113 | varint@6.0.0:
1114 | resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
1115 |
1116 | vite@6.3.5:
1117 | resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
1118 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1119 | hasBin: true
1120 | peerDependencies:
1121 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1122 | jiti: '>=1.21.0'
1123 | less: '*'
1124 | lightningcss: ^1.21.0
1125 | sass: '*'
1126 | sass-embedded: '*'
1127 | stylus: '*'
1128 | sugarss: '*'
1129 | terser: ^5.16.0
1130 | tsx: ^4.8.1
1131 | yaml: ^2.4.2
1132 | peerDependenciesMeta:
1133 | '@types/node':
1134 | optional: true
1135 | jiti:
1136 | optional: true
1137 | less:
1138 | optional: true
1139 | lightningcss:
1140 | optional: true
1141 | sass:
1142 | optional: true
1143 | sass-embedded:
1144 | optional: true
1145 | stylus:
1146 | optional: true
1147 | sugarss:
1148 | optional: true
1149 | terser:
1150 | optional: true
1151 | tsx:
1152 | optional: true
1153 | yaml:
1154 | optional: true
1155 |
1156 | vscode-uri@3.1.0:
1157 | resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
1158 |
1159 | vue-eslint-parser@10.1.3:
1160 | resolution: {integrity: sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==}
1161 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1162 | peerDependencies:
1163 | eslint: ^8.57.0 || ^9.0.0
1164 |
1165 | vue-tsc@2.2.10:
1166 | resolution: {integrity: sha512-jWZ1xSaNbabEV3whpIDMbjVSVawjAyW+x1n3JeGQo7S0uv2n9F/JMgWW90tGWNFRKya4YwKMZgCtr0vRAM7DeQ==}
1167 | hasBin: true
1168 | peerDependencies:
1169 | typescript: '>=5.0.0'
1170 |
1171 | vue@3.5.16:
1172 | resolution: {integrity: sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==}
1173 | peerDependencies:
1174 | typescript: '*'
1175 | peerDependenciesMeta:
1176 | typescript:
1177 | optional: true
1178 |
1179 | which@2.0.2:
1180 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1181 | engines: {node: '>= 8'}
1182 | hasBin: true
1183 |
1184 | word-wrap@1.2.5:
1185 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1186 | engines: {node: '>=0.10.0'}
1187 |
1188 | xml-name-validator@4.0.0:
1189 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
1190 | engines: {node: '>=12'}
1191 |
1192 | yocto-queue@0.1.0:
1193 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1194 | engines: {node: '>=10'}
1195 |
1196 | snapshots:
1197 |
1198 | '@babel/helper-string-parser@7.27.1': {}
1199 |
1200 | '@babel/helper-validator-identifier@7.27.1': {}
1201 |
1202 | '@babel/parser@7.27.5':
1203 | dependencies:
1204 | '@babel/types': 7.27.6
1205 |
1206 | '@babel/types@7.27.6':
1207 | dependencies:
1208 | '@babel/helper-string-parser': 7.27.1
1209 | '@babel/helper-validator-identifier': 7.27.1
1210 |
1211 | '@bufbuild/protobuf@2.5.2': {}
1212 |
1213 | '@esbuild/aix-ppc64@0.25.5':
1214 | optional: true
1215 |
1216 | '@esbuild/android-arm64@0.25.5':
1217 | optional: true
1218 |
1219 | '@esbuild/android-arm@0.25.5':
1220 | optional: true
1221 |
1222 | '@esbuild/android-x64@0.25.5':
1223 | optional: true
1224 |
1225 | '@esbuild/darwin-arm64@0.25.5':
1226 | optional: true
1227 |
1228 | '@esbuild/darwin-x64@0.25.5':
1229 | optional: true
1230 |
1231 | '@esbuild/freebsd-arm64@0.25.5':
1232 | optional: true
1233 |
1234 | '@esbuild/freebsd-x64@0.25.5':
1235 | optional: true
1236 |
1237 | '@esbuild/linux-arm64@0.25.5':
1238 | optional: true
1239 |
1240 | '@esbuild/linux-arm@0.25.5':
1241 | optional: true
1242 |
1243 | '@esbuild/linux-ia32@0.25.5':
1244 | optional: true
1245 |
1246 | '@esbuild/linux-loong64@0.25.5':
1247 | optional: true
1248 |
1249 | '@esbuild/linux-mips64el@0.25.5':
1250 | optional: true
1251 |
1252 | '@esbuild/linux-ppc64@0.25.5':
1253 | optional: true
1254 |
1255 | '@esbuild/linux-riscv64@0.25.5':
1256 | optional: true
1257 |
1258 | '@esbuild/linux-s390x@0.25.5':
1259 | optional: true
1260 |
1261 | '@esbuild/linux-x64@0.25.5':
1262 | optional: true
1263 |
1264 | '@esbuild/netbsd-arm64@0.25.5':
1265 | optional: true
1266 |
1267 | '@esbuild/netbsd-x64@0.25.5':
1268 | optional: true
1269 |
1270 | '@esbuild/openbsd-arm64@0.25.5':
1271 | optional: true
1272 |
1273 | '@esbuild/openbsd-x64@0.25.5':
1274 | optional: true
1275 |
1276 | '@esbuild/sunos-x64@0.25.5':
1277 | optional: true
1278 |
1279 | '@esbuild/win32-arm64@0.25.5':
1280 | optional: true
1281 |
1282 | '@esbuild/win32-ia32@0.25.5':
1283 | optional: true
1284 |
1285 | '@esbuild/win32-x64@0.25.5':
1286 | optional: true
1287 |
1288 | '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0)':
1289 | dependencies:
1290 | eslint: 9.29.0
1291 | eslint-visitor-keys: 3.4.3
1292 |
1293 | '@eslint-community/regexpp@4.12.1': {}
1294 |
1295 | '@eslint/config-array@0.20.1':
1296 | dependencies:
1297 | '@eslint/object-schema': 2.1.6
1298 | debug: 4.4.1
1299 | minimatch: 3.1.2
1300 | transitivePeerDependencies:
1301 | - supports-color
1302 |
1303 | '@eslint/config-helpers@0.2.2': {}
1304 |
1305 | '@eslint/core@0.14.0':
1306 | dependencies:
1307 | '@types/json-schema': 7.0.15
1308 |
1309 | '@eslint/eslintrc@3.3.1':
1310 | dependencies:
1311 | ajv: 6.12.6
1312 | debug: 4.4.1
1313 | espree: 10.4.0
1314 | globals: 14.0.0
1315 | ignore: 5.3.2
1316 | import-fresh: 3.3.1
1317 | js-yaml: 4.1.0
1318 | minimatch: 3.1.2
1319 | strip-json-comments: 3.1.1
1320 | transitivePeerDependencies:
1321 | - supports-color
1322 |
1323 | '@eslint/js@9.29.0': {}
1324 |
1325 | '@eslint/object-schema@2.1.6': {}
1326 |
1327 | '@eslint/plugin-kit@0.3.1':
1328 | dependencies:
1329 | '@eslint/core': 0.14.0
1330 | levn: 0.4.1
1331 |
1332 | '@humanfs/core@0.19.1': {}
1333 |
1334 | '@humanfs/node@0.16.6':
1335 | dependencies:
1336 | '@humanfs/core': 0.19.1
1337 | '@humanwhocodes/retry': 0.3.1
1338 |
1339 | '@humanwhocodes/module-importer@1.0.1': {}
1340 |
1341 | '@humanwhocodes/retry@0.3.1': {}
1342 |
1343 | '@humanwhocodes/retry@0.4.3': {}
1344 |
1345 | '@jridgewell/sourcemap-codec@1.5.0': {}
1346 |
1347 | '@nodelib/fs.scandir@2.1.5':
1348 | dependencies:
1349 | '@nodelib/fs.stat': 2.0.5
1350 | run-parallel: 1.2.0
1351 |
1352 | '@nodelib/fs.stat@2.0.5': {}
1353 |
1354 | '@nodelib/fs.walk@1.2.8':
1355 | dependencies:
1356 | '@nodelib/fs.scandir': 2.1.5
1357 | fastq: 1.19.1
1358 |
1359 | '@rollup/rollup-android-arm-eabi@4.42.0':
1360 | optional: true
1361 |
1362 | '@rollup/rollup-android-arm64@4.42.0':
1363 | optional: true
1364 |
1365 | '@rollup/rollup-darwin-arm64@4.42.0':
1366 | optional: true
1367 |
1368 | '@rollup/rollup-darwin-x64@4.42.0':
1369 | optional: true
1370 |
1371 | '@rollup/rollup-freebsd-arm64@4.42.0':
1372 | optional: true
1373 |
1374 | '@rollup/rollup-freebsd-x64@4.42.0':
1375 | optional: true
1376 |
1377 | '@rollup/rollup-linux-arm-gnueabihf@4.42.0':
1378 | optional: true
1379 |
1380 | '@rollup/rollup-linux-arm-musleabihf@4.42.0':
1381 | optional: true
1382 |
1383 | '@rollup/rollup-linux-arm64-gnu@4.42.0':
1384 | optional: true
1385 |
1386 | '@rollup/rollup-linux-arm64-musl@4.42.0':
1387 | optional: true
1388 |
1389 | '@rollup/rollup-linux-loongarch64-gnu@4.42.0':
1390 | optional: true
1391 |
1392 | '@rollup/rollup-linux-powerpc64le-gnu@4.42.0':
1393 | optional: true
1394 |
1395 | '@rollup/rollup-linux-riscv64-gnu@4.42.0':
1396 | optional: true
1397 |
1398 | '@rollup/rollup-linux-riscv64-musl@4.42.0':
1399 | optional: true
1400 |
1401 | '@rollup/rollup-linux-s390x-gnu@4.42.0':
1402 | optional: true
1403 |
1404 | '@rollup/rollup-linux-x64-gnu@4.42.0':
1405 | optional: true
1406 |
1407 | '@rollup/rollup-linux-x64-musl@4.42.0':
1408 | optional: true
1409 |
1410 | '@rollup/rollup-win32-arm64-msvc@4.42.0':
1411 | optional: true
1412 |
1413 | '@rollup/rollup-win32-ia32-msvc@4.42.0':
1414 | optional: true
1415 |
1416 | '@rollup/rollup-win32-x64-msvc@4.42.0':
1417 | optional: true
1418 |
1419 | '@types/estree@1.0.7': {}
1420 |
1421 | '@types/json-schema@7.0.15': {}
1422 |
1423 | '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0)(typescript@5.8.3))(eslint@9.29.0)(typescript@5.8.3)':
1424 | dependencies:
1425 | '@eslint-community/regexpp': 4.12.1
1426 | '@typescript-eslint/parser': 8.34.1(eslint@9.29.0)(typescript@5.8.3)
1427 | '@typescript-eslint/scope-manager': 8.34.1
1428 | '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0)(typescript@5.8.3)
1429 | '@typescript-eslint/utils': 8.34.1(eslint@9.29.0)(typescript@5.8.3)
1430 | '@typescript-eslint/visitor-keys': 8.34.1
1431 | eslint: 9.29.0
1432 | graphemer: 1.4.0
1433 | ignore: 7.0.5
1434 | natural-compare: 1.4.0
1435 | ts-api-utils: 2.1.0(typescript@5.8.3)
1436 | typescript: 5.8.3
1437 | transitivePeerDependencies:
1438 | - supports-color
1439 |
1440 | '@typescript-eslint/parser@8.34.1(eslint@9.29.0)(typescript@5.8.3)':
1441 | dependencies:
1442 | '@typescript-eslint/scope-manager': 8.34.1
1443 | '@typescript-eslint/types': 8.34.1
1444 | '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
1445 | '@typescript-eslint/visitor-keys': 8.34.1
1446 | debug: 4.4.1
1447 | eslint: 9.29.0
1448 | typescript: 5.8.3
1449 | transitivePeerDependencies:
1450 | - supports-color
1451 |
1452 | '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)':
1453 | dependencies:
1454 | '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
1455 | '@typescript-eslint/types': 8.34.1
1456 | debug: 4.4.1
1457 | typescript: 5.8.3
1458 | transitivePeerDependencies:
1459 | - supports-color
1460 |
1461 | '@typescript-eslint/scope-manager@8.34.1':
1462 | dependencies:
1463 | '@typescript-eslint/types': 8.34.1
1464 | '@typescript-eslint/visitor-keys': 8.34.1
1465 |
1466 | '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)':
1467 | dependencies:
1468 | typescript: 5.8.3
1469 |
1470 | '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0)(typescript@5.8.3)':
1471 | dependencies:
1472 | '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
1473 | '@typescript-eslint/utils': 8.34.1(eslint@9.29.0)(typescript@5.8.3)
1474 | debug: 4.4.1
1475 | eslint: 9.29.0
1476 | ts-api-utils: 2.1.0(typescript@5.8.3)
1477 | typescript: 5.8.3
1478 | transitivePeerDependencies:
1479 | - supports-color
1480 |
1481 | '@typescript-eslint/types@8.34.1': {}
1482 |
1483 | '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)':
1484 | dependencies:
1485 | '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3)
1486 | '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
1487 | '@typescript-eslint/types': 8.34.1
1488 | '@typescript-eslint/visitor-keys': 8.34.1
1489 | debug: 4.4.1
1490 | fast-glob: 3.3.3
1491 | is-glob: 4.0.3
1492 | minimatch: 9.0.5
1493 | semver: 7.7.2
1494 | ts-api-utils: 2.1.0(typescript@5.8.3)
1495 | typescript: 5.8.3
1496 | transitivePeerDependencies:
1497 | - supports-color
1498 |
1499 | '@typescript-eslint/utils@8.34.1(eslint@9.29.0)(typescript@5.8.3)':
1500 | dependencies:
1501 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0)
1502 | '@typescript-eslint/scope-manager': 8.34.1
1503 | '@typescript-eslint/types': 8.34.1
1504 | '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
1505 | eslint: 9.29.0
1506 | typescript: 5.8.3
1507 | transitivePeerDependencies:
1508 | - supports-color
1509 |
1510 | '@typescript-eslint/visitor-keys@8.34.1':
1511 | dependencies:
1512 | '@typescript-eslint/types': 8.34.1
1513 | eslint-visitor-keys: 4.2.1
1514 |
1515 | '@vitejs/plugin-vue@5.2.4(vite@6.3.5(sass-embedded@1.89.2))(vue@3.5.16(typescript@5.8.3))':
1516 | dependencies:
1517 | vite: 6.3.5(sass-embedded@1.89.2)
1518 | vue: 3.5.16(typescript@5.8.3)
1519 |
1520 | '@volar/language-core@2.4.14':
1521 | dependencies:
1522 | '@volar/source-map': 2.4.14
1523 |
1524 | '@volar/source-map@2.4.14': {}
1525 |
1526 | '@volar/typescript@2.4.14':
1527 | dependencies:
1528 | '@volar/language-core': 2.4.14
1529 | path-browserify: 1.0.1
1530 | vscode-uri: 3.1.0
1531 |
1532 | '@vue/compiler-core@3.5.16':
1533 | dependencies:
1534 | '@babel/parser': 7.27.5
1535 | '@vue/shared': 3.5.16
1536 | entities: 4.5.0
1537 | estree-walker: 2.0.2
1538 | source-map-js: 1.2.1
1539 |
1540 | '@vue/compiler-dom@3.5.16':
1541 | dependencies:
1542 | '@vue/compiler-core': 3.5.16
1543 | '@vue/shared': 3.5.16
1544 |
1545 | '@vue/compiler-sfc@3.5.16':
1546 | dependencies:
1547 | '@babel/parser': 7.27.5
1548 | '@vue/compiler-core': 3.5.16
1549 | '@vue/compiler-dom': 3.5.16
1550 | '@vue/compiler-ssr': 3.5.16
1551 | '@vue/shared': 3.5.16
1552 | estree-walker: 2.0.2
1553 | magic-string: 0.30.17
1554 | postcss: 8.5.4
1555 | source-map-js: 1.2.1
1556 |
1557 | '@vue/compiler-ssr@3.5.16':
1558 | dependencies:
1559 | '@vue/compiler-dom': 3.5.16
1560 | '@vue/shared': 3.5.16
1561 |
1562 | '@vue/compiler-vue2@2.7.16':
1563 | dependencies:
1564 | de-indent: 1.0.2
1565 | he: 1.2.0
1566 |
1567 | '@vue/language-core@2.2.10(typescript@5.8.3)':
1568 | dependencies:
1569 | '@volar/language-core': 2.4.14
1570 | '@vue/compiler-dom': 3.5.16
1571 | '@vue/compiler-vue2': 2.7.16
1572 | '@vue/shared': 3.5.16
1573 | alien-signals: 1.0.13
1574 | minimatch: 9.0.5
1575 | muggle-string: 0.4.1
1576 | path-browserify: 1.0.1
1577 | optionalDependencies:
1578 | typescript: 5.8.3
1579 |
1580 | '@vue/reactivity@3.5.16':
1581 | dependencies:
1582 | '@vue/shared': 3.5.16
1583 |
1584 | '@vue/runtime-core@3.5.16':
1585 | dependencies:
1586 | '@vue/reactivity': 3.5.16
1587 | '@vue/shared': 3.5.16
1588 |
1589 | '@vue/runtime-dom@3.5.16':
1590 | dependencies:
1591 | '@vue/reactivity': 3.5.16
1592 | '@vue/runtime-core': 3.5.16
1593 | '@vue/shared': 3.5.16
1594 | csstype: 3.1.3
1595 |
1596 | '@vue/server-renderer@3.5.16(vue@3.5.16(typescript@5.8.3))':
1597 | dependencies:
1598 | '@vue/compiler-ssr': 3.5.16
1599 | '@vue/shared': 3.5.16
1600 | vue: 3.5.16(typescript@5.8.3)
1601 |
1602 | '@vue/shared@3.5.16': {}
1603 |
1604 | '@vue/tsconfig@0.7.0(typescript@5.8.3)(vue@3.5.16(typescript@5.8.3))':
1605 | optionalDependencies:
1606 | typescript: 5.8.3
1607 | vue: 3.5.16(typescript@5.8.3)
1608 |
1609 | acorn-jsx@5.3.2(acorn@8.15.0):
1610 | dependencies:
1611 | acorn: 8.15.0
1612 |
1613 | acorn@8.15.0: {}
1614 |
1615 | ajv@6.12.6:
1616 | dependencies:
1617 | fast-deep-equal: 3.1.3
1618 | fast-json-stable-stringify: 2.1.0
1619 | json-schema-traverse: 0.4.1
1620 | uri-js: 4.4.1
1621 |
1622 | alien-signals@1.0.13: {}
1623 |
1624 | ansi-styles@4.3.0:
1625 | dependencies:
1626 | color-convert: 2.0.1
1627 |
1628 | argparse@2.0.1: {}
1629 |
1630 | balanced-match@1.0.2: {}
1631 |
1632 | boolbase@1.0.0: {}
1633 |
1634 | brace-expansion@1.1.11:
1635 | dependencies:
1636 | balanced-match: 1.0.2
1637 | concat-map: 0.0.1
1638 |
1639 | brace-expansion@2.0.2:
1640 | dependencies:
1641 | balanced-match: 1.0.2
1642 |
1643 | braces@3.0.3:
1644 | dependencies:
1645 | fill-range: 7.1.1
1646 |
1647 | buffer-builder@0.2.0: {}
1648 |
1649 | callsites@3.1.0: {}
1650 |
1651 | chalk@4.1.2:
1652 | dependencies:
1653 | ansi-styles: 4.3.0
1654 | supports-color: 7.2.0
1655 |
1656 | color-convert@2.0.1:
1657 | dependencies:
1658 | color-name: 1.1.4
1659 |
1660 | color-name@1.1.4: {}
1661 |
1662 | colorjs.io@0.5.2: {}
1663 |
1664 | concat-map@0.0.1: {}
1665 |
1666 | cross-spawn@7.0.6:
1667 | dependencies:
1668 | path-key: 3.1.1
1669 | shebang-command: 2.0.0
1670 | which: 2.0.2
1671 |
1672 | cssesc@3.0.0: {}
1673 |
1674 | csstype@3.1.3: {}
1675 |
1676 | de-indent@1.0.2: {}
1677 |
1678 | debug@4.4.1:
1679 | dependencies:
1680 | ms: 2.1.3
1681 |
1682 | deep-is@0.1.4: {}
1683 |
1684 | entities@4.5.0: {}
1685 |
1686 | esbuild@0.25.5:
1687 | optionalDependencies:
1688 | '@esbuild/aix-ppc64': 0.25.5
1689 | '@esbuild/android-arm': 0.25.5
1690 | '@esbuild/android-arm64': 0.25.5
1691 | '@esbuild/android-x64': 0.25.5
1692 | '@esbuild/darwin-arm64': 0.25.5
1693 | '@esbuild/darwin-x64': 0.25.5
1694 | '@esbuild/freebsd-arm64': 0.25.5
1695 | '@esbuild/freebsd-x64': 0.25.5
1696 | '@esbuild/linux-arm': 0.25.5
1697 | '@esbuild/linux-arm64': 0.25.5
1698 | '@esbuild/linux-ia32': 0.25.5
1699 | '@esbuild/linux-loong64': 0.25.5
1700 | '@esbuild/linux-mips64el': 0.25.5
1701 | '@esbuild/linux-ppc64': 0.25.5
1702 | '@esbuild/linux-riscv64': 0.25.5
1703 | '@esbuild/linux-s390x': 0.25.5
1704 | '@esbuild/linux-x64': 0.25.5
1705 | '@esbuild/netbsd-arm64': 0.25.5
1706 | '@esbuild/netbsd-x64': 0.25.5
1707 | '@esbuild/openbsd-arm64': 0.25.5
1708 | '@esbuild/openbsd-x64': 0.25.5
1709 | '@esbuild/sunos-x64': 0.25.5
1710 | '@esbuild/win32-arm64': 0.25.5
1711 | '@esbuild/win32-ia32': 0.25.5
1712 | '@esbuild/win32-x64': 0.25.5
1713 |
1714 | escape-string-regexp@4.0.0: {}
1715 |
1716 | eslint-plugin-vue@10.2.0(eslint@9.29.0)(vue-eslint-parser@10.1.3(eslint@9.29.0)):
1717 | dependencies:
1718 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0)
1719 | eslint: 9.29.0
1720 | natural-compare: 1.4.0
1721 | nth-check: 2.1.1
1722 | postcss-selector-parser: 6.1.2
1723 | semver: 7.7.2
1724 | vue-eslint-parser: 10.1.3(eslint@9.29.0)
1725 | xml-name-validator: 4.0.0
1726 |
1727 | eslint-scope@8.4.0:
1728 | dependencies:
1729 | esrecurse: 4.3.0
1730 | estraverse: 5.3.0
1731 |
1732 | eslint-visitor-keys@3.4.3: {}
1733 |
1734 | eslint-visitor-keys@4.2.1: {}
1735 |
1736 | eslint@9.29.0:
1737 | dependencies:
1738 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0)
1739 | '@eslint-community/regexpp': 4.12.1
1740 | '@eslint/config-array': 0.20.1
1741 | '@eslint/config-helpers': 0.2.2
1742 | '@eslint/core': 0.14.0
1743 | '@eslint/eslintrc': 3.3.1
1744 | '@eslint/js': 9.29.0
1745 | '@eslint/plugin-kit': 0.3.1
1746 | '@humanfs/node': 0.16.6
1747 | '@humanwhocodes/module-importer': 1.0.1
1748 | '@humanwhocodes/retry': 0.4.3
1749 | '@types/estree': 1.0.7
1750 | '@types/json-schema': 7.0.15
1751 | ajv: 6.12.6
1752 | chalk: 4.1.2
1753 | cross-spawn: 7.0.6
1754 | debug: 4.4.1
1755 | escape-string-regexp: 4.0.0
1756 | eslint-scope: 8.4.0
1757 | eslint-visitor-keys: 4.2.1
1758 | espree: 10.4.0
1759 | esquery: 1.6.0
1760 | esutils: 2.0.3
1761 | fast-deep-equal: 3.1.3
1762 | file-entry-cache: 8.0.0
1763 | find-up: 5.0.0
1764 | glob-parent: 6.0.2
1765 | ignore: 5.3.2
1766 | imurmurhash: 0.1.4
1767 | is-glob: 4.0.3
1768 | json-stable-stringify-without-jsonify: 1.0.1
1769 | lodash.merge: 4.6.2
1770 | minimatch: 3.1.2
1771 | natural-compare: 1.4.0
1772 | optionator: 0.9.4
1773 | transitivePeerDependencies:
1774 | - supports-color
1775 |
1776 | espree@10.4.0:
1777 | dependencies:
1778 | acorn: 8.15.0
1779 | acorn-jsx: 5.3.2(acorn@8.15.0)
1780 | eslint-visitor-keys: 4.2.1
1781 |
1782 | esquery@1.6.0:
1783 | dependencies:
1784 | estraverse: 5.3.0
1785 |
1786 | esrecurse@4.3.0:
1787 | dependencies:
1788 | estraverse: 5.3.0
1789 |
1790 | estraverse@5.3.0: {}
1791 |
1792 | estree-walker@2.0.2: {}
1793 |
1794 | esutils@2.0.3: {}
1795 |
1796 | fast-deep-equal@3.1.3: {}
1797 |
1798 | fast-glob@3.3.3:
1799 | dependencies:
1800 | '@nodelib/fs.stat': 2.0.5
1801 | '@nodelib/fs.walk': 1.2.8
1802 | glob-parent: 5.1.2
1803 | merge2: 1.4.1
1804 | micromatch: 4.0.8
1805 |
1806 | fast-json-stable-stringify@2.1.0: {}
1807 |
1808 | fast-levenshtein@2.0.6: {}
1809 |
1810 | fastq@1.19.1:
1811 | dependencies:
1812 | reusify: 1.1.0
1813 |
1814 | fdir@6.4.6(picomatch@4.0.2):
1815 | optionalDependencies:
1816 | picomatch: 4.0.2
1817 |
1818 | file-entry-cache@8.0.0:
1819 | dependencies:
1820 | flat-cache: 4.0.1
1821 |
1822 | fill-range@7.1.1:
1823 | dependencies:
1824 | to-regex-range: 5.0.1
1825 |
1826 | find-up@5.0.0:
1827 | dependencies:
1828 | locate-path: 6.0.0
1829 | path-exists: 4.0.0
1830 |
1831 | flat-cache@4.0.1:
1832 | dependencies:
1833 | flatted: 3.3.3
1834 | keyv: 4.5.4
1835 |
1836 | flatted@3.3.3: {}
1837 |
1838 | fsevents@2.3.3:
1839 | optional: true
1840 |
1841 | glob-parent@5.1.2:
1842 | dependencies:
1843 | is-glob: 4.0.3
1844 |
1845 | glob-parent@6.0.2:
1846 | dependencies:
1847 | is-glob: 4.0.3
1848 |
1849 | globals@14.0.0: {}
1850 |
1851 | globals@16.2.0: {}
1852 |
1853 | graphemer@1.4.0: {}
1854 |
1855 | has-flag@4.0.0: {}
1856 |
1857 | he@1.2.0: {}
1858 |
1859 | ignore@5.3.2: {}
1860 |
1861 | ignore@7.0.5: {}
1862 |
1863 | immutable@5.1.3: {}
1864 |
1865 | import-fresh@3.3.1:
1866 | dependencies:
1867 | parent-module: 1.0.1
1868 | resolve-from: 4.0.0
1869 |
1870 | imurmurhash@0.1.4: {}
1871 |
1872 | is-extglob@2.1.1: {}
1873 |
1874 | is-glob@4.0.3:
1875 | dependencies:
1876 | is-extglob: 2.1.1
1877 |
1878 | is-number@7.0.0: {}
1879 |
1880 | isexe@2.0.0: {}
1881 |
1882 | js-yaml@4.1.0:
1883 | dependencies:
1884 | argparse: 2.0.1
1885 |
1886 | json-buffer@3.0.1: {}
1887 |
1888 | json-schema-traverse@0.4.1: {}
1889 |
1890 | json-stable-stringify-without-jsonify@1.0.1: {}
1891 |
1892 | keyv@4.5.4:
1893 | dependencies:
1894 | json-buffer: 3.0.1
1895 |
1896 | levn@0.4.1:
1897 | dependencies:
1898 | prelude-ls: 1.2.1
1899 | type-check: 0.4.0
1900 |
1901 | locate-path@6.0.0:
1902 | dependencies:
1903 | p-locate: 5.0.0
1904 |
1905 | lodash.merge@4.6.2: {}
1906 |
1907 | lodash@4.17.21: {}
1908 |
1909 | magic-string@0.30.17:
1910 | dependencies:
1911 | '@jridgewell/sourcemap-codec': 1.5.0
1912 |
1913 | merge2@1.4.1: {}
1914 |
1915 | micromatch@4.0.8:
1916 | dependencies:
1917 | braces: 3.0.3
1918 | picomatch: 2.3.1
1919 |
1920 | minimatch@3.1.2:
1921 | dependencies:
1922 | brace-expansion: 1.1.11
1923 |
1924 | minimatch@9.0.5:
1925 | dependencies:
1926 | brace-expansion: 2.0.2
1927 |
1928 | ms@2.1.3: {}
1929 |
1930 | muggle-string@0.4.1: {}
1931 |
1932 | nanoid@3.3.11: {}
1933 |
1934 | natural-compare@1.4.0: {}
1935 |
1936 | nth-check@2.1.1:
1937 | dependencies:
1938 | boolbase: 1.0.0
1939 |
1940 | optionator@0.9.4:
1941 | dependencies:
1942 | deep-is: 0.1.4
1943 | fast-levenshtein: 2.0.6
1944 | levn: 0.4.1
1945 | prelude-ls: 1.2.1
1946 | type-check: 0.4.0
1947 | word-wrap: 1.2.5
1948 |
1949 | p-limit@3.1.0:
1950 | dependencies:
1951 | yocto-queue: 0.1.0
1952 |
1953 | p-locate@5.0.0:
1954 | dependencies:
1955 | p-limit: 3.1.0
1956 |
1957 | parent-module@1.0.1:
1958 | dependencies:
1959 | callsites: 3.1.0
1960 |
1961 | path-browserify@1.0.1: {}
1962 |
1963 | path-exists@4.0.0: {}
1964 |
1965 | path-key@3.1.1: {}
1966 |
1967 | picocolors@1.1.1: {}
1968 |
1969 | picomatch@2.3.1: {}
1970 |
1971 | picomatch@4.0.2: {}
1972 |
1973 | postcss-selector-parser@6.1.2:
1974 | dependencies:
1975 | cssesc: 3.0.0
1976 | util-deprecate: 1.0.2
1977 |
1978 | postcss@8.5.4:
1979 | dependencies:
1980 | nanoid: 3.3.11
1981 | picocolors: 1.1.1
1982 | source-map-js: 1.2.1
1983 |
1984 | prelude-ls@1.2.1: {}
1985 |
1986 | punycode@2.3.1: {}
1987 |
1988 | queue-microtask@1.2.3: {}
1989 |
1990 | resolve-from@4.0.0: {}
1991 |
1992 | reusify@1.1.0: {}
1993 |
1994 | rollup@4.42.0:
1995 | dependencies:
1996 | '@types/estree': 1.0.7
1997 | optionalDependencies:
1998 | '@rollup/rollup-android-arm-eabi': 4.42.0
1999 | '@rollup/rollup-android-arm64': 4.42.0
2000 | '@rollup/rollup-darwin-arm64': 4.42.0
2001 | '@rollup/rollup-darwin-x64': 4.42.0
2002 | '@rollup/rollup-freebsd-arm64': 4.42.0
2003 | '@rollup/rollup-freebsd-x64': 4.42.0
2004 | '@rollup/rollup-linux-arm-gnueabihf': 4.42.0
2005 | '@rollup/rollup-linux-arm-musleabihf': 4.42.0
2006 | '@rollup/rollup-linux-arm64-gnu': 4.42.0
2007 | '@rollup/rollup-linux-arm64-musl': 4.42.0
2008 | '@rollup/rollup-linux-loongarch64-gnu': 4.42.0
2009 | '@rollup/rollup-linux-powerpc64le-gnu': 4.42.0
2010 | '@rollup/rollup-linux-riscv64-gnu': 4.42.0
2011 | '@rollup/rollup-linux-riscv64-musl': 4.42.0
2012 | '@rollup/rollup-linux-s390x-gnu': 4.42.0
2013 | '@rollup/rollup-linux-x64-gnu': 4.42.0
2014 | '@rollup/rollup-linux-x64-musl': 4.42.0
2015 | '@rollup/rollup-win32-arm64-msvc': 4.42.0
2016 | '@rollup/rollup-win32-ia32-msvc': 4.42.0
2017 | '@rollup/rollup-win32-x64-msvc': 4.42.0
2018 | fsevents: 2.3.3
2019 |
2020 | run-parallel@1.2.0:
2021 | dependencies:
2022 | queue-microtask: 1.2.3
2023 |
2024 | rxjs@7.8.2:
2025 | dependencies:
2026 | tslib: 2.8.1
2027 |
2028 | sass-embedded-android-arm64@1.89.2:
2029 | optional: true
2030 |
2031 | sass-embedded-android-arm@1.89.2:
2032 | optional: true
2033 |
2034 | sass-embedded-android-riscv64@1.89.2:
2035 | optional: true
2036 |
2037 | sass-embedded-android-x64@1.89.2:
2038 | optional: true
2039 |
2040 | sass-embedded-darwin-arm64@1.89.2:
2041 | optional: true
2042 |
2043 | sass-embedded-darwin-x64@1.89.2:
2044 | optional: true
2045 |
2046 | sass-embedded-linux-arm64@1.89.2:
2047 | optional: true
2048 |
2049 | sass-embedded-linux-arm@1.89.2:
2050 | optional: true
2051 |
2052 | sass-embedded-linux-musl-arm64@1.89.2:
2053 | optional: true
2054 |
2055 | sass-embedded-linux-musl-arm@1.89.2:
2056 | optional: true
2057 |
2058 | sass-embedded-linux-musl-riscv64@1.89.2:
2059 | optional: true
2060 |
2061 | sass-embedded-linux-musl-x64@1.89.2:
2062 | optional: true
2063 |
2064 | sass-embedded-linux-riscv64@1.89.2:
2065 | optional: true
2066 |
2067 | sass-embedded-linux-x64@1.89.2:
2068 | optional: true
2069 |
2070 | sass-embedded-win32-arm64@1.89.2:
2071 | optional: true
2072 |
2073 | sass-embedded-win32-x64@1.89.2:
2074 | optional: true
2075 |
2076 | sass-embedded@1.89.2:
2077 | dependencies:
2078 | '@bufbuild/protobuf': 2.5.2
2079 | buffer-builder: 0.2.0
2080 | colorjs.io: 0.5.2
2081 | immutable: 5.1.3
2082 | rxjs: 7.8.2
2083 | supports-color: 8.1.1
2084 | sync-child-process: 1.0.2
2085 | varint: 6.0.0
2086 | optionalDependencies:
2087 | sass-embedded-android-arm: 1.89.2
2088 | sass-embedded-android-arm64: 1.89.2
2089 | sass-embedded-android-riscv64: 1.89.2
2090 | sass-embedded-android-x64: 1.89.2
2091 | sass-embedded-darwin-arm64: 1.89.2
2092 | sass-embedded-darwin-x64: 1.89.2
2093 | sass-embedded-linux-arm: 1.89.2
2094 | sass-embedded-linux-arm64: 1.89.2
2095 | sass-embedded-linux-musl-arm: 1.89.2
2096 | sass-embedded-linux-musl-arm64: 1.89.2
2097 | sass-embedded-linux-musl-riscv64: 1.89.2
2098 | sass-embedded-linux-musl-x64: 1.89.2
2099 | sass-embedded-linux-riscv64: 1.89.2
2100 | sass-embedded-linux-x64: 1.89.2
2101 | sass-embedded-win32-arm64: 1.89.2
2102 | sass-embedded-win32-x64: 1.89.2
2103 |
2104 | semver@7.7.2: {}
2105 |
2106 | shebang-command@2.0.0:
2107 | dependencies:
2108 | shebang-regex: 3.0.0
2109 |
2110 | shebang-regex@3.0.0: {}
2111 |
2112 | source-map-js@1.2.1: {}
2113 |
2114 | strip-json-comments@3.1.1: {}
2115 |
2116 | supports-color@7.2.0:
2117 | dependencies:
2118 | has-flag: 4.0.0
2119 |
2120 | supports-color@8.1.1:
2121 | dependencies:
2122 | has-flag: 4.0.0
2123 |
2124 | sync-child-process@1.0.2:
2125 | dependencies:
2126 | sync-message-port: 1.1.3
2127 |
2128 | sync-message-port@1.1.3: {}
2129 |
2130 | tinyglobby@0.2.14:
2131 | dependencies:
2132 | fdir: 6.4.6(picomatch@4.0.2)
2133 | picomatch: 4.0.2
2134 |
2135 | to-regex-range@5.0.1:
2136 | dependencies:
2137 | is-number: 7.0.0
2138 |
2139 | ts-api-utils@2.1.0(typescript@5.8.3):
2140 | dependencies:
2141 | typescript: 5.8.3
2142 |
2143 | tslib@2.8.1: {}
2144 |
2145 | type-check@0.4.0:
2146 | dependencies:
2147 | prelude-ls: 1.2.1
2148 |
2149 | typescript@5.8.3: {}
2150 |
2151 | uri-js@4.4.1:
2152 | dependencies:
2153 | punycode: 2.3.1
2154 |
2155 | util-deprecate@1.0.2: {}
2156 |
2157 | varint@6.0.0: {}
2158 |
2159 | vite@6.3.5(sass-embedded@1.89.2):
2160 | dependencies:
2161 | esbuild: 0.25.5
2162 | fdir: 6.4.6(picomatch@4.0.2)
2163 | picomatch: 4.0.2
2164 | postcss: 8.5.4
2165 | rollup: 4.42.0
2166 | tinyglobby: 0.2.14
2167 | optionalDependencies:
2168 | fsevents: 2.3.3
2169 | sass-embedded: 1.89.2
2170 |
2171 | vscode-uri@3.1.0: {}
2172 |
2173 | vue-eslint-parser@10.1.3(eslint@9.29.0):
2174 | dependencies:
2175 | debug: 4.4.1
2176 | eslint: 9.29.0
2177 | eslint-scope: 8.4.0
2178 | eslint-visitor-keys: 4.2.1
2179 | espree: 10.4.0
2180 | esquery: 1.6.0
2181 | lodash: 4.17.21
2182 | semver: 7.7.2
2183 | transitivePeerDependencies:
2184 | - supports-color
2185 |
2186 | vue-tsc@2.2.10(typescript@5.8.3):
2187 | dependencies:
2188 | '@volar/typescript': 2.4.14
2189 | '@vue/language-core': 2.2.10(typescript@5.8.3)
2190 | typescript: 5.8.3
2191 |
2192 | vue@3.5.16(typescript@5.8.3):
2193 | dependencies:
2194 | '@vue/compiler-dom': 3.5.16
2195 | '@vue/compiler-sfc': 3.5.16
2196 | '@vue/runtime-dom': 3.5.16
2197 | '@vue/server-renderer': 3.5.16(vue@3.5.16(typescript@5.8.3))
2198 | '@vue/shared': 3.5.16
2199 | optionalDependencies:
2200 | typescript: 5.8.3
2201 |
2202 | which@2.0.2:
2203 | dependencies:
2204 | isexe: 2.0.0
2205 |
2206 | word-wrap@1.2.5: {}
2207 |
2208 | xml-name-validator@4.0.0: {}
2209 |
2210 | yocto-queue@0.1.0: {}
2211 |
--------------------------------------------------------------------------------