├── readme ├── license.md ├── version.md ├── usage.vue2.md ├── contribute.md ├── banner.md ├── install.md └── features.md ├── assets ├── excel.png ├── framework.png ├── material.jpg ├── framework-2x.png ├── vuejs.svg ├── angular.svg ├── js.svg ├── react.svg ├── svelte.svg └── logo.svg ├── shims-vue.d.ts ├── .prettierrc.js ├── demo-v2.7 ├── shims-vue.d.ts ├── index.ts ├── demo.html ├── package.json ├── vite.config.ts ├── shims-tsx.d.ts ├── Cell.vue ├── tsconfig.json ├── App.vue └── package-lock.json ├── demo ├── index.ts ├── index.html ├── Cell.vue └── App.vue ├── .gitignore ├── lib ├── index.ts ├── editor.ts ├── vue-component-lib │ └── utils.ts ├── renderer.ts ├── editor.adapter.ts └── revogrid.ts ├── .github ├── ISSUE_TEMPLATE │ └── issue-template.md └── workflows │ └── publish.yml ├── generate_readme.sh ├── tsconfig.json ├── LICENSE ├── vite.config.ts ├── package.json ├── release.mjs └── README.md /readme/license.md: -------------------------------------------------------------------------------- 1 | ## License 2 | 3 | MIT 4 | 5 | --- -------------------------------------------------------------------------------- /assets/excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/revolist/vue-datagrid/HEAD/assets/excel.png -------------------------------------------------------------------------------- /assets/framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/revolist/vue-datagrid/HEAD/assets/framework.png -------------------------------------------------------------------------------- /assets/material.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/revolist/vue-datagrid/HEAD/assets/material.jpg -------------------------------------------------------------------------------- /assets/framework-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/revolist/vue-datagrid/HEAD/assets/framework-2x.png -------------------------------------------------------------------------------- /shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue'; 3 | export default Vue; 4 | } 5 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | trailingComma: 'es5', 3 | tabWidth: 2, 4 | singleQuote: true, 5 | }; 6 | -------------------------------------------------------------------------------- /demo-v2.7/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue'; 3 | export default Vue; 4 | } 5 | -------------------------------------------------------------------------------- /demo/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './App.vue'; 3 | 4 | new Vue({ 5 | template: '', 6 | components: {App} 7 | }).$mount('#app'); 8 | -------------------------------------------------------------------------------- /demo-v2.7/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './App.vue'; 3 | new Vue({ 4 | template: '', 5 | components: { App }, 6 | provide() { 7 | return { 8 | sampleMessage: 'hello', 9 | }; 10 | }, 11 | }).$mount('#app'); 12 | -------------------------------------------------------------------------------- /demo-v2.7/demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vue 2.7 with Vite 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vue 2.6 with Vite 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | www/ 3 | 4 | *~ 5 | *.sw[mnpcod] 6 | *.log 7 | *.lock 8 | *.tmp 9 | *.tmp.* 10 | log.txt 11 | *.sublime-project 12 | *.sublime-workspace 13 | 14 | .stencil/ 15 | .idea/ 16 | .vscode/ 17 | .sass-cache/ 18 | .versions/ 19 | node_modules/ 20 | 21 | $RECYCLE.BIN/ 22 | 23 | .DS_Store 24 | Thumbs.db 25 | UserInterfaceState.xcuserstate 26 | .env 27 | -------------------------------------------------------------------------------- /assets/vuejs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /demo-v2.7/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lib-test", 3 | "description": "Demo lib test", 4 | "version": "4.11.12", 5 | "private": true, 6 | "type": "module", 7 | "scripts": { 8 | "dev": "vite" 9 | }, 10 | "dependencies": { 11 | "@stencil/core": "^4.18.1", 12 | "@vitejs/plugin-vue2": "^2.3.1", 13 | "vite": "^6.4.1", 14 | "vue": "^2.7.16" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /assets/angular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /demo-v2.7/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import vue from '@vitejs/plugin-vue2'; 3 | 4 | export default defineConfig({ 5 | plugins: [vue()], 6 | server: { 7 | open: '/demo.html', // Automatically open demo.html 8 | }, 9 | resolve: { 10 | alias: { 11 | 'vue': 'vue/dist/vue.esm.js', // Alias to use the full build of Vue 12 | '@revolist/vue-datagrid': '../lib' 13 | } 14 | }, 15 | }); 16 | -------------------------------------------------------------------------------- /lib/index.ts: -------------------------------------------------------------------------------- 1 | import { RevoGrid } from './revogrid'; 2 | import { defineCustomElements } from '@revolist/revogrid/loader'; 3 | export { Template as VGridVueTemplate, Template, VGridVueTemplateConstructor } from './renderer'; 4 | export { Editor as VGridVueEditor, Editor } from './editor'; 5 | export { type EditorType } from './editor.adapter'; 6 | export * from '@revolist/revogrid/loader'; 7 | export * from '@revolist/revogrid'; 8 | 9 | export const VGrid = (async () => { 10 | await (defineCustomElements() as unknown as Promise); 11 | return RevoGrid; 12 | }); 13 | 14 | export default VGrid; -------------------------------------------------------------------------------- /demo/Cell.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /demo-v2.7/shims-tsx.d.ts: -------------------------------------------------------------------------------- 1 | import { 2 | VNode, 3 | JSXBase, 4 | } from '@revolist/revogrid/dist/types/stencil-public-runtime'; 5 | 6 | declare global { 7 | namespace JSX { 8 | // tslint:disable no-empty-interface 9 | interface Element extends VNode {} 10 | // tslint:disable no-empty-interface 11 | interface ElementClass extends Vue {} 12 | 13 | type NativeElements = { 14 | [K in keyof IntrinsicElementAttributes]: JSXBase.DOMAttributes< 15 | IntrinsicElementAttributes[K] 16 | >; 17 | }; 18 | interface IntrinsicElements extends JSXBase.DOMAttributes { 19 | [elem: string]: any; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/issue-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Issue template 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Check if issue exists** 11 | Search the repo and ensure your issue doesn't already exist. If so, it may: 12 | - Have already been fixed in an unreleased version. 13 | - Have been closed without a solution. Please create a new issue instead of commenting on the old one. 14 | 15 | **Describe the issue** 16 | A clear and concise description of what the issue is. 17 | 18 | **To Reproduce** 19 | Create a minimal reproduction to illustrate the issue. Here's a [a sandbox](https://codesandbox.io) to start you off. 20 | -------------------------------------------------------------------------------- /demo-v2.7/Cell.vue: -------------------------------------------------------------------------------- 1 | 4 | 30 | -------------------------------------------------------------------------------- /lib/editor.ts: -------------------------------------------------------------------------------- 1 | import { VueConstructor } from 'vue'; 2 | import type { ColumnDataSchemaModel, EditorCtr } from '@revolist/revogrid'; 3 | import VueEditorAdapter from './editor.adapter'; 4 | 5 | /** 6 | * Create editor constructor. 7 | * This function creates editor constructor by wrapping it with VueEditorAdapter 8 | * which is responsible for connecting editor with Vue lifecycle events 9 | */ 10 | export const Editor = (vueConstructor: VueConstructor): EditorCtr => { 11 | return function ( 12 | column: ColumnDataSchemaModel, 13 | save: (value: any, preventFocus?: boolean) => void, 14 | close: (focusNext?: boolean) => void 15 | ) { 16 | return new VueEditorAdapter(vueConstructor, column, save, close); 17 | }; 18 | }; 19 | 20 | -------------------------------------------------------------------------------- /generate_readme.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Define the list of markdown files to be concatenated 4 | files=("banner.md" "features.md" "usage.vue2.md" "version.md" "contribute.md" "LICENSE.md") 5 | 6 | # Output file 7 | output="README.md" 8 | 9 | # Clear the existing README.md if it exists 10 | > "$output" 11 | 12 | # Loop through each file and append its contents to README.md 13 | for file in "${files[@]}" 14 | do 15 | if [ -f "./readme/$file" ]; then 16 | echo "Processing $file..." 17 | cat "./readme/$file" >> "$output" 18 | echo -e "\n" >> "$output" # Add a newline for separation between sections 19 | else 20 | echo "Warning: $file not found, skipping." 21 | fi 22 | done 23 | 24 | echo "README.md has been successfully generated." 25 | -------------------------------------------------------------------------------- /readme/version.md: -------------------------------------------------------------------------------- 1 | ## Versions 2 | 3 | - **2.0+**: Introduced the plugin system, grouping, sorting, and filtering. 4 | - **3.0+**: Breaking changes introduced. See the [migration guide](./docs/migration.3.0.md). This version features new component loading, ESM modules, Bootstrap support, and much [more](./docs/migration.3.0.md). 5 | - **4.0+**: Breaking changes introduced. See the [migration guide](./docs/migration.4.0.md). In this version, we rethought our framework approach, updated typings, fixed major issues, updated core and significantly improved overall performance. The grid is now much faster, with better plugin support and full framework support for Angular, React, and Vue, along with partial support for Ember and Svelte. Redesigned the documentation, and added more examples. 6 | 7 | -------------------------------------------------------------------------------- /demo-v2.7/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./dist/", 4 | "baseUrl": "./", 5 | "allowSyntheticDefaultImports": true, 6 | "allowUnreachableCode": false, 7 | "declaration": true, 8 | "experimentalDecorators": true, 9 | "lib": ["dom", "es2017"], 10 | "moduleResolution": "node", 11 | "module": "es2015", 12 | "target": "es5", 13 | "strict": true, 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "jsx": "react", 17 | "jsxFactory": "h", 18 | "noImplicitAny": true, 19 | "noImplicitThis": true, 20 | "noImplicitReturns": true, 21 | "sourceMap": true, 22 | "paths": { 23 | "@revolist/vue-datagrid": ["../lib"] 24 | } 25 | }, 26 | "include": ["./"], 27 | "exclude": ["node_modules"] 28 | } 29 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./dist/", 4 | "baseUrl": "./", 5 | "esModuleInterop": true, 6 | "allowSyntheticDefaultImports": true, 7 | "allowUnreachableCode": true, 8 | "declaration": true, 9 | "experimentalDecorators": true, 10 | "lib": ["dom", "es2017", "ESNext"], 11 | "moduleResolution": "node", 12 | "module": "esnext", 13 | "target": "ES5", 14 | "strict": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "noImplicitAny": true, 18 | "noImplicitThis": true, 19 | "noImplicitReturns": true, 20 | "sourceMap": true, 21 | "paths": { 22 | "@revolist/vue-datagrid": ["lib"] 23 | } 24 | }, 25 | "include": ["types/jsx.d.ts", "lib", "/**/*.d.ts", "/**/*.ts", "*.d.ts"], 26 | "exclude": ["node_modules", "demo-v2.7", "demo"] 27 | } 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Revolist 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 | -------------------------------------------------------------------------------- /assets/js.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import { resolve } from 'path'; 3 | import dts from 'vite-plugin-dts'; 4 | import { createVuePlugin as vuePlugin } from 'vite-plugin-vue2' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [ 9 | vuePlugin(), 10 | dts({ rollupTypes: true, include: ['lib'] }), 11 | ], 12 | build: { 13 | copyPublicDir: false, 14 | lib: { 15 | entry: resolve(__dirname, 'lib/index.ts'), // Library entry file 16 | name: 'VueDatagrid', 17 | }, 18 | rollupOptions: { 19 | input: { 20 | main: 'lib/index.ts', 21 | }, 22 | external: [ 23 | 'vue', 24 | /node_modules/, 25 | /@revolist\/revogrid/, 26 | '@revolist/revogrid/loader', 27 | ], 28 | output: { 29 | exports: 'named', 30 | // Provide global variables to use in the UMD build for externalized deps 31 | globals: { 32 | vue: 'Vue', 33 | '@revolist/revogrid': 'Revogrid', 34 | '@revolist/revogrid/loader': 'RevogridLoader', 35 | }, 36 | }, 37 | }, 38 | }, 39 | server: { 40 | open: '/demo/index.html', 41 | }, 42 | resolve: { 43 | alias: { 44 | 'vue': 'vue/dist/vue.esm.js', 45 | '@revolist/vue-datagrid': resolve(__dirname, './lib'), 46 | } 47 | } 48 | }); 49 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | # Automatically release a new version of the package when a new version is created 2 | name: Auto Release 3 | 4 | on: 5 | push: 6 | branches: 7 | - main 8 | - next 9 | 10 | permissions: write-all 11 | jobs: 12 | release: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | - uses: actions/checkout@v4 17 | with: 18 | repository: revolist/revogrid-actions 19 | ref: main 20 | path: ./actions 21 | token: ${{ secrets.REPO_TOKEN }} 22 | - name: Release package if new version 23 | uses: ./actions/release-pkg 24 | with: 25 | draft: false 26 | # if branch is next, set prerelease to true 27 | prerelease: ${{ github.ref == 'refs/heads/next' }} 28 | token: ${{ secrets.GITHUB_TOKEN }} 29 | 30 | build: 31 | runs-on: ubuntu-latest 32 | needs: release 33 | steps: 34 | - uses: actions/checkout@v4 35 | - uses: actions/checkout@v4 36 | with: 37 | repository: revolist/revogrid-actions 38 | ref: main 39 | path: ./actions 40 | token: ${{ secrets.REPO_TOKEN }} 41 | - name: Publish package 42 | uses: ./actions/publish-pkg 43 | with: 44 | token: ${{ secrets.GITHUB_TOKEN }} 45 | npm_token: ${{ secrets.NPM_TOKEN }} 46 | -------------------------------------------------------------------------------- /readme/usage.vue2.md: -------------------------------------------------------------------------------- 1 | ### Usage Vue2 [Example](https://codesandbox.io/s/data-vue-test-3wkzi?file=/src/App.vue) 2 | 3 | With NPM: 4 | 5 | ```bash 6 | npm i @revolist/vue-datagrid --save; 7 | ``` 8 | 9 | With Yarn: 10 | 11 | ```bash 12 | yarn add @revolist/vue-datagrid; 13 | ``` 14 | 15 | ```vue 16 | // App.vue 17 | 18 | 22 | 23 | 45 | 46 | // Cell.vue 47 | 48 | 54 | ``` 55 | -------------------------------------------------------------------------------- /readme/contribute.md: -------------------------------------------------------------------------------- 1 | ## Contributing 2 | 3 | We invite you to join our vibrant community and contribute to the growth and success of RevoGrid. By getting involved, you'll have the opportunity to enhance your skills, gain valuable experience, and make a significant impact on an innovative project. 4 | 5 | ### Why Contribute? 6 | 7 | - **Expand Your Knowledge**: Working on RevoGrid allows you to dive deep into modern web technologies, improve your coding skills, and learn best practices in performance optimization, data handling, and component-based architecture. 8 | - **Valuable Experience**: Contributing to an open-source project like RevoGrid provides you with practical experience that can be a great addition to your portfolio. It demonstrates your ability to work collaboratively, solve complex problems, and contribute to a project's success. 9 | - **Professional Growth**: By contributing, you become part of a network of talented developers. This can lead to mentorship opportunities, collaborations, and professional connections that can benefit your career. 10 | - **Make a Difference**: Your contributions can help improve RevoGrid, making it more powerful and user-friendly for developers around the world. Your input can shape the future of the project and drive innovation. 11 | 12 | ### Join Us 13 | 14 | Your contribution, no matter how big or small, is valuable. By working on RevoGrid, you'll be part of an exciting project that's making a difference in the world of data grids. Join us today and let's build something amazing together! -------------------------------------------------------------------------------- /readme/banner.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | RevoGrid 4 | 5 |

6 | 7 |

8 | Latest Version on NPM 9 | Software License 10 | Tree shaking 11 | Tree shaking 12 |

13 | 14 | # 15 | 16 |

Powerful data grid component built with StencilJS.

17 |

18 | Support Millions of cells and thousands of columns easy and efficiently for fast data rendering. Easy to use. 19 | 20 |

21 | 22 |

23 | Demo and API • 24 | Key Features • 25 | How To Use • 26 | Installation • 27 | Docs • 28 | License 29 |

30 | 31 | Material grid preview 32 | RevoGrid material theme. 33 |
-------------------------------------------------------------------------------- /lib/vue-component-lib/utils.ts: -------------------------------------------------------------------------------- 1 | import Vue, { VNode, CreateElement } from "vue"; 2 | 3 | export const createCommonRender = ( 4 | tagName: string, 5 | eventNames: string[] = [] 6 | ) => 7 | function (this: Vue, createElement: CreateElement): VNode { 8 | const vueElement = this; 9 | const allListeners = eventNames.reduce((listeners, eventName) => { 10 | return { 11 | ...listeners, 12 | [eventName]: (event: CustomEvent) => { 13 | vueElement.$emit(eventName, event); 14 | }, 15 | }; 16 | }, vueElement.$listeners); 17 | const domProps = vueElement.$props 18 | ? Object.keys(vueElement.$props).reduce((attrs: any, prop: string) => { 19 | // dashed-case 20 | attrs[toDashCase(prop)] = vueElement.$props[prop]; 21 | // original-case 22 | attrs[prop] = vueElement.$props[prop]; 23 | return attrs; 24 | }, {}) 25 | : {}; 26 | return createElement( 27 | tagName, 28 | { 29 | ref: "wc", 30 | domProps, 31 | on: allListeners, 32 | attrs: { "data-testid": tagName }, 33 | }, 34 | [vueElement.$slots.default] 35 | ); 36 | }; 37 | 38 | export const createCommonMethod = (methodName: string) => 39 | function (this: any, ...args: any[]) { 40 | this.$refs.wc[methodName](...args); 41 | } as unknown; 42 | 43 | export const toLowerCase = (str: string) => str.toLowerCase(); 44 | 45 | export const toDashCase = (str: string) => 46 | toLowerCase( 47 | str 48 | .replace(/([A-Z0-9])/g, (g) => " " + g[0]) 49 | .trim() 50 | .replace(/ /g, "-") 51 | ); 52 | -------------------------------------------------------------------------------- /readme/install.md: -------------------------------------------------------------------------------- 1 | ## Installation 2 | 3 | The library published as a [scoped NPM package](https://docs.npmjs.com/misc/scope) in the [NPMJS Revolist account](https://www.npmjs.com/org/revolist). 4 | [Check for more info on our demo side](https://revolist.github.io/revogrid/guide/installing.html). 5 | 6 | With NPM: 7 | 8 | ```bash 9 | npm i @revolist/revogrid --save; 10 | ``` 11 | 12 | With Yarn: 13 | 14 | ```bash 15 | yarn add @revolist/revogrid; 16 | ``` 17 | 18 | ## Browser Support 19 | 20 | | ![Chrome](https://raw.github.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png) | ![Firefox](https://raw.github.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png) | ![Safari](https://raw.github.com/alrra/browser-logos/master/src/safari/safari_48x48.png) | ![Opera](https://raw.github.com/alrra/browser-logos/master/src/opera/opera_48x48.png) | ![Edge](https://raw.github.com/alrra/browser-logos/master/src/edge/edge_48x48.png) | 21 | | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | 22 | | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 23 | | 24 | 25 | ## Framework 26 | 27 | - [JavaScript](https://revolist.github.io/revogrid/guide); 28 | - [VueJs](https://revolist.github.io/revogrid/guide/framework.vue.overview.html); 29 | - [Svelte](https://revolist.github.io/revogrid/guide/framework.svelte.overview.html); 30 | - [React](https://revolist.github.io/revogrid/guide/framework.react.overview.html); 31 | - [Angular](https://revolist.github.io/revogrid/guide/framework.angular.overview.html); 32 | - [Ember](docs/ember.md). 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@revolist/vue-datagrid", 3 | "version": "4.19.4", 4 | "description": "Vue 2 DataGrid Spreadsheet component with native Vue 2 render support", 5 | "types": "./dist/index.d.ts", 6 | "type": "module", 7 | "exports": { 8 | ".": { 9 | "import": "./dist/vue-datagrid.js", 10 | "require": "./dist/vue-datagrid.umd.cjs", 11 | "types": "./dist/index.d.ts" 12 | } 13 | }, 14 | "files": [ 15 | "dist" 16 | ], 17 | "scripts": { 18 | "build": "vite build", 19 | "dev": "vite", 20 | "release": "npm run build && npm publish --public --tag pre-release" 21 | }, 22 | "keywords": [ 23 | "revo-grid", 24 | "revolist", 25 | "csv", 26 | "datagrid", 27 | "datalist", 28 | "datamanager", 29 | "editable", 30 | "excel", 31 | "excel-grid", 32 | "export", 33 | "fast-grid", 34 | "filtering", 35 | "grid", 36 | "grouping", 37 | "infinity-grid", 38 | "reactive", 39 | "spreadsheet", 40 | "stenciljs", 41 | "storybook", 42 | "treeview", 43 | "virtualgrid", 44 | "virtuallist", 45 | "virtual", 46 | "virtual-scroll", 47 | "vue", 48 | "vue-grid", 49 | "vue-datagrid", 50 | "vue2", 51 | "vue2-datagrid" 52 | ], 53 | "author": "revolist", 54 | "repository": { 55 | "type": "git", 56 | "url": "git+https://github.com/revolist/vue-datagrid.git" 57 | }, 58 | "bugs": { 59 | "url": "https://github.com/revolist/revogrid/issues" 60 | }, 61 | "homepage": "https://github.com/revolist/revogrid#readme", 62 | "license": "MIT", 63 | "dependencies": { 64 | "@revolist/revogrid": "4.19.4" 65 | }, 66 | "devDependencies": { 67 | "@stencil/core": "^4.24.0", 68 | "sass": "^1.79.3", 69 | "typescript": "^5.0.4", 70 | "vite": "^5.4.21", 71 | "vite-plugin-dts": "^3.9.1", 72 | "vite-plugin-vue2": "^2.0.3", 73 | "vue-template-compiler": "^2.6.14", 74 | "vue": "=2.6.14" 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /lib/renderer.ts: -------------------------------------------------------------------------------- 1 | import { ColumnDataSchemaModel, ColumnTemplateProp, HyperFunc, VNode } from '@revolist/revogrid'; 2 | import Vue, { VueConstructor } from 'vue'; 3 | 4 | /** 5 | * Vue template factory 6 | */ 7 | interface VueElement extends HTMLElement { 8 | __vue__?: Vue; 9 | } 10 | 11 | /** 12 | * Vue adapter to convert vue component into VNode 13 | */ 14 | export const VGridVueTemplateConstructor = ( 15 | vueCtr: VueConstructor, 16 | e?: HTMLElement, 17 | p?: Record, 18 | addition?: { vue: Vue }, 19 | ) => { 20 | if (!e) { 21 | return null; 22 | } 23 | 24 | let el: VueElement | undefined; 25 | if (e?.childNodes.length) { 26 | el = e.childNodes[0] as VueElement; 27 | } 28 | 29 | if (!el) { 30 | // create dom element wrapper for vue instance 31 | el = document.createElement('span'); 32 | e.appendChild(el); 33 | 34 | // if passed as simple structure convert it to vue object 35 | if (typeof vueCtr === 'object') { 36 | vueCtr = Vue.extend(vueCtr); 37 | } 38 | // create vue instance 39 | return new vueCtr({ el, propsData: p, parent: addition?.vue }); 40 | } 41 | 42 | // check, probably vue instance already inited 43 | let vueInstance = el.__vue__; 44 | // if exists, return 45 | if (vueInstance && p) { 46 | // if vue inited just update it's properties 47 | for (const k in p) { 48 | vueInstance.$props[k] = p[k]; 49 | } 50 | } 51 | return vueInstance; 52 | }; 53 | 54 | /** 55 | * Vue template wrapper for virtual nodes 56 | */ 57 | export const Template = (cntr: VueConstructor, customProps?: any) => { 58 | return (h: HyperFunc, p: ColumnDataSchemaModel | ColumnTemplateProp, addition?: any) => { 59 | const props = customProps ? { ...customProps, ...p } : p; 60 | const wrapper = h('span', { 61 | key: `${props.key}-${props.rowIndex || 0}`, 62 | ref: (el: HTMLElement) => VGridVueTemplateConstructor(cntr, el, props, addition), 63 | }); 64 | return wrapper; 65 | }; 66 | }; 67 | 68 | -------------------------------------------------------------------------------- /lib/editor.adapter.ts: -------------------------------------------------------------------------------- 1 | import { VueConstructor } from 'vue'; 2 | import { VGridVueTemplateConstructor } from './renderer'; 3 | import { 4 | ColumnDataSchemaModel, 5 | EditCell, 6 | EditorBase, 7 | HyperFunc, 8 | VNode, 9 | } from '@revolist/revogrid'; 10 | 11 | /** 12 | * Data passed to editor 13 | */ 14 | export type EditorType = { 15 | column: ColumnDataSchemaModel; 16 | save: (value: any, preventFocus?: boolean) => void; 17 | close: (focusNext?: boolean) => void; 18 | } & Partial; 19 | 20 | /** 21 | * Vue editor adapter 22 | */ 23 | // TODO: provide passage of vue component to renderers 24 | export default class VueEditorAdapter implements EditorBase { 25 | public element: Element | null = null; 26 | public editCell?: EditCell; 27 | private vueEl: Vue | undefined; 28 | 29 | constructor( 30 | private VueEditorConstructor: VueConstructor, 31 | public column: ColumnDataSchemaModel, 32 | private save: (value: any, preventFocus?: boolean) => void, 33 | private close: (focusNext?: boolean) => void 34 | ) {} 35 | 36 | // optional, called after editor rendered 37 | componentDidRender() {} 38 | 39 | // optional, called after editor destroyed 40 | disconnectedCallback() { 41 | this.vueEl?.$destroy(); 42 | this.vueEl = undefined; 43 | } 44 | 45 | render(h: HyperFunc, addition: any) { 46 | return h('span', { 47 | key: `${this.column.prop}-${this.editCell?.rowIndex || 0}`, 48 | ref: (el: HTMLElement) => this.renderAdapter(el, addition), 49 | }); 50 | } 51 | 52 | private renderAdapter(el?: HTMLElement, addition?: any) { 53 | if (!el) { 54 | return; 55 | } 56 | const editorData: EditorType = { 57 | ...this.editCell, 58 | column: this.column, 59 | save: this.save, 60 | close: this.close, 61 | }; 62 | const template = VGridVueTemplateConstructor( 63 | this.VueEditorConstructor, 64 | el, 65 | editorData, 66 | addition 67 | ) as Vue | undefined; 68 | if (!template) { 69 | return; 70 | } 71 | this.vueEl = template; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /release.mjs: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import chalk from 'chalk'; 4 | import minimist from 'minimist'; 5 | import { fileURLToPath } from 'url'; 6 | 7 | // Define __dirname and __filename for ESM 8 | const __filename = fileURLToPath(import.meta.url); 9 | const __dirname = path.dirname(__filename); 10 | 11 | const dependencyName = '@revolist/revogrid'; 12 | const localDependencyName = '@revolist/vue-datagrid'; 13 | 14 | // Parse command-line arguments 15 | const args = minimist(process.argv.slice(2)); 16 | const newVersion = args.version; 17 | 18 | if (!newVersion) { 19 | console.error(chalk.red('Error: Please provide a version using --version')); 20 | process.exit(1); 21 | } 22 | 23 | function updateDependencyVersion(packageJson, type, dependencyName, version) { 24 | // Update dependency version 25 | if (packageJson[type] && packageJson[type][dependencyName]) { 26 | packageJson[type][dependencyName] = version; 27 | console.log( 28 | chalk.green( 29 | `Updated dependency ${dependencyName} to version ${version} in ${packageJson.name}`, 30 | ), 31 | ); 32 | } 33 | } 34 | 35 | 36 | 37 | function updatePackageJsonVersion(packageDir, version) { 38 | const packageJsonPath = path.join(packageDir, 'package.json'); 39 | 40 | if (fs.existsSync(packageJsonPath)) { 41 | const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); 42 | packageJson.version = version; 43 | updateDependencyVersion(packageJson, 'dependencies', dependencyName, version); 44 | updateDependencyVersion(packageJson, 'devDependencies', dependencyName, version); 45 | updateDependencyVersion(packageJson, 'peerDependencies', dependencyName, version); 46 | 47 | fs.writeFileSync( 48 | packageJsonPath, 49 | JSON.stringify(packageJson, null, 2) + '\n', 50 | ); 51 | console.log( 52 | chalk.green(`Updated ${packageJson.name} to version ${version}`), 53 | ); 54 | } else { 55 | console.log(chalk.red(`package.json not found in ${packageDir}`)); 56 | } 57 | } 58 | 59 | function main() { 60 | const fullPath = path.resolve(__dirname); 61 | updatePackageJsonVersion(fullPath, newVersion); 62 | // update demo 63 | updatePackageJsonVersion(path.join(fullPath, 'demo'), newVersion, localDependencyName); 64 | console.log(chalk.blue('Version update complete.')); 65 | } 66 | 67 | main(); 68 | -------------------------------------------------------------------------------- /readme/features.md: -------------------------------------------------------------------------------- 1 | ## Key Features 2 | 3 | - **High Performance**: Handles millions of cells in the viewport with a powerful core built by default. 4 | 5 | - **Keyboard Support**: 6 | - Excel-like focus for efficient navigation and editing. 7 | - Seamless copy/paste from Excel, Google Sheets, or any other sheet format. 8 | 9 | 10 | - **Lightweight**: Minimal initial bundle size ![Min size](https://badgen.net/bundlephobia/min/@revolist/revogrid@latest). Can be imported with polyfills or as a module for modern browsers. 11 | 12 | - **Intelligent Virtual DOM**: Smart row recombination to minimize redraws. 13 | 14 | - **Sorting**: Multiple options, customizable per column, with advanced event handling. 15 | 16 | - **Filtering**: 17 | - Predefined system filters. 18 | - Preserve existing collections. 19 | - Custom filters to extend system filters with your own set. 20 | 21 | - **Export**: Export data to file. 22 | 23 | - **Custom Sizes**: Define custom sizes for columns and rows. Automatic sizing based on content. 24 | 25 | - **Column Resizing**: Adjust column widths. 26 | 27 | - **Pinned/Sticky/Freezed Elements**: 28 | - Columns (define left or right). 29 | - Rows (define top or bottom). 30 | 31 | - **Grouping**: 32 | - Column grouping (nested headers). 33 | - Row grouping (nested rows). 34 | 35 | - **Cell Editing**: In-place editing of cell data. 36 | 37 | - **Customizations**: 38 | - Column header template. 39 | - Row header template. 40 | - Cell template (create your own cell views). 41 | - Cell editor (apply custom editors and cell types). 42 | - Cell properties (define custom properties for rendered cells). 43 | 44 | - **Column Types**: [More details](https://revolist.github.io/revogrid/guide/column.types.html) 45 | - Text/String (default). 46 | - Number. 47 | - Select. 48 | - Date. 49 | - Custom (create extended styles using any template). 50 | 51 | - **Drag and Drop**: Easily reorder rows. 52 | 53 | - **Range Operations**: 54 | - Selection. 55 | - Editing. 56 | 57 | - **Theme Packages**: 58 | - Excel-like (default). 59 | - Material (compact, dark, or light). 60 | 61 | - **Extensibility**: Modern VNode features and tsx support for easy extension. 62 | 63 | - **Trimmed Rows**: Hide rows on demand. 64 | 65 | - **Plugin System**: Create custom plugins or extend existing ones easily. 66 | 67 | - **Additional Customizations and Improvements**: Explore hundreds of other small customizations and improvements in [RevoGrid](https://revolist.github.io/revogrid). 68 | 69 |
70 | 71 | -------------------------------------------------------------------------------- /assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/svelte.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demo-v2.7/App.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 125 | 126 | 149 | -------------------------------------------------------------------------------- /demo/App.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 137 | 138 | 163 | -------------------------------------------------------------------------------- /lib/revogrid.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /* tslint:disable */ 3 | /* auto-generated vue proxies */ 4 | import Vue, { PropOptions } from 'vue'; 5 | import { createCommonRender, createCommonMethod } from './vue-component-lib/utils'; 6 | 7 | import type { Components } from '@revolist/revogrid'; 8 | 9 | 10 | 11 | 12 | const customElementTags: string[] = [ 13 | 'revo-grid', 14 | ]; 15 | Vue.config.ignoredElements = [...Vue.config.ignoredElements, ...customElementTags]; 16 | 17 | 18 | export const RevoGrid = /*@__PURE__*/ Vue.extend({ 19 | 20 | props: { 21 | rowHeaders: {} as PropOptions, 22 | frameSize: {} as PropOptions, 23 | rowSize: {} as PropOptions, 24 | colSize: {} as PropOptions, 25 | range: {} as PropOptions, 26 | readonly: {} as PropOptions, 27 | resize: {} as PropOptions, 28 | canFocus: {} as PropOptions, 29 | useClipboard: {} as PropOptions, 30 | columns: {} as PropOptions, 31 | source: {} as PropOptions, 32 | pinnedTopSource: {} as PropOptions, 33 | pinnedBottomSource: {} as PropOptions, 34 | rowDefinitions: {} as PropOptions, 35 | editors: {} as PropOptions, 36 | applyOnClose: {} as PropOptions, 37 | plugins: {} as PropOptions, 38 | columnTypes: {} as PropOptions, 39 | theme: {} as PropOptions, 40 | rowClass: {} as PropOptions, 41 | autoSizeColumn: {} as PropOptions, 42 | filter: {} as PropOptions, 43 | sorting: {} as PropOptions, 44 | focusTemplate: {} as PropOptions, 45 | canMoveColumns: {} as PropOptions, 46 | trimmedRows: {} as PropOptions, 47 | exporting: {} as PropOptions, 48 | grouping: {} as PropOptions, 49 | stretch: {} as PropOptions, 50 | additionalData: {} as PropOptions, 51 | disableVirtualX: {} as PropOptions, 52 | disableVirtualY: {} as PropOptions, 53 | hideAttribution: {} as PropOptions, 54 | jobsBeforeRender: {} as PropOptions, 55 | registerVNode: {} as PropOptions, 56 | accessible: {} as PropOptions, 57 | rtl: {} as PropOptions, 58 | canDrag: {} as PropOptions, 59 | }, 60 | 61 | 62 | methods: { 63 | refresh: createCommonMethod('refresh') as Components.RevoGrid['refresh'], 64 | setDataAt: createCommonMethod('setDataAt') as Components.RevoGrid['setDataAt'], 65 | scrollToRow: createCommonMethod('scrollToRow') as Components.RevoGrid['scrollToRow'], 66 | scrollToColumnIndex: createCommonMethod('scrollToColumnIndex') as Components.RevoGrid['scrollToColumnIndex'], 67 | scrollToColumnProp: createCommonMethod('scrollToColumnProp') as Components.RevoGrid['scrollToColumnProp'], 68 | updateColumns: createCommonMethod('updateColumns') as Components.RevoGrid['updateColumns'], 69 | addTrimmed: createCommonMethod('addTrimmed') as Components.RevoGrid['addTrimmed'], 70 | scrollToCoordinate: createCommonMethod('scrollToCoordinate') as Components.RevoGrid['scrollToCoordinate'], 71 | setCellEdit: createCommonMethod('setCellEdit') as Components.RevoGrid['setCellEdit'], 72 | setCellsFocus: createCommonMethod('setCellsFocus') as Components.RevoGrid['setCellsFocus'], 73 | getSource: createCommonMethod('getSource') as Components.RevoGrid['getSource'], 74 | getVisibleSource: createCommonMethod('getVisibleSource') as Components.RevoGrid['getVisibleSource'], 75 | getSourceStore: createCommonMethod('getSourceStore') as Components.RevoGrid['getSourceStore'], 76 | getColumnStore: createCommonMethod('getColumnStore') as Components.RevoGrid['getColumnStore'], 77 | updateColumnSorting: createCommonMethod('updateColumnSorting') as Components.RevoGrid['updateColumnSorting'], 78 | clearSorting: createCommonMethod('clearSorting') as Components.RevoGrid['clearSorting'], 79 | getColumns: createCommonMethod('getColumns') as Components.RevoGrid['getColumns'], 80 | clearFocus: createCommonMethod('clearFocus') as Components.RevoGrid['clearFocus'], 81 | getPlugins: createCommonMethod('getPlugins') as Components.RevoGrid['getPlugins'], 82 | getFocused: createCommonMethod('getFocused') as Components.RevoGrid['getFocused'], 83 | getContentSize: createCommonMethod('getContentSize') as Components.RevoGrid['getContentSize'], 84 | getSelectedRange: createCommonMethod('getSelectedRange') as Components.RevoGrid['getSelectedRange'], 85 | refreshExtraElements: createCommonMethod('refreshExtraElements') as Components.RevoGrid['refreshExtraElements'], 86 | getProviders: createCommonMethod('getProviders') as Components.RevoGrid['getProviders'], 87 | }, 88 | render: createCommonRender('revo-grid', ['contentsizechanged', 'beforeedit', 'beforerangeedit', 'afteredit', 'beforeautofill', 'beforerange', 'afterfocus', 'roworderchanged', 'beforesorting', 'beforesourcesortingapply', 'beforesortingapply', 'rowdragstart', 'headerclick', 'beforecellfocus', 'beforefocuslost', 'beforesourceset', 'beforeanysource', 'aftersourceset', 'afteranysource', 'beforecolumnsset', 'beforecolumnapplied', 'aftercolumnsset', 'beforefilterapply', 'beforefiltertrimmed', 'beforetrimmed', 'aftertrimmed', 'viewportscroll', 'beforeexport', 'beforeeditstart', 'aftercolumnresize', 'beforerowdefinition', 'filterconfigchanged', 'sortingconfigchanged', 'rowheaderschanged', 'beforegridrender', 'aftergridrender', 'aftergridinit', 'additionaldatachanged', 'afterthemechanged', 'created']), 89 | }); 90 | 91 | -------------------------------------------------------------------------------- /assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue 2 Data Grid 2 | 3 |

4 | 5 | Vue 2 Data Grid 6 | 7 |

8 | 9 |

10 | Latest Version on NPM 11 | Software License 12 | Dependency count 13 | Tree shaking 14 | Bundle size 15 | Sonar Quality Gate 16 |

17 | 18 | 19 |

Powerful Vue 2 Data Grid component built on top of RevoGrid.

20 |

21 | Support Millions of cells and thousands of columns easy and efficiently for fast data rendering. Easy to use. 22 |

23 | 24 |

25 | Demo and API • 26 | Key Features • 27 | How To Use • 28 | Installation • 29 | Docs • 30 | License 31 |

32 | 33 | Material grid preview 34 | RevoGrid material theme. 35 |
36 | 37 | 38 | ## Key Features 39 | 40 | - **High Performance**: Handles millions of cells in the viewport with a powerful core built by default. 41 | 42 | - **[Accessibility](https://rv-grid.com/guide/wcag)**: Follows WAI-ARIA best practices. 43 | 44 | - **[Keyboard Support](https://rv-grid.com/guide/defs#Keyboard)**: 45 | - Excel-like focus for efficient navigation and editing. 46 | - Seamless copy/paste from Excel, Google Sheets, or any other sheet format. 47 | 48 | 49 | - **Lightweight**: Minimal initial bundle size ![Min size](https://badgen.net/bundlephobia/min/@revolist/revogrid@latest). Can be imported with polyfills or as a module for modern browsers. 50 | 51 | - **[Intelligent Virtual DOM](https://rv-grid.com/guide/overview#VNode-Reactive-DOM)**: Smart row recombination to minimize redraws. 52 | 53 | - **[Virtual Scroll](https://rv-grid.com/guide/viewports)**: Handles large datasets with infinite scroll. 54 | 55 | - **[Drag and Drop](https://rv-grid.com/guide/row/order)**: Drag and drop in [rows](https://rv-grid.com/guide/row/order) and [columns](https://rv-grid.com/guide/column/order). 56 | 57 | - **[Sorting](https://rv-grid.com/guide/sorting)**: Multiple options, customizable per column, with advanced event handling. 58 | 59 | - **[Filtering](https://rv-grid.com/guide/filters)**: 60 | - Predefined system filters. 61 | - Multi column filters. 62 | - Conditional filters. 63 | - Preserve existing collections. 64 | - Selection. 65 | - Slider. 66 | - Header filtering. 67 | - Custom filters to extend system filters with your own set. 68 | 69 | - **[Export](https://rv-grid.com/guide/export.plugin)**: Export data to file. 70 | 71 | - **Custom Sizes**: Define custom sizes for [columns](https://rv-grid.com/guide/column/#Column-Size) and [rows](https://rv-grid.com/guide/row/height). Automatic sizing based on content. 72 | 73 | - **[Column Resizing](https://rv-grid.com/guide/column/resize)**: Adjust column widths. 74 | - **Auto Size Columns**: Intelligent column width adjustment that automatically adapts to content, ensuring optimal readability and layout efficiency. 75 | 76 | - **Pinned/Sticky/Freezed Elements**: 77 | - [Columns](https://rv-grid.com/guide/column/pin) (define left or right). 78 | - [Rows](https://rv-grid.com/guide/row/pin) (define top or bottom). 79 | 80 | - **Grouping**: 81 | - [Column grouping](https://rv-grid.com/guide/column/grouping) (nested headers). 82 | - Column grouping Drill Down: Collapse grouping columns to streamline your grid view, trimming away unnecessary columns and enhancing data organization. Perfect for focusing on the information that matters most, while keeping your workspace clean and efficient. 83 | - [Row grouping](https://rv-grid.com/guide/row/grouping) (nested rows). 84 | 85 | - **Column Types**: [More details](https://rv-grid.com/guide/column/#Column-Formats) 86 | - [Text/String](https://rv-grid.com/guide/column/types#String) (default). 87 | - [Number](https://rv-grid.com/guide/column/types#Number). 88 | - [Select/Dropdown](https://rv-grid.com/guide/column/types#Select-Dropdown). 89 | - [Date](https://rv-grid.com/guide/column/types#Date). 90 | - Custom (create extended styles using any template). 91 | 92 | - **Range Operations**: 93 | - [Selection](https://rv-grid.com/guide/defs#Range). 94 | - [Editing](https://rv-grid.com/guide/defs#Range-Autofill). 95 | 96 | - **[Theme Packages](https://rv-grid.com/guide/theme)**: 97 | - Excel-like (default). 98 | - Material (compact, dark, or light). 99 | 100 | - **[Extensibility](https://rv-grid.com/guide/jsx.template)**: Modern VNode features and tsx support for easy extension. 101 | 102 | - **[Trimmed Rows](https://rv-grid.com/guide/row/#Trimmed-Rows)**: Hide rows on demand. 103 | 104 | - **[Plugin System](https://rv-grid.com/guide/plugin/)**: Create custom plugins or extend existing ones easily. 105 | 106 | - **[Formula Support](https://rv-grid.com/guide/cell/formula)**: Evaluate formulas in cell data with Excel-like syntax, including basic arithmetic, statistical functions, and cell references. 107 | - **[Pivot Table](https://rv-grid.com/demo/pivot)**: Transform and analyze data dynamically with drag-and-drop field arrangement, aggregation functions, and interactive filtering capabilities. 108 | 109 | - **[Master Detail/Subtables/Forms](https://rv-grid.com/guide/row/master.pro)**: Expand rows to reveal child data. 110 | - **[Cell/Column/Row Span/Merge](https://rv-grid.com/guide/cell/merge)**: Merge cells to form groups. 111 | - **Auto Merge**: Automatically merges cells with identical values in a column. 112 | - **Form editig**: Edit forms directly within the grid, featuring all necessary fields, including custom options and markdown support for a fast and enhanced data entry experience. 113 | 114 | - **Customizations**: 115 | - [Column header template](https://rv-grid.com/guide/column/header.template). 116 | - [Row header template](https://rv-grid.com/guide/row/headers). 117 | - [Cell properties](https://rv-grid.com/guide/cell/) (define custom properties for rendered cells). 118 | - Nested grids: Build a grid inside a grid, showcasing advanced editing options and user interactions for a more dynamic data presentation. 119 | - Context Menu: Build context menus for any grid element - from cells to headers. Cut, copy, paste, add rows, modify columns, and more. Fully customizable with your own actions and behaviors. 120 | 121 | 122 | > ⚠️ **Note**: Repository Notice: This repo is read-only. Create new issues at the [revogrid repo](https://github.com/revolist/revogrid) 123 | 124 | 125 | - [Cell template](https://rv-grid.com/guide/vue2/renderer) (create your own cell views). 126 | - [Cell editor](https://rv-grid.com/guide/vue2/editor) (use predefined or apply your own custom editors and cell types). 127 | 128 | - **Rich API & Additional Improvements**: Explore hundreds of other small customizations and improvements in [RevoGrid](https://rv-grid.com/). 129 | 130 | ### Usage Vue 2 131 | 132 | > [!TIP] 133 | > For Vue 3, use [this repo](https://github.com/revolist/vue3-datagrid) 134 | 135 | With NPM: 136 | 137 | ```bash 138 | npm i @revolist/vue2-datagrid --save; 139 | ``` 140 | 141 | With Yarn: 142 | 143 | ```bash 144 | yarn add @revolist/vue-datagrid; 145 | ``` 146 | 147 | ```vue 148 | // App.vue 149 | 150 | 154 | 155 | 177 | ``` 178 | ```vue 179 | // Cell.vue 180 | 181 | 187 | ``` 188 | 189 | 190 | [Example and guide](https://rv-grid.com/guide/vue2/) 191 | 192 | - [![VueJs](./assets/vuejs.svg) Vue 3](https://rv-grid.com/guide/vue3/) and [Vue 2](https://rv-grid.com/guide/vue2/) 193 | - [![React](./assets/react.svg) React](https://rv-grid.com/guide/react/) 194 | - [![Angular](./assets/angular.svg) Angular](https://rv-grid.com/guide/angular/) 195 | - [![Svelte](./assets/svelte.svg) Svelte](https://rv-grid.com/guide/svelte/) 196 | - [![JavaScript](./assets/js.svg) JavaScript](https://rv-grid.com/guide/) 197 | 198 | ## Versions 199 | 200 | - **2.0+**: Introduced the plugin system, grouping, sorting, and filtering. 201 | - **3.0+**: Breaking changes introduced: 202 | - Removed the redundant viewport component. 203 | - Renamed classes to support Bootstrap and other libraries: 204 | - `row` -> `rgRow` 205 | - `col` -> `rgCol` 206 | - `data-cell` -> `rgCell` 207 | - `data-header-cell` -> `rgHeaderCell` 208 | - Migrated all method names to lowercase to align with modern event naming conventions. For example, `afterEdit` is now `afteredit`. Check the API for details. 209 | - Added support for pure ESM modules to enable the use of the grid in all modern frontend tooling like Vite, Parcel, etc. You can now import custom elements without lazy loading. Note that you are responsible for polyfills. 210 | 211 | 212 | - **4.0+**: Breaking changes introduced. See the [migration guide](https://rv-grid.com/guide/migration). 213 | 214 | - Redesigned type support: 215 | - Removed deprecated namespaces: 216 | - **Before**: `RevoGrid.ColumnRegular` 217 | - **Now**: `ColumnRegular`; 218 | - Improved type import: 219 | - **Before**: `import { RevoGrid } from '@revolist/revogrid/dist/types/interfaces'` 220 | - **Now**: `import { ColumnRegular } from '@revolist/revogrid'`. 221 | - Changed viewport type names everywhere. For example, before: `rowDefinitions: [{ type: "row", index: 0, size: 145 }]`, after: `rowDefinitions: [{ type: "rgRow", index: 0, size: 145 }]`. 222 | - Updated [event](https://rv-grid.com/guide/api/revoGrid.html#Events) naming convention. Review your [event](https://rv-grid.com/guide/api/revoGrid.html#Events) usage. [Event names](https://rv-grid.com/guide/api/revoGrid.html#Events) are all lowercase now and are aligned with modern event naming conventions. For example, `afterEdit` -> `afteredit`. 223 | - Multiple event breaking changes introduced: beforerowrender now returns `BeforeRowRenderEvent`. Check all events for details. 224 | 225 | - **Major improvements**: 226 | - Rethought the entire framework approach. Introduced Pro version with advance support and pro features. 227 | - Introduced slot support. 228 | - Updated scrolling system for better mobile support. 229 | - Advance template support. Introduced `additionalData` for templates and editors. `Prop` gives access to parent/root app context. 230 | - Redesigned the documentation. 231 | - Fixed major issues and significantly improved overall performance, making the grid multiple time faster. 232 | - Enhanced plugin support - now with full access to grid providers. 233 | - Updated documentation. 234 | - Provided full framework support and native render for Angular, React, Svelte and Vue. 235 | 236 | - **What next?** 237 | - Check our [Roadmap](https://github.com/users/revolist/projects/3) 238 | 239 | 240 | ## Our Sponsors 241 | 242 | We would like to extend our heartfelt gratitude to our sponsors for their generous support. Their contributions help us maintain and develop RevoGrid. 243 | 244 | [![Altruistiq](https://cdn.prod.website-files.com/62cd69e08130a1a33f5ef900/6310b4d500e971695db5e9c3_615b5db69ce8931a276e5ed2_Social_Icons_AQ_3_32x32.png)](https://altruistiq.com) 245 | 246 | 247 | ### Become a Sponsor 248 | 249 | If you or your company would like to support the ongoing development of RevoGrid, please consider [![Sponsor Us](https://img.shields.io/badge/Sponsor%20Us-%F0%9F%92%96-brightgreen)](https://opencollective.com/revogrid) or use a [Pro version](https://rv-grid.com/pro/). Your support will help us continue to improve the project and provide the best possible tool for the community. 250 | 251 | Thank you for supporting RevoGrid! 🙏 252 | 253 | 254 | ## Contributing 255 | 256 | By getting involved, you'll have the opportunity to enhance your skills, gain valuable experience, and make a significant impact on an innovative project. Your contribution, no matter how big or small, is valuable. 257 | 258 | ### Why Contribute? 259 | 260 | - **Expand Your Knowledge**: Working on complex libraries allows you to dive deep into modern web technologies, improve your coding skills, and learn best practices in performance optimization, data handling, and component-based architecture. 261 | - **Experience**: Contributing to an open-source project like provides you with practical experience that can be a great addition to your portfolio. It demonstrates your ability to work collaboratively, solve complex problems, and contribute to a project's success. 262 | - **Professional Growth**: By contributing, you become part of a network of talented developers. This can lead to mentorship opportunities, collaborations, and professional connections that can benefit your career. 263 | 264 | 265 | ## License 266 | 267 | MIT 268 | 269 | --- 270 | 271 | -------------------------------------------------------------------------------- /demo-v2.7/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lib-test", 3 | "version": "4.11.12", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "lib-test", 9 | "version": "4.11.12", 10 | "dependencies": { 11 | "@stencil/core": "^4.18.1", 12 | "@vitejs/plugin-vue2": "^2.3.1", 13 | "vite": "^6.4.1", 14 | "vue": "^2.7.16" 15 | } 16 | }, 17 | "node_modules/@babel/parser": { 18 | "version": "7.24.5", 19 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", 20 | "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", 21 | "bin": { 22 | "parser": "bin/babel-parser.js" 23 | }, 24 | "engines": { 25 | "node": ">=6.0.0" 26 | } 27 | }, 28 | "node_modules/@esbuild/aix-ppc64": { 29 | "version": "0.25.1", 30 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", 31 | "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", 32 | "cpu": [ 33 | "ppc64" 34 | ], 35 | "license": "MIT", 36 | "optional": true, 37 | "os": [ 38 | "aix" 39 | ], 40 | "engines": { 41 | "node": ">=18" 42 | } 43 | }, 44 | "node_modules/@esbuild/android-arm": { 45 | "version": "0.25.1", 46 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", 47 | "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", 48 | "cpu": [ 49 | "arm" 50 | ], 51 | "license": "MIT", 52 | "optional": true, 53 | "os": [ 54 | "android" 55 | ], 56 | "engines": { 57 | "node": ">=18" 58 | } 59 | }, 60 | "node_modules/@esbuild/android-arm64": { 61 | "version": "0.25.1", 62 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", 63 | "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", 64 | "cpu": [ 65 | "arm64" 66 | ], 67 | "license": "MIT", 68 | "optional": true, 69 | "os": [ 70 | "android" 71 | ], 72 | "engines": { 73 | "node": ">=18" 74 | } 75 | }, 76 | "node_modules/@esbuild/android-x64": { 77 | "version": "0.25.1", 78 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", 79 | "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", 80 | "cpu": [ 81 | "x64" 82 | ], 83 | "license": "MIT", 84 | "optional": true, 85 | "os": [ 86 | "android" 87 | ], 88 | "engines": { 89 | "node": ">=18" 90 | } 91 | }, 92 | "node_modules/@esbuild/darwin-arm64": { 93 | "version": "0.25.1", 94 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", 95 | "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", 96 | "cpu": [ 97 | "arm64" 98 | ], 99 | "license": "MIT", 100 | "optional": true, 101 | "os": [ 102 | "darwin" 103 | ], 104 | "engines": { 105 | "node": ">=18" 106 | } 107 | }, 108 | "node_modules/@esbuild/darwin-x64": { 109 | "version": "0.25.1", 110 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", 111 | "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", 112 | "cpu": [ 113 | "x64" 114 | ], 115 | "license": "MIT", 116 | "optional": true, 117 | "os": [ 118 | "darwin" 119 | ], 120 | "engines": { 121 | "node": ">=18" 122 | } 123 | }, 124 | "node_modules/@esbuild/freebsd-arm64": { 125 | "version": "0.25.1", 126 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", 127 | "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", 128 | "cpu": [ 129 | "arm64" 130 | ], 131 | "license": "MIT", 132 | "optional": true, 133 | "os": [ 134 | "freebsd" 135 | ], 136 | "engines": { 137 | "node": ">=18" 138 | } 139 | }, 140 | "node_modules/@esbuild/freebsd-x64": { 141 | "version": "0.25.1", 142 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", 143 | "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", 144 | "cpu": [ 145 | "x64" 146 | ], 147 | "license": "MIT", 148 | "optional": true, 149 | "os": [ 150 | "freebsd" 151 | ], 152 | "engines": { 153 | "node": ">=18" 154 | } 155 | }, 156 | "node_modules/@esbuild/linux-arm": { 157 | "version": "0.25.1", 158 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", 159 | "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", 160 | "cpu": [ 161 | "arm" 162 | ], 163 | "license": "MIT", 164 | "optional": true, 165 | "os": [ 166 | "linux" 167 | ], 168 | "engines": { 169 | "node": ">=18" 170 | } 171 | }, 172 | "node_modules/@esbuild/linux-arm64": { 173 | "version": "0.25.1", 174 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", 175 | "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", 176 | "cpu": [ 177 | "arm64" 178 | ], 179 | "license": "MIT", 180 | "optional": true, 181 | "os": [ 182 | "linux" 183 | ], 184 | "engines": { 185 | "node": ">=18" 186 | } 187 | }, 188 | "node_modules/@esbuild/linux-ia32": { 189 | "version": "0.25.1", 190 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", 191 | "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", 192 | "cpu": [ 193 | "ia32" 194 | ], 195 | "license": "MIT", 196 | "optional": true, 197 | "os": [ 198 | "linux" 199 | ], 200 | "engines": { 201 | "node": ">=18" 202 | } 203 | }, 204 | "node_modules/@esbuild/linux-loong64": { 205 | "version": "0.25.1", 206 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", 207 | "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", 208 | "cpu": [ 209 | "loong64" 210 | ], 211 | "license": "MIT", 212 | "optional": true, 213 | "os": [ 214 | "linux" 215 | ], 216 | "engines": { 217 | "node": ">=18" 218 | } 219 | }, 220 | "node_modules/@esbuild/linux-mips64el": { 221 | "version": "0.25.1", 222 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", 223 | "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", 224 | "cpu": [ 225 | "mips64el" 226 | ], 227 | "license": "MIT", 228 | "optional": true, 229 | "os": [ 230 | "linux" 231 | ], 232 | "engines": { 233 | "node": ">=18" 234 | } 235 | }, 236 | "node_modules/@esbuild/linux-ppc64": { 237 | "version": "0.25.1", 238 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", 239 | "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", 240 | "cpu": [ 241 | "ppc64" 242 | ], 243 | "license": "MIT", 244 | "optional": true, 245 | "os": [ 246 | "linux" 247 | ], 248 | "engines": { 249 | "node": ">=18" 250 | } 251 | }, 252 | "node_modules/@esbuild/linux-riscv64": { 253 | "version": "0.25.1", 254 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", 255 | "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", 256 | "cpu": [ 257 | "riscv64" 258 | ], 259 | "license": "MIT", 260 | "optional": true, 261 | "os": [ 262 | "linux" 263 | ], 264 | "engines": { 265 | "node": ">=18" 266 | } 267 | }, 268 | "node_modules/@esbuild/linux-s390x": { 269 | "version": "0.25.1", 270 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", 271 | "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", 272 | "cpu": [ 273 | "s390x" 274 | ], 275 | "license": "MIT", 276 | "optional": true, 277 | "os": [ 278 | "linux" 279 | ], 280 | "engines": { 281 | "node": ">=18" 282 | } 283 | }, 284 | "node_modules/@esbuild/linux-x64": { 285 | "version": "0.25.1", 286 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", 287 | "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", 288 | "cpu": [ 289 | "x64" 290 | ], 291 | "license": "MIT", 292 | "optional": true, 293 | "os": [ 294 | "linux" 295 | ], 296 | "engines": { 297 | "node": ">=18" 298 | } 299 | }, 300 | "node_modules/@esbuild/netbsd-arm64": { 301 | "version": "0.25.1", 302 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", 303 | "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", 304 | "cpu": [ 305 | "arm64" 306 | ], 307 | "license": "MIT", 308 | "optional": true, 309 | "os": [ 310 | "netbsd" 311 | ], 312 | "engines": { 313 | "node": ">=18" 314 | } 315 | }, 316 | "node_modules/@esbuild/netbsd-x64": { 317 | "version": "0.25.1", 318 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", 319 | "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", 320 | "cpu": [ 321 | "x64" 322 | ], 323 | "license": "MIT", 324 | "optional": true, 325 | "os": [ 326 | "netbsd" 327 | ], 328 | "engines": { 329 | "node": ">=18" 330 | } 331 | }, 332 | "node_modules/@esbuild/openbsd-arm64": { 333 | "version": "0.25.1", 334 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", 335 | "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", 336 | "cpu": [ 337 | "arm64" 338 | ], 339 | "license": "MIT", 340 | "optional": true, 341 | "os": [ 342 | "openbsd" 343 | ], 344 | "engines": { 345 | "node": ">=18" 346 | } 347 | }, 348 | "node_modules/@esbuild/openbsd-x64": { 349 | "version": "0.25.1", 350 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", 351 | "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", 352 | "cpu": [ 353 | "x64" 354 | ], 355 | "license": "MIT", 356 | "optional": true, 357 | "os": [ 358 | "openbsd" 359 | ], 360 | "engines": { 361 | "node": ">=18" 362 | } 363 | }, 364 | "node_modules/@esbuild/sunos-x64": { 365 | "version": "0.25.1", 366 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", 367 | "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", 368 | "cpu": [ 369 | "x64" 370 | ], 371 | "license": "MIT", 372 | "optional": true, 373 | "os": [ 374 | "sunos" 375 | ], 376 | "engines": { 377 | "node": ">=18" 378 | } 379 | }, 380 | "node_modules/@esbuild/win32-arm64": { 381 | "version": "0.25.1", 382 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", 383 | "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", 384 | "cpu": [ 385 | "arm64" 386 | ], 387 | "license": "MIT", 388 | "optional": true, 389 | "os": [ 390 | "win32" 391 | ], 392 | "engines": { 393 | "node": ">=18" 394 | } 395 | }, 396 | "node_modules/@esbuild/win32-ia32": { 397 | "version": "0.25.1", 398 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", 399 | "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", 400 | "cpu": [ 401 | "ia32" 402 | ], 403 | "license": "MIT", 404 | "optional": true, 405 | "os": [ 406 | "win32" 407 | ], 408 | "engines": { 409 | "node": ">=18" 410 | } 411 | }, 412 | "node_modules/@esbuild/win32-x64": { 413 | "version": "0.25.1", 414 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", 415 | "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", 416 | "cpu": [ 417 | "x64" 418 | ], 419 | "license": "MIT", 420 | "optional": true, 421 | "os": [ 422 | "win32" 423 | ], 424 | "engines": { 425 | "node": ">=18" 426 | } 427 | }, 428 | "node_modules/@rollup/rollup-android-arm-eabi": { 429 | "version": "4.37.0", 430 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", 431 | "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", 432 | "cpu": [ 433 | "arm" 434 | ], 435 | "license": "MIT", 436 | "optional": true, 437 | "os": [ 438 | "android" 439 | ] 440 | }, 441 | "node_modules/@rollup/rollup-android-arm64": { 442 | "version": "4.37.0", 443 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", 444 | "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", 445 | "cpu": [ 446 | "arm64" 447 | ], 448 | "license": "MIT", 449 | "optional": true, 450 | "os": [ 451 | "android" 452 | ] 453 | }, 454 | "node_modules/@rollup/rollup-darwin-arm64": { 455 | "version": "4.37.0", 456 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", 457 | "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", 458 | "cpu": [ 459 | "arm64" 460 | ], 461 | "license": "MIT", 462 | "optional": true, 463 | "os": [ 464 | "darwin" 465 | ] 466 | }, 467 | "node_modules/@rollup/rollup-darwin-x64": { 468 | "version": "4.37.0", 469 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", 470 | "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", 471 | "cpu": [ 472 | "x64" 473 | ], 474 | "license": "MIT", 475 | "optional": true, 476 | "os": [ 477 | "darwin" 478 | ] 479 | }, 480 | "node_modules/@rollup/rollup-freebsd-arm64": { 481 | "version": "4.37.0", 482 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", 483 | "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", 484 | "cpu": [ 485 | "arm64" 486 | ], 487 | "license": "MIT", 488 | "optional": true, 489 | "os": [ 490 | "freebsd" 491 | ] 492 | }, 493 | "node_modules/@rollup/rollup-freebsd-x64": { 494 | "version": "4.37.0", 495 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", 496 | "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", 497 | "cpu": [ 498 | "x64" 499 | ], 500 | "license": "MIT", 501 | "optional": true, 502 | "os": [ 503 | "freebsd" 504 | ] 505 | }, 506 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 507 | "version": "4.37.0", 508 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", 509 | "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", 510 | "cpu": [ 511 | "arm" 512 | ], 513 | "license": "MIT", 514 | "optional": true, 515 | "os": [ 516 | "linux" 517 | ] 518 | }, 519 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 520 | "version": "4.37.0", 521 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", 522 | "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", 523 | "cpu": [ 524 | "arm" 525 | ], 526 | "license": "MIT", 527 | "optional": true, 528 | "os": [ 529 | "linux" 530 | ] 531 | }, 532 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 533 | "version": "4.37.0", 534 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", 535 | "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", 536 | "cpu": [ 537 | "arm64" 538 | ], 539 | "license": "MIT", 540 | "optional": true, 541 | "os": [ 542 | "linux" 543 | ] 544 | }, 545 | "node_modules/@rollup/rollup-linux-arm64-musl": { 546 | "version": "4.37.0", 547 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", 548 | "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", 549 | "cpu": [ 550 | "arm64" 551 | ], 552 | "license": "MIT", 553 | "optional": true, 554 | "os": [ 555 | "linux" 556 | ] 557 | }, 558 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 559 | "version": "4.37.0", 560 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", 561 | "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", 562 | "cpu": [ 563 | "loong64" 564 | ], 565 | "license": "MIT", 566 | "optional": true, 567 | "os": [ 568 | "linux" 569 | ] 570 | }, 571 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 572 | "version": "4.37.0", 573 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", 574 | "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", 575 | "cpu": [ 576 | "ppc64" 577 | ], 578 | "license": "MIT", 579 | "optional": true, 580 | "os": [ 581 | "linux" 582 | ] 583 | }, 584 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 585 | "version": "4.37.0", 586 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", 587 | "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", 588 | "cpu": [ 589 | "riscv64" 590 | ], 591 | "license": "MIT", 592 | "optional": true, 593 | "os": [ 594 | "linux" 595 | ] 596 | }, 597 | "node_modules/@rollup/rollup-linux-riscv64-musl": { 598 | "version": "4.37.0", 599 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.37.0.tgz", 600 | "integrity": "sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==", 601 | "cpu": [ 602 | "riscv64" 603 | ], 604 | "license": "MIT", 605 | "optional": true, 606 | "os": [ 607 | "linux" 608 | ] 609 | }, 610 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 611 | "version": "4.37.0", 612 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", 613 | "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", 614 | "cpu": [ 615 | "s390x" 616 | ], 617 | "license": "MIT", 618 | "optional": true, 619 | "os": [ 620 | "linux" 621 | ] 622 | }, 623 | "node_modules/@rollup/rollup-linux-x64-gnu": { 624 | "version": "4.37.0", 625 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", 626 | "integrity": "sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==", 627 | "cpu": [ 628 | "x64" 629 | ], 630 | "license": "MIT", 631 | "optional": true, 632 | "os": [ 633 | "linux" 634 | ] 635 | }, 636 | "node_modules/@rollup/rollup-linux-x64-musl": { 637 | "version": "4.37.0", 638 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", 639 | "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", 640 | "cpu": [ 641 | "x64" 642 | ], 643 | "license": "MIT", 644 | "optional": true, 645 | "os": [ 646 | "linux" 647 | ] 648 | }, 649 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 650 | "version": "4.37.0", 651 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", 652 | "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", 653 | "cpu": [ 654 | "arm64" 655 | ], 656 | "license": "MIT", 657 | "optional": true, 658 | "os": [ 659 | "win32" 660 | ] 661 | }, 662 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 663 | "version": "4.37.0", 664 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", 665 | "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", 666 | "cpu": [ 667 | "ia32" 668 | ], 669 | "license": "MIT", 670 | "optional": true, 671 | "os": [ 672 | "win32" 673 | ] 674 | }, 675 | "node_modules/@rollup/rollup-win32-x64-msvc": { 676 | "version": "4.37.0", 677 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", 678 | "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", 679 | "cpu": [ 680 | "x64" 681 | ], 682 | "license": "MIT", 683 | "optional": true, 684 | "os": [ 685 | "win32" 686 | ] 687 | }, 688 | "node_modules/@stencil/core": { 689 | "version": "4.18.1", 690 | "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.18.1.tgz", 691 | "integrity": "sha512-WoRctLuXqoiLquS4EEvMoyLsbQ5+xuk8wp0+n4mYjoAoXy8NppXmMqKrMlFyYXL/zUI5ODS7U7IcLCpZ3IcKZQ==", 692 | "bin": { 693 | "stencil": "bin/stencil" 694 | }, 695 | "engines": { 696 | "node": ">=16.0.0", 697 | "npm": ">=7.10.0" 698 | } 699 | }, 700 | "node_modules/@types/estree": { 701 | "version": "1.0.6", 702 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 703 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 704 | "license": "MIT" 705 | }, 706 | "node_modules/@vitejs/plugin-vue2": { 707 | "version": "2.3.1", 708 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.1.tgz", 709 | "integrity": "sha512-/ksaaz2SRLN11JQhLdEUhDzOn909WEk99q9t9w+N12GjQCljzv7GyvAbD/p20aBUjHkvpGOoQ+FCOkG+mjDF4A==", 710 | "engines": { 711 | "node": "^14.18.0 || >= 16.0.0" 712 | }, 713 | "peerDependencies": { 714 | "vite": "^3.0.0 || ^4.0.0 || ^5.0.0", 715 | "vue": "^2.7.0-0" 716 | } 717 | }, 718 | "node_modules/@vue/compiler-sfc": { 719 | "version": "2.7.16", 720 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", 721 | "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", 722 | "dependencies": { 723 | "@babel/parser": "^7.23.5", 724 | "postcss": "^8.4.14", 725 | "source-map": "^0.6.1" 726 | }, 727 | "optionalDependencies": { 728 | "prettier": "^1.18.2 || ^2.0.0" 729 | } 730 | }, 731 | "node_modules/csstype": { 732 | "version": "3.1.3", 733 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 734 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 735 | }, 736 | "node_modules/esbuild": { 737 | "version": "0.25.1", 738 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", 739 | "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", 740 | "hasInstallScript": true, 741 | "license": "MIT", 742 | "bin": { 743 | "esbuild": "bin/esbuild" 744 | }, 745 | "engines": { 746 | "node": ">=18" 747 | }, 748 | "optionalDependencies": { 749 | "@esbuild/aix-ppc64": "0.25.1", 750 | "@esbuild/android-arm": "0.25.1", 751 | "@esbuild/android-arm64": "0.25.1", 752 | "@esbuild/android-x64": "0.25.1", 753 | "@esbuild/darwin-arm64": "0.25.1", 754 | "@esbuild/darwin-x64": "0.25.1", 755 | "@esbuild/freebsd-arm64": "0.25.1", 756 | "@esbuild/freebsd-x64": "0.25.1", 757 | "@esbuild/linux-arm": "0.25.1", 758 | "@esbuild/linux-arm64": "0.25.1", 759 | "@esbuild/linux-ia32": "0.25.1", 760 | "@esbuild/linux-loong64": "0.25.1", 761 | "@esbuild/linux-mips64el": "0.25.1", 762 | "@esbuild/linux-ppc64": "0.25.1", 763 | "@esbuild/linux-riscv64": "0.25.1", 764 | "@esbuild/linux-s390x": "0.25.1", 765 | "@esbuild/linux-x64": "0.25.1", 766 | "@esbuild/netbsd-arm64": "0.25.1", 767 | "@esbuild/netbsd-x64": "0.25.1", 768 | "@esbuild/openbsd-arm64": "0.25.1", 769 | "@esbuild/openbsd-x64": "0.25.1", 770 | "@esbuild/sunos-x64": "0.25.1", 771 | "@esbuild/win32-arm64": "0.25.1", 772 | "@esbuild/win32-ia32": "0.25.1", 773 | "@esbuild/win32-x64": "0.25.1" 774 | } 775 | }, 776 | "node_modules/fdir": { 777 | "version": "6.5.0", 778 | "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 779 | "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 780 | "license": "MIT", 781 | "engines": { 782 | "node": ">=12.0.0" 783 | }, 784 | "peerDependencies": { 785 | "picomatch": "^3 || ^4" 786 | }, 787 | "peerDependenciesMeta": { 788 | "picomatch": { 789 | "optional": true 790 | } 791 | } 792 | }, 793 | "node_modules/fsevents": { 794 | "version": "2.3.3", 795 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 796 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 797 | "hasInstallScript": true, 798 | "license": "MIT", 799 | "optional": true, 800 | "os": [ 801 | "darwin" 802 | ], 803 | "engines": { 804 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 805 | } 806 | }, 807 | "node_modules/nanoid": { 808 | "version": "3.3.11", 809 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 810 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 811 | "funding": [ 812 | { 813 | "type": "github", 814 | "url": "https://github.com/sponsors/ai" 815 | } 816 | ], 817 | "license": "MIT", 818 | "bin": { 819 | "nanoid": "bin/nanoid.cjs" 820 | }, 821 | "engines": { 822 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 823 | } 824 | }, 825 | "node_modules/picocolors": { 826 | "version": "1.1.1", 827 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 828 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 829 | "license": "ISC" 830 | }, 831 | "node_modules/picomatch": { 832 | "version": "4.0.3", 833 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 834 | "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 835 | "license": "MIT", 836 | "engines": { 837 | "node": ">=12" 838 | }, 839 | "funding": { 840 | "url": "https://github.com/sponsors/jonschlinkert" 841 | } 842 | }, 843 | "node_modules/postcss": { 844 | "version": "8.5.3", 845 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 846 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 847 | "funding": [ 848 | { 849 | "type": "opencollective", 850 | "url": "https://opencollective.com/postcss/" 851 | }, 852 | { 853 | "type": "tidelift", 854 | "url": "https://tidelift.com/funding/github/npm/postcss" 855 | }, 856 | { 857 | "type": "github", 858 | "url": "https://github.com/sponsors/ai" 859 | } 860 | ], 861 | "license": "MIT", 862 | "dependencies": { 863 | "nanoid": "^3.3.8", 864 | "picocolors": "^1.1.1", 865 | "source-map-js": "^1.2.1" 866 | }, 867 | "engines": { 868 | "node": "^10 || ^12 || >=14" 869 | } 870 | }, 871 | "node_modules/prettier": { 872 | "version": "2.8.8", 873 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", 874 | "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", 875 | "optional": true, 876 | "bin": { 877 | "prettier": "bin-prettier.js" 878 | }, 879 | "engines": { 880 | "node": ">=10.13.0" 881 | }, 882 | "funding": { 883 | "url": "https://github.com/prettier/prettier?sponsor=1" 884 | } 885 | }, 886 | "node_modules/rollup": { 887 | "version": "4.37.0", 888 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.37.0.tgz", 889 | "integrity": "sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==", 890 | "license": "MIT", 891 | "dependencies": { 892 | "@types/estree": "1.0.6" 893 | }, 894 | "bin": { 895 | "rollup": "dist/bin/rollup" 896 | }, 897 | "engines": { 898 | "node": ">=18.0.0", 899 | "npm": ">=8.0.0" 900 | }, 901 | "optionalDependencies": { 902 | "@rollup/rollup-android-arm-eabi": "4.37.0", 903 | "@rollup/rollup-android-arm64": "4.37.0", 904 | "@rollup/rollup-darwin-arm64": "4.37.0", 905 | "@rollup/rollup-darwin-x64": "4.37.0", 906 | "@rollup/rollup-freebsd-arm64": "4.37.0", 907 | "@rollup/rollup-freebsd-x64": "4.37.0", 908 | "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", 909 | "@rollup/rollup-linux-arm-musleabihf": "4.37.0", 910 | "@rollup/rollup-linux-arm64-gnu": "4.37.0", 911 | "@rollup/rollup-linux-arm64-musl": "4.37.0", 912 | "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", 913 | "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", 914 | "@rollup/rollup-linux-riscv64-gnu": "4.37.0", 915 | "@rollup/rollup-linux-riscv64-musl": "4.37.0", 916 | "@rollup/rollup-linux-s390x-gnu": "4.37.0", 917 | "@rollup/rollup-linux-x64-gnu": "4.37.0", 918 | "@rollup/rollup-linux-x64-musl": "4.37.0", 919 | "@rollup/rollup-win32-arm64-msvc": "4.37.0", 920 | "@rollup/rollup-win32-ia32-msvc": "4.37.0", 921 | "@rollup/rollup-win32-x64-msvc": "4.37.0", 922 | "fsevents": "~2.3.2" 923 | } 924 | }, 925 | "node_modules/source-map": { 926 | "version": "0.6.1", 927 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 928 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 929 | "engines": { 930 | "node": ">=0.10.0" 931 | } 932 | }, 933 | "node_modules/source-map-js": { 934 | "version": "1.2.1", 935 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 936 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 937 | "engines": { 938 | "node": ">=0.10.0" 939 | } 940 | }, 941 | "node_modules/tinyglobby": { 942 | "version": "0.2.15", 943 | "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 944 | "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 945 | "license": "MIT", 946 | "dependencies": { 947 | "fdir": "^6.5.0", 948 | "picomatch": "^4.0.3" 949 | }, 950 | "engines": { 951 | "node": ">=12.0.0" 952 | }, 953 | "funding": { 954 | "url": "https://github.com/sponsors/SuperchupuDev" 955 | } 956 | }, 957 | "node_modules/vite": { 958 | "version": "6.4.1", 959 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", 960 | "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", 961 | "license": "MIT", 962 | "dependencies": { 963 | "esbuild": "^0.25.0", 964 | "fdir": "^6.4.4", 965 | "picomatch": "^4.0.2", 966 | "postcss": "^8.5.3", 967 | "rollup": "^4.34.9", 968 | "tinyglobby": "^0.2.13" 969 | }, 970 | "bin": { 971 | "vite": "bin/vite.js" 972 | }, 973 | "engines": { 974 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 975 | }, 976 | "funding": { 977 | "url": "https://github.com/vitejs/vite?sponsor=1" 978 | }, 979 | "optionalDependencies": { 980 | "fsevents": "~2.3.3" 981 | }, 982 | "peerDependencies": { 983 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 984 | "jiti": ">=1.21.0", 985 | "less": "*", 986 | "lightningcss": "^1.21.0", 987 | "sass": "*", 988 | "sass-embedded": "*", 989 | "stylus": "*", 990 | "sugarss": "*", 991 | "terser": "^5.16.0", 992 | "tsx": "^4.8.1", 993 | "yaml": "^2.4.2" 994 | }, 995 | "peerDependenciesMeta": { 996 | "@types/node": { 997 | "optional": true 998 | }, 999 | "jiti": { 1000 | "optional": true 1001 | }, 1002 | "less": { 1003 | "optional": true 1004 | }, 1005 | "lightningcss": { 1006 | "optional": true 1007 | }, 1008 | "sass": { 1009 | "optional": true 1010 | }, 1011 | "sass-embedded": { 1012 | "optional": true 1013 | }, 1014 | "stylus": { 1015 | "optional": true 1016 | }, 1017 | "sugarss": { 1018 | "optional": true 1019 | }, 1020 | "terser": { 1021 | "optional": true 1022 | }, 1023 | "tsx": { 1024 | "optional": true 1025 | }, 1026 | "yaml": { 1027 | "optional": true 1028 | } 1029 | } 1030 | }, 1031 | "node_modules/vue": { 1032 | "version": "2.7.16", 1033 | "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", 1034 | "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", 1035 | "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", 1036 | "dependencies": { 1037 | "@vue/compiler-sfc": "2.7.16", 1038 | "csstype": "^3.1.0" 1039 | } 1040 | } 1041 | } 1042 | } 1043 | --------------------------------------------------------------------------------