├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.cjs ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── example ├── App.vue └── main.js ├── package.json ├── src ├── NestableItem.vue ├── Placeholder.vue ├── VueNestable.vue ├── VueNestableHandle.vue ├── calls-hooks.js ├── components │ ├── NestableItem.vue │ ├── Placeholder.vue │ ├── VueNestable.vue │ └── VueNestableHandle.vue ├── groups-observer.js ├── index.js ├── main.js ├── mixins │ ├── calls-hooks.js │ ├── groups-observer.js │ └── nestable-helpers.js ├── nestable-helpers.js └── utils.js ├── vite.config.js ├── webpack.config.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/preset-env" 5 | ] 6 | ] 7 | } -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | build/* 3 | dist/* 4 | docs/dist/* 5 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | module.exports = { 3 | "root": true, 4 | "extends": [ 5 | "plugin:vue/vue3-essential", 6 | "eslint:recommended" 7 | ], 8 | "env": { 9 | "vue/setup-compiler-macros": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # ignore the documentation folder 2 | examples/ 3 | node_modules/ 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 6 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 7 | 8 | ## [3.0.0] - 15-04-2022 9 | - Vue 3 support 10 | 11 | 12 | ## [2.6.0] - 2020-08-26 13 | 14 | ### Changed 15 | - Replaces deprecated `Event.srcElement` with `Event.target`. 16 | [#98](https://github.com/rhwilr/vue-nestable/pull/98) (by 17 | [@punpunm](https://github.com/punpunm)) 18 | - Upgraded dependencies. 19 | 20 | 21 | ## [2.5.3] - 2020-03-27 22 | 23 | ### Fixed 24 | - Under some conditions, the wrong `pathTo` value would be passed to the 25 | `change` event. 26 | 27 | 28 | ## [2.5.2] - 2020-02-28 29 | 30 | ### Fixed 31 | - Fixed a bug where under some conditions the `.nestable-drag-layer` element 32 | would not render until the next frame, therefore calculating its size would 33 | throw an error. 34 | 35 | 36 | ## [2.5.1] - 2020-01-31 37 | 38 | ### Fixed 39 | - When moving the mouse slowly, the ghost item would appear in the top left 40 | corner until the next mousemove event triggerd. This is now fixed. 41 | [#87](https://github.com/rhwilr/vue-nestable/issues/87) 42 | 43 | ### Changed 44 | - Upgraded dependencies. 45 | 46 | 47 | ## [2.5.0] - 2019-12-18 48 | 49 | ### Added 50 | - RTL support. Check out the example for details. 51 | [#83](https://github.com/rhwilr/vue-nestable/pull/83) (by 52 | [@RoOhi-E](https://github.com/RoOhi-E)) 53 | 54 | ### Fixed 55 | - Using `keyprop` to render NestablItems in v-for. 56 | [#85](https://github.com/rhwilr/vue-nestable/pull/85) (by 57 | [@passi246](https://github.com/passi246)) 58 | 59 | ### Changed 60 | - Upgraded dependencies. 61 | 62 | 63 | ## [2.4.5] - 2019-09-26 64 | 65 | ### Fixed 66 | - Fixes a bug that caused the dragging item to be offset when the content was 67 | in a scrollable container. 68 | [#17](https://github.com/rhwilr/vue-nestable/issues/17) 69 | 70 | 71 | ## [2.4.4] - 2019-08-15 72 | 73 | This release updates many dependencies to the latest version. 74 | 75 | 76 | ## [2.4.3] - 2019-06-12 77 | 78 | This release updates many dependencies to the latest version. 79 | There are no new features or changes in this release. 80 | 81 | 82 | ## [2.4.2] - 2019-05-24 83 | 84 | There are no new features or changes in this release. 85 | 86 | ### Changed 87 | - Upgraded many internal dev-dependencies as well as our build tools. 88 | 89 | 90 | ## [2.4.1] - 2019-05-06 91 | 92 | ### Fixed 93 | - Fixed an issue that caused an items nesting level to be always increased on 94 | the first interaction. 95 | [#24](https://github.com/rhwilr/vue-nestable/issues/24) 96 | 97 | 98 | ## [2.4.0] - 2019-04-25 99 | 100 | ### Added 101 | - You have now the option to pass hooks that get called when an item is moved. 102 | This gives you greater flexibility and the option to prevent specific items 103 | from being dragged. 104 | 105 | 106 | ## [2.3.2] - 2019-04-12 107 | 108 | ### Fixed 109 | - In some cases, the `onMouseEnter` event would fire after the drag operation 110 | was already completed. This would cause an unhandled exception. 111 | [#22](https://github.com/rhwilr/vue-nestable/issues/22) 112 | 113 | 114 | ## [2.3.1] - 2019-03-14 115 | 116 | ### Fixed 117 | - The `items` property in the `change` event is no longer undefined, but 118 | actually contains the data that was promised. 119 | 120 | 121 | ## [2.3.0] - 2019-03-14 122 | 123 | ### Added 124 | - The `options` object in the `change` event now includes the `items` prop. 125 | The `item` prop gives access to the new list of all items after the changes 126 | were applied. [#20](https://github.com/rhwilr/vue-nestable/pull/20) (by 127 | [@notflip](https://github.com/notflip)) 128 | 129 | 130 | ## [2.2.0] - 2019-02-28 131 | 132 | ### Added 133 | - The default slot that renders the item now provides an `isChild` prop 134 | 135 | ### Changed 136 | - Small performance improvement when finding the closest parent of an element 137 | 138 | 139 | ## [2.1.1] - 2019-02-13 140 | 141 | ### Fixed 142 | - The position for the ghost element is now calculated correctly when the list 143 | is inside a scrollable container. 144 | [#17](https://github.com/rhwilr/vue-nestable/issues/17) 145 | 146 | 147 | ## [2.1.0] - 2019-02-05 148 | 149 | ### Added 150 | - You now get additional information in the change event about the item that 151 | was moved. For now, we only set the `pathTo` attribute. 152 | [#13](https://github.com/rhwilr/vue-nestable/pull/13) (by 153 | [@iceflash](https://github.com/iceflash)) 154 | 155 | ### Changed 156 | - Modernized the development environment. We now use Webpack to build 157 | vue-nestable. In addition, we now export multiple builds: common-js, es, 158 | iife, and umd. You can import a different build if you need to, but node and 159 | webpack will automatically use what works best for your setup. 160 | 161 | ### Improved 162 | - Dragging items that are not of equal size should now work better. Currently 163 | this is only fixed on the desktop, on mobile the 164 | [issue](https://github.com/rhwilr/vue-nestable/issues/15) still persists. 165 | 166 | 167 | ## [2.0.0] - 2019-01-08 168 | 169 | Only a month after we hit version 1.0.0, we are already releasing version 2.0.0! 170 | So Yay... I guess? :smiley: 171 | 172 | But we release this new version not because we added many new features, but 173 | because we made a potential breaking change so you might have to make changes to 174 | your code. And since we follow semver: here is version 2.0.0. 175 | 176 | ### Potential Breaking Change 177 | - The vue-nestable-handle component now uses a div instead of a span as a 178 | wrapper element to allow for more flexible content. If you are using the 179 | handle next to other content, you might have to set `display: inline;` on 180 | the `.nestable-handle` class. 181 | 182 | ### Added 183 | - support for touch events to handle drag & drop on mobile device. 184 | - the option to add custom classes to an item by setting `classProp` to the 185 | name of the property that holds your class for each item. 186 | 187 | 188 | 189 | ## [1.1.0-beta.3] - 2019-01-05 190 | 191 | ### Fixed 192 | - When a string was passed to the class prop it was expanded to an array of 193 | characters in the browser version of vue. 194 | 195 | 196 | ## [1.1.0-beta.2] - 2019-01-02 197 | 198 | ### Added 199 | - You can add custom classes to an item by setting `classProp` to the name of 200 | the property that holds your class for each item. 201 | 202 | 203 | ## [1.1.0-beta.1] - 2018-12-20 204 | 205 | ### Changed 206 | - The vue-nestable-handle component now uses a div instead of a span to allow 207 | for more flexible content. If you are using the handle next to other 208 | content, make sure to set `display: inline;` on `.nestable-handle`. 209 | [#9](https://github.com/rhwilr/vue-nestable/pull/9) (by 210 | [@Guntau](https://github.com/Guntau)) 211 | 212 | 213 | ## [1.1.0-beta.0] - 2018-12-20 214 | 215 | ### Added 216 | - vue-nestable now supports touch events to handle drag & drop on mobile device. 217 | 218 | 219 | ## [1.0.0] - 2018-12-16 220 | 221 | :tada: I'm proud to announce that version 1.0 has landed. :tada: 222 | 223 | No changes since the last beta release, but if you are upgrading from a 0.x 224 | release, please note that the polyfill for the 225 | [experimental support](https://github.com/vuejs/vue/pull/7765) for binding 226 | scopedSlots was removed. See 227 | [Installation](https://github.com/rhwilr/vue-nestable#installation) for details 228 | on how to import the component. 229 | 230 | 231 | ## [1.0.0-beta.2] - 2018-12-15 232 | 233 | ### Added 234 | - You can now access the `index` of the item in the scoped-slot. 235 | - The components `VueNestable` and `VueNestableHandle` are exposed as named exports. 236 | 237 | ### Changed 238 | - Renamed component names to PascalCase. 239 | 240 | 241 | ## [1.0.0-beta.1] - 2018-12-07 242 | 243 | ### Fixed 244 | - `keyProp` was documented but never implemented. You can now set the `keyProp` 245 | that is used to identifie the item. 246 | 247 | 248 | ## [1.0.0-beta.0] - 2018-12-04 249 | 250 | :tada: We are approaching the first official release of vue-nestable. Check out 251 | this beta and please report any bugs you may encounter. 252 | 253 | ### Changed 254 | - Switched from binding scopedSlots to useing a template loop with slots, 255 | [#2](https://github.com/rhwilr/vue-nestable/pull/2) (by 256 | [@pbastowski](https://github.com/pbastowski)) 257 | 258 | ### Removed 259 | - The polyfill for the [experimental support](https://github.com/vuejs/vue/pull/7765) 260 | for binding scopedSlots was removed. 261 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Artem Stepanenko 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue3-nestable 2 | 3 | Drag & drop hierarchical list made as a vue component. 4 | 5 | [![NPM Version][npm-image]][npm-url] 6 | 7 | [npm-image]: https://img.shields.io/npm/v/vue3-nestable.svg?style=flat-square 8 | [npm-url]: https://www.npmjs.com/package/vue3-nestable 9 | 10 | ## Vue 3 support 🥳 11 | > This package is currently compatible with Vue 3 12 | 13 | 14 |
15 | 16 | 17 | ## Goals 18 | - A simple vue component to create a draggable list to customizable items 19 | - Reorder items by dragging them above another item 20 | - Intuitively nest items by dragging right 21 | - Fully customizable, ships with no CSS 22 | - Everything is configurable: item identifier, max nesting level, threshold 23 | for nesting 24 | 25 | 26 | ## Table of contents 27 | * [Installation](#installation) 28 | * [Usage](#usage) 29 | * [Example](#example) 30 | * [Styling](#styling) 31 | * [Props](#props) 32 | * [Slots](#slots) 33 | * [Events](#events) 34 | * [Hooks](#hooks) 35 | 36 | 37 | ## Installation 38 | 39 | Install the plugin: 40 | 41 | ```sh 42 | npm install --save vue3-nestable 43 | yarn add vue3-nestable 44 | ``` 45 | 46 | You can also import the components on-demand, if you wish to do so: 47 | ```js 48 | import { VueNestable, VueNestableHandle } from 'vue3-nestable' 49 | 50 | export default { 51 | components: { 52 | VueNestable, 53 | VueNestableHandle 54 | } 55 | ... 56 | } 57 | ``` 58 | 59 | 60 | ## Example 61 | 62 | You only need two components: `vue-nestable` which renders the list and 63 | `vue-nestable-handle` which indicates the area the user can drag the item by. 64 | 65 | **Important Note:** Each item must have a unique `id` property and it must be a 66 | valid css class name. It can not contain a `:`, `,`, `.`, `;` or other special 67 | characters that are invalid in a css class name. 68 | 69 | ```html 70 | 86 | 87 | 128 | ``` 129 | 130 | 131 | ## Styling 132 | 133 | By default, vue3-nestable comes without any styling. Which means you can 134 | customize the appearance completely to your needs. 135 | 136 | 137 | ## Props 138 | 139 | The following props can be passed to the `` Component: 140 | 141 | | Property | Type | Default | Description | 142 | | :----------- | :------------------ | :------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | 143 | | value | Array | [ ] | Array of objects to be used in the list. **Important:** Each item must have a unique key by which it can be identified. By default the key is assumed to be named `id` but you can change it by setting the `keyProp` property. | 144 | | threshold | Number | 30 | Amount of pixels by which the mouse must be move horizontally before increasing/decreasing level (nesting) of current element. | 145 | | maxDepth | Number | 10 | Maximum available level of nesting. Setting this to 0 will prevent dragging altogether. | 146 | | group | String or Number | random String | Different group numbers may be passed if you have more than one nestable component on a page and want some extra styles for portal instances. | 147 | | keyProp | String *(Optional)* | 'id' | Name of the property that uniquely identifies an item. | 148 | | childrenProp | String *(Optional)* | 'children' | Name of the property that holds an array of children. | 149 | | class | String *(Optional)* | null | Name of the property for classes to add to the item. | 150 | | hooks | Object *(Optional)* | {} | Allows you to register hooks that fire whenever vue-nestable performs some action | 151 | | rtl | Boolean *(Optional)* | false | Add rtl support to vue-nestable | 152 | 153 | 154 | ## Slots 155 | 156 | The `` Component has two slots that can be used to render items and 157 | a placeholder. 158 | 159 | | Slot Name | Props | Description | 160 | | :---------- | :------------------------- | :------------------------------------------------------------------------------------------------------------ | 161 | | default | `item`, `index`, `isChild` | This slot is used to render the items in the list, use the scoped-slot property `item` to render the element. | 162 | | placeholder | | Lets you define a custom template that is used when no elements are in the list | 163 | 164 | 165 | ## Events 166 | 167 | Events are triggered when an item was moved or when a drag operation was 168 | completed. When you use `v-model` to bind your data, the `@input` event will 169 | automatically be handled. 170 | 171 | | Event | Parameters | Description | 172 | | :----- | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ | 173 | | input | `value` | triggered whenever the list changes | 174 | | change | `value`, `options` | triggered when the user dropped the item. `options` is passed as the second parameter in the event and contains the following properties: `{ items, pathTo }` | 175 | 176 | 177 | ## Hooks 178 | 179 | Hooks allow you to get finer controll over which items can be moved or take 180 | action when a specific item is moved. 181 | 182 | Hooks are passed as an Object to the `:hooks` prop. The object defines a key 183 | with the hook name and a function that will be called when the hook fires. 184 | 185 | ```js 186 | { 187 | 'beforeMove': this.myHookFunction 188 | } 189 | ``` 190 | 191 | 192 | | Hook Name | Parameters | Description | 193 | | :------------ | :------------------------------- | :------------------------------------------------------------------------------------------- | 194 | | beforeMove | `{ dragItem, pathFrom, pathTo }` | Fires when an item is about to be moved. Returning `false` will cancel that action. | 195 | -------------------------------------------------------------------------------- /example/App.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 58 | 59 | -------------------------------------------------------------------------------- /example/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | 3 | import App from './App.vue' 4 | 5 | createApp(App).mount('#app') 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue3-nestable", 3 | "version": "3.0.3", 4 | "description": "A simple drag & drop hierarchical list made as a vue component.", 5 | "author": "Artem Stepanenko ", 6 | "homepage": "https://github.com/stepanenko3/vue3-nestable.git", 7 | "license": "MIT", 8 | "module": "dist/index.umd.js", 9 | "main": "dist/index.umd.js", 10 | "unpkg": "dist/index.umd.js", 11 | "jsdelivr": "dist/index.umd.js", 12 | "keywords": [ 13 | "vue", 14 | "vue 3", 15 | "vue-nestable", 16 | "vue3-nestable", 17 | "vue nestable", 18 | "vue 3 nestable", 19 | "vue tree", 20 | "vue 3 tree" 21 | ], 22 | "scripts": { 23 | "dev": "vite", 24 | "build": "vite build", 25 | "preview": "vite preview --port 5050", 26 | "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" 27 | }, 28 | "dependencies": { 29 | "immutability-helper": "^3.1.1", 30 | "path": "^0.12.7", 31 | "vue": "^3.2.31" 32 | }, 33 | "devDependencies": { 34 | "@vitejs/plugin-vue": "^2.3.1", 35 | "eslint": "^8.5.0", 36 | "eslint-plugin-vue": "^8.2.0", 37 | "vite": "^2.9.1" 38 | }, 39 | "browserslist": [ 40 | "> 1%", 41 | "last 2 versions", 42 | "not ie < 11" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /src/NestableItem.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 179 | -------------------------------------------------------------------------------- /src/Placeholder.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 51 | -------------------------------------------------------------------------------- /src/VueNestable.vue: -------------------------------------------------------------------------------- 1 | 67 | 68 | 521 | -------------------------------------------------------------------------------- /src/VueNestableHandle.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 46 | -------------------------------------------------------------------------------- /src/calls-hooks.js: -------------------------------------------------------------------------------- 1 | export default { 2 | methods: { 3 | hook (name, params) { 4 | // If the hook has not been registered, 5 | // we consider the hook as successful 6 | if (!this.hooks[name]) return true 7 | 8 | const result = this.hooks[name](params) 9 | 10 | // If the hook does not return anything, 11 | // we also consider it true 12 | return result || result === undefined 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/NestableItem.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | -------------------------------------------------------------------------------- /src/components/Placeholder.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/VueNestable.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | -------------------------------------------------------------------------------- /src/components/VueNestableHandle.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | -------------------------------------------------------------------------------- /src/groups-observer.js: -------------------------------------------------------------------------------- 1 | const store = {} 2 | 3 | export default { 4 | methods: { 5 | registerNestable (nestable) { 6 | const storeGroup = this._getByGroup(nestable.group) 7 | 8 | storeGroup.onDragStartListeners.push(nestable.onDragStart) 9 | storeGroup.onMouseEnterListeners.push(nestable.onMouseEnter) 10 | storeGroup.onMouseMoveListeners.push(nestable.onMouseMove) 11 | }, 12 | 13 | notifyDragStart (group, event, item) { 14 | const storeGroup = this._getByGroup(group) 15 | 16 | for (const listener of storeGroup.onDragStartListeners) { 17 | listener(event, item) 18 | } 19 | }, 20 | 21 | notifyMouseEnter (group, event, eventList, item) { 22 | const storeGroup = this._getByGroup(group) 23 | 24 | for (const listener of storeGroup.onMouseEnterListeners) { 25 | listener(event, eventList, item) 26 | } 27 | }, 28 | 29 | notifyMouseMove (group, event) { 30 | const storeGroup = this._getByGroup(group) 31 | 32 | for (const listener of storeGroup.onMouseMoveListeners) { 33 | listener(event) 34 | } 35 | }, 36 | 37 | _getByGroup (group) { 38 | // the group already exists, return the reference 39 | if (store[group]) { 40 | return store[group] 41 | } 42 | 43 | // otherwise create a new object for the group 44 | store[group] = { 45 | onDragStartListeners: [], 46 | onMouseEnterListeners: [], 47 | onMouseMoveListeners: [], 48 | onDragStart: [], 49 | dragItem: null 50 | } 51 | 52 | return store[group] 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import VueNestable from './VueNestable.vue' 2 | import VueNestableHandle from './VueNestableHandle.vue' 3 | 4 | // export named components 5 | export { 6 | VueNestable, 7 | VueNestableHandle 8 | } 9 | 10 | // export vue component installer 11 | export default { 12 | install: function (Vue, options) { 13 | Vue.component('VueNestable', VueNestable) 14 | Vue.component('VueNestableHandle', VueNestableHandle) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import VueNestable from './components/VueNestable.vue' 2 | import VueNestableHandle from './components/VueNestableHandle.vue' 3 | 4 | // export named components 5 | export { 6 | VueNestable, 7 | VueNestableHandle 8 | } 9 | 10 | 11 | // export vue component installer 12 | export default { 13 | install: function (Vue) { 14 | Vue.component('VueNestable', VueNestable) 15 | Vue.component('VueNestableHandle', VueNestableHandle) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/mixins/calls-hooks.js: -------------------------------------------------------------------------------- 1 | export default { 2 | methods: { 3 | hook(name, params) { 4 | // If the hook has not been registered, 5 | // we consider the hook as successful 6 | if (!this.hooks[name]) return true 7 | 8 | const result = this.hooks[name](params) 9 | 10 | // If the hook does not return anything, 11 | // we also consider it true 12 | return result || result === undefined 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/mixins/groups-observer.js: -------------------------------------------------------------------------------- 1 | const store = {} 2 | 3 | export default { 4 | methods: { 5 | registerNestable(nestable) { 6 | const storeGroup = this._getByGroup(nestable.group) 7 | 8 | storeGroup.onDragStartListeners.push(nestable.onDragStart) 9 | storeGroup.onMouseEnterListeners.push(nestable.onMouseEnter) 10 | storeGroup.onMouseMoveListeners.push(nestable.onMouseMove) 11 | }, 12 | 13 | notifyDragStart(group, event, item) { 14 | const storeGroup = this._getByGroup(group) 15 | 16 | for (const listener of storeGroup.onDragStartListeners) { 17 | listener(event, item) 18 | } 19 | }, 20 | 21 | notifyMouseEnter(group, event, eventList, item) { 22 | const storeGroup = this._getByGroup(group) 23 | 24 | for (const listener of storeGroup.onMouseEnterListeners) { 25 | listener(event, eventList, item) 26 | } 27 | }, 28 | 29 | notifyMouseMove(group, event) { 30 | const storeGroup = this._getByGroup(group) 31 | 32 | for (const listener of storeGroup.onMouseMoveListeners) { 33 | listener(event) 34 | } 35 | }, 36 | 37 | _getByGroup(group) { 38 | // the group already exists, return the reference 39 | if (store[group]) { 40 | return store[group] 41 | } 42 | 43 | // otherwise create a new object for the group 44 | store[group] = { 45 | onDragStartListeners: [], 46 | onMouseEnterListeners: [], 47 | onMouseMoveListeners: [], 48 | onDragStart: [], 49 | dragItem: null 50 | } 51 | 52 | return store[group] 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/mixins/nestable-helpers.js: -------------------------------------------------------------------------------- 1 | export default { 2 | methods: { 3 | // –––––––––––––––––––––––––––––––––––– 4 | // Getter methods 5 | // –––––––––––––––––––––––––––––––––––– 6 | getPathById(id, items = this.value) { 7 | let path = [] 8 | 9 | items.every((item, i) => { 10 | if (item[this.keyProp] === id) { 11 | path.push(i) 12 | } else if (item[this.childrenProp]) { 13 | const childrenPath = this.getPathById(id, item[this.childrenProp]) 14 | 15 | if (childrenPath.length) { 16 | path = path.concat(i).concat(childrenPath) 17 | } 18 | } 19 | 20 | return path.length === 0 21 | }) 22 | 23 | return path 24 | }, 25 | 26 | getItemByPath(path, items = this.value) { 27 | let item = null 28 | 29 | path.forEach(index => { 30 | const list = item && item[this.childrenProp] ? item[this.childrenProp] : items 31 | item = list[index] 32 | }) 33 | 34 | return item 35 | }, 36 | 37 | getItemDepth(item) { 38 | let level = 1 39 | 40 | if (item[this.childrenProp] && item[this.childrenProp].length > 0) { 41 | const childrenDepths = item[this.childrenProp].map(this.getItemDepth) 42 | level += Math.max(...childrenDepths) 43 | } 44 | 45 | return level 46 | }, 47 | 48 | getSplicePath(path, options = {}) { 49 | const splicePath = {} 50 | const numToRemove = options.numToRemove || 0 51 | const itemsToInsert = options.itemsToInsert || [] 52 | const lastIndex = path.length - 1 53 | let currentPath = splicePath 54 | 55 | path.forEach((index, i) => { 56 | if (i === lastIndex) { 57 | currentPath.$splice = [[index, numToRemove, ...itemsToInsert]] 58 | } else { 59 | const nextPath = {} 60 | currentPath[index] = { [options.childrenProp]: nextPath } 61 | currentPath = nextPath 62 | } 63 | }) 64 | 65 | return splicePath 66 | }, 67 | 68 | getRealNextPath(prevPath, nextPath) { 69 | const ppLastIndex = prevPath.length - 1 70 | const npLastIndex = nextPath.length - 1 71 | 72 | if (prevPath.length < nextPath.length) { 73 | // move into deep 74 | let wasShifted = false 75 | 76 | return nextPath.map((nextIndex, i) => { 77 | if (wasShifted) { 78 | return i === npLastIndex 79 | ? nextIndex + 1 80 | : nextIndex 81 | } 82 | 83 | if (typeof prevPath[i] !== 'number') { 84 | return nextIndex 85 | } 86 | 87 | if (nextPath[i] > prevPath[i] && i === ppLastIndex) { 88 | wasShifted = true 89 | return nextIndex - 1 90 | } 91 | 92 | return nextIndex 93 | }) 94 | } else if (prevPath.length === nextPath.length) { 95 | // if move bottom + move to item with children => make it a first child instead of swap 96 | if (nextPath[npLastIndex] > prevPath[npLastIndex]) { 97 | const target = this.getItemByPath(nextPath) 98 | 99 | if (target[this.childrenProp] && target[this.childrenProp].length && !this.isCollapsed(target)) { 100 | return nextPath 101 | .slice(0, -1) 102 | .concat(nextPath[npLastIndex] - 1) 103 | .concat(0) 104 | } 105 | } 106 | } 107 | 108 | return nextPath 109 | } 110 | 111 | // getItemOptions() { 112 | // const { renderItem, renderCollapseIcon, handler, childrenProp } = this.props; 113 | // const { dragItem } = this.state; 114 | 115 | // return { 116 | // dragItem, 117 | // childrenProp, 118 | // renderItem, 119 | // renderCollapseIcon, 120 | // handler, 121 | 122 | // onDragStart: this.onDragStart, 123 | // onMouseEnter: this.onMouseEnter, 124 | // isCollapsed: this.isCollapsed, 125 | // onToggleCollapse: this.onToggleCollapse 126 | // }; 127 | // } 128 | 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /src/nestable-helpers.js: -------------------------------------------------------------------------------- 1 | export default { 2 | methods: { 3 | // –––––––––––––––––––––––––––––––––––– 4 | // Getter methods 5 | // –––––––––––––––––––––––––––––––––––– 6 | getPathById (id, items = this.value) { 7 | let path = [] 8 | 9 | items.every((item, i) => { 10 | if (item[this.keyProp] === id) { 11 | path.push(i) 12 | } else if (item[this.childrenProp]) { 13 | const childrenPath = this.getPathById(id, item[this.childrenProp]) 14 | 15 | if (childrenPath.length) { 16 | path = path.concat(i).concat(childrenPath) 17 | } 18 | } 19 | 20 | return path.length === 0 21 | }) 22 | 23 | return path 24 | }, 25 | 26 | getItemByPath (path, items = this.value) { 27 | let item = null 28 | 29 | path.forEach(index => { 30 | const list = item && item[this.childrenProp] ? item[this.childrenProp] : items 31 | item = list[index] 32 | }) 33 | 34 | return item 35 | }, 36 | 37 | getItemDepth (item) { 38 | let level = 1 39 | 40 | if (item[this.childrenProp] && item[this.childrenProp].length > 0) { 41 | const childrenDepths = item[this.childrenProp].map(this.getItemDepth) 42 | level += Math.max(...childrenDepths) 43 | } 44 | 45 | return level 46 | }, 47 | 48 | getSplicePath (path, options = {}) { 49 | const splicePath = {} 50 | const numToRemove = options.numToRemove || 0 51 | const itemsToInsert = options.itemsToInsert || [] 52 | const lastIndex = path.length - 1 53 | let currentPath = splicePath 54 | 55 | path.forEach((index, i) => { 56 | if (i === lastIndex) { 57 | currentPath.$splice = [[index, numToRemove, ...itemsToInsert]] 58 | } else { 59 | const nextPath = {} 60 | currentPath[index] = { [options.childrenProp]: nextPath } 61 | currentPath = nextPath 62 | } 63 | }) 64 | 65 | return splicePath 66 | }, 67 | 68 | getRealNextPath (prevPath, nextPath) { 69 | const ppLastIndex = prevPath.length - 1 70 | const npLastIndex = nextPath.length - 1 71 | 72 | if (prevPath.length < nextPath.length) { 73 | // move into deep 74 | let wasShifted = false 75 | 76 | return nextPath.map((nextIndex, i) => { 77 | if (wasShifted) { 78 | return i === npLastIndex 79 | ? nextIndex + 1 80 | : nextIndex 81 | } 82 | 83 | if (typeof prevPath[i] !== 'number') { 84 | return nextIndex 85 | } 86 | 87 | if (nextPath[i] > prevPath[i] && i === ppLastIndex) { 88 | wasShifted = true 89 | return nextIndex - 1 90 | } 91 | 92 | return nextIndex 93 | }) 94 | } else if (prevPath.length === nextPath.length) { 95 | // if move bottom + move to item with children => make it a first child instead of swap 96 | if (nextPath[npLastIndex] > prevPath[npLastIndex]) { 97 | const target = this.getItemByPath(nextPath) 98 | 99 | if (target[this.childrenProp] && target[this.childrenProp].length && !this.isCollapsed(target)) { 100 | return nextPath 101 | .slice(0, -1) 102 | .concat(nextPath[npLastIndex] - 1) 103 | .concat(0) 104 | } 105 | } 106 | } 107 | 108 | return nextPath 109 | } 110 | 111 | // getItemOptions() { 112 | // const { renderItem, renderCollapseIcon, handler, childrenProp } = this.props; 113 | // const { dragItem } = this.state; 114 | 115 | // return { 116 | // dragItem, 117 | // childrenProp, 118 | // renderItem, 119 | // renderCollapseIcon, 120 | // handler, 121 | 122 | // onDragStart: this.onDragStart, 123 | // onMouseEnter: this.onMouseEnter, 124 | // isCollapsed: this.isCollapsed, 125 | // onToggleCollapse: this.onToggleCollapse 126 | // }; 127 | // } 128 | 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | export const closest = (target, selector) => { 2 | return target.closest(selector) 3 | } 4 | 5 | export const getOffsetRect = (elem) => { 6 | var box = elem.getBoundingClientRect() 7 | 8 | return { top: Math.round(box.top), left: Math.round(box.left) } 9 | } 10 | 11 | export const getTransformProps = (x, y) => { 12 | return { 13 | transform: 'translate(' + x + 'px, ' + y + 'px)' 14 | } 15 | } 16 | 17 | export const listWithChildren = (list, childrenProp) => { 18 | return list.map(item => { 19 | return { 20 | ...item, 21 | [childrenProp]: item[childrenProp] 22 | ? listWithChildren(item[childrenProp], childrenProp) 23 | : [] 24 | } 25 | }) 26 | } 27 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | import * as path from 'path'; 6 | 7 | // https://vitejs.dev/config/ 8 | export default defineConfig({ 9 | plugins: [vue()], 10 | resolve: { 11 | alias: { 12 | '@': fileURLToPath(new URL('./src', import.meta.url)) 13 | } 14 | }, 15 | build: { 16 | lib: { 17 | entry: path.resolve(__dirname, 'src/main.js'), 18 | name: 'VueNestable', 19 | fileName: (format) => `index.${format}.js` 20 | }, 21 | rollupOptions: { 22 | // make sure to externalize deps that shouldn't be bundled 23 | // into your library 24 | external: ['vue'], 25 | output: { 26 | // Provide global variables to use in the UMD build 27 | // for externalized deps 28 | globals: { 29 | vue: 'Vue' 30 | } 31 | } 32 | } 33 | } 34 | }) 35 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | const VueLoaderPlugin = require('vue-loader/lib/plugin') 3 | const HtmlWebpackPlugin = require('html-webpack-plugin') 4 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 5 | 6 | module.exports = { 7 | entry: './example/main.js', 8 | output: { 9 | path: path.resolve(__dirname, './build') 10 | }, 11 | resolve: { 12 | extensions: ['.js', '.json', '.vue'] 13 | }, 14 | module: { 15 | rules: [ 16 | { 17 | test: /\.vue$/, 18 | loader: 'vue-loader' 19 | }, 20 | { 21 | test: /\.js$/, 22 | exclude: /node_modules/, 23 | loader: 'babel-loader' 24 | }, 25 | { 26 | test: /\.css$/, 27 | use: [ 28 | 'vue-style-loader', 29 | 'css-loader' 30 | ] 31 | }, 32 | { 33 | test: /\.(png|jpg|gif|svg)$/, 34 | loader: 'file-loader', 35 | options: { 36 | name: 'img/[name].[hash:8].[ext]' 37 | } 38 | } 39 | ] 40 | }, 41 | plugins: [ 42 | new VueLoaderPlugin(), 43 | new HtmlWebpackPlugin({ 44 | template: 'index.html', 45 | title: process.env.npm_package_description 46 | }) 47 | ], 48 | optimization: { 49 | minimizer: [ 50 | new UglifyJsPlugin({ 51 | cache: true, 52 | parallel: true, 53 | uglifyOptions: { 54 | output: { 55 | comments: false 56 | } 57 | } 58 | }) 59 | ] 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/parser@^7.16.4": 6 | version "7.17.9" 7 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" 8 | integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== 9 | 10 | "@eslint/eslintrc@^1.2.1": 11 | version "1.2.1" 12 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" 13 | integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== 14 | dependencies: 15 | ajv "^6.12.4" 16 | debug "^4.3.2" 17 | espree "^9.3.1" 18 | globals "^13.9.0" 19 | ignore "^5.2.0" 20 | import-fresh "^3.2.1" 21 | js-yaml "^4.1.0" 22 | minimatch "^3.0.4" 23 | strip-json-comments "^3.1.1" 24 | 25 | "@humanwhocodes/config-array@^0.9.2": 26 | version "0.9.5" 27 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" 28 | integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== 29 | dependencies: 30 | "@humanwhocodes/object-schema" "^1.2.1" 31 | debug "^4.1.1" 32 | minimatch "^3.0.4" 33 | 34 | "@humanwhocodes/object-schema@^1.2.1": 35 | version "1.2.1" 36 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 37 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 38 | 39 | "@vitejs/plugin-vue@^2.3.1": 40 | version "2.3.1" 41 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-2.3.1.tgz#5f286b8d3515381c6d5c8fa8eee5e6335f727e14" 42 | integrity sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ== 43 | 44 | "@vue/compiler-core@3.2.33": 45 | version "3.2.33" 46 | resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.33.tgz#e915d59cce85898f5c5cfebe4c09e539278c3d59" 47 | integrity sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw== 48 | dependencies: 49 | "@babel/parser" "^7.16.4" 50 | "@vue/shared" "3.2.33" 51 | estree-walker "^2.0.2" 52 | source-map "^0.6.1" 53 | 54 | "@vue/compiler-dom@3.2.33": 55 | version "3.2.33" 56 | resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.33.tgz#6db84296f949f18e5d3e7fd5e80f943dbed7d5ec" 57 | integrity sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ== 58 | dependencies: 59 | "@vue/compiler-core" "3.2.33" 60 | "@vue/shared" "3.2.33" 61 | 62 | "@vue/compiler-sfc@3.2.33": 63 | version "3.2.33" 64 | resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.33.tgz#7ce01dc947a8b76c099811dc6ca58494d4dc773d" 65 | integrity sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q== 66 | dependencies: 67 | "@babel/parser" "^7.16.4" 68 | "@vue/compiler-core" "3.2.33" 69 | "@vue/compiler-dom" "3.2.33" 70 | "@vue/compiler-ssr" "3.2.33" 71 | "@vue/reactivity-transform" "3.2.33" 72 | "@vue/shared" "3.2.33" 73 | estree-walker "^2.0.2" 74 | magic-string "^0.25.7" 75 | postcss "^8.1.10" 76 | source-map "^0.6.1" 77 | 78 | "@vue/compiler-ssr@3.2.33": 79 | version "3.2.33" 80 | resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.33.tgz#3e820267e4eea48fde9519f006dedca3f5e42e71" 81 | integrity sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ== 82 | dependencies: 83 | "@vue/compiler-dom" "3.2.33" 84 | "@vue/shared" "3.2.33" 85 | 86 | "@vue/reactivity-transform@3.2.33": 87 | version "3.2.33" 88 | resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.33.tgz#286063f44ca56150ae9b52f8346a26e5913fa699" 89 | integrity sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw== 90 | dependencies: 91 | "@babel/parser" "^7.16.4" 92 | "@vue/compiler-core" "3.2.33" 93 | "@vue/shared" "3.2.33" 94 | estree-walker "^2.0.2" 95 | magic-string "^0.25.7" 96 | 97 | "@vue/reactivity@3.2.33": 98 | version "3.2.33" 99 | resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.33.tgz#c84eedb5225138dbfc2472864c151d3efbb4b673" 100 | integrity sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ== 101 | dependencies: 102 | "@vue/shared" "3.2.33" 103 | 104 | "@vue/runtime-core@3.2.33": 105 | version "3.2.33" 106 | resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.33.tgz#2df8907c85c37c3419fbd1bdf1a2df097fa40df2" 107 | integrity sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw== 108 | dependencies: 109 | "@vue/reactivity" "3.2.33" 110 | "@vue/shared" "3.2.33" 111 | 112 | "@vue/runtime-dom@3.2.33": 113 | version "3.2.33" 114 | resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.33.tgz#123b8969247029ea0d9c1983676d4706a962d848" 115 | integrity sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw== 116 | dependencies: 117 | "@vue/runtime-core" "3.2.33" 118 | "@vue/shared" "3.2.33" 119 | csstype "^2.6.8" 120 | 121 | "@vue/server-renderer@3.2.33": 122 | version "3.2.33" 123 | resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.33.tgz#4b45d6d2ae10ea4e3d2cf8e676804cf60f331979" 124 | integrity sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew== 125 | dependencies: 126 | "@vue/compiler-ssr" "3.2.33" 127 | "@vue/shared" "3.2.33" 128 | 129 | "@vue/shared@3.2.33": 130 | version "3.2.33" 131 | resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.33.tgz#69a8c99ceb37c1b031d5cc4aec2ff1dc77e1161e" 132 | integrity sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg== 133 | 134 | acorn-jsx@^5.3.1: 135 | version "5.3.2" 136 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 137 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 138 | 139 | acorn@^8.7.0: 140 | version "8.7.0" 141 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" 142 | integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== 143 | 144 | ajv@^6.10.0, ajv@^6.12.4: 145 | version "6.12.6" 146 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 147 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 148 | dependencies: 149 | fast-deep-equal "^3.1.1" 150 | fast-json-stable-stringify "^2.0.0" 151 | json-schema-traverse "^0.4.1" 152 | uri-js "^4.2.2" 153 | 154 | ansi-regex@^5.0.1: 155 | version "5.0.1" 156 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 157 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 158 | 159 | ansi-styles@^4.1.0: 160 | version "4.3.0" 161 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 162 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 163 | dependencies: 164 | color-convert "^2.0.1" 165 | 166 | argparse@^2.0.1: 167 | version "2.0.1" 168 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 169 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 170 | 171 | balanced-match@^1.0.0: 172 | version "1.0.2" 173 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 174 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 175 | 176 | brace-expansion@^1.1.7: 177 | version "1.1.11" 178 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 179 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 180 | dependencies: 181 | balanced-match "^1.0.0" 182 | concat-map "0.0.1" 183 | 184 | callsites@^3.0.0: 185 | version "3.1.0" 186 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 187 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 188 | 189 | chalk@^4.0.0: 190 | version "4.1.2" 191 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 192 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 193 | dependencies: 194 | ansi-styles "^4.1.0" 195 | supports-color "^7.1.0" 196 | 197 | color-convert@^2.0.1: 198 | version "2.0.1" 199 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 200 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 201 | dependencies: 202 | color-name "~1.1.4" 203 | 204 | color-name@~1.1.4: 205 | version "1.1.4" 206 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 207 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 208 | 209 | concat-map@0.0.1: 210 | version "0.0.1" 211 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 212 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 213 | 214 | cross-spawn@^7.0.2: 215 | version "7.0.3" 216 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 217 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 218 | dependencies: 219 | path-key "^3.1.0" 220 | shebang-command "^2.0.0" 221 | which "^2.0.1" 222 | 223 | csstype@^2.6.8: 224 | version "2.6.20" 225 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" 226 | integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== 227 | 228 | debug@^4.1.1, debug@^4.3.2: 229 | version "4.3.4" 230 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 231 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 232 | dependencies: 233 | ms "2.1.2" 234 | 235 | deep-is@^0.1.3: 236 | version "0.1.4" 237 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 238 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 239 | 240 | doctrine@^3.0.0: 241 | version "3.0.0" 242 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 243 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 244 | dependencies: 245 | esutils "^2.0.2" 246 | 247 | esbuild-android-64@0.14.36: 248 | version "0.14.36" 249 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.36.tgz#fc5f95ce78c8c3d790fa16bc71bd904f2bb42aa1" 250 | integrity sha512-jwpBhF1jmo0tVCYC/ORzVN+hyVcNZUWuozGcLHfod0RJCedTDTvR4nwlTXdx1gtncDqjk33itjO+27OZHbiavw== 251 | 252 | esbuild-android-arm64@0.14.36: 253 | version "0.14.36" 254 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.36.tgz#44356fbb9f8de82a5cdf11849e011dfb3ad0a8a8" 255 | integrity sha512-/hYkyFe7x7Yapmfv4X/tBmyKnggUmdQmlvZ8ZlBnV4+PjisrEhAvC3yWpURuD9XoB8Wa1d5dGkTsF53pIvpjsg== 256 | 257 | esbuild-darwin-64@0.14.36: 258 | version "0.14.36" 259 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.36.tgz#3d9324b21489c70141665c2e740d6e84f16f725d" 260 | integrity sha512-kkl6qmV0dTpyIMKagluzYqlc1vO0ecgpviK/7jwPbRDEv5fejRTaBBEE2KxEQbTHcLhiiDbhG7d5UybZWo/1zQ== 261 | 262 | esbuild-darwin-arm64@0.14.36: 263 | version "0.14.36" 264 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.36.tgz#2a8040c2e465131e5281034f3c72405e643cb7b2" 265 | integrity sha512-q8fY4r2Sx6P0Pr3VUm//eFYKVk07C5MHcEinU1BjyFnuYz4IxR/03uBbDwluR6ILIHnZTE7AkTUWIdidRi1Jjw== 266 | 267 | esbuild-freebsd-64@0.14.36: 268 | version "0.14.36" 269 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.36.tgz#d82c387b4d01fe9e8631f97d41eb54f2dbeb68a3" 270 | integrity sha512-Hn8AYuxXXRptybPqoMkga4HRFE7/XmhtlQjXFHoAIhKUPPMeJH35GYEUWGbjteai9FLFvBAjEAlwEtSGxnqWww== 271 | 272 | esbuild-freebsd-arm64@0.14.36: 273 | version "0.14.36" 274 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.36.tgz#e8ce2e6c697da6c7ecd0cc0ac821d47c5ab68529" 275 | integrity sha512-S3C0attylLLRiCcHiJd036eDEMOY32+h8P+jJ3kTcfhJANNjP0TNBNL30TZmEdOSx/820HJFgRrqpNAvTbjnDA== 276 | 277 | esbuild-linux-32@0.14.36: 278 | version "0.14.36" 279 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.36.tgz#a4a261e2af91986ea62451f2db712a556cb38a15" 280 | integrity sha512-Eh9OkyTrEZn9WGO4xkI3OPPpUX7p/3QYvdG0lL4rfr73Ap2HAr6D9lP59VMF64Ex01LhHSXwIsFG/8AQjh6eNw== 281 | 282 | esbuild-linux-64@0.14.36: 283 | version "0.14.36" 284 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.36.tgz#4a9500f9197e2c8fcb884a511d2c9d4c2debde72" 285 | integrity sha512-vFVFS5ve7PuwlfgoWNyRccGDi2QTNkQo/2k5U5ttVD0jRFaMlc8UQee708fOZA6zTCDy5RWsT5MJw3sl2X6KDg== 286 | 287 | esbuild-linux-arm64@0.14.36: 288 | version "0.14.36" 289 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.36.tgz#c91c21e25b315464bd7da867365dd1dae14ca176" 290 | integrity sha512-24Vq1M7FdpSmaTYuu1w0Hdhiqkbto1I5Pjyi+4Cdw5fJKGlwQuw+hWynTcRI/cOZxBcBpP21gND7W27gHAiftw== 291 | 292 | esbuild-linux-arm@0.14.36: 293 | version "0.14.36" 294 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.36.tgz#90e23bca2e6e549affbbe994f80ba3bb6c4d934a" 295 | integrity sha512-NhgU4n+NCsYgt7Hy61PCquEz5aevI6VjQvxwBxtxrooXsxt5b2xtOUXYZe04JxqQo+XZk3d1gcr7pbV9MAQ/Lg== 296 | 297 | esbuild-linux-mips64le@0.14.36: 298 | version "0.14.36" 299 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.36.tgz#40e11afb08353ff24709fc89e4db0f866bc131d2" 300 | integrity sha512-hZUeTXvppJN+5rEz2EjsOFM9F1bZt7/d2FUM1lmQo//rXh1RTFYzhC0txn7WV0/jCC7SvrGRaRz0NMsRPf8SIA== 301 | 302 | esbuild-linux-ppc64le@0.14.36: 303 | version "0.14.36" 304 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.36.tgz#9e8a588c513d06cc3859f9dcc52e5fdfce8a1a5e" 305 | integrity sha512-1Bg3QgzZjO+QtPhP9VeIBhAduHEc2kzU43MzBnMwpLSZ890azr4/A9Dganun8nsqD/1TBcqhId0z4mFDO8FAvg== 306 | 307 | esbuild-linux-riscv64@0.14.36: 308 | version "0.14.36" 309 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.36.tgz#e578c09b23b3b97652e60e3692bfda628b541f06" 310 | integrity sha512-dOE5pt3cOdqEhaufDRzNCHf5BSwxgygVak9UR7PH7KPVHwSTDAZHDoEjblxLqjJYpc5XaU9+gKJ9F8mp9r5I4A== 311 | 312 | esbuild-linux-s390x@0.14.36: 313 | version "0.14.36" 314 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.36.tgz#3c9dab40d0d69932ffded0fd7317bb403626c9bc" 315 | integrity sha512-g4FMdh//BBGTfVHjF6MO7Cz8gqRoDPzXWxRvWkJoGroKA18G9m0wddvPbEqcQf5Tbt2vSc1CIgag7cXwTmoTXg== 316 | 317 | esbuild-netbsd-64@0.14.36: 318 | version "0.14.36" 319 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.36.tgz#e27847f6d506218291619b8c1e121ecd97628494" 320 | integrity sha512-UB2bVImxkWk4vjnP62ehFNZ73lQY1xcnL5ZNYF3x0AG+j8HgdkNF05v67YJdCIuUJpBuTyCK8LORCYo9onSW+A== 321 | 322 | esbuild-openbsd-64@0.14.36: 323 | version "0.14.36" 324 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.36.tgz#c94c04c557fae516872a586eae67423da6d2fabb" 325 | integrity sha512-NvGB2Chf8GxuleXRGk8e9zD3aSdRO5kLt9coTQbCg7WMGXeX471sBgh4kSg8pjx0yTXRt0MlrUDnjVYnetyivg== 326 | 327 | esbuild-sunos-64@0.14.36: 328 | version "0.14.36" 329 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.36.tgz#9b79febc0df65a30f1c9bd63047d1675511bf99d" 330 | integrity sha512-VkUZS5ftTSjhRjuRLp+v78auMO3PZBXu6xl4ajomGenEm2/rGuWlhFSjB7YbBNErOchj51Jb2OK8lKAo8qdmsQ== 331 | 332 | esbuild-windows-32@0.14.36: 333 | version "0.14.36" 334 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.36.tgz#910d11936c8d2122ffdd3275e5b28d8a4e1240ec" 335 | integrity sha512-bIar+A6hdytJjZrDxfMBUSEHHLfx3ynoEZXx/39nxy86pX/w249WZm8Bm0dtOAByAf4Z6qV0LsnTIJHiIqbw0w== 336 | 337 | esbuild-windows-64@0.14.36: 338 | version "0.14.36" 339 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.36.tgz#21b4ce8b42a4efc63f4b58ec617f1302448aad26" 340 | integrity sha512-+p4MuRZekVChAeueT1Y9LGkxrT5x7YYJxYE8ZOTcEfeUUN43vktSn6hUNsvxzzATrSgq5QqRdllkVBxWZg7KqQ== 341 | 342 | esbuild-windows-arm64@0.14.36: 343 | version "0.14.36" 344 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.36.tgz#ba21546fecb7297667d0052d00150de22c044b24" 345 | integrity sha512-fBB4WlDqV1m18EF/aheGYQkQZHfPHiHJSBYzXIo8yKehek+0BtBwo/4PNwKGJ5T0YK0oc8pBKjgwPbzSrPLb+Q== 346 | 347 | esbuild@^0.14.27: 348 | version "0.14.36" 349 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.36.tgz#0023a73eab57886ac5605df16ee421e471a971b3" 350 | integrity sha512-HhFHPiRXGYOCRlrhpiVDYKcFJRdO0sBElZ668M4lh2ER0YgnkLxECuFe7uWCf23FrcLc59Pqr7dHkTqmRPDHmw== 351 | optionalDependencies: 352 | esbuild-android-64 "0.14.36" 353 | esbuild-android-arm64 "0.14.36" 354 | esbuild-darwin-64 "0.14.36" 355 | esbuild-darwin-arm64 "0.14.36" 356 | esbuild-freebsd-64 "0.14.36" 357 | esbuild-freebsd-arm64 "0.14.36" 358 | esbuild-linux-32 "0.14.36" 359 | esbuild-linux-64 "0.14.36" 360 | esbuild-linux-arm "0.14.36" 361 | esbuild-linux-arm64 "0.14.36" 362 | esbuild-linux-mips64le "0.14.36" 363 | esbuild-linux-ppc64le "0.14.36" 364 | esbuild-linux-riscv64 "0.14.36" 365 | esbuild-linux-s390x "0.14.36" 366 | esbuild-netbsd-64 "0.14.36" 367 | esbuild-openbsd-64 "0.14.36" 368 | esbuild-sunos-64 "0.14.36" 369 | esbuild-windows-32 "0.14.36" 370 | esbuild-windows-64 "0.14.36" 371 | esbuild-windows-arm64 "0.14.36" 372 | 373 | escape-string-regexp@^4.0.0: 374 | version "4.0.0" 375 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 376 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 377 | 378 | eslint-plugin-vue@^8.2.0: 379 | version "8.6.0" 380 | resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.6.0.tgz#fbdf0f13f8d208a4cba752bf54042661a1aec5c3" 381 | integrity sha512-abXiF2J18n/7ZPy9foSlJyouKf54IqpKlNvNmzhM93N0zs3QUxZG/oBd3tVPOJTKg7SlhBUtPxugpqzNbgGpQQ== 382 | dependencies: 383 | eslint-utils "^3.0.0" 384 | natural-compare "^1.4.0" 385 | semver "^7.3.5" 386 | vue-eslint-parser "^8.0.1" 387 | 388 | eslint-scope@^7.0.0, eslint-scope@^7.1.1: 389 | version "7.1.1" 390 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 391 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 392 | dependencies: 393 | esrecurse "^4.3.0" 394 | estraverse "^5.2.0" 395 | 396 | eslint-utils@^3.0.0: 397 | version "3.0.0" 398 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 399 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 400 | dependencies: 401 | eslint-visitor-keys "^2.0.0" 402 | 403 | eslint-visitor-keys@^2.0.0: 404 | version "2.1.0" 405 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 406 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 407 | 408 | eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0: 409 | version "3.3.0" 410 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 411 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 412 | 413 | eslint@^8.5.0: 414 | version "8.13.0" 415 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.13.0.tgz#6fcea43b6811e655410f5626cfcf328016badcd7" 416 | integrity sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ== 417 | dependencies: 418 | "@eslint/eslintrc" "^1.2.1" 419 | "@humanwhocodes/config-array" "^0.9.2" 420 | ajv "^6.10.0" 421 | chalk "^4.0.0" 422 | cross-spawn "^7.0.2" 423 | debug "^4.3.2" 424 | doctrine "^3.0.0" 425 | escape-string-regexp "^4.0.0" 426 | eslint-scope "^7.1.1" 427 | eslint-utils "^3.0.0" 428 | eslint-visitor-keys "^3.3.0" 429 | espree "^9.3.1" 430 | esquery "^1.4.0" 431 | esutils "^2.0.2" 432 | fast-deep-equal "^3.1.3" 433 | file-entry-cache "^6.0.1" 434 | functional-red-black-tree "^1.0.1" 435 | glob-parent "^6.0.1" 436 | globals "^13.6.0" 437 | ignore "^5.2.0" 438 | import-fresh "^3.0.0" 439 | imurmurhash "^0.1.4" 440 | is-glob "^4.0.0" 441 | js-yaml "^4.1.0" 442 | json-stable-stringify-without-jsonify "^1.0.1" 443 | levn "^0.4.1" 444 | lodash.merge "^4.6.2" 445 | minimatch "^3.0.4" 446 | natural-compare "^1.4.0" 447 | optionator "^0.9.1" 448 | regexpp "^3.2.0" 449 | strip-ansi "^6.0.1" 450 | strip-json-comments "^3.1.0" 451 | text-table "^0.2.0" 452 | v8-compile-cache "^2.0.3" 453 | 454 | espree@^9.0.0, espree@^9.3.1: 455 | version "9.3.1" 456 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" 457 | integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== 458 | dependencies: 459 | acorn "^8.7.0" 460 | acorn-jsx "^5.3.1" 461 | eslint-visitor-keys "^3.3.0" 462 | 463 | esquery@^1.4.0: 464 | version "1.4.0" 465 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 466 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 467 | dependencies: 468 | estraverse "^5.1.0" 469 | 470 | esrecurse@^4.3.0: 471 | version "4.3.0" 472 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 473 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 474 | dependencies: 475 | estraverse "^5.2.0" 476 | 477 | estraverse@^5.1.0, estraverse@^5.2.0: 478 | version "5.3.0" 479 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 480 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 481 | 482 | estree-walker@^2.0.2: 483 | version "2.0.2" 484 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 485 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 486 | 487 | esutils@^2.0.2: 488 | version "2.0.3" 489 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 490 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 491 | 492 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 493 | version "3.1.3" 494 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 495 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 496 | 497 | fast-json-stable-stringify@^2.0.0: 498 | version "2.1.0" 499 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 500 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 501 | 502 | fast-levenshtein@^2.0.6: 503 | version "2.0.6" 504 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 505 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 506 | 507 | file-entry-cache@^6.0.1: 508 | version "6.0.1" 509 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 510 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 511 | dependencies: 512 | flat-cache "^3.0.4" 513 | 514 | flat-cache@^3.0.4: 515 | version "3.0.4" 516 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 517 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 518 | dependencies: 519 | flatted "^3.1.0" 520 | rimraf "^3.0.2" 521 | 522 | flatted@^3.1.0: 523 | version "3.2.5" 524 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" 525 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== 526 | 527 | fs.realpath@^1.0.0: 528 | version "1.0.0" 529 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 530 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 531 | 532 | fsevents@~2.3.2: 533 | version "2.3.2" 534 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 535 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 536 | 537 | function-bind@^1.1.1: 538 | version "1.1.1" 539 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 540 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 541 | 542 | functional-red-black-tree@^1.0.1: 543 | version "1.0.1" 544 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 545 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 546 | 547 | glob-parent@^6.0.1: 548 | version "6.0.2" 549 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 550 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 551 | dependencies: 552 | is-glob "^4.0.3" 553 | 554 | glob@^7.1.3: 555 | version "7.2.0" 556 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 557 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 558 | dependencies: 559 | fs.realpath "^1.0.0" 560 | inflight "^1.0.4" 561 | inherits "2" 562 | minimatch "^3.0.4" 563 | once "^1.3.0" 564 | path-is-absolute "^1.0.0" 565 | 566 | globals@^13.6.0, globals@^13.9.0: 567 | version "13.13.0" 568 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" 569 | integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== 570 | dependencies: 571 | type-fest "^0.20.2" 572 | 573 | has-flag@^4.0.0: 574 | version "4.0.0" 575 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 576 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 577 | 578 | has@^1.0.3: 579 | version "1.0.3" 580 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 581 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 582 | dependencies: 583 | function-bind "^1.1.1" 584 | 585 | ignore@^5.2.0: 586 | version "5.2.0" 587 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 588 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 589 | 590 | immutability-helper@^3.1.1: 591 | version "3.1.1" 592 | resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-3.1.1.tgz#2b86b2286ed3b1241c9e23b7b21e0444f52f77b7" 593 | integrity sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ== 594 | 595 | import-fresh@^3.0.0, import-fresh@^3.2.1: 596 | version "3.3.0" 597 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 598 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 599 | dependencies: 600 | parent-module "^1.0.0" 601 | resolve-from "^4.0.0" 602 | 603 | imurmurhash@^0.1.4: 604 | version "0.1.4" 605 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 606 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 607 | 608 | inflight@^1.0.4: 609 | version "1.0.6" 610 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 611 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 612 | dependencies: 613 | once "^1.3.0" 614 | wrappy "1" 615 | 616 | inherits@2: 617 | version "2.0.4" 618 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 619 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 620 | 621 | inherits@2.0.3: 622 | version "2.0.3" 623 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 624 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 625 | 626 | is-core-module@^2.8.1: 627 | version "2.8.1" 628 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" 629 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== 630 | dependencies: 631 | has "^1.0.3" 632 | 633 | is-extglob@^2.1.1: 634 | version "2.1.1" 635 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 636 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 637 | 638 | is-glob@^4.0.0, is-glob@^4.0.3: 639 | version "4.0.3" 640 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 641 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 642 | dependencies: 643 | is-extglob "^2.1.1" 644 | 645 | isexe@^2.0.0: 646 | version "2.0.0" 647 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 648 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 649 | 650 | js-yaml@^4.1.0: 651 | version "4.1.0" 652 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 653 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 654 | dependencies: 655 | argparse "^2.0.1" 656 | 657 | json-schema-traverse@^0.4.1: 658 | version "0.4.1" 659 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 660 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 661 | 662 | json-stable-stringify-without-jsonify@^1.0.1: 663 | version "1.0.1" 664 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 665 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 666 | 667 | levn@^0.4.1: 668 | version "0.4.1" 669 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 670 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 671 | dependencies: 672 | prelude-ls "^1.2.1" 673 | type-check "~0.4.0" 674 | 675 | lodash.merge@^4.6.2: 676 | version "4.6.2" 677 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 678 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 679 | 680 | lodash@^4.17.21: 681 | version "4.17.21" 682 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 683 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 684 | 685 | lru-cache@^6.0.0: 686 | version "6.0.0" 687 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 688 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 689 | dependencies: 690 | yallist "^4.0.0" 691 | 692 | magic-string@^0.25.7: 693 | version "0.25.9" 694 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" 695 | integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== 696 | dependencies: 697 | sourcemap-codec "^1.4.8" 698 | 699 | minimatch@^3.0.4: 700 | version "3.1.2" 701 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 702 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 703 | dependencies: 704 | brace-expansion "^1.1.7" 705 | 706 | ms@2.1.2: 707 | version "2.1.2" 708 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 709 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 710 | 711 | nanoid@^3.3.1: 712 | version "3.3.2" 713 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557" 714 | integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA== 715 | 716 | natural-compare@^1.4.0: 717 | version "1.4.0" 718 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 719 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 720 | 721 | once@^1.3.0: 722 | version "1.4.0" 723 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 724 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 725 | dependencies: 726 | wrappy "1" 727 | 728 | optionator@^0.9.1: 729 | version "0.9.1" 730 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 731 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 732 | dependencies: 733 | deep-is "^0.1.3" 734 | fast-levenshtein "^2.0.6" 735 | levn "^0.4.1" 736 | prelude-ls "^1.2.1" 737 | type-check "^0.4.0" 738 | word-wrap "^1.2.3" 739 | 740 | parent-module@^1.0.0: 741 | version "1.0.1" 742 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 743 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 744 | dependencies: 745 | callsites "^3.0.0" 746 | 747 | path-is-absolute@^1.0.0: 748 | version "1.0.1" 749 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 750 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 751 | 752 | path-key@^3.1.0: 753 | version "3.1.1" 754 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 755 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 756 | 757 | path-parse@^1.0.7: 758 | version "1.0.7" 759 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 760 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 761 | 762 | path@^0.12.7: 763 | version "0.12.7" 764 | resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" 765 | integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= 766 | dependencies: 767 | process "^0.11.1" 768 | util "^0.10.3" 769 | 770 | picocolors@^1.0.0: 771 | version "1.0.0" 772 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 773 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 774 | 775 | postcss@^8.1.10, postcss@^8.4.12: 776 | version "8.4.12" 777 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" 778 | integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== 779 | dependencies: 780 | nanoid "^3.3.1" 781 | picocolors "^1.0.0" 782 | source-map-js "^1.0.2" 783 | 784 | prelude-ls@^1.2.1: 785 | version "1.2.1" 786 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 787 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 788 | 789 | process@^0.11.1: 790 | version "0.11.10" 791 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 792 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= 793 | 794 | punycode@^2.1.0: 795 | version "2.1.1" 796 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 797 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 798 | 799 | regexpp@^3.2.0: 800 | version "3.2.0" 801 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 802 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 803 | 804 | resolve-from@^4.0.0: 805 | version "4.0.0" 806 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 807 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 808 | 809 | resolve@^1.22.0: 810 | version "1.22.0" 811 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" 812 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 813 | dependencies: 814 | is-core-module "^2.8.1" 815 | path-parse "^1.0.7" 816 | supports-preserve-symlinks-flag "^1.0.0" 817 | 818 | rimraf@^3.0.2: 819 | version "3.0.2" 820 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 821 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 822 | dependencies: 823 | glob "^7.1.3" 824 | 825 | rollup@^2.59.0: 826 | version "2.70.1" 827 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.70.1.tgz#824b1f1f879ea396db30b0fc3ae8d2fead93523e" 828 | integrity sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA== 829 | optionalDependencies: 830 | fsevents "~2.3.2" 831 | 832 | semver@^7.3.5: 833 | version "7.3.7" 834 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 835 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 836 | dependencies: 837 | lru-cache "^6.0.0" 838 | 839 | shebang-command@^2.0.0: 840 | version "2.0.0" 841 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 842 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 843 | dependencies: 844 | shebang-regex "^3.0.0" 845 | 846 | shebang-regex@^3.0.0: 847 | version "3.0.0" 848 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 849 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 850 | 851 | source-map-js@^1.0.2: 852 | version "1.0.2" 853 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 854 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 855 | 856 | source-map@^0.6.1: 857 | version "0.6.1" 858 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 859 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 860 | 861 | sourcemap-codec@^1.4.8: 862 | version "1.4.8" 863 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 864 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 865 | 866 | strip-ansi@^6.0.1: 867 | version "6.0.1" 868 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 869 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 870 | dependencies: 871 | ansi-regex "^5.0.1" 872 | 873 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 874 | version "3.1.1" 875 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 876 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 877 | 878 | supports-color@^7.1.0: 879 | version "7.2.0" 880 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 881 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 882 | dependencies: 883 | has-flag "^4.0.0" 884 | 885 | supports-preserve-symlinks-flag@^1.0.0: 886 | version "1.0.0" 887 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 888 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 889 | 890 | text-table@^0.2.0: 891 | version "0.2.0" 892 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 893 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 894 | 895 | type-check@^0.4.0, type-check@~0.4.0: 896 | version "0.4.0" 897 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 898 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 899 | dependencies: 900 | prelude-ls "^1.2.1" 901 | 902 | type-fest@^0.20.2: 903 | version "0.20.2" 904 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 905 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 906 | 907 | uri-js@^4.2.2: 908 | version "4.4.1" 909 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 910 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 911 | dependencies: 912 | punycode "^2.1.0" 913 | 914 | util@^0.10.3: 915 | version "0.10.4" 916 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" 917 | integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== 918 | dependencies: 919 | inherits "2.0.3" 920 | 921 | v8-compile-cache@^2.0.3: 922 | version "2.3.0" 923 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 924 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 925 | 926 | vite@^2.9.1: 927 | version "2.9.5" 928 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.5.tgz#08ef37ac7a6d879c96f328b791732c9a00ea25ea" 929 | integrity sha512-dvMN64X2YEQgSXF1lYabKXw3BbN6e+BL67+P3Vy4MacnY+UzT1AfkHiioFSi9+uiDUiaDy7Ax/LQqivk6orilg== 930 | dependencies: 931 | esbuild "^0.14.27" 932 | postcss "^8.4.12" 933 | resolve "^1.22.0" 934 | rollup "^2.59.0" 935 | optionalDependencies: 936 | fsevents "~2.3.2" 937 | 938 | vue-eslint-parser@^8.0.1: 939 | version "8.3.0" 940 | resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d" 941 | integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g== 942 | dependencies: 943 | debug "^4.3.2" 944 | eslint-scope "^7.0.0" 945 | eslint-visitor-keys "^3.1.0" 946 | espree "^9.0.0" 947 | esquery "^1.4.0" 948 | lodash "^4.17.21" 949 | semver "^7.3.5" 950 | 951 | vue@^3.2.31: 952 | version "3.2.33" 953 | resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.33.tgz#7867eb16a3293a28c4d190a837bc447878bd64c2" 954 | integrity sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ== 955 | dependencies: 956 | "@vue/compiler-dom" "3.2.33" 957 | "@vue/compiler-sfc" "3.2.33" 958 | "@vue/runtime-dom" "3.2.33" 959 | "@vue/server-renderer" "3.2.33" 960 | "@vue/shared" "3.2.33" 961 | 962 | which@^2.0.1: 963 | version "2.0.2" 964 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 965 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 966 | dependencies: 967 | isexe "^2.0.0" 968 | 969 | word-wrap@^1.2.3: 970 | version "1.2.3" 971 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 972 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 973 | 974 | wrappy@1: 975 | version "1.0.2" 976 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 977 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 978 | 979 | yallist@^4.0.0: 980 | version "4.0.0" 981 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 982 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 983 | --------------------------------------------------------------------------------