├── .gitignore
├── .npmignore
├── .vscode
└── extensions.json
├── README.md
├── auto-imports.d.ts
├── components.d.ts
├── index.html
├── package-lock.json
├── package.json
├── packages
├── index.ts
└── tree
│ ├── src
│ ├── components
│ │ └── collapse-transition.vue
│ ├── model
│ │ ├── node.ts
│ │ ├── tree-store.ts
│ │ ├── useDragNode.ts
│ │ ├── useKeydown.ts
│ │ ├── useNodeExpandEventBroadcast.ts
│ │ └── util.ts
│ ├── tree-node-content.vue
│ ├── tree-node-icon.vue
│ ├── tree-node.vue
│ ├── tree.type.ts
│ └── tree.vue
│ └── style
│ ├── base.css
│ └── tree.scss
├── public
└── favicon.ico
├── src
├── App.vue
├── assets
│ └── logo.png
├── env.d.ts
└── main.ts
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.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 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | vite.config.ts
3 | *.map
4 | *.htm
5 | .vscode
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["Vue.volar"]
3 | }
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-power-tree
2 |
3 | ## 内容列表
4 |
5 | - [介绍](#介绍)
6 | - [安装](#安装)
7 | - [使用](#使用)
8 | - [相关仓库](#相关仓库)
9 | - [维护者](#维护者)
10 |
11 | ## 介绍
12 |
13 | 本插件在element-plus树形组件基础上,进行了二次封装。适用于vue3项目,在具备了element-plus 的Tree组件的所有功能的基础上,又增加了**组织树**展示效果,并同时支持拖拽,及自定义组织树的展开收起样式
14 |
15 | 
16 |
17 | 
18 |
19 | 
20 |
21 | ## 安装
22 |
23 | ```bash
24 | # use npm
25 | npm install vue-power-tree
26 |
27 | # use yarn
28 | yarn add vue-power-tree
29 | ```
30 |
31 | ## 使用
32 |
33 | ```js
34 | # vue全局引用
35 | import { createApp } from "vue"
36 | import App from "./App.vue"
37 | import VuePowerTree from "vue-power-tree"
38 | import "vue-power-tree/dist/style.css"
39 | const app = createApp(App)
40 | app.use(VuePowerTree)
41 | # 局部引用
42 | import VuePowerTree from "vue-power-tree"
43 | import "vue-power-tree/dist/style.css"
44 |
45 |
46 | ```
47 |
48 | **vue中使用示例**
49 |
50 | ```vue
51 |
52 |
54 |
55 |
56 |
57 | -
58 |
59 | +
60 |
61 |
62 |
63 |
64 |
65 |
128 |
129 |
141 | ```
142 |
143 | **本插件支持所有的element-plus的Tree组件功能,[可参照](https://element-plus.gitee.io/zh-CN/component/tree.html#%E5%B1%9E%E6%80%A7),同时扩展了 tree-type属性 控制树形显示**
144 |
145 | #### 1. 属性
146 |
147 | | 属性 | 说明 | 类型 | 可选值 | 默认值 |
148 | | :-------------------- | :----------------------------------------------------------- | :----------------------------------------------------------- | :----- | :----- |
149 | | data | 展示数据 | array | — | — |
150 | | tree-type | 树显示方式,普通树形(element树),组织树显示 tree-type='org' | string | | normal |
151 | | empty-text | 内容为空的时候展示的文本 | string | — | — |
152 | | node-key | 每个树节点用来作为唯一标识的属性,整棵树应该是唯一的 | string | — | — |
153 | | props | 配置选项,具体看下表 | object | — | — |
154 | | render-after-expand | 是否在第一次展开某个树节点后才渲染其子节点 | boolean | — | true |
155 | | load | 加载子树数据的方法,仅当 lazy 属性为true 时生效 | function(node, resolve),`node`为当前点击的节点,`resolve`为数据加载完成的回调(必须调用) | — | — |
156 | | render-content | 树节点的内容区的渲染 Function | Function(h, `{ node, data, store }`) | — | — |
157 | | highlight-current | 是否高亮当前选中节点,默认值是 false。 | boolean | — | false |
158 | | default-expand-all | 是否默认展开所有节点 | boolean | — | false |
159 | | expand-on-click-node | 是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。 | boolean | — | true |
160 | | check-on-click-node | 是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点。 | boolean | — | false |
161 | | auto-expand-parent | 展开子节点的时候是否自动展开父节点 | boolean | — | true |
162 | | default-expanded-keys | 默认展开的节点的 key 的数组 | array | — | — |
163 | | show-checkbox | 节点是否可被选择 | boolean | — | false |
164 | | check-strictly | 在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false | boolean | — | false |
165 | | default-checked-keys | 默认勾选的节点的 key 的数组 | array | — | — |
166 | | current-node-key | 当前选中的节点 | string, number | — | — |
167 | | filter-node-method | 对树节点进行筛选时执行的方法, 返回 `false` 则表示这个节点会被隐藏 | Function(value, data, node) | — | — |
168 | | accordion | 是否每次只打开一个同级树节点展开 | boolean | — | false |
169 | | indent | 相邻级节点间的水平缩进,单位为像素 | number | — | 16 |
170 | | icon | 自定义图标组件 | string / Component | - | - |
171 | | lazy | 是否懒加载子节点,需与 load 方法结合使用 | boolean | — | false |
172 | | draggable | 是否开启拖拽节点功能 | boolean | — | false |
173 | | allow-drag | 判断节点能否被拖拽 如果返回 `false` ,节点不能被拖动 | Function(node) | — | — |
174 | | allow-drop | 拖拽时判定目标节点能否成为拖动目标位置。 如果返回 `false` ,拖动节点不能被拖放到目标节点。 `type` 参数有三种情况:'prev'、'inner' 和 'next',分别表示放置在目标节点前、插入至目标节点和放置在目标节点后 | Function(draggingNode, dropNode, type) | — | — |
175 |
176 | #### 2. Props
177 |
178 | | Props | 说明 | 类型 | 可选值 | 默认值 |
179 | | :------- | :------------------------------------------------------- | :--------------------------- | :----- | :----- |
180 | | label | 指定节点标签为节点对象的某个属性值 | string, function(data, node) | — | — |
181 | | children | 指定子树为节点对象的某个属性值 | string | — | — |
182 | | disabled | 指定节点选择框是否禁用为节点对象的某个属性值 | string, function(data, node) | — | — |
183 | | isLeaf | 指定节点是否为叶子节点,仅在指定了 lazy 属性的情况下生效 | string, function(data, node) | — | — |
184 | | class | 自定义节点类名 | string, function(data, node) | — | — |
185 |
186 | #### 3. 方法
187 |
188 | `Tree` 组件有以下方法,均返回当前选中的节点数组
189 |
190 | | 方法 | 描述 | 参数 |
191 | | :------------------ | :----------------------------------------------------------- | :----------------------------------------------------------- |
192 | | filter | 过滤所有树节点,过滤后的节点将被隐藏 | 接收一个参数并指定为 filter-node-method 属性的第一个参数 |
193 | | updateKeyChildren | 为节点设置新数据,只有当设置 `node-key` 属性的时候才可用 | (key, data) 接收两个参数: 1. 节点的 key 2. 新数据 |
194 | | getCheckedNodes | 如果节点可以被选中,(`show-checkbox` 为 `true`), 本方法将返回当前选中节点的数组 | (leafOnly, includeHalfChecked) 接收两个布尔类型参数: 1. 默认值为 `false`. 若参数为 `true`, 它将返回当前选中节点的子节点 2. 默认值为 `false`. 如果参数为 `true`, 返回值包含半选中节点数据 |
195 | | setCheckedNodes | 设置目前勾选的节点,使用此方法必须提前设置 `node-key` 属性 | 要选中的节点构成的数组 |
196 | | getCheckedKeys | 若节点可用被选中 (`show-checkbox` 为 `true`), 它将返回当前选中节点 key 的数组 | (leafOnly) 接收一个布尔类型参数,默认为 `false`. 如果参数是 `true`, 它只返回当前选择的子节点数组。 |
197 | | setCheckedKeys | 设置目前选中的节点,使用此方法必须设置 `node-key` 属性 | (keys, leafOnly) 接收两个参数: 1. 一个需要被选中的多节点 key 的数组 2. 一个布尔类型参数,默认为 `false`. 如果参数是 `true`, 它只返回当前选择的子节点数组。 |
198 | | setChecked | 设置节点是否被选中, 使用此方法必须设置 `node-key` 属性 | (key/data, checked, deep) 接收三个参数: 1. 要选中的节点的 key 或者数据 2. 一个布尔类型参数表明是否选中. 3. 一个布尔类型参数表明是否递归选中子节点 |
199 | | getHalfCheckedNodes | 如果节点可用被选中 (`show-checkbox` 为 `true`), 它将返回当前半选中的节点组成的数组 | - |
200 | | getHalfCheckedKeys | 若节点可被选中(`show-checkbox` 为 `true`),则返回目前半选中的节点的 key 所组成的数组 | - |
201 | | getCurrentKey | 返回当前被选中节点的数据 (如果没有则返回 null) | — |
202 | | getCurrentNode | 返回当前被选中节点的数据 (如果没有则返回 null) | — |
203 | | setCurrentKey | 通过 key 设置某个节点的当前选中状态,使用此方法必须设置 `node-key ` 属性 | (key, shouldAutoExpandParent=true) 1. 待被选节点的 key, 如果为 `null`, 取消当前选中的节点 2. 是否自动展开父节点 |
204 | | setCurrentNode | 设置节点为选中状态,使用此方法必须设置 `node-key `属性 | (node, shouldAutoExpandParent=true) 1. 待被选中的节点 2. 是否展开父节点 |
205 | | getNode | 根据 data 或者 key 拿到 Tree 组件中的 node | (data) 节点的 data 或 key |
206 | | remove | 删除 Tree 中的一个节点,使用此方法必须设置 node-key 属性 | (data) 要删除的节点的 data 或者 node 对象 |
207 | | append | 为 Tree 中的一个节点追加一个子节点 | (data, parentNode) 1. 要追加的子节点的 data 2. 父节点的 data, key 或 node |
208 | | insertBefore | 在 Tree 中给定节点前插入一个节点 | (data, refNode) 1. 要增加的节点的 data 2. 参考节点的 data, key 或 node |
209 | | insertAfter | 在 Tree 中给定节点后插入一个节点 | (data, refNode) 1. 要增加的节点的 data 2. 参考节点的 data, key 或 node |
210 |
211 | #### 4. 事件
212 |
213 | | 事件名 | 说明 | 回调参数 |
214 | | :--------------- | :---------------------------------------------------- | :----------------------------------------------------------- |
215 | | node-click | 当节点被点击的时候触发 | 三个参数:对应于节点点击的节点对象, TreeNode `节点` 属性,事件对象 |
216 | | node-contextmenu | 当某一节点被鼠标右键点击时会触发该事件 | 共四个参数,依次为:event、传递给 `data` 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身。 |
217 | | check-change | 当复选框被点击的时候触发 | 共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点本身是否被选中、节点的子树中是否有被选中的节点 |
218 | | check | 点击节点复选框之后触发 | 共两个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、树目前的选中状态对象,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性 |
219 | | current-change | 当前选中节点变化时触发的事件 | 共两个参数,依次为:当前节点的数据,当前节点的 Node 对象 |
220 | | node-expand | 节点被展开时触发的事件 | 共三个参数,依次为:传递给 `data` 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身 |
221 | | node-collapse | 节点被关闭时触发的事件 | 共三个参数,依次为:传递给 `data` 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身 |
222 | | node-drag-start | 节点开始拖拽时触发的事件 | 共两个参数,依次为:被拖拽节点对应的 Node、event |
223 | | node-drag-enter | 拖拽进入其他节点时触发的事件 | 共三个参数,依次为:被拖拽节点对应的 Node、所进入节点对应的 Node、event |
224 | | node-drag-leave | 拖拽离开某个节点时触发的事件 | 共三个参数,依次为:被拖拽节点对应的 Node、所离开节点对应的 Node、event |
225 | | node-drag-over | 在拖拽节点时触发的事件(类似浏览器的 mouseover 事件) | 共三个参数,依次为:被拖拽节点对应的 Node、当前进入节点对应的 Node、event |
226 | | node-drag-end | 拖拽结束时(可能未成功)触发的事件 | 共四个参数,依次为:被拖拽节点对应的 Node、结束拖拽时最后进入的节点(可能为空)、被拖拽节点的放置位置(before、after、inner)、event |
227 | | node-drop | 拖拽成功完成时触发的事件 | 共四个参数,依次为:被拖拽节点对应的 Node、结束拖拽时最后进入的节点、被拖拽节点的放置位置(before、after、inner)、event |
228 |
229 | #### 5. 插槽
230 |
231 | | 插槽名 | 说明 |
232 | | :-------- | :----------------------------------------------------------- |
233 | | — | 自定义树节点的内容, 自定义树节点的内容, 参数为 ` { node, data }` |
234 | | icon-node | 组织树形态下,自定义展开收起样式,可参考上面 vue中使用示例 |
235 |
236 | ## 相关仓库
237 |
238 | - [element-plus-tree](https://element-plus.gitee.io/zh-CN/component/tree.html) - 饿了么Tree组件
239 | - [vue-power-tree](https://github.com/yj-liuzepeng/vue-power-tree)
240 |
241 | ## 维护者
242 |
243 | [@liuzepeng](https://www.liuzepeng.com)
244 |
245 | ## 其他
246 | 欢迎访问github,star一下
247 | 也欢迎提出issue,作者会及时完善,感谢
248 |
--------------------------------------------------------------------------------
/auto-imports.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by 'unplugin-auto-import'
2 | export {}
3 | declare global {
4 |
5 | }
6 |
--------------------------------------------------------------------------------
/components.d.ts:
--------------------------------------------------------------------------------
1 | // generated by unplugin-vue-components
2 | // We suggest you to commit this file into source control
3 | // Read more: https://github.com/vuejs/vue-next/pull/3399
4 | import '@vue/runtime-core'
5 |
6 | declare module '@vue/runtime-core' {
7 | export interface GlobalComponents {
8 | ElTreeNode: typeof import('element-plus/es')['ElTreeNode']
9 | HelloWorld: typeof import('./src/components/HelloWorld.vue')['default']
10 | }
11 | }
12 |
13 | export {}
14 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-power-tree",
3 | "version": "0.0.1",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.16.7",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
10 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
11 | "requires": {
12 | "@babel/highlight": "^7.16.7"
13 | }
14 | },
15 | "@babel/helper-validator-identifier": {
16 | "version": "7.16.7",
17 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
18 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="
19 | },
20 | "@babel/highlight": {
21 | "version": "7.17.12",
22 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz",
23 | "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==",
24 | "requires": {
25 | "@babel/helper-validator-identifier": "^7.16.7",
26 | "chalk": "^2.0.0",
27 | "js-tokens": "^4.0.0"
28 | },
29 | "dependencies": {
30 | "ansi-styles": {
31 | "version": "3.2.1",
32 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
33 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
34 | "requires": {
35 | "color-convert": "^1.9.0"
36 | }
37 | },
38 | "chalk": {
39 | "version": "2.4.2",
40 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
41 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
42 | "requires": {
43 | "ansi-styles": "^3.2.1",
44 | "escape-string-regexp": "^1.0.5",
45 | "supports-color": "^5.3.0"
46 | }
47 | },
48 | "color-convert": {
49 | "version": "1.9.3",
50 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
51 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
52 | "requires": {
53 | "color-name": "1.1.3"
54 | }
55 | },
56 | "color-name": {
57 | "version": "1.1.3",
58 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
59 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
60 | },
61 | "has-flag": {
62 | "version": "3.0.0",
63 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
64 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
65 | },
66 | "supports-color": {
67 | "version": "5.5.0",
68 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
69 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
70 | "requires": {
71 | "has-flag": "^3.0.0"
72 | }
73 | }
74 | }
75 | },
76 | "@babel/parser": {
77 | "version": "7.18.5",
78 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz",
79 | "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw=="
80 | },
81 | "@ctrl/tinycolor": {
82 | "version": "3.4.1",
83 | "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz",
84 | "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw=="
85 | },
86 | "@element-plus/icons-vue": {
87 | "version": "2.0.5",
88 | "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.0.5.tgz",
89 | "integrity": "sha512-jvNWyKcdvPvMDLTWjghrPY+bYHKqh7hbAFIPe+HWR073zilzt33csREzmKx3VwhdlJUW5u0nCqN+0rwI8jlH+w=="
90 | },
91 | "@floating-ui/core": {
92 | "version": "0.7.3",
93 | "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz",
94 | "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg=="
95 | },
96 | "@floating-ui/dom": {
97 | "version": "0.5.3",
98 | "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.3.tgz",
99 | "integrity": "sha512-vpjWB1uC7rajvgA58uzlJZgtWqrdDQLw+XVA3w63ZTmsWwRmVd0Gl5Dy9VMAViI9cP7hBWaJt23Jy3AVgVYnoQ==",
100 | "requires": {
101 | "@floating-ui/core": "^0.7.3"
102 | }
103 | },
104 | "@gar/promisify": {
105 | "version": "1.1.3",
106 | "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
107 | "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="
108 | },
109 | "@npmcli/fs": {
110 | "version": "1.1.1",
111 | "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
112 | "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
113 | "requires": {
114 | "@gar/promisify": "^1.0.1",
115 | "semver": "^7.3.5"
116 | }
117 | },
118 | "@npmcli/move-file": {
119 | "version": "1.1.2",
120 | "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
121 | "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
122 | "requires": {
123 | "mkdirp": "^1.0.4",
124 | "rimraf": "^3.0.2"
125 | }
126 | },
127 | "@tootallnate/once": {
128 | "version": "1.1.2",
129 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
130 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
131 | },
132 | "@types/lodash": {
133 | "version": "4.14.182",
134 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz",
135 | "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q=="
136 | },
137 | "@types/lodash-es": {
138 | "version": "4.17.6",
139 | "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.6.tgz",
140 | "integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==",
141 | "requires": {
142 | "@types/lodash": "*"
143 | }
144 | },
145 | "@types/minimist": {
146 | "version": "1.2.2",
147 | "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
148 | "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ=="
149 | },
150 | "@types/normalize-package-data": {
151 | "version": "2.4.1",
152 | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
153 | "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
154 | },
155 | "@vitejs/plugin-vue": {
156 | "version": "2.3.3",
157 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.3.tgz",
158 | "integrity": "sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==",
159 | "dev": true
160 | },
161 | "@volar/code-gen": {
162 | "version": "0.34.17",
163 | "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.34.17.tgz",
164 | "integrity": "sha512-rHR7BA71BJ/4S7xUOPMPiB7uk6iU9oTWpEMZxFi5VGC9iJmDncE82WzU5iYpcbOBCVHsOjMh0+5CGMgdO6SaPA==",
165 | "dev": true,
166 | "requires": {
167 | "@volar/source-map": "0.34.17"
168 | }
169 | },
170 | "@volar/source-map": {
171 | "version": "0.34.17",
172 | "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.34.17.tgz",
173 | "integrity": "sha512-3yn1IMXJGGWB/G817/VFlFMi8oh5pmE7VzUqvgMZMrppaZpKj6/juvJIEiXNxRsgWc0RxIO8OSp4htdPUg1Raw==",
174 | "dev": true
175 | },
176 | "@volar/vue-code-gen": {
177 | "version": "0.34.17",
178 | "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.34.17.tgz",
179 | "integrity": "sha512-17pzcK29fyFWUc+C82J3JYSnA+jy3QNrIldb9kPaP9Itbik05ZjEIyEue9FjhgIAuHeYSn4LDM5s6nGjxyfhsQ==",
180 | "dev": true,
181 | "requires": {
182 | "@volar/code-gen": "0.34.17",
183 | "@volar/source-map": "0.34.17",
184 | "@vue/compiler-core": "^3.2.36",
185 | "@vue/compiler-dom": "^3.2.36",
186 | "@vue/shared": "^3.2.36"
187 | }
188 | },
189 | "@volar/vue-typescript": {
190 | "version": "0.34.17",
191 | "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.34.17.tgz",
192 | "integrity": "sha512-U0YSVIBPRWVPmgJHNa4nrfq88+oS+tmyZNxmnfajIw9A/GOGZQiKXHC0k09SVvbYXlsjgJ6NIjhm9NuAhGRQjg==",
193 | "dev": true,
194 | "requires": {
195 | "@volar/code-gen": "0.34.17",
196 | "@volar/source-map": "0.34.17",
197 | "@volar/vue-code-gen": "0.34.17",
198 | "@vue/compiler-sfc": "^3.2.36",
199 | "@vue/reactivity": "^3.2.36"
200 | }
201 | },
202 | "@vue/compiler-core": {
203 | "version": "3.2.37",
204 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz",
205 | "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==",
206 | "requires": {
207 | "@babel/parser": "^7.16.4",
208 | "@vue/shared": "3.2.37",
209 | "estree-walker": "^2.0.2",
210 | "source-map": "^0.6.1"
211 | }
212 | },
213 | "@vue/compiler-dom": {
214 | "version": "3.2.37",
215 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz",
216 | "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==",
217 | "requires": {
218 | "@vue/compiler-core": "3.2.37",
219 | "@vue/shared": "3.2.37"
220 | }
221 | },
222 | "@vue/compiler-sfc": {
223 | "version": "3.2.37",
224 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz",
225 | "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==",
226 | "requires": {
227 | "@babel/parser": "^7.16.4",
228 | "@vue/compiler-core": "3.2.37",
229 | "@vue/compiler-dom": "3.2.37",
230 | "@vue/compiler-ssr": "3.2.37",
231 | "@vue/reactivity-transform": "3.2.37",
232 | "@vue/shared": "3.2.37",
233 | "estree-walker": "^2.0.2",
234 | "magic-string": "^0.25.7",
235 | "postcss": "^8.1.10",
236 | "source-map": "^0.6.1"
237 | }
238 | },
239 | "@vue/compiler-ssr": {
240 | "version": "3.2.37",
241 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz",
242 | "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==",
243 | "requires": {
244 | "@vue/compiler-dom": "3.2.37",
245 | "@vue/shared": "3.2.37"
246 | }
247 | },
248 | "@vue/reactivity": {
249 | "version": "3.2.37",
250 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz",
251 | "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==",
252 | "requires": {
253 | "@vue/shared": "3.2.37"
254 | }
255 | },
256 | "@vue/reactivity-transform": {
257 | "version": "3.2.37",
258 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz",
259 | "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==",
260 | "requires": {
261 | "@babel/parser": "^7.16.4",
262 | "@vue/compiler-core": "3.2.37",
263 | "@vue/shared": "3.2.37",
264 | "estree-walker": "^2.0.2",
265 | "magic-string": "^0.25.7"
266 | }
267 | },
268 | "@vue/runtime-core": {
269 | "version": "3.2.37",
270 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz",
271 | "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==",
272 | "requires": {
273 | "@vue/reactivity": "3.2.37",
274 | "@vue/shared": "3.2.37"
275 | }
276 | },
277 | "@vue/runtime-dom": {
278 | "version": "3.2.37",
279 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz",
280 | "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==",
281 | "requires": {
282 | "@vue/runtime-core": "3.2.37",
283 | "@vue/shared": "3.2.37",
284 | "csstype": "^2.6.8"
285 | }
286 | },
287 | "@vue/server-renderer": {
288 | "version": "3.2.37",
289 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz",
290 | "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==",
291 | "requires": {
292 | "@vue/compiler-ssr": "3.2.37",
293 | "@vue/shared": "3.2.37"
294 | }
295 | },
296 | "@vue/shared": {
297 | "version": "3.2.37",
298 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz",
299 | "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw=="
300 | },
301 | "@vueuse/core": {
302 | "version": "8.7.3",
303 | "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.7.3.tgz",
304 | "integrity": "sha512-jpBnyG9b4wXgk0Dz3I71lfhD0o53t1tZR+NoAQ+17zJy7MP/VDfGIkq8GcqpDwmptLCmGiGVipkPbWmDGMic8Q==",
305 | "requires": {
306 | "@vueuse/metadata": "8.7.3",
307 | "@vueuse/shared": "8.7.3",
308 | "vue-demi": "*"
309 | }
310 | },
311 | "@vueuse/metadata": {
312 | "version": "8.7.3",
313 | "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.7.3.tgz",
314 | "integrity": "sha512-spf9kgCsBEFbQb90I6SIqAWh1yP5T1JoJGj+/04+VTMIHXKzn3iecmHUalg8QEOCPNtnFQGNEw5OLg0L39eizg=="
315 | },
316 | "@vueuse/shared": {
317 | "version": "8.7.3",
318 | "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.7.3.tgz",
319 | "integrity": "sha512-PMc/h6cEakJ4+5VuNUGi7RnbA6CkLvtG2230x8w3zYJpW1P6Qphh9+dFFvHn7TX+RlaicF5ND0RX1NxWmAoW7w==",
320 | "requires": {
321 | "vue-demi": "*"
322 | }
323 | },
324 | "abbrev": {
325 | "version": "1.1.1",
326 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
327 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
328 | },
329 | "agent-base": {
330 | "version": "6.0.2",
331 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
332 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
333 | "requires": {
334 | "debug": "4"
335 | }
336 | },
337 | "agentkeepalive": {
338 | "version": "4.2.1",
339 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
340 | "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
341 | "requires": {
342 | "debug": "^4.1.0",
343 | "depd": "^1.1.2",
344 | "humanize-ms": "^1.2.1"
345 | }
346 | },
347 | "aggregate-error": {
348 | "version": "3.1.0",
349 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
350 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
351 | "requires": {
352 | "clean-stack": "^2.0.0",
353 | "indent-string": "^4.0.0"
354 | }
355 | },
356 | "ajv": {
357 | "version": "6.12.6",
358 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
359 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
360 | "requires": {
361 | "fast-deep-equal": "^3.1.1",
362 | "fast-json-stable-stringify": "^2.0.0",
363 | "json-schema-traverse": "^0.4.1",
364 | "uri-js": "^4.2.2"
365 | }
366 | },
367 | "ansi-regex": {
368 | "version": "5.0.1",
369 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
370 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
371 | },
372 | "ansi-styles": {
373 | "version": "4.3.0",
374 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
375 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
376 | "requires": {
377 | "color-convert": "^2.0.1"
378 | }
379 | },
380 | "anymatch": {
381 | "version": "3.1.2",
382 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
383 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
384 | "dev": true,
385 | "requires": {
386 | "normalize-path": "^3.0.0",
387 | "picomatch": "^2.0.4"
388 | }
389 | },
390 | "aproba": {
391 | "version": "2.0.0",
392 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
393 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
394 | },
395 | "are-we-there-yet": {
396 | "version": "3.0.0",
397 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz",
398 | "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==",
399 | "requires": {
400 | "delegates": "^1.0.0",
401 | "readable-stream": "^3.6.0"
402 | }
403 | },
404 | "arrify": {
405 | "version": "1.0.1",
406 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
407 | "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA=="
408 | },
409 | "asn1": {
410 | "version": "0.2.6",
411 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
412 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
413 | "requires": {
414 | "safer-buffer": "~2.1.0"
415 | }
416 | },
417 | "assert-plus": {
418 | "version": "1.0.0",
419 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
420 | "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
421 | },
422 | "async-foreach": {
423 | "version": "0.1.3",
424 | "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
425 | "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA=="
426 | },
427 | "async-validator": {
428 | "version": "4.1.1",
429 | "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.1.1.tgz",
430 | "integrity": "sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA=="
431 | },
432 | "asynckit": {
433 | "version": "0.4.0",
434 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
435 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
436 | },
437 | "aws-sign2": {
438 | "version": "0.7.0",
439 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
440 | "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
441 | },
442 | "aws4": {
443 | "version": "1.11.0",
444 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
445 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
446 | },
447 | "balanced-match": {
448 | "version": "1.0.2",
449 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
450 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
451 | },
452 | "bcrypt-pbkdf": {
453 | "version": "1.0.2",
454 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
455 | "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
456 | "requires": {
457 | "tweetnacl": "^0.14.3"
458 | }
459 | },
460 | "binary-extensions": {
461 | "version": "2.2.0",
462 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
463 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
464 | "dev": true
465 | },
466 | "brace-expansion": {
467 | "version": "1.1.11",
468 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
469 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
470 | "requires": {
471 | "balanced-match": "^1.0.0",
472 | "concat-map": "0.0.1"
473 | }
474 | },
475 | "braces": {
476 | "version": "3.0.2",
477 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
478 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
479 | "dev": true,
480 | "requires": {
481 | "fill-range": "^7.0.1"
482 | }
483 | },
484 | "cacache": {
485 | "version": "15.3.0",
486 | "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
487 | "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
488 | "requires": {
489 | "@npmcli/fs": "^1.0.0",
490 | "@npmcli/move-file": "^1.0.1",
491 | "chownr": "^2.0.0",
492 | "fs-minipass": "^2.0.0",
493 | "glob": "^7.1.4",
494 | "infer-owner": "^1.0.4",
495 | "lru-cache": "^6.0.0",
496 | "minipass": "^3.1.1",
497 | "minipass-collect": "^1.0.2",
498 | "minipass-flush": "^1.0.5",
499 | "minipass-pipeline": "^1.2.2",
500 | "mkdirp": "^1.0.3",
501 | "p-map": "^4.0.0",
502 | "promise-inflight": "^1.0.1",
503 | "rimraf": "^3.0.2",
504 | "ssri": "^8.0.1",
505 | "tar": "^6.0.2",
506 | "unique-filename": "^1.1.1"
507 | }
508 | },
509 | "camelcase": {
510 | "version": "5.3.1",
511 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
512 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
513 | },
514 | "camelcase-keys": {
515 | "version": "6.2.2",
516 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
517 | "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
518 | "requires": {
519 | "camelcase": "^5.3.1",
520 | "map-obj": "^4.0.0",
521 | "quick-lru": "^4.0.1"
522 | }
523 | },
524 | "caseless": {
525 | "version": "0.12.0",
526 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
527 | "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
528 | },
529 | "chalk": {
530 | "version": "4.1.2",
531 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
532 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
533 | "requires": {
534 | "ansi-styles": "^4.1.0",
535 | "supports-color": "^7.1.0"
536 | }
537 | },
538 | "chokidar": {
539 | "version": "3.5.3",
540 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
541 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
542 | "dev": true,
543 | "requires": {
544 | "anymatch": "~3.1.2",
545 | "braces": "~3.0.2",
546 | "fsevents": "~2.3.2",
547 | "glob-parent": "~5.1.2",
548 | "is-binary-path": "~2.1.0",
549 | "is-glob": "~4.0.1",
550 | "normalize-path": "~3.0.0",
551 | "readdirp": "~3.6.0"
552 | }
553 | },
554 | "chownr": {
555 | "version": "2.0.0",
556 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
557 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
558 | },
559 | "clean-stack": {
560 | "version": "2.2.0",
561 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
562 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
563 | },
564 | "cliui": {
565 | "version": "7.0.4",
566 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
567 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
568 | "requires": {
569 | "string-width": "^4.2.0",
570 | "strip-ansi": "^6.0.0",
571 | "wrap-ansi": "^7.0.0"
572 | }
573 | },
574 | "color-convert": {
575 | "version": "2.0.1",
576 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
577 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
578 | "requires": {
579 | "color-name": "~1.1.4"
580 | }
581 | },
582 | "color-name": {
583 | "version": "1.1.4",
584 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
585 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
586 | },
587 | "color-support": {
588 | "version": "1.1.3",
589 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
590 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
591 | },
592 | "combined-stream": {
593 | "version": "1.0.8",
594 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
595 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
596 | "requires": {
597 | "delayed-stream": "~1.0.0"
598 | }
599 | },
600 | "concat-map": {
601 | "version": "0.0.1",
602 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
603 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
604 | },
605 | "console-control-strings": {
606 | "version": "1.1.0",
607 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
608 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
609 | },
610 | "core-util-is": {
611 | "version": "1.0.2",
612 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
613 | "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
614 | },
615 | "cross-spawn": {
616 | "version": "7.0.3",
617 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
618 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
619 | "requires": {
620 | "path-key": "^3.1.0",
621 | "shebang-command": "^2.0.0",
622 | "which": "^2.0.1"
623 | }
624 | },
625 | "csstype": {
626 | "version": "2.6.20",
627 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz",
628 | "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
629 | },
630 | "dashdash": {
631 | "version": "1.14.1",
632 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
633 | "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
634 | "requires": {
635 | "assert-plus": "^1.0.0"
636 | }
637 | },
638 | "dayjs": {
639 | "version": "1.11.3",
640 | "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz",
641 | "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
642 | },
643 | "debug": {
644 | "version": "4.3.4",
645 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
646 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
647 | "requires": {
648 | "ms": "2.1.2"
649 | }
650 | },
651 | "decamelize": {
652 | "version": "1.2.0",
653 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
654 | "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
655 | },
656 | "decamelize-keys": {
657 | "version": "1.1.0",
658 | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
659 | "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==",
660 | "requires": {
661 | "decamelize": "^1.1.0",
662 | "map-obj": "^1.0.0"
663 | },
664 | "dependencies": {
665 | "map-obj": {
666 | "version": "1.0.1",
667 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
668 | "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg=="
669 | }
670 | }
671 | },
672 | "delayed-stream": {
673 | "version": "1.0.0",
674 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
675 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
676 | },
677 | "delegates": {
678 | "version": "1.0.0",
679 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
680 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
681 | },
682 | "depd": {
683 | "version": "1.1.2",
684 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
685 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
686 | },
687 | "ecc-jsbn": {
688 | "version": "0.1.2",
689 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
690 | "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
691 | "requires": {
692 | "jsbn": "~0.1.0",
693 | "safer-buffer": "^2.1.0"
694 | }
695 | },
696 | "element-plus": {
697 | "version": "2.2.5",
698 | "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.5.tgz",
699 | "integrity": "sha512-Kl0yn/PQca5YQo3M3NPBP4Xl71NQuMtDx5zNXZGVyl5FjdMujXiFB9SXKYGDUCgFU3d/Rl14vB4Fpmcl2Iz+Hw==",
700 | "requires": {
701 | "@ctrl/tinycolor": "^3.4.1",
702 | "@element-plus/icons-vue": "^2.0.5",
703 | "@floating-ui/dom": "^0.5.2",
704 | "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
705 | "@types/lodash": "^4.14.182",
706 | "@types/lodash-es": "^4.17.6",
707 | "@vueuse/core": "^8.6.0",
708 | "async-validator": "^4.1.1",
709 | "dayjs": "^1.11.3",
710 | "escape-html": "^1.0.3",
711 | "lodash": "^4.17.21",
712 | "lodash-es": "^4.17.21",
713 | "lodash-unified": "^1.0.2",
714 | "memoize-one": "^6.0.0",
715 | "normalize-wheel-es": "^1.1.2"
716 | },
717 | "dependencies": {
718 | "@popperjs/core": {
719 | "version": "npm:@sxzz/popperjs-es@2.11.7",
720 | "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
721 | "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
722 | }
723 | }
724 | },
725 | "emoji-regex": {
726 | "version": "8.0.0",
727 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
728 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
729 | },
730 | "encoding": {
731 | "version": "0.1.13",
732 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
733 | "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
734 | "optional": true,
735 | "requires": {
736 | "iconv-lite": "^0.6.2"
737 | }
738 | },
739 | "env-paths": {
740 | "version": "2.2.1",
741 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
742 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="
743 | },
744 | "err-code": {
745 | "version": "2.0.3",
746 | "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
747 | "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="
748 | },
749 | "error-ex": {
750 | "version": "1.3.2",
751 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
752 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
753 | "requires": {
754 | "is-arrayish": "^0.2.1"
755 | }
756 | },
757 | "esbuild": {
758 | "version": "0.14.45",
759 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.45.tgz",
760 | "integrity": "sha512-JOxGUD8jcs8xE8DjyGWC8by/vLMCXTJ/wuauWipL5kJRZx1dhpqIntb31QHjA45GZJWaXv7SjC/Zwu1bCkXWtQ==",
761 | "dev": true,
762 | "requires": {
763 | "esbuild-android-64": "0.14.45",
764 | "esbuild-android-arm64": "0.14.45",
765 | "esbuild-darwin-64": "0.14.45",
766 | "esbuild-darwin-arm64": "0.14.45",
767 | "esbuild-freebsd-64": "0.14.45",
768 | "esbuild-freebsd-arm64": "0.14.45",
769 | "esbuild-linux-32": "0.14.45",
770 | "esbuild-linux-64": "0.14.45",
771 | "esbuild-linux-arm": "0.14.45",
772 | "esbuild-linux-arm64": "0.14.45",
773 | "esbuild-linux-mips64le": "0.14.45",
774 | "esbuild-linux-ppc64le": "0.14.45",
775 | "esbuild-linux-riscv64": "0.14.45",
776 | "esbuild-linux-s390x": "0.14.45",
777 | "esbuild-netbsd-64": "0.14.45",
778 | "esbuild-openbsd-64": "0.14.45",
779 | "esbuild-sunos-64": "0.14.45",
780 | "esbuild-windows-32": "0.14.45",
781 | "esbuild-windows-64": "0.14.45",
782 | "esbuild-windows-arm64": "0.14.45"
783 | }
784 | },
785 | "esbuild-android-64": {
786 | "version": "0.14.45",
787 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.45.tgz",
788 | "integrity": "sha512-krVmwL2uXQN1A+Ci4u2MR+Y0IAvQK0u3no5TsgguHVhTy138szjuohScCGjkpvLCpGLk7P4kFP1LKuntvJ0d4A==",
789 | "dev": true,
790 | "optional": true
791 | },
792 | "esbuild-android-arm64": {
793 | "version": "0.14.45",
794 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.45.tgz",
795 | "integrity": "sha512-62POGdzAjM+XOXEM5MmFW6k9Pjdjg1hTrXKKBbPE700LFF36B+1Jv9QkskT5UadbTk4cdH9BQ7bGiRPYY0p/Dw==",
796 | "dev": true,
797 | "optional": true
798 | },
799 | "esbuild-darwin-64": {
800 | "version": "0.14.45",
801 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.45.tgz",
802 | "integrity": "sha512-dbkVUAnGx5IeZesWnIhnvxy7dSvgUQvfy0TVLzd9XVP3oI/VsKs8UNsfPrxI5HiN4SINv7oPAbxWceMpB7IqNA==",
803 | "dev": true,
804 | "optional": true
805 | },
806 | "esbuild-darwin-arm64": {
807 | "version": "0.14.45",
808 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.45.tgz",
809 | "integrity": "sha512-O6Bz7nnOae5rvbh2Ueo8ibSr7+/eLjsbPdgeMsAZri+LkOa7nsVPnhmocpO3Hy/LWfagTtHy1O9HRPIaArPmTg==",
810 | "dev": true,
811 | "optional": true
812 | },
813 | "esbuild-freebsd-64": {
814 | "version": "0.14.45",
815 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.45.tgz",
816 | "integrity": "sha512-y1X2nr3XSWnDC7MRcy21EVAT0TiCtdefOntJ+SQcZnPBTURzX77f99S8lDF2KswukChkiacpd2Wd4VZieo7w7Q==",
817 | "dev": true,
818 | "optional": true
819 | },
820 | "esbuild-freebsd-arm64": {
821 | "version": "0.14.45",
822 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.45.tgz",
823 | "integrity": "sha512-r3ZNejkx1BKXQ6sYOP6C5rTwgiUajyAh03wygLWZtl+SLyygvAnu+OouqtveesufjBDgujp4wZXP/n8PVqXkqg==",
824 | "dev": true,
825 | "optional": true
826 | },
827 | "esbuild-linux-32": {
828 | "version": "0.14.45",
829 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.45.tgz",
830 | "integrity": "sha512-Qk9cCO3PJig/Y+SdslN/Th4pbAjgaH9oUjVH28eMsLTPf6QDUuK6EED91jepJdR3vxhcnVjyl6JqtOWmP+uxCg==",
831 | "dev": true,
832 | "optional": true
833 | },
834 | "esbuild-linux-64": {
835 | "version": "0.14.45",
836 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.45.tgz",
837 | "integrity": "sha512-IybO2ugqvc/Zzn1Kih3x0FVjYAy3GTCwhtcp91dbdqk3wPqxYCzObYspa8ca0s+OovI0Cnb+rhXrUtq8gBqlqw==",
838 | "dev": true,
839 | "optional": true
840 | },
841 | "esbuild-linux-arm": {
842 | "version": "0.14.45",
843 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.45.tgz",
844 | "integrity": "sha512-qKWJ4A4TAcxXV2TBLPw3Av5X2SYNfyNnBHNJTQJ5VuevK6Aq5i6XEMvUgdlcVuZ9MYPfS5aJZWglzDzJMf1Lpw==",
845 | "dev": true,
846 | "optional": true
847 | },
848 | "esbuild-linux-arm64": {
849 | "version": "0.14.45",
850 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.45.tgz",
851 | "integrity": "sha512-UNEyuHTwztrkEU/+mWIxGzKrYBo2cEtjYAZQVZB1kliANKgRITktg2miaO/b/VtNe84ob1aXSvW8XOPEn5RTGQ==",
852 | "dev": true,
853 | "optional": true
854 | },
855 | "esbuild-linux-mips64le": {
856 | "version": "0.14.45",
857 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.45.tgz",
858 | "integrity": "sha512-s/jcfw3Vpku5dIVSFVY7idJsGdIpIJ88IrkyprVgCG2yBeXatb67B7yIt0E1tL+OHrJJdNBw6GikCiMPAAu1VA==",
859 | "dev": true,
860 | "optional": true
861 | },
862 | "esbuild-linux-ppc64le": {
863 | "version": "0.14.45",
864 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.45.tgz",
865 | "integrity": "sha512-lJItl6ESZnhSx951U9R7MTBopgwIELHlQzC6SBR023V5JC1rPRFDZ/UEBsV+7BFcCAfqlyb+odGEAmcBSf4XCA==",
866 | "dev": true,
867 | "optional": true
868 | },
869 | "esbuild-linux-riscv64": {
870 | "version": "0.14.45",
871 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.45.tgz",
872 | "integrity": "sha512-8anMu+QLl9MununVCGJN2I/JvUWPm1EVsBBLq/J+Nz4hr8t6QOCuEp0HRaeMohyl2XiMFBchVu0mwa05rF7GFQ==",
873 | "dev": true,
874 | "optional": true
875 | },
876 | "esbuild-linux-s390x": {
877 | "version": "0.14.45",
878 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.45.tgz",
879 | "integrity": "sha512-1TPeNvNCoahMw745KNTA6POKaFfSqQrBb3fdOL82GXZqyKU/6rHNwGP0NgHe88bAUMp3QZfjGfCGKxfBHL77RQ==",
880 | "dev": true,
881 | "optional": true
882 | },
883 | "esbuild-netbsd-64": {
884 | "version": "0.14.45",
885 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.45.tgz",
886 | "integrity": "sha512-55f2eZ8EQhhOZosqX0mApgRoI9PrVyXlHd9Uivk+B0B4WTKUgzkoHaVk4EkIUtNRQTpDWPciTlpb/C2tUYVejA==",
887 | "dev": true,
888 | "optional": true
889 | },
890 | "esbuild-openbsd-64": {
891 | "version": "0.14.45",
892 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.45.tgz",
893 | "integrity": "sha512-Z5sNcT3oN9eryMW3mGn5HAgg7XCxiUS4isqH1tZXpsdOdOESbgbTEP0mBEJU0WU7Vt2gIN5XMbAp7Oigm0k71g==",
894 | "dev": true,
895 | "optional": true
896 | },
897 | "esbuild-sunos-64": {
898 | "version": "0.14.45",
899 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.45.tgz",
900 | "integrity": "sha512-WmWu4wAm8mIxxK9aWFCj5VHunY3BHQDT3dAPexMLLszPyMF7RDtUYf+Dash9tjyitvnoxPAvR7DpWpirDLQIlQ==",
901 | "dev": true,
902 | "optional": true
903 | },
904 | "esbuild-windows-32": {
905 | "version": "0.14.45",
906 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.45.tgz",
907 | "integrity": "sha512-DPPehKwPJFBoSG+jILc/vcJNN8pTwz1m6FWojxqtqPhgw8OabTgN4vL7gNMqL/FSeDxF+zyvZeeMrZFYF1d81Q==",
908 | "dev": true,
909 | "optional": true
910 | },
911 | "esbuild-windows-64": {
912 | "version": "0.14.45",
913 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.45.tgz",
914 | "integrity": "sha512-t6bxFZcp9bLmSs+1pCNL/BW2bq3QEQHxU4HoiMEyWfF8QBU8iNXFI1iLGdyCzB1Ue2739h55tpOvojFrfyNPWA==",
915 | "dev": true,
916 | "optional": true
917 | },
918 | "esbuild-windows-arm64": {
919 | "version": "0.14.45",
920 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.45.tgz",
921 | "integrity": "sha512-DnhrvjECBJ2L0owoznPb4RqQKZ498SM8J+YHqmqzi0Gf/enkUwwTjB8vPCK6dDuFnNU/NE8f94FhKdkBHYruDQ==",
922 | "dev": true,
923 | "optional": true
924 | },
925 | "escalade": {
926 | "version": "3.1.1",
927 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
928 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
929 | },
930 | "escape-html": {
931 | "version": "1.0.3",
932 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
933 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
934 | },
935 | "escape-string-regexp": {
936 | "version": "1.0.5",
937 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
938 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
939 | },
940 | "estree-walker": {
941 | "version": "2.0.2",
942 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
943 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
944 | },
945 | "extend": {
946 | "version": "3.0.2",
947 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
948 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
949 | },
950 | "extsprintf": {
951 | "version": "1.3.0",
952 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
953 | "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
954 | },
955 | "fast-deep-equal": {
956 | "version": "3.1.3",
957 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
958 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
959 | },
960 | "fast-json-stable-stringify": {
961 | "version": "2.1.0",
962 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
963 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
964 | },
965 | "fill-range": {
966 | "version": "7.0.1",
967 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
968 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
969 | "dev": true,
970 | "requires": {
971 | "to-regex-range": "^5.0.1"
972 | }
973 | },
974 | "find-up": {
975 | "version": "4.1.0",
976 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
977 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
978 | "requires": {
979 | "locate-path": "^5.0.0",
980 | "path-exists": "^4.0.0"
981 | }
982 | },
983 | "forever-agent": {
984 | "version": "0.6.1",
985 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
986 | "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
987 | },
988 | "form-data": {
989 | "version": "2.3.3",
990 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
991 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
992 | "requires": {
993 | "asynckit": "^0.4.0",
994 | "combined-stream": "^1.0.6",
995 | "mime-types": "^2.1.12"
996 | }
997 | },
998 | "fs-minipass": {
999 | "version": "2.1.0",
1000 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
1001 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
1002 | "requires": {
1003 | "minipass": "^3.0.0"
1004 | }
1005 | },
1006 | "fs.realpath": {
1007 | "version": "1.0.0",
1008 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1009 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
1010 | },
1011 | "fsevents": {
1012 | "version": "2.3.2",
1013 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1014 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1015 | "dev": true,
1016 | "optional": true
1017 | },
1018 | "function-bind": {
1019 | "version": "1.1.1",
1020 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1021 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
1022 | },
1023 | "gauge": {
1024 | "version": "4.0.4",
1025 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
1026 | "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
1027 | "requires": {
1028 | "aproba": "^1.0.3 || ^2.0.0",
1029 | "color-support": "^1.1.3",
1030 | "console-control-strings": "^1.1.0",
1031 | "has-unicode": "^2.0.1",
1032 | "signal-exit": "^3.0.7",
1033 | "string-width": "^4.2.3",
1034 | "strip-ansi": "^6.0.1",
1035 | "wide-align": "^1.1.5"
1036 | }
1037 | },
1038 | "gaze": {
1039 | "version": "1.1.3",
1040 | "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
1041 | "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
1042 | "requires": {
1043 | "globule": "^1.0.0"
1044 | }
1045 | },
1046 | "get-caller-file": {
1047 | "version": "2.0.5",
1048 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1049 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
1050 | },
1051 | "get-stdin": {
1052 | "version": "4.0.1",
1053 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
1054 | "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw=="
1055 | },
1056 | "getpass": {
1057 | "version": "0.1.7",
1058 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
1059 | "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
1060 | "requires": {
1061 | "assert-plus": "^1.0.0"
1062 | }
1063 | },
1064 | "glob": {
1065 | "version": "7.2.3",
1066 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1067 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1068 | "requires": {
1069 | "fs.realpath": "^1.0.0",
1070 | "inflight": "^1.0.4",
1071 | "inherits": "2",
1072 | "minimatch": "^3.1.1",
1073 | "once": "^1.3.0",
1074 | "path-is-absolute": "^1.0.0"
1075 | },
1076 | "dependencies": {
1077 | "minimatch": {
1078 | "version": "3.1.2",
1079 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1080 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1081 | "requires": {
1082 | "brace-expansion": "^1.1.7"
1083 | }
1084 | }
1085 | }
1086 | },
1087 | "glob-parent": {
1088 | "version": "5.1.2",
1089 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1090 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1091 | "dev": true,
1092 | "requires": {
1093 | "is-glob": "^4.0.1"
1094 | }
1095 | },
1096 | "globule": {
1097 | "version": "1.3.3",
1098 | "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz",
1099 | "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==",
1100 | "requires": {
1101 | "glob": "~7.1.1",
1102 | "lodash": "~4.17.10",
1103 | "minimatch": "~3.0.2"
1104 | },
1105 | "dependencies": {
1106 | "glob": {
1107 | "version": "7.1.7",
1108 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
1109 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
1110 | "requires": {
1111 | "fs.realpath": "^1.0.0",
1112 | "inflight": "^1.0.4",
1113 | "inherits": "2",
1114 | "minimatch": "^3.0.4",
1115 | "once": "^1.3.0",
1116 | "path-is-absolute": "^1.0.0"
1117 | }
1118 | }
1119 | }
1120 | },
1121 | "graceful-fs": {
1122 | "version": "4.2.10",
1123 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
1124 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
1125 | },
1126 | "har-schema": {
1127 | "version": "2.0.0",
1128 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1129 | "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
1130 | },
1131 | "har-validator": {
1132 | "version": "5.1.5",
1133 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
1134 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
1135 | "requires": {
1136 | "ajv": "^6.12.3",
1137 | "har-schema": "^2.0.0"
1138 | }
1139 | },
1140 | "hard-rejection": {
1141 | "version": "2.1.0",
1142 | "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
1143 | "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA=="
1144 | },
1145 | "has": {
1146 | "version": "1.0.3",
1147 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1148 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1149 | "requires": {
1150 | "function-bind": "^1.1.1"
1151 | }
1152 | },
1153 | "has-flag": {
1154 | "version": "4.0.0",
1155 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1156 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
1157 | },
1158 | "has-unicode": {
1159 | "version": "2.0.1",
1160 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
1161 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
1162 | },
1163 | "hosted-git-info": {
1164 | "version": "4.1.0",
1165 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
1166 | "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
1167 | "requires": {
1168 | "lru-cache": "^6.0.0"
1169 | }
1170 | },
1171 | "http-cache-semantics": {
1172 | "version": "4.1.0",
1173 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
1174 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
1175 | },
1176 | "http-proxy-agent": {
1177 | "version": "4.0.1",
1178 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
1179 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
1180 | "requires": {
1181 | "@tootallnate/once": "1",
1182 | "agent-base": "6",
1183 | "debug": "4"
1184 | }
1185 | },
1186 | "http-signature": {
1187 | "version": "1.2.0",
1188 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1189 | "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
1190 | "requires": {
1191 | "assert-plus": "^1.0.0",
1192 | "jsprim": "^1.2.2",
1193 | "sshpk": "^1.7.0"
1194 | }
1195 | },
1196 | "https-proxy-agent": {
1197 | "version": "5.0.1",
1198 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
1199 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
1200 | "requires": {
1201 | "agent-base": "6",
1202 | "debug": "4"
1203 | }
1204 | },
1205 | "humanize-ms": {
1206 | "version": "1.2.1",
1207 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
1208 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
1209 | "requires": {
1210 | "ms": "^2.0.0"
1211 | }
1212 | },
1213 | "iconv-lite": {
1214 | "version": "0.6.3",
1215 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
1216 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
1217 | "optional": true,
1218 | "requires": {
1219 | "safer-buffer": ">= 2.1.2 < 3.0.0"
1220 | }
1221 | },
1222 | "immutable": {
1223 | "version": "4.1.0",
1224 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
1225 | "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==",
1226 | "dev": true
1227 | },
1228 | "imurmurhash": {
1229 | "version": "0.1.4",
1230 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1231 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
1232 | },
1233 | "indent-string": {
1234 | "version": "4.0.0",
1235 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
1236 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
1237 | },
1238 | "infer-owner": {
1239 | "version": "1.0.4",
1240 | "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
1241 | "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
1242 | },
1243 | "inflight": {
1244 | "version": "1.0.6",
1245 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1246 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1247 | "requires": {
1248 | "once": "^1.3.0",
1249 | "wrappy": "1"
1250 | }
1251 | },
1252 | "inherits": {
1253 | "version": "2.0.4",
1254 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1255 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1256 | },
1257 | "ip": {
1258 | "version": "1.1.8",
1259 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
1260 | "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
1261 | },
1262 | "is-arrayish": {
1263 | "version": "0.2.1",
1264 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1265 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
1266 | },
1267 | "is-binary-path": {
1268 | "version": "2.1.0",
1269 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1270 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1271 | "dev": true,
1272 | "requires": {
1273 | "binary-extensions": "^2.0.0"
1274 | }
1275 | },
1276 | "is-core-module": {
1277 | "version": "2.9.0",
1278 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
1279 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
1280 | "requires": {
1281 | "has": "^1.0.3"
1282 | }
1283 | },
1284 | "is-extglob": {
1285 | "version": "2.1.1",
1286 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1287 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1288 | "dev": true
1289 | },
1290 | "is-fullwidth-code-point": {
1291 | "version": "3.0.0",
1292 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1293 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
1294 | },
1295 | "is-glob": {
1296 | "version": "4.0.3",
1297 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1298 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1299 | "dev": true,
1300 | "requires": {
1301 | "is-extglob": "^2.1.1"
1302 | }
1303 | },
1304 | "is-lambda": {
1305 | "version": "1.0.1",
1306 | "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
1307 | "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="
1308 | },
1309 | "is-number": {
1310 | "version": "7.0.0",
1311 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1312 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1313 | "dev": true
1314 | },
1315 | "is-plain-obj": {
1316 | "version": "1.1.0",
1317 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
1318 | "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="
1319 | },
1320 | "is-typedarray": {
1321 | "version": "1.0.0",
1322 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1323 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
1324 | },
1325 | "isarray": {
1326 | "version": "1.0.0",
1327 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1328 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
1329 | },
1330 | "isexe": {
1331 | "version": "2.0.0",
1332 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1333 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
1334 | },
1335 | "isstream": {
1336 | "version": "0.1.2",
1337 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1338 | "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
1339 | },
1340 | "js-base64": {
1341 | "version": "2.6.4",
1342 | "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
1343 | "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
1344 | },
1345 | "js-tokens": {
1346 | "version": "4.0.0",
1347 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1348 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1349 | },
1350 | "jsbn": {
1351 | "version": "0.1.1",
1352 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1353 | "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
1354 | },
1355 | "json-parse-even-better-errors": {
1356 | "version": "2.3.1",
1357 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
1358 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
1359 | },
1360 | "json-schema": {
1361 | "version": "0.4.0",
1362 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
1363 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
1364 | },
1365 | "json-schema-traverse": {
1366 | "version": "0.4.1",
1367 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1368 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
1369 | },
1370 | "json-stringify-safe": {
1371 | "version": "5.0.1",
1372 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1373 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
1374 | },
1375 | "jsprim": {
1376 | "version": "1.4.2",
1377 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
1378 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
1379 | "requires": {
1380 | "assert-plus": "1.0.0",
1381 | "extsprintf": "1.3.0",
1382 | "json-schema": "0.4.0",
1383 | "verror": "1.10.0"
1384 | }
1385 | },
1386 | "kind-of": {
1387 | "version": "6.0.3",
1388 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
1389 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
1390 | },
1391 | "klona": {
1392 | "version": "2.0.5",
1393 | "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
1394 | "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ=="
1395 | },
1396 | "lines-and-columns": {
1397 | "version": "1.2.4",
1398 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1399 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
1400 | },
1401 | "locate-path": {
1402 | "version": "5.0.0",
1403 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
1404 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
1405 | "requires": {
1406 | "p-locate": "^4.1.0"
1407 | }
1408 | },
1409 | "lodash": {
1410 | "version": "4.17.21",
1411 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1412 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
1413 | },
1414 | "lodash-es": {
1415 | "version": "4.17.21",
1416 | "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
1417 | "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
1418 | },
1419 | "lodash-unified": {
1420 | "version": "1.0.2",
1421 | "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.2.tgz",
1422 | "integrity": "sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g=="
1423 | },
1424 | "lru-cache": {
1425 | "version": "6.0.0",
1426 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1427 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1428 | "requires": {
1429 | "yallist": "^4.0.0"
1430 | }
1431 | },
1432 | "magic-string": {
1433 | "version": "0.25.9",
1434 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
1435 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
1436 | "requires": {
1437 | "sourcemap-codec": "^1.4.8"
1438 | }
1439 | },
1440 | "make-fetch-happen": {
1441 | "version": "9.1.0",
1442 | "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
1443 | "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
1444 | "requires": {
1445 | "agentkeepalive": "^4.1.3",
1446 | "cacache": "^15.2.0",
1447 | "http-cache-semantics": "^4.1.0",
1448 | "http-proxy-agent": "^4.0.1",
1449 | "https-proxy-agent": "^5.0.0",
1450 | "is-lambda": "^1.0.1",
1451 | "lru-cache": "^6.0.0",
1452 | "minipass": "^3.1.3",
1453 | "minipass-collect": "^1.0.2",
1454 | "minipass-fetch": "^1.3.2",
1455 | "minipass-flush": "^1.0.5",
1456 | "minipass-pipeline": "^1.2.4",
1457 | "negotiator": "^0.6.2",
1458 | "promise-retry": "^2.0.1",
1459 | "socks-proxy-agent": "^6.0.0",
1460 | "ssri": "^8.0.0"
1461 | }
1462 | },
1463 | "map-obj": {
1464 | "version": "4.3.0",
1465 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
1466 | "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ=="
1467 | },
1468 | "memoize-one": {
1469 | "version": "6.0.0",
1470 | "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
1471 | "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
1472 | },
1473 | "meow": {
1474 | "version": "9.0.0",
1475 | "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
1476 | "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
1477 | "requires": {
1478 | "@types/minimist": "^1.2.0",
1479 | "camelcase-keys": "^6.2.2",
1480 | "decamelize": "^1.2.0",
1481 | "decamelize-keys": "^1.1.0",
1482 | "hard-rejection": "^2.1.0",
1483 | "minimist-options": "4.1.0",
1484 | "normalize-package-data": "^3.0.0",
1485 | "read-pkg-up": "^7.0.1",
1486 | "redent": "^3.0.0",
1487 | "trim-newlines": "^3.0.0",
1488 | "type-fest": "^0.18.0",
1489 | "yargs-parser": "^20.2.3"
1490 | }
1491 | },
1492 | "mime-db": {
1493 | "version": "1.52.0",
1494 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1495 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1496 | },
1497 | "mime-types": {
1498 | "version": "2.1.35",
1499 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1500 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1501 | "requires": {
1502 | "mime-db": "1.52.0"
1503 | }
1504 | },
1505 | "min-indent": {
1506 | "version": "1.0.1",
1507 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
1508 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="
1509 | },
1510 | "minimatch": {
1511 | "version": "3.0.8",
1512 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
1513 | "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
1514 | "requires": {
1515 | "brace-expansion": "^1.1.7"
1516 | }
1517 | },
1518 | "minimist-options": {
1519 | "version": "4.1.0",
1520 | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
1521 | "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
1522 | "requires": {
1523 | "arrify": "^1.0.1",
1524 | "is-plain-obj": "^1.1.0",
1525 | "kind-of": "^6.0.3"
1526 | }
1527 | },
1528 | "minipass": {
1529 | "version": "3.3.3",
1530 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.3.tgz",
1531 | "integrity": "sha512-N0BOsdFAlNRfmwMhjAsLVWOk7Ljmeb39iqFlsV1At+jqRhSUP9yeof8FyJu4imaJiSUp8vQebWD/guZwGQC8iA==",
1532 | "requires": {
1533 | "yallist": "^4.0.0"
1534 | }
1535 | },
1536 | "minipass-collect": {
1537 | "version": "1.0.2",
1538 | "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
1539 | "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
1540 | "requires": {
1541 | "minipass": "^3.0.0"
1542 | }
1543 | },
1544 | "minipass-fetch": {
1545 | "version": "1.4.1",
1546 | "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
1547 | "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
1548 | "requires": {
1549 | "encoding": "^0.1.12",
1550 | "minipass": "^3.1.0",
1551 | "minipass-sized": "^1.0.3",
1552 | "minizlib": "^2.0.0"
1553 | }
1554 | },
1555 | "minipass-flush": {
1556 | "version": "1.0.5",
1557 | "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
1558 | "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
1559 | "requires": {
1560 | "minipass": "^3.0.0"
1561 | }
1562 | },
1563 | "minipass-pipeline": {
1564 | "version": "1.2.4",
1565 | "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
1566 | "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
1567 | "requires": {
1568 | "minipass": "^3.0.0"
1569 | }
1570 | },
1571 | "minipass-sized": {
1572 | "version": "1.0.3",
1573 | "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
1574 | "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
1575 | "requires": {
1576 | "minipass": "^3.0.0"
1577 | }
1578 | },
1579 | "minizlib": {
1580 | "version": "2.1.2",
1581 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
1582 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
1583 | "requires": {
1584 | "minipass": "^3.0.0",
1585 | "yallist": "^4.0.0"
1586 | }
1587 | },
1588 | "mkdirp": {
1589 | "version": "1.0.4",
1590 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1591 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
1592 | },
1593 | "ms": {
1594 | "version": "2.1.2",
1595 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1596 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1597 | },
1598 | "nan": {
1599 | "version": "2.16.0",
1600 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz",
1601 | "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA=="
1602 | },
1603 | "nanoid": {
1604 | "version": "3.3.4",
1605 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
1606 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
1607 | },
1608 | "negotiator": {
1609 | "version": "0.6.3",
1610 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1611 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1612 | },
1613 | "neo-async": {
1614 | "version": "2.6.2",
1615 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
1616 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
1617 | },
1618 | "node-gyp": {
1619 | "version": "8.4.1",
1620 | "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
1621 | "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
1622 | "requires": {
1623 | "env-paths": "^2.2.0",
1624 | "glob": "^7.1.4",
1625 | "graceful-fs": "^4.2.6",
1626 | "make-fetch-happen": "^9.1.0",
1627 | "nopt": "^5.0.0",
1628 | "npmlog": "^6.0.0",
1629 | "rimraf": "^3.0.2",
1630 | "semver": "^7.3.5",
1631 | "tar": "^6.1.2",
1632 | "which": "^2.0.2"
1633 | },
1634 | "dependencies": {
1635 | "npmlog": {
1636 | "version": "6.0.2",
1637 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
1638 | "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
1639 | "requires": {
1640 | "are-we-there-yet": "^3.0.0",
1641 | "console-control-strings": "^1.1.0",
1642 | "gauge": "^4.0.3",
1643 | "set-blocking": "^2.0.0"
1644 | }
1645 | }
1646 | }
1647 | },
1648 | "node-sass": {
1649 | "version": "7.0.1",
1650 | "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz",
1651 | "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==",
1652 | "requires": {
1653 | "async-foreach": "^0.1.3",
1654 | "chalk": "^4.1.2",
1655 | "cross-spawn": "^7.0.3",
1656 | "gaze": "^1.0.0",
1657 | "get-stdin": "^4.0.1",
1658 | "glob": "^7.0.3",
1659 | "lodash": "^4.17.15",
1660 | "meow": "^9.0.0",
1661 | "nan": "^2.13.2",
1662 | "node-gyp": "^8.4.1",
1663 | "npmlog": "^5.0.0",
1664 | "request": "^2.88.0",
1665 | "sass-graph": "4.0.0",
1666 | "stdout-stream": "^1.4.0",
1667 | "true-case-path": "^1.0.2"
1668 | }
1669 | },
1670 | "nopt": {
1671 | "version": "5.0.0",
1672 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
1673 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
1674 | "requires": {
1675 | "abbrev": "1"
1676 | }
1677 | },
1678 | "normalize-package-data": {
1679 | "version": "3.0.3",
1680 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
1681 | "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
1682 | "requires": {
1683 | "hosted-git-info": "^4.0.1",
1684 | "is-core-module": "^2.5.0",
1685 | "semver": "^7.3.4",
1686 | "validate-npm-package-license": "^3.0.1"
1687 | }
1688 | },
1689 | "normalize-path": {
1690 | "version": "3.0.0",
1691 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1692 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1693 | "dev": true
1694 | },
1695 | "normalize-wheel-es": {
1696 | "version": "1.1.2",
1697 | "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz",
1698 | "integrity": "sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png=="
1699 | },
1700 | "npmlog": {
1701 | "version": "5.0.1",
1702 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
1703 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
1704 | "requires": {
1705 | "are-we-there-yet": "^2.0.0",
1706 | "console-control-strings": "^1.1.0",
1707 | "gauge": "^3.0.0",
1708 | "set-blocking": "^2.0.0"
1709 | },
1710 | "dependencies": {
1711 | "are-we-there-yet": {
1712 | "version": "2.0.0",
1713 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
1714 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
1715 | "requires": {
1716 | "delegates": "^1.0.0",
1717 | "readable-stream": "^3.6.0"
1718 | }
1719 | },
1720 | "gauge": {
1721 | "version": "3.0.2",
1722 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
1723 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
1724 | "requires": {
1725 | "aproba": "^1.0.3 || ^2.0.0",
1726 | "color-support": "^1.1.2",
1727 | "console-control-strings": "^1.0.0",
1728 | "has-unicode": "^2.0.1",
1729 | "object-assign": "^4.1.1",
1730 | "signal-exit": "^3.0.0",
1731 | "string-width": "^4.2.3",
1732 | "strip-ansi": "^6.0.1",
1733 | "wide-align": "^1.1.2"
1734 | }
1735 | }
1736 | }
1737 | },
1738 | "oauth-sign": {
1739 | "version": "0.9.0",
1740 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1741 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
1742 | },
1743 | "object-assign": {
1744 | "version": "4.1.1",
1745 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1746 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
1747 | },
1748 | "once": {
1749 | "version": "1.4.0",
1750 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1751 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1752 | "requires": {
1753 | "wrappy": "1"
1754 | }
1755 | },
1756 | "p-limit": {
1757 | "version": "2.3.0",
1758 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
1759 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
1760 | "requires": {
1761 | "p-try": "^2.0.0"
1762 | }
1763 | },
1764 | "p-locate": {
1765 | "version": "4.1.0",
1766 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
1767 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
1768 | "requires": {
1769 | "p-limit": "^2.2.0"
1770 | }
1771 | },
1772 | "p-map": {
1773 | "version": "4.0.0",
1774 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
1775 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
1776 | "requires": {
1777 | "aggregate-error": "^3.0.0"
1778 | }
1779 | },
1780 | "p-try": {
1781 | "version": "2.2.0",
1782 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
1783 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
1784 | },
1785 | "parse-json": {
1786 | "version": "5.2.0",
1787 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
1788 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
1789 | "requires": {
1790 | "@babel/code-frame": "^7.0.0",
1791 | "error-ex": "^1.3.1",
1792 | "json-parse-even-better-errors": "^2.3.0",
1793 | "lines-and-columns": "^1.1.6"
1794 | }
1795 | },
1796 | "path": {
1797 | "version": "0.12.7",
1798 | "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
1799 | "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
1800 | "requires": {
1801 | "process": "^0.11.1",
1802 | "util": "^0.10.3"
1803 | }
1804 | },
1805 | "path-exists": {
1806 | "version": "4.0.0",
1807 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
1808 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
1809 | },
1810 | "path-is-absolute": {
1811 | "version": "1.0.1",
1812 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1813 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
1814 | },
1815 | "path-key": {
1816 | "version": "3.1.1",
1817 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1818 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
1819 | },
1820 | "path-parse": {
1821 | "version": "1.0.7",
1822 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1823 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
1824 | },
1825 | "performance-now": {
1826 | "version": "2.1.0",
1827 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1828 | "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
1829 | },
1830 | "picocolors": {
1831 | "version": "1.0.0",
1832 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1833 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
1834 | },
1835 | "picomatch": {
1836 | "version": "2.3.1",
1837 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1838 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1839 | "dev": true
1840 | },
1841 | "postcss": {
1842 | "version": "8.4.14",
1843 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
1844 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
1845 | "requires": {
1846 | "nanoid": "^3.3.4",
1847 | "picocolors": "^1.0.0",
1848 | "source-map-js": "^1.0.2"
1849 | }
1850 | },
1851 | "process": {
1852 | "version": "0.11.10",
1853 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
1854 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
1855 | },
1856 | "process-nextick-args": {
1857 | "version": "2.0.1",
1858 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
1859 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
1860 | },
1861 | "promise-inflight": {
1862 | "version": "1.0.1",
1863 | "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
1864 | "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="
1865 | },
1866 | "promise-retry": {
1867 | "version": "2.0.1",
1868 | "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
1869 | "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
1870 | "requires": {
1871 | "err-code": "^2.0.2",
1872 | "retry": "^0.12.0"
1873 | }
1874 | },
1875 | "psl": {
1876 | "version": "1.8.0",
1877 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
1878 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
1879 | },
1880 | "punycode": {
1881 | "version": "2.1.1",
1882 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1883 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
1884 | },
1885 | "qs": {
1886 | "version": "6.5.3",
1887 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
1888 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
1889 | },
1890 | "quick-lru": {
1891 | "version": "4.0.1",
1892 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
1893 | "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="
1894 | },
1895 | "read-pkg": {
1896 | "version": "5.2.0",
1897 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
1898 | "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
1899 | "requires": {
1900 | "@types/normalize-package-data": "^2.4.0",
1901 | "normalize-package-data": "^2.5.0",
1902 | "parse-json": "^5.0.0",
1903 | "type-fest": "^0.6.0"
1904 | },
1905 | "dependencies": {
1906 | "hosted-git-info": {
1907 | "version": "2.8.9",
1908 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
1909 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
1910 | },
1911 | "normalize-package-data": {
1912 | "version": "2.5.0",
1913 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
1914 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
1915 | "requires": {
1916 | "hosted-git-info": "^2.1.4",
1917 | "resolve": "^1.10.0",
1918 | "semver": "2 || 3 || 4 || 5",
1919 | "validate-npm-package-license": "^3.0.1"
1920 | }
1921 | },
1922 | "semver": {
1923 | "version": "5.7.1",
1924 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1925 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
1926 | },
1927 | "type-fest": {
1928 | "version": "0.6.0",
1929 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
1930 | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="
1931 | }
1932 | }
1933 | },
1934 | "read-pkg-up": {
1935 | "version": "7.0.1",
1936 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
1937 | "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
1938 | "requires": {
1939 | "find-up": "^4.1.0",
1940 | "read-pkg": "^5.2.0",
1941 | "type-fest": "^0.8.1"
1942 | },
1943 | "dependencies": {
1944 | "type-fest": {
1945 | "version": "0.8.1",
1946 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
1947 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
1948 | }
1949 | }
1950 | },
1951 | "readable-stream": {
1952 | "version": "3.6.0",
1953 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1954 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1955 | "requires": {
1956 | "inherits": "^2.0.3",
1957 | "string_decoder": "^1.1.1",
1958 | "util-deprecate": "^1.0.1"
1959 | }
1960 | },
1961 | "readdirp": {
1962 | "version": "3.6.0",
1963 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1964 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1965 | "dev": true,
1966 | "requires": {
1967 | "picomatch": "^2.2.1"
1968 | }
1969 | },
1970 | "redent": {
1971 | "version": "3.0.0",
1972 | "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
1973 | "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
1974 | "requires": {
1975 | "indent-string": "^4.0.0",
1976 | "strip-indent": "^3.0.0"
1977 | }
1978 | },
1979 | "request": {
1980 | "version": "2.88.2",
1981 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
1982 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
1983 | "requires": {
1984 | "aws-sign2": "~0.7.0",
1985 | "aws4": "^1.8.0",
1986 | "caseless": "~0.12.0",
1987 | "combined-stream": "~1.0.6",
1988 | "extend": "~3.0.2",
1989 | "forever-agent": "~0.6.1",
1990 | "form-data": "~2.3.2",
1991 | "har-validator": "~5.1.3",
1992 | "http-signature": "~1.2.0",
1993 | "is-typedarray": "~1.0.0",
1994 | "isstream": "~0.1.2",
1995 | "json-stringify-safe": "~5.0.1",
1996 | "mime-types": "~2.1.19",
1997 | "oauth-sign": "~0.9.0",
1998 | "performance-now": "^2.1.0",
1999 | "qs": "~6.5.2",
2000 | "safe-buffer": "^5.1.2",
2001 | "tough-cookie": "~2.5.0",
2002 | "tunnel-agent": "^0.6.0",
2003 | "uuid": "^3.3.2"
2004 | }
2005 | },
2006 | "require-directory": {
2007 | "version": "2.1.1",
2008 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2009 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
2010 | },
2011 | "resolve": {
2012 | "version": "1.22.0",
2013 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
2014 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
2015 | "requires": {
2016 | "is-core-module": "^2.8.1",
2017 | "path-parse": "^1.0.7",
2018 | "supports-preserve-symlinks-flag": "^1.0.0"
2019 | }
2020 | },
2021 | "retry": {
2022 | "version": "0.12.0",
2023 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
2024 | "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="
2025 | },
2026 | "rimraf": {
2027 | "version": "3.0.2",
2028 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2029 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2030 | "requires": {
2031 | "glob": "^7.1.3"
2032 | }
2033 | },
2034 | "rollup": {
2035 | "version": "2.75.6",
2036 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz",
2037 | "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==",
2038 | "dev": true,
2039 | "requires": {
2040 | "fsevents": "~2.3.2"
2041 | }
2042 | },
2043 | "safe-buffer": {
2044 | "version": "5.2.1",
2045 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2046 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
2047 | },
2048 | "safer-buffer": {
2049 | "version": "2.1.2",
2050 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2051 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2052 | },
2053 | "sass": {
2054 | "version": "1.52.3",
2055 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz",
2056 | "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==",
2057 | "dev": true,
2058 | "requires": {
2059 | "chokidar": ">=3.0.0 <4.0.0",
2060 | "immutable": "^4.0.0",
2061 | "source-map-js": ">=0.6.2 <2.0.0"
2062 | }
2063 | },
2064 | "sass-graph": {
2065 | "version": "4.0.0",
2066 | "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz",
2067 | "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==",
2068 | "requires": {
2069 | "glob": "^7.0.0",
2070 | "lodash": "^4.17.11",
2071 | "scss-tokenizer": "^0.3.0",
2072 | "yargs": "^17.2.1"
2073 | }
2074 | },
2075 | "sass-loader": {
2076 | "version": "13.0.0",
2077 | "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.0.tgz",
2078 | "integrity": "sha512-IHCFecI+rbPvXE2zO/mqdVFe8MU7ElGrwga9hh2H65Ru4iaBJAMRteum1c4Gsxi9Cq1FOtTEDd6+/AEYuQDM4Q==",
2079 | "requires": {
2080 | "klona": "^2.0.4",
2081 | "neo-async": "^2.6.2"
2082 | }
2083 | },
2084 | "scss-tokenizer": {
2085 | "version": "0.3.0",
2086 | "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz",
2087 | "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==",
2088 | "requires": {
2089 | "js-base64": "^2.4.3",
2090 | "source-map": "^0.7.1"
2091 | },
2092 | "dependencies": {
2093 | "source-map": {
2094 | "version": "0.7.4",
2095 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
2096 | "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="
2097 | }
2098 | }
2099 | },
2100 | "semver": {
2101 | "version": "7.3.7",
2102 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
2103 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
2104 | "requires": {
2105 | "lru-cache": "^6.0.0"
2106 | }
2107 | },
2108 | "set-blocking": {
2109 | "version": "2.0.0",
2110 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
2111 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
2112 | },
2113 | "shebang-command": {
2114 | "version": "2.0.0",
2115 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2116 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2117 | "requires": {
2118 | "shebang-regex": "^3.0.0"
2119 | }
2120 | },
2121 | "shebang-regex": {
2122 | "version": "3.0.0",
2123 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2124 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
2125 | },
2126 | "signal-exit": {
2127 | "version": "3.0.7",
2128 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
2129 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
2130 | },
2131 | "smart-buffer": {
2132 | "version": "4.2.0",
2133 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
2134 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
2135 | },
2136 | "socks": {
2137 | "version": "2.6.2",
2138 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz",
2139 | "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==",
2140 | "requires": {
2141 | "ip": "^1.1.5",
2142 | "smart-buffer": "^4.2.0"
2143 | }
2144 | },
2145 | "socks-proxy-agent": {
2146 | "version": "6.2.1",
2147 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
2148 | "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
2149 | "requires": {
2150 | "agent-base": "^6.0.2",
2151 | "debug": "^4.3.3",
2152 | "socks": "^2.6.2"
2153 | }
2154 | },
2155 | "source-map": {
2156 | "version": "0.6.1",
2157 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2158 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
2159 | },
2160 | "source-map-js": {
2161 | "version": "1.0.2",
2162 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
2163 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
2164 | },
2165 | "sourcemap-codec": {
2166 | "version": "1.4.8",
2167 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
2168 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
2169 | },
2170 | "spdx-correct": {
2171 | "version": "3.1.1",
2172 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
2173 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
2174 | "requires": {
2175 | "spdx-expression-parse": "^3.0.0",
2176 | "spdx-license-ids": "^3.0.0"
2177 | }
2178 | },
2179 | "spdx-exceptions": {
2180 | "version": "2.3.0",
2181 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
2182 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
2183 | },
2184 | "spdx-expression-parse": {
2185 | "version": "3.0.1",
2186 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
2187 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
2188 | "requires": {
2189 | "spdx-exceptions": "^2.1.0",
2190 | "spdx-license-ids": "^3.0.0"
2191 | }
2192 | },
2193 | "spdx-license-ids": {
2194 | "version": "3.0.11",
2195 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
2196 | "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g=="
2197 | },
2198 | "sshpk": {
2199 | "version": "1.17.0",
2200 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
2201 | "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
2202 | "requires": {
2203 | "asn1": "~0.2.3",
2204 | "assert-plus": "^1.0.0",
2205 | "bcrypt-pbkdf": "^1.0.0",
2206 | "dashdash": "^1.12.0",
2207 | "ecc-jsbn": "~0.1.1",
2208 | "getpass": "^0.1.1",
2209 | "jsbn": "~0.1.0",
2210 | "safer-buffer": "^2.0.2",
2211 | "tweetnacl": "~0.14.0"
2212 | }
2213 | },
2214 | "ssri": {
2215 | "version": "8.0.1",
2216 | "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
2217 | "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
2218 | "requires": {
2219 | "minipass": "^3.1.1"
2220 | }
2221 | },
2222 | "stdout-stream": {
2223 | "version": "1.4.1",
2224 | "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
2225 | "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
2226 | "requires": {
2227 | "readable-stream": "^2.0.1"
2228 | },
2229 | "dependencies": {
2230 | "readable-stream": {
2231 | "version": "2.3.7",
2232 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
2233 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
2234 | "requires": {
2235 | "core-util-is": "~1.0.0",
2236 | "inherits": "~2.0.3",
2237 | "isarray": "~1.0.0",
2238 | "process-nextick-args": "~2.0.0",
2239 | "safe-buffer": "~5.1.1",
2240 | "string_decoder": "~1.1.1",
2241 | "util-deprecate": "~1.0.1"
2242 | }
2243 | },
2244 | "safe-buffer": {
2245 | "version": "5.1.2",
2246 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2247 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
2248 | },
2249 | "string_decoder": {
2250 | "version": "1.1.1",
2251 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2252 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2253 | "requires": {
2254 | "safe-buffer": "~5.1.0"
2255 | }
2256 | }
2257 | }
2258 | },
2259 | "string-width": {
2260 | "version": "4.2.3",
2261 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2262 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2263 | "requires": {
2264 | "emoji-regex": "^8.0.0",
2265 | "is-fullwidth-code-point": "^3.0.0",
2266 | "strip-ansi": "^6.0.1"
2267 | }
2268 | },
2269 | "string_decoder": {
2270 | "version": "1.3.0",
2271 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
2272 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
2273 | "requires": {
2274 | "safe-buffer": "~5.2.0"
2275 | }
2276 | },
2277 | "strip-ansi": {
2278 | "version": "6.0.1",
2279 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2280 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2281 | "requires": {
2282 | "ansi-regex": "^5.0.1"
2283 | }
2284 | },
2285 | "strip-indent": {
2286 | "version": "3.0.0",
2287 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
2288 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
2289 | "requires": {
2290 | "min-indent": "^1.0.0"
2291 | }
2292 | },
2293 | "style-loader": {
2294 | "version": "3.3.1",
2295 | "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz",
2296 | "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ=="
2297 | },
2298 | "supports-color": {
2299 | "version": "7.2.0",
2300 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2301 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2302 | "requires": {
2303 | "has-flag": "^4.0.0"
2304 | }
2305 | },
2306 | "supports-preserve-symlinks-flag": {
2307 | "version": "1.0.0",
2308 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2309 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
2310 | },
2311 | "tar": {
2312 | "version": "6.1.11",
2313 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
2314 | "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
2315 | "requires": {
2316 | "chownr": "^2.0.0",
2317 | "fs-minipass": "^2.0.0",
2318 | "minipass": "^3.0.0",
2319 | "minizlib": "^2.1.1",
2320 | "mkdirp": "^1.0.3",
2321 | "yallist": "^4.0.0"
2322 | }
2323 | },
2324 | "to-regex-range": {
2325 | "version": "5.0.1",
2326 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2327 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2328 | "dev": true,
2329 | "requires": {
2330 | "is-number": "^7.0.0"
2331 | }
2332 | },
2333 | "tough-cookie": {
2334 | "version": "2.5.0",
2335 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
2336 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
2337 | "requires": {
2338 | "psl": "^1.1.28",
2339 | "punycode": "^2.1.1"
2340 | }
2341 | },
2342 | "trim-newlines": {
2343 | "version": "3.0.1",
2344 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
2345 | "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw=="
2346 | },
2347 | "true-case-path": {
2348 | "version": "1.0.3",
2349 | "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
2350 | "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
2351 | "requires": {
2352 | "glob": "^7.1.2"
2353 | }
2354 | },
2355 | "tunnel-agent": {
2356 | "version": "0.6.0",
2357 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
2358 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
2359 | "requires": {
2360 | "safe-buffer": "^5.0.1"
2361 | }
2362 | },
2363 | "tweetnacl": {
2364 | "version": "0.14.5",
2365 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
2366 | "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
2367 | },
2368 | "type-fest": {
2369 | "version": "0.18.1",
2370 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
2371 | "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw=="
2372 | },
2373 | "typescript": {
2374 | "version": "4.7.3",
2375 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz",
2376 | "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==",
2377 | "dev": true
2378 | },
2379 | "unique-filename": {
2380 | "version": "1.1.1",
2381 | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
2382 | "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
2383 | "requires": {
2384 | "unique-slug": "^2.0.0"
2385 | }
2386 | },
2387 | "unique-slug": {
2388 | "version": "2.0.2",
2389 | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
2390 | "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
2391 | "requires": {
2392 | "imurmurhash": "^0.1.4"
2393 | }
2394 | },
2395 | "uri-js": {
2396 | "version": "4.4.1",
2397 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2398 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2399 | "requires": {
2400 | "punycode": "^2.1.0"
2401 | }
2402 | },
2403 | "util": {
2404 | "version": "0.10.4",
2405 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
2406 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
2407 | "requires": {
2408 | "inherits": "2.0.3"
2409 | },
2410 | "dependencies": {
2411 | "inherits": {
2412 | "version": "2.0.3",
2413 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
2414 | "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
2415 | }
2416 | }
2417 | },
2418 | "util-deprecate": {
2419 | "version": "1.0.2",
2420 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2421 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
2422 | },
2423 | "uuid": {
2424 | "version": "3.4.0",
2425 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
2426 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
2427 | },
2428 | "validate-npm-package-license": {
2429 | "version": "3.0.4",
2430 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
2431 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
2432 | "requires": {
2433 | "spdx-correct": "^3.0.0",
2434 | "spdx-expression-parse": "^3.0.0"
2435 | }
2436 | },
2437 | "verror": {
2438 | "version": "1.10.0",
2439 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
2440 | "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
2441 | "requires": {
2442 | "assert-plus": "^1.0.0",
2443 | "core-util-is": "1.0.2",
2444 | "extsprintf": "^1.2.0"
2445 | }
2446 | },
2447 | "vite": {
2448 | "version": "2.9.12",
2449 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.12.tgz",
2450 | "integrity": "sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==",
2451 | "dev": true,
2452 | "requires": {
2453 | "esbuild": "^0.14.27",
2454 | "fsevents": "~2.3.2",
2455 | "postcss": "^8.4.13",
2456 | "resolve": "^1.22.0",
2457 | "rollup": "^2.59.0"
2458 | }
2459 | },
2460 | "vue": {
2461 | "version": "3.2.37",
2462 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz",
2463 | "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==",
2464 | "requires": {
2465 | "@vue/compiler-dom": "3.2.37",
2466 | "@vue/compiler-sfc": "3.2.37",
2467 | "@vue/runtime-dom": "3.2.37",
2468 | "@vue/server-renderer": "3.2.37",
2469 | "@vue/shared": "3.2.37"
2470 | }
2471 | },
2472 | "vue-demi": {
2473 | "version": "0.13.1",
2474 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.1.tgz",
2475 | "integrity": "sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg=="
2476 | },
2477 | "vue-tsc": {
2478 | "version": "0.34.17",
2479 | "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.34.17.tgz",
2480 | "integrity": "sha512-jzUXky44ZLHC4daaJag7FQr3idlPYN719/K1eObGljz5KaS2UnVGTU/XSYCd7d6ampYYg4OsyalbHyJIxV0aEQ==",
2481 | "dev": true,
2482 | "requires": {
2483 | "@volar/vue-typescript": "0.34.17"
2484 | }
2485 | },
2486 | "which": {
2487 | "version": "2.0.2",
2488 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2489 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2490 | "requires": {
2491 | "isexe": "^2.0.0"
2492 | }
2493 | },
2494 | "wide-align": {
2495 | "version": "1.1.5",
2496 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
2497 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
2498 | "requires": {
2499 | "string-width": "^1.0.2 || 2 || 3 || 4"
2500 | }
2501 | },
2502 | "wrap-ansi": {
2503 | "version": "7.0.0",
2504 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2505 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2506 | "requires": {
2507 | "ansi-styles": "^4.0.0",
2508 | "string-width": "^4.1.0",
2509 | "strip-ansi": "^6.0.0"
2510 | }
2511 | },
2512 | "wrappy": {
2513 | "version": "1.0.2",
2514 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2515 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
2516 | },
2517 | "y18n": {
2518 | "version": "5.0.8",
2519 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
2520 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
2521 | },
2522 | "yallist": {
2523 | "version": "4.0.0",
2524 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
2525 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
2526 | },
2527 | "yargs": {
2528 | "version": "17.5.1",
2529 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
2530 | "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
2531 | "requires": {
2532 | "cliui": "^7.0.2",
2533 | "escalade": "^3.1.1",
2534 | "get-caller-file": "^2.0.5",
2535 | "require-directory": "^2.1.1",
2536 | "string-width": "^4.2.3",
2537 | "y18n": "^5.0.5",
2538 | "yargs-parser": "^21.0.0"
2539 | },
2540 | "dependencies": {
2541 | "yargs-parser": {
2542 | "version": "21.0.1",
2543 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
2544 | "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg=="
2545 | }
2546 | }
2547 | },
2548 | "yargs-parser": {
2549 | "version": "20.2.9",
2550 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
2551 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
2552 | }
2553 | }
2554 | }
2555 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-power-tree",
3 | "private": false,
4 | "version": "0.0.6",
5 | "files": [
6 | "dist"
7 | ],
8 | "main": "./dist/vue-power-tree.umd.js",
9 | "module": "./dist/vue-power-tree.es.js",
10 | "exports": {
11 | ".": {
12 | "import": "./dist/vue-power-tree.es.js",
13 | "require": "./dist/vue-power-tree.umd.js"
14 | },
15 | "./dist/style.css": {
16 | "import": "./dist/style.css",
17 | "require": "./dist/style.css"
18 | }
19 | },
20 | "scripts": {
21 | "dev": "vite",
22 | "build": "vite build"
23 | },
24 | "dependencies": {
25 | "element-plus": "^2.2.5",
26 | "node-sass": "^7.0.1",
27 | "path": "^0.12.7",
28 | "sass-loader": "^13.0.0",
29 | "style-loader": "^3.3.1",
30 | "vue": "^3.2.25"
31 | },
32 | "devDependencies": {
33 | "@vitejs/plugin-vue": "^2.3.3",
34 | "@vueuse/core": "^8.6.0",
35 | "sass": "^1.52.3",
36 | "typescript": "^4.5.4",
37 | "vite": "^2.9.9",
38 | "vue-tsc": "^0.34.7"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/packages/index.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: lzp
3 | * @Date: 2022-06-17 10:38:06
4 | * @Description: file content
5 | */
6 |
7 | import Tree from './tree/src/tree.vue'
8 | import type { App,Plugin } from 'vue'
9 |
10 | type SFCWithInstall = T & Plugin
11 |
12 | Tree.install = (app: App): void => {
13 | app.component(Tree.name, Tree)
14 | }
15 |
16 | const _Tree = Tree as SFCWithInstall
17 |
18 | export default _Tree
19 | export const VuePowerTree = _Tree
--------------------------------------------------------------------------------
/packages/tree/src/components/collapse-transition.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
71 |
--------------------------------------------------------------------------------
/packages/tree/src/model/node.ts:
--------------------------------------------------------------------------------
1 | import { reactive } from 'vue'
2 | import { hasOwn } from '@vue/shared'
3 | import { NODE_KEY, markNodeData } from './util'
4 | import type TreeStore from './tree-store'
5 | import type {
6 | FakeNode,
7 | TreeKey,
8 | TreeNodeChildState,
9 | TreeNodeData,
10 | TreeNodeLoadedDefaultProps,
11 | TreeNodeOptions,
12 | } from '../tree.type'
13 |
14 | export const getChildState = (node: Node[]): TreeNodeChildState => {
15 | let all = true
16 | let none = true
17 | let allWithoutDisable = true
18 | for (let i = 0, j = node.length; i < j; i++) {
19 | const n = node[i]
20 | if (n.checked !== true || n.indeterminate) {
21 | all = false
22 | if (!n.disabled) {
23 | allWithoutDisable = false
24 | }
25 | }
26 | if (n.checked !== false || n.indeterminate) {
27 | none = false
28 | }
29 | }
30 |
31 | return { all, none, allWithoutDisable, half: !all && !none }
32 | }
33 |
34 | const reInitChecked = function (node: Node): void {
35 | if (node.childNodes.length === 0) return
36 |
37 | const { all, none, half } = getChildState(node.childNodes)
38 | if (all) {
39 | node.checked = true
40 | node.indeterminate = false
41 | } else if (half) {
42 | node.checked = false
43 | node.indeterminate = true
44 | } else if (none) {
45 | node.checked = false
46 | node.indeterminate = false
47 | }
48 |
49 | const parent = node.parent
50 | if (!parent || parent.level === 0) return
51 |
52 | if (!node.store.checkStrictly) {
53 | reInitChecked(parent)
54 | }
55 | }
56 |
57 | const getPropertyFromData = function (node: Node, prop: string): any {
58 | const props = node.store.props
59 | const data = node.data || {}
60 | const config = props[prop]
61 |
62 | if (typeof config === 'function') {
63 | return config(data, node)
64 | } else if (typeof config === 'string') {
65 | return data[config]
66 | } else if (typeof config === 'undefined') {
67 | const dataProp = data[prop]
68 | return dataProp === undefined ? '' : dataProp
69 | }
70 | }
71 |
72 | let nodeIdSeed = 0
73 |
74 | class Node {
75 | id: number
76 | text: string
77 | checked: boolean
78 | indeterminate: boolean
79 | data: TreeNodeData
80 | expanded: boolean
81 | parent: Node
82 | visible: boolean
83 | isCurrent: boolean
84 | store: TreeStore
85 | isLeafByUser: boolean
86 | isLeaf: boolean
87 | canFocus: boolean
88 |
89 | level: number
90 | loaded: boolean
91 | childNodes: Node[]
92 | loading: boolean
93 |
94 | constructor(options: TreeNodeOptions) {
95 | this.id = nodeIdSeed++
96 | this.text = null
97 | this.checked = false
98 | this.indeterminate = false
99 | this.data = null
100 | this.expanded = false
101 | this.parent = null
102 | this.visible = true
103 | this.isCurrent = false
104 | this.canFocus = false
105 |
106 | for (const name in options) {
107 | if (hasOwn(options, name)) {
108 | this[name] = options[name]
109 | }
110 | }
111 |
112 | // internal
113 | this.level = 0
114 | this.loaded = false
115 | this.childNodes = []
116 | this.loading = false
117 |
118 | if (this.parent) {
119 | this.level = this.parent.level + 1
120 | }
121 | }
122 |
123 | initialize() {
124 | const store = this.store
125 | if (!store) {
126 | throw new Error('[Node]store is required!')
127 | }
128 | store.registerNode(this)
129 |
130 | const props = store.props
131 | if (props && typeof props.isLeaf !== 'undefined') {
132 | const isLeaf = getPropertyFromData(this, 'isLeaf')
133 | if (typeof isLeaf === 'boolean') {
134 | this.isLeafByUser = isLeaf
135 | }
136 | }
137 |
138 | if (store.lazy !== true && this.data) {
139 | this.setData(this.data)
140 |
141 | if (store.defaultExpandAll) {
142 | this.expanded = true
143 | this.canFocus = true
144 | }
145 | } else if (this.level > 0 && store.lazy && store.defaultExpandAll) {
146 | this.expand()
147 | }
148 | if (!Array.isArray(this.data)) {
149 | markNodeData(this, this.data)
150 | }
151 | if (!this.data) return
152 |
153 | const defaultExpandedKeys = store.defaultExpandedKeys
154 | const key = store.key
155 |
156 | if (key && defaultExpandedKeys && defaultExpandedKeys.includes(this.key)) {
157 | this.expand(null, store.autoExpandParent)
158 | }
159 |
160 | if (
161 | key &&
162 | store.currentNodeKey !== undefined &&
163 | this.key === store.currentNodeKey
164 | ) {
165 | store.currentNode = this
166 | store.currentNode.isCurrent = true
167 | }
168 |
169 | if (store.lazy) {
170 | store._initDefaultCheckedNode(this)
171 | }
172 |
173 | this.updateLeafState()
174 | if (this.parent && (this.level === 1 || this.parent.expanded === true))
175 | this.canFocus = true
176 | }
177 |
178 | setData(data: TreeNodeData): void {
179 | if (!Array.isArray(data)) {
180 | markNodeData(this, data)
181 | }
182 |
183 | this.data = data
184 | this.childNodes = []
185 |
186 | let children
187 | if (this.level === 0 && Array.isArray(this.data)) {
188 | children = this.data
189 | } else {
190 | children = getPropertyFromData(this, 'children') || []
191 | }
192 |
193 | for (let i = 0, j = children.length; i < j; i++) {
194 | this.insertChild({ data: children[i] })
195 | }
196 | }
197 |
198 | get label(): string {
199 | return getPropertyFromData(this, 'label')
200 | }
201 |
202 | get key(): TreeKey {
203 | const nodeKey = this.store.key
204 | if (this.data) return this.data[nodeKey]
205 | return null
206 | }
207 |
208 | get disabled(): boolean {
209 | return getPropertyFromData(this, 'disabled')
210 | }
211 |
212 | get nextSibling() {
213 | // get nextSibling(): Nullable {
214 | const parent = this.parent
215 | if (parent) {
216 | const index = parent.childNodes.indexOf(this)
217 | if (index > -1) {
218 | return parent.childNodes[index + 1]
219 | }
220 | }
221 | return null
222 | }
223 |
224 | get previousSibling() {
225 | // get previousSibling(): Nullable {
226 | const parent = this.parent
227 | if (parent) {
228 | const index = parent.childNodes.indexOf(this)
229 | if (index > -1) {
230 | return index > 0 ? parent.childNodes[index - 1] : null
231 | }
232 | }
233 | return null
234 | }
235 |
236 | contains(target: Node, deep = true): boolean {
237 | return (this.childNodes || []).some(
238 | (child) => child === target || (deep && child.contains(target))
239 | )
240 | }
241 |
242 | remove(): void {
243 | const parent = this.parent
244 | if (parent) {
245 | parent.removeChild(this)
246 | }
247 | }
248 |
249 | insertChild(child?: FakeNode | Node, index?: number, batch?: boolean): void {
250 | if (!child) throw new Error('InsertChild error: child is required.')
251 |
252 | if (!(child instanceof Node)) {
253 | if (!batch) {
254 | const children = this.getChildren(true)
255 | if (!children.includes(child.data)) {
256 | if (typeof index === 'undefined' || index < 0) {
257 | children.push(child.data)
258 | } else {
259 | children.splice(index, 0, child.data)
260 | }
261 | }
262 | }
263 | Object.assign(child, {
264 | parent: this,
265 | store: this.store,
266 | })
267 | child = reactive(new Node(child as TreeNodeOptions))
268 | if (child instanceof Node) {
269 | child.initialize()
270 | }
271 | }
272 |
273 | ;(child as Node).level = this.level + 1
274 |
275 | if (typeof index === 'undefined' || index < 0) {
276 | this.childNodes.push(child as Node)
277 | } else {
278 | this.childNodes.splice(index, 0, child as Node)
279 | }
280 |
281 | this.updateLeafState()
282 | }
283 |
284 | insertBefore(child: FakeNode | Node, ref: Node): void {
285 | let index
286 | if (ref) {
287 | index = this.childNodes.indexOf(ref)
288 | }
289 | this.insertChild(child, index)
290 | }
291 |
292 | insertAfter(child: FakeNode | Node, ref: Node): void {
293 | let index
294 | if (ref) {
295 | index = this.childNodes.indexOf(ref)
296 | if (index !== -1) index += 1
297 | }
298 | this.insertChild(child, index)
299 | }
300 |
301 | removeChild(child: Node): void {
302 | const children = this.getChildren() || []
303 | const dataIndex = children.indexOf(child.data)
304 | if (dataIndex > -1) {
305 | children.splice(dataIndex, 1)
306 | }
307 |
308 | const index = this.childNodes.indexOf(child)
309 |
310 | if (index > -1) {
311 | this.store && this.store.deregisterNode(child)
312 | child.parent = null
313 | this.childNodes.splice(index, 1)
314 | }
315 |
316 | this.updateLeafState()
317 | }
318 |
319 | removeChildByData(data: TreeNodeData): void {
320 | let targetNode: Node = null
321 |
322 | for (let i = 0; i < this.childNodes.length; i++) {
323 | if (this.childNodes[i].data === data) {
324 | targetNode = this.childNodes[i]
325 | break
326 | }
327 | }
328 |
329 | if (targetNode) {
330 | this.removeChild(targetNode)
331 | }
332 | }
333 |
334 | expand(callback?: () => void, expandParent?: boolean): void {
335 | const done = (): void => {
336 | if (expandParent) {
337 | let parent = this.parent
338 | while (parent.level > 0) {
339 | parent.expanded = true
340 | parent = parent.parent
341 | }
342 | }
343 | this.expanded = true
344 | if (callback) callback()
345 | this.childNodes.forEach((item) => {
346 | item.canFocus = true
347 | })
348 | }
349 |
350 | if (this.shouldLoadData()) {
351 | this.loadData((data) => {
352 | if (Array.isArray(data)) {
353 | if (this.checked) {
354 | this.setChecked(true, true)
355 | } else if (!this.store.checkStrictly) {
356 | reInitChecked(this)
357 | }
358 | done()
359 | }
360 | })
361 | } else {
362 | done()
363 | }
364 | }
365 |
366 | doCreateChildren(
367 | array: TreeNodeData[],
368 | defaultProps: TreeNodeLoadedDefaultProps = {}
369 | ): void {
370 | array.forEach((item) => {
371 | this.insertChild(
372 | Object.assign({ data: item }, defaultProps),
373 | undefined,
374 | true
375 | )
376 | })
377 | }
378 |
379 | collapse(): void {
380 | this.expanded = false
381 | this.childNodes.forEach((item) => {
382 | item.canFocus = false
383 | })
384 | }
385 |
386 | shouldLoadData(): boolean {
387 | return this.store.lazy === true && this.store.load && !this.loaded
388 | }
389 |
390 | updateLeafState(): void {
391 | if (
392 | this.store.lazy === true &&
393 | this.loaded !== true &&
394 | typeof this.isLeafByUser !== 'undefined'
395 | ) {
396 | this.isLeaf = this.isLeafByUser
397 | return
398 | }
399 | const childNodes = this.childNodes
400 | if (
401 | !this.store.lazy ||
402 | (this.store.lazy === true && this.loaded === true)
403 | ) {
404 | this.isLeaf = !childNodes || childNodes.length === 0
405 | return
406 | }
407 | this.isLeaf = false
408 | }
409 |
410 | setChecked(
411 | value?: boolean | string,
412 | deep?: boolean,
413 | recursion?: boolean,
414 | passValue?: boolean
415 | ) {
416 | this.indeterminate = value === 'half'
417 | this.checked = value === true
418 |
419 | if (this.store.checkStrictly) return
420 |
421 | if (!(this.shouldLoadData() && !this.store.checkDescendants)) {
422 | const { all, allWithoutDisable } = getChildState(this.childNodes)
423 |
424 | if (!this.isLeaf && !all && allWithoutDisable) {
425 | this.checked = false
426 | value = false
427 | }
428 |
429 | const handleDescendants = (): void => {
430 | if (deep) {
431 | const childNodes = this.childNodes
432 | for (let i = 0, j = childNodes.length; i < j; i++) {
433 | const child = childNodes[i]
434 | passValue = passValue || value !== false
435 | const isCheck = child.disabled ? child.checked : passValue
436 | child.setChecked(isCheck, deep, true, passValue)
437 | }
438 | const { half, all } = getChildState(childNodes)
439 | if (!all) {
440 | this.checked = all
441 | this.indeterminate = half
442 | }
443 | }
444 | }
445 |
446 | if (this.shouldLoadData()) {
447 | // Only work on lazy load data.
448 | this.loadData(
449 | () => {
450 | handleDescendants()
451 | reInitChecked(this)
452 | },
453 | {
454 | checked: value !== false,
455 | }
456 | )
457 | return
458 | } else {
459 | handleDescendants()
460 | }
461 | }
462 |
463 | const parent = this.parent
464 | if (!parent || parent.level === 0) return
465 |
466 | if (!recursion) {
467 | reInitChecked(parent)
468 | }
469 | }
470 |
471 | getChildren(forceInit = false): TreeNodeData | TreeNodeData[] {
472 | // this is data
473 | if (this.level === 0) return this.data
474 | const data = this.data
475 | if (!data) return null
476 |
477 | const props = this.store.props
478 | let children = 'children'
479 | if (props) {
480 | children = props.children || 'children'
481 | }
482 |
483 | if (data[children] === undefined) {
484 | data[children] = null
485 | }
486 |
487 | if (forceInit && !data[children]) {
488 | data[children] = []
489 | }
490 |
491 | return data[children]
492 | }
493 |
494 | updateChildren(): void {
495 | const newData = (this.getChildren() || []) as TreeNodeData[]
496 | const oldData = this.childNodes.map((node) => node.data)
497 |
498 | const newDataMap = {}
499 | const newNodes = []
500 |
501 | newData.forEach((item, index) => {
502 | const key = item[NODE_KEY]
503 | const isNodeExists =
504 | !!key && oldData.findIndex((data) => data[NODE_KEY] === key) >= 0
505 | if (isNodeExists) {
506 | newDataMap[key] = { index, data: item }
507 | } else {
508 | newNodes.push({ index, data: item })
509 | }
510 | })
511 |
512 | if (!this.store.lazy) {
513 | oldData.forEach((item) => {
514 | if (!newDataMap[item[NODE_KEY]]) this.removeChildByData(item)
515 | })
516 | }
517 |
518 | newNodes.forEach(({ index, data }) => {
519 | this.insertChild({ data }, index)
520 | })
521 |
522 | this.updateLeafState()
523 | }
524 |
525 | loadData(
526 | callback: (node: Node) => void,
527 | defaultProps: TreeNodeLoadedDefaultProps = {}
528 | ) {
529 | if (
530 | this.store.lazy === true &&
531 | this.store.load &&
532 | !this.loaded &&
533 | (!this.loading || Object.keys(defaultProps).length)
534 | ) {
535 | this.loading = true
536 |
537 | const resolve = (children) => {
538 | this.loaded = true
539 | this.loading = false
540 | this.childNodes = []
541 |
542 | this.doCreateChildren(children, defaultProps)
543 |
544 | this.updateLeafState()
545 | if (callback) {
546 | callback.call(this, children)
547 | }
548 | }
549 |
550 | this.store.load(this, resolve)
551 | } else {
552 | if (callback) {
553 | callback.call(this)
554 | }
555 | }
556 | }
557 | }
558 |
559 | export default Node
560 |
--------------------------------------------------------------------------------
/packages/tree/src/model/tree-store.ts:
--------------------------------------------------------------------------------
1 | // import { hasOwn } from '@element-plus/utils'
2 | import { hasOwn } from '@vue/shared'
3 | import Node from './node'
4 | import { getNodeKey } from './util'
5 |
6 | import type {
7 | FilterNodeMethodFunction,
8 | FilterValue,
9 | LoadFunction,
10 | TreeData,
11 | TreeKey,
12 | TreeNodeData,
13 | TreeOptionProps,
14 | TreeStoreNodesMap,
15 | TreeStoreOptions,
16 | } from '../tree.type'
17 |
18 | // 定义tree类
19 | export default class TreeStore {
20 | currentNode: Node
21 | currentNodeKey: TreeKey
22 | nodesMap: TreeStoreNodesMap
23 | root: Node
24 | data: TreeData
25 | lazy: boolean
26 | load: LoadFunction
27 | filterNodeMethod: FilterNodeMethodFunction
28 | key: TreeKey
29 | defaultCheckedKeys: TreeKey[]
30 | checkStrictly: boolean
31 | defaultExpandedKeys: TreeKey[]
32 | autoExpandParent: boolean
33 | defaultExpandAll: boolean
34 | checkDescendants: boolean
35 | props: TreeOptionProps
36 |
37 | constructor(options: TreeStoreOptions) {
38 | this.currentNode = null
39 | this.currentNodeKey = null
40 |
41 | for (const option in options) {
42 | if (hasOwn(options, option)) {
43 | this[option] = options[option]
44 | }
45 | }
46 |
47 | this.nodesMap = {}
48 | }
49 |
50 | initialize() {
51 | this.root = new Node({
52 | data: this.data,
53 | store: this,
54 | })
55 | this.root.initialize()
56 |
57 | if (this.lazy && this.load) {
58 | const loadFn = this.load
59 | loadFn(this.root, (data) => {
60 | this.root.doCreateChildren(data)
61 | this._initDefaultCheckedNodes()
62 | })
63 | } else {
64 | this._initDefaultCheckedNodes()
65 | }
66 | }
67 |
68 | filter(value: FilterValue): void {
69 | const filterNodeMethod = this.filterNodeMethod
70 | const lazy = this.lazy
71 | const traverse = function (node: TreeStore | Node) {
72 | const childNodes = (node as TreeStore).root
73 | ? (node as TreeStore).root.childNodes
74 | : (node as Node).childNodes
75 |
76 | childNodes.forEach((child) => {
77 | child.visible = filterNodeMethod.call(child, value, child.data, child)
78 |
79 | traverse(child)
80 | })
81 |
82 | if (!(node as Node).visible && childNodes.length) {
83 | let allHidden = true
84 | allHidden = !childNodes.some((child) => child.visible)
85 |
86 | if ((node as TreeStore).root) {
87 | ;(node as TreeStore).root.visible = allHidden === false
88 | } else {
89 | ;(node as Node).visible = allHidden === false
90 | }
91 | }
92 | if (!value) return
93 |
94 | if ((node as Node).visible && !(node as Node).isLeaf && !lazy)
95 | (node as Node).expand()
96 | }
97 |
98 | traverse(this)
99 | }
100 |
101 | setData(newVal: TreeData): void {
102 | const instanceChanged = newVal !== this.root.data
103 | if (instanceChanged) {
104 | this.root.setData(newVal)
105 | this._initDefaultCheckedNodes()
106 | } else {
107 | this.root.updateChildren()
108 | }
109 | }
110 |
111 | getNode(data: TreeKey | TreeNodeData): Node {
112 | if (data instanceof Node) return data
113 | const key = typeof data !== 'object' ? data : getNodeKey(this.key, data)
114 | return this.nodesMap[key] || null
115 | }
116 |
117 | insertBefore(data: TreeNodeData, refData: TreeKey | TreeNodeData): void {
118 | const refNode = this.getNode(refData)
119 | refNode.parent.insertBefore({ data }, refNode)
120 | }
121 |
122 | insertAfter(data: TreeNodeData, refData: TreeKey | TreeNodeData): void {
123 | const refNode = this.getNode(refData)
124 | refNode.parent.insertAfter({ data }, refNode)
125 | }
126 |
127 | remove(data: TreeNodeData | Node): void {
128 | const node = this.getNode(data)
129 |
130 | if (node && node.parent) {
131 | if (node === this.currentNode) {
132 | this.currentNode = null
133 | }
134 | node.parent.removeChild(node)
135 | }
136 | }
137 |
138 | append(data: TreeNodeData, parentData: TreeNodeData | TreeKey | Node): void {
139 | const parentNode = parentData ? this.getNode(parentData) : this.root
140 |
141 | if (parentNode) {
142 | parentNode.insertChild({ data })
143 | }
144 | }
145 |
146 | _initDefaultCheckedNodes(): void {
147 | const defaultCheckedKeys = this.defaultCheckedKeys || []
148 | const nodesMap = this.nodesMap
149 |
150 | defaultCheckedKeys.forEach((checkedKey) => {
151 | const node = nodesMap[checkedKey]
152 |
153 | if (node) {
154 | node.setChecked(true, !this.checkStrictly)
155 | }
156 | })
157 | }
158 |
159 | _initDefaultCheckedNode(node: Node): void {
160 | const defaultCheckedKeys = this.defaultCheckedKeys || []
161 |
162 | if (defaultCheckedKeys.includes(node.key)) {
163 | node.setChecked(true, !this.checkStrictly)
164 | }
165 | }
166 |
167 | setDefaultCheckedKey(newVal: TreeKey[]): void {
168 | if (newVal !== this.defaultCheckedKeys) {
169 | this.defaultCheckedKeys = newVal
170 | this._initDefaultCheckedNodes()
171 | }
172 | }
173 |
174 | registerNode(node: Node): void {
175 | const key = this.key
176 | if (!node || !node.data) return
177 |
178 | if (!key) {
179 | this.nodesMap[node.id] = node
180 | } else {
181 | const nodeKey = node.key
182 | if (nodeKey !== undefined) this.nodesMap[node.key] = node
183 | }
184 | }
185 |
186 | deregisterNode(node: Node): void {
187 | const key = this.key
188 | if (!key || !node || !node.data) return
189 |
190 | node.childNodes.forEach((child) => {
191 | this.deregisterNode(child)
192 | })
193 |
194 | delete this.nodesMap[node.key]
195 | }
196 |
197 | getCheckedNodes(
198 | leafOnly = false,
199 | includeHalfChecked = false
200 | ): TreeNodeData[] {
201 | const checkedNodes: TreeNodeData[] = []
202 | const traverse = function (node: TreeStore | Node) {
203 | const childNodes = (node as TreeStore).root
204 | ? (node as TreeStore).root.childNodes
205 | : (node as Node).childNodes
206 |
207 | childNodes.forEach((child) => {
208 | if (
209 | (child.checked || (includeHalfChecked && child.indeterminate)) &&
210 | (!leafOnly || (leafOnly && child.isLeaf))
211 | ) {
212 | checkedNodes.push(child.data)
213 | }
214 |
215 | traverse(child)
216 | })
217 | }
218 |
219 | traverse(this)
220 |
221 | return checkedNodes
222 | }
223 |
224 | getCheckedKeys(leafOnly = false): TreeKey[] {
225 | return this.getCheckedNodes(leafOnly).map((data) => (data || {})[this.key])
226 | }
227 |
228 | getHalfCheckedNodes(): TreeNodeData[] {
229 | const nodes: TreeNodeData[] = []
230 | const traverse = function (node: TreeStore | Node) {
231 | const childNodes = (node as TreeStore).root
232 | ? (node as TreeStore).root.childNodes
233 | : (node as Node).childNodes
234 |
235 | childNodes.forEach((child) => {
236 | if (child.indeterminate) {
237 | nodes.push(child.data)
238 | }
239 |
240 | traverse(child)
241 | })
242 | }
243 |
244 | traverse(this)
245 |
246 | return nodes
247 | }
248 |
249 | getHalfCheckedKeys(): TreeKey[] {
250 | return this.getHalfCheckedNodes().map((data) => (data || {})[this.key])
251 | }
252 |
253 | _getAllNodes(): Node[] {
254 | const allNodes: Node[] = []
255 | const nodesMap = this.nodesMap
256 | for (const nodeKey in nodesMap) {
257 | if (hasOwn(nodesMap, nodeKey)) {
258 | allNodes.push(nodesMap[nodeKey])
259 | }
260 | }
261 |
262 | return allNodes
263 | }
264 |
265 | updateChildren(key: TreeKey, data: TreeData): void {
266 | const node = this.nodesMap[key]
267 | if (!node) return
268 | const childNodes = node.childNodes
269 | for (let i = childNodes.length - 1; i >= 0; i--) {
270 | const child = childNodes[i]
271 | this.remove(child.data)
272 | }
273 | for (let i = 0, j = data.length; i < j; i++) {
274 | const child = data[i]
275 | this.append(child, node.data)
276 | }
277 | }
278 |
279 | _setCheckedKeys(
280 | key: TreeKey,
281 | leafOnly = false,
282 | checkedKeys: { [key: string]: boolean }
283 | ): void {
284 | const allNodes = this._getAllNodes().sort((a, b) => b.level - a.level)
285 | const cache = Object.create(null)
286 | const keys = Object.keys(checkedKeys)
287 | allNodes.forEach((node) => node.setChecked(false, false))
288 | for (let i = 0, j = allNodes.length; i < j; i++) {
289 | const node = allNodes[i]
290 | const nodeKey = node.data[key].toString()
291 | const checked = keys.includes(nodeKey)
292 | if (!checked) {
293 | if (node.checked && !cache[nodeKey]) {
294 | node.setChecked(false, false)
295 | }
296 | continue
297 | }
298 |
299 | let parent = node.parent
300 | while (parent && parent.level > 0) {
301 | cache[parent.data[key]] = true
302 | parent = parent.parent
303 | }
304 |
305 | if (node.isLeaf || this.checkStrictly) {
306 | node.setChecked(true, false)
307 | continue
308 | }
309 | node.setChecked(true, true)
310 |
311 | if (leafOnly) {
312 | node.setChecked(false, false)
313 | const traverse = function (node: Node): void {
314 | const childNodes = node.childNodes
315 | childNodes.forEach((child) => {
316 | if (!child.isLeaf) {
317 | child.setChecked(false, false)
318 | }
319 | traverse(child)
320 | })
321 | }
322 | traverse(node)
323 | }
324 | }
325 | }
326 |
327 | setCheckedNodes(array: Node[], leafOnly = false): void {
328 | const key = this.key
329 | const checkedKeys = {}
330 | array.forEach((item) => {
331 | checkedKeys[(item || {})[key]] = true
332 | })
333 |
334 | this._setCheckedKeys(key, leafOnly, checkedKeys)
335 | }
336 |
337 | setCheckedKeys(keys: TreeKey[], leafOnly = false): void {
338 | this.defaultCheckedKeys = keys
339 | const key = this.key
340 | const checkedKeys = {}
341 | keys.forEach((key) => {
342 | checkedKeys[key] = true
343 | })
344 |
345 | this._setCheckedKeys(key, leafOnly, checkedKeys)
346 | }
347 |
348 | setDefaultExpandedKeys(keys: TreeKey[]) {
349 | keys = keys || []
350 | this.defaultExpandedKeys = keys
351 | keys.forEach((key) => {
352 | const node = this.getNode(key)
353 | if (node) node.expand(null, this.autoExpandParent)
354 | })
355 | }
356 |
357 | setChecked(
358 | data: TreeKey | TreeNodeData,
359 | checked: boolean,
360 | deep: boolean
361 | ): void {
362 | const node = this.getNode(data)
363 |
364 | if (node) {
365 | node.setChecked(!!checked, deep)
366 | }
367 | }
368 |
369 | getCurrentNode(): Node {
370 | return this.currentNode
371 | }
372 |
373 | setCurrentNode(currentNode: Node): void {
374 | const prevCurrentNode = this.currentNode
375 | if (prevCurrentNode) {
376 | prevCurrentNode.isCurrent = false
377 | }
378 | this.currentNode = currentNode
379 | this.currentNode.isCurrent = true
380 | }
381 |
382 | setUserCurrentNode(node: Node, shouldAutoExpandParent = true): void {
383 | const key = node[this.key]
384 | const currNode = this.nodesMap[key]
385 | this.setCurrentNode(currNode)
386 | if (shouldAutoExpandParent && this.currentNode.level > 1) {
387 | this.currentNode.parent.expand(null, true)
388 | }
389 | }
390 |
391 | setCurrentNodeKey(key: TreeKey, shouldAutoExpandParent = true): void {
392 | if (key === null || key === undefined) {
393 | this.currentNode && (this.currentNode.isCurrent = false)
394 | this.currentNode = null
395 | return
396 | }
397 | const node = this.getNode(key)
398 | if (node) {
399 | this.setCurrentNode(node)
400 | if (shouldAutoExpandParent && this.currentNode.level > 1) {
401 | this.currentNode.parent.expand(null, true)
402 | }
403 | }
404 | }
405 | }
406 |
--------------------------------------------------------------------------------
/packages/tree/src/model/useDragNode.ts:
--------------------------------------------------------------------------------
1 | import { provide, ref } from 'vue'
2 |
3 | import type { InjectionKey } from 'vue'
4 | import type Node from './node'
5 |
6 | const classNameToArray = (cls = '') =>
7 | cls.split(' ').filter((item) => !!item.trim())
8 |
9 | const addClass = (el: Element, cls: string) => {
10 | if (!el || !cls.trim()) return
11 | el.classList.add(...classNameToArray(cls))
12 | }
13 |
14 | const removeClass = (el: Element, cls: string) => {
15 | if (!el || !cls.trim()) return
16 | el.classList.remove(...classNameToArray(cls))
17 | }
18 |
19 |
20 | interface TreeNode {
21 | node: Node
22 | $el?: HTMLElement
23 | }
24 |
25 | interface DragOptions {
26 | event: DragEvent
27 | treeNode: TreeNode
28 | }
29 |
30 | export interface DragEvents {
31 | treeNodeDragStart: (options: DragOptions) => void
32 | treeNodeDragOver: (options: DragOptions) => void
33 | treeNodeDragEnd: (event: DragEvent) => void
34 | }
35 |
36 | export const dragEventsKey: InjectionKey = Symbol('dragEvents')
37 |
38 | export function useDragNodeHandler({ props, ctx, el$, dropIndicator$, store }) {
39 |
40 | const dragState = ref({
41 | showDropIndicator: false,
42 | draggingNode: null,
43 | dropNode: null,
44 | allowDrop: true,
45 | dropType: null,
46 | })
47 |
48 | const treeNodeDragStart = ({ event, treeNode }: DragOptions) => {
49 | if (
50 | typeof props.allowDrag === 'function' &&
51 | !props.allowDrag(treeNode.node)
52 | ) {
53 | event.preventDefault()
54 | return false
55 | }
56 | event.dataTransfer.effectAllowed = 'move'
57 |
58 | // wrap in try catch to address IE's error when first param is 'text/plain'
59 | try {
60 | // setData is required for draggable to work in FireFox
61 | // the content has to be '' so dragging a node out of the tree won't open a new tab in FireFox
62 | event.dataTransfer.setData('text/plain', '')
63 | } catch {}
64 | dragState.value.draggingNode = treeNode
65 | ctx.emit('node-drag-start', treeNode.node, event)
66 | }
67 |
68 | const treeNodeDragOver = ({ event, treeNode }: DragOptions) => {
69 | const dropNode = treeNode
70 | const oldDropNode = dragState.value.dropNode
71 | if (oldDropNode && oldDropNode !== dropNode) {
72 | removeClass(oldDropNode.$el, 'is-drop-inner')
73 | }
74 | const draggingNode = dragState.value.draggingNode
75 | if (!draggingNode || !dropNode) return
76 |
77 | let dropPrev = true
78 | let dropInner = true
79 | let dropNext = true
80 | let userAllowDropInner = true
81 | if (typeof props.allowDrop === 'function') {
82 | dropPrev = props.allowDrop(draggingNode.node, dropNode.node, 'prev')
83 | userAllowDropInner = dropInner = props.allowDrop(
84 | draggingNode.node,
85 | dropNode.node,
86 | 'inner'
87 | )
88 | dropNext = props.allowDrop(draggingNode.node, dropNode.node, 'next')
89 | }
90 | event.dataTransfer.dropEffect =
91 | dropInner || dropPrev || dropNext ? 'move' : 'none'
92 | if ((dropPrev || dropInner || dropNext) && oldDropNode !== dropNode) {
93 | if (oldDropNode) {
94 | ctx.emit('node-drag-leave', draggingNode.node, oldDropNode.node, event)
95 | }
96 | ctx.emit('node-drag-enter', draggingNode.node, dropNode.node, event)
97 | }
98 |
99 | if (dropPrev || dropInner || dropNext) {
100 | dragState.value.dropNode = dropNode
101 | }
102 |
103 | if (dropNode.node.nextSibling === draggingNode.node) {
104 | dropNext = false
105 | }
106 | if (dropNode.node.previousSibling === draggingNode.node) {
107 | dropPrev = false
108 | }
109 | if (dropNode.node.contains(draggingNode.node, false)) {
110 | dropInner = false
111 | }
112 | if (
113 | draggingNode.node === dropNode.node ||
114 | draggingNode.node.contains(dropNode.node)
115 | ) {
116 | dropPrev = false
117 | dropInner = false
118 | dropNext = false
119 | }
120 |
121 | const targetPosition = dropNode.$el.getBoundingClientRect()
122 | const treePosition = el$.value.getBoundingClientRect()
123 |
124 | let dropType
125 | const prevPercent = dropPrev ? (dropInner ? 0.25 : dropNext ? 0.45 : 1) : -1
126 | const nextPercent = dropNext ? (dropInner ? 0.75 : dropPrev ? 0.55 : 0) : 1
127 |
128 | const indicatorTop = -9999
129 | const distance = event.clientY - targetPosition.top
130 | if (distance < targetPosition.height * prevPercent) {
131 | dropType = 'before'
132 | } else if (distance > targetPosition.height * nextPercent) {
133 | dropType = 'after'
134 | } else if (dropInner) {
135 | dropType = 'inner'
136 | } else {
137 | dropType = 'none'
138 | }
139 |
140 | // 暂时注释掉
141 | // const iconPosition = dropNode.$el
142 | // .querySelector('.el-tree-node__expand-icon')
143 | // .getBoundingClientRect()
144 | // const dropIndicator = dropIndicator$.value
145 | // if (dropType === 'before') {
146 | // indicatorTop = iconPosition.top - treePosition.top
147 | // } else if (dropType === 'after') {
148 | // indicatorTop = iconPosition.bottom - treePosition.top
149 | // }
150 | // dropIndicator.style.top = `${indicatorTop}px`
151 | // dropIndicator.style.left = `${iconPosition.right - treePosition.left}px`
152 |
153 | if (dropType === 'inner') {
154 | addClass(dropNode.$el, 'is-drop-inner')
155 | } else {
156 | removeClass(dropNode.$el, 'is-drop-inner')
157 | }
158 |
159 | dragState.value.showDropIndicator =
160 | dropType === 'before' || dropType === 'after'
161 | dragState.value.allowDrop =
162 | dragState.value.showDropIndicator || userAllowDropInner
163 | dragState.value.dropType = dropType
164 | ctx.emit('node-drag-over', draggingNode.node, dropNode.node, event)
165 | }
166 |
167 | const treeNodeDragEnd = (event: DragEvent) => {
168 | const { draggingNode, dropType, dropNode } = dragState.value
169 | event.preventDefault()
170 | event.dataTransfer.dropEffect = 'move'
171 |
172 | if (draggingNode && dropNode) {
173 | const draggingNodeCopy = { data: draggingNode.node.data }
174 | if (dropType !== 'none') {
175 | draggingNode.node.remove()
176 | }
177 | if (dropType === 'before') {
178 | dropNode.node.parent.insertBefore(draggingNodeCopy, dropNode.node)
179 | } else if (dropType === 'after') {
180 | dropNode.node.parent.insertAfter(draggingNodeCopy, dropNode.node)
181 | } else if (dropType === 'inner') {
182 | dropNode.node.insertChild(draggingNodeCopy)
183 | }
184 | if (dropType !== 'none') {
185 | store.value.registerNode(draggingNodeCopy)
186 | }
187 |
188 | removeClass(dropNode.$el, 'is-drop-inner')
189 |
190 | ctx.emit(
191 | 'node-drag-end',
192 | draggingNode.node,
193 | dropNode.node,
194 | dropType,
195 | event
196 | )
197 | if (dropType !== 'none') {
198 | ctx.emit('node-drop', draggingNode.node, dropNode.node, dropType, event)
199 | }
200 | }
201 | if (draggingNode && !dropNode) {
202 | ctx.emit('node-drag-end', draggingNode.node, null, dropType, event)
203 | }
204 |
205 | dragState.value.showDropIndicator = false
206 | dragState.value.draggingNode = null
207 | dragState.value.dropNode = null
208 | dragState.value.allowDrop = true
209 | }
210 |
211 | provide(dragEventsKey, {
212 | treeNodeDragStart,
213 | treeNodeDragOver,
214 | treeNodeDragEnd,
215 | })
216 |
217 | return {
218 | dragState,
219 | }
220 | }
221 |
--------------------------------------------------------------------------------
/packages/tree/src/model/useKeydown.ts:
--------------------------------------------------------------------------------
1 | import { onBeforeUnmount, onMounted, onUpdated, shallowRef, watch } from 'vue'
2 |
3 | import type TreeStore from './tree-store'
4 |
5 | import type { Ref } from 'vue'
6 |
7 |
8 | const on = (
9 | element: HTMLElement | Document | Window | Element,
10 | event: string,
11 | handler: EventListenerOrEventListenerObject,
12 | useCapture = false
13 | ): void => {
14 | if (element && event && handler) {
15 | element?.addEventListener(event, handler, useCapture)
16 | }
17 | }
18 |
19 | const off = (
20 | element: HTMLElement | Document | Window | Element,
21 | event: string,
22 | handler: EventListenerOrEventListenerObject,
23 | useCapture = false
24 | ): void => {
25 | if (element && event && handler) {
26 | element?.removeEventListener(event, handler, useCapture)
27 | }
28 | }
29 | const EVENT_CODE = {
30 | tab: 'Tab',
31 | enter: 'Enter',
32 | space: 'Space',
33 | left: 'ArrowLeft', // 37
34 | up: 'ArrowUp', // 38
35 | right: 'ArrowRight', // 39
36 | down: 'ArrowDown', // 40
37 | esc: 'Escape',
38 | delete: 'Delete',
39 | backspace: 'Backspace',
40 | numpadEnter: 'NumpadEnter',
41 | pageUp: 'PageUp',
42 | pageDown: 'PageDown',
43 | home: 'Home',
44 | end: 'End',
45 | }
46 | interface UseKeydownOption {
47 | el$: Ref
48 | }
49 | export function useKeydown({ el$ }: UseKeydownOption, store: Ref) {
50 | const treeItems = shallowRef([])
51 | const checkboxItems = shallowRef([])
52 |
53 | onMounted(() => {
54 | initTabIndex()
55 | on(el$.value, 'keydown', handleKeydown)
56 | })
57 |
58 | onBeforeUnmount(() => {
59 | off(el$.value, 'keydown', handleKeydown)
60 | })
61 |
62 | onUpdated(() => {
63 | treeItems.value = Array.from(el$.value.querySelectorAll('[role=treeitem]'))
64 | checkboxItems.value = Array.from(
65 | el$.value.querySelectorAll('input[type=checkbox]')
66 | )
67 | })
68 |
69 | watch(checkboxItems, (val) => {
70 | val.forEach((checkbox) => {
71 | checkbox.setAttribute('tabindex', '-1')
72 | })
73 | })
74 |
75 | const handleKeydown = (ev: KeyboardEvent): void => {
76 | const currentItem = ev.target as HTMLElement
77 | if (!currentItem.className.includes('el-tree-node')) return
78 | const code = ev.code
79 | treeItems.value = Array.from(
80 | // el$.value.querySelectorAll(`.${ns.is('focusable')}[role=treeitem]`)
81 | el$.value.querySelectorAll('.is-focusable[role=treeitem]')
82 | )
83 | const currentIndex = treeItems.value.indexOf(currentItem)
84 | let nextIndex
85 | if ([EVENT_CODE.up, EVENT_CODE.down].includes(code)) {
86 | ev.preventDefault()
87 | if (code === EVENT_CODE.up) {
88 | nextIndex =
89 | currentIndex === -1
90 | ? 0
91 | : currentIndex !== 0
92 | ? currentIndex - 1
93 | : treeItems.value.length - 1
94 | const startIndex = nextIndex
95 | while (true) {
96 | if (
97 | store.value.getNode(treeItems.value[nextIndex].dataset.key).canFocus
98 | )
99 | break
100 | nextIndex--
101 | if (nextIndex === startIndex) {
102 | nextIndex = -1
103 | break
104 | }
105 | if (nextIndex < 0) {
106 | nextIndex = treeItems.value.length - 1
107 | }
108 | }
109 | } else {
110 | nextIndex =
111 | currentIndex === -1
112 | ? 0
113 | : currentIndex < treeItems.value.length - 1
114 | ? currentIndex + 1
115 | : 0
116 | const startIndex = nextIndex
117 | while (true) {
118 | if (
119 | store.value.getNode(treeItems.value[nextIndex].dataset.key).canFocus
120 | )
121 | break
122 | nextIndex++
123 | if (nextIndex === startIndex) {
124 | nextIndex = -1
125 | break
126 | }
127 | if (nextIndex >= treeItems.value.length) {
128 | nextIndex = 0
129 | }
130 | }
131 | }
132 | nextIndex !== -1 && treeItems.value[nextIndex].focus()
133 | }
134 | if ([EVENT_CODE.left, EVENT_CODE.right].includes(code)) {
135 | ev.preventDefault()
136 | currentItem.click()
137 | }
138 | const hasInput = currentItem.querySelector(
139 | '[type="checkbox"]'
140 | )
141 | if ([EVENT_CODE.enter, EVENT_CODE.space].includes(code) && hasInput) {
142 | ev.preventDefault()
143 | hasInput.click()
144 | }
145 | }
146 |
147 | const initTabIndex = (): void => {
148 | treeItems.value = Array.from(
149 | el$.value.querySelectorAll('.is-focusable[role=treeitem]')
150 | )
151 | checkboxItems.value = Array.from(
152 | el$.value.querySelectorAll('input[type=checkbox]')
153 | )
154 | const checkedItem = el$.value.querySelectorAll(
155 | '.is-checked[role=treeitem]'
156 | )
157 | if (checkedItem.length) {
158 | checkedItem[0].setAttribute('tabindex', '0')
159 | return
160 | }
161 | treeItems.value[0]?.setAttribute('tabindex', '0')
162 | }
163 | }
164 |
--------------------------------------------------------------------------------
/packages/tree/src/model/useNodeExpandEventBroadcast.ts:
--------------------------------------------------------------------------------
1 | import { inject, provide } from 'vue'
2 | import type Node from '../model/node'
3 |
4 | interface NodeMap {
5 | treeNodeExpand(node: Node): void
6 | children: NodeMap[]
7 | }
8 |
9 | export function useNodeExpandEventBroadcast(props) {
10 | const parentNodeMap = inject('TreeNodeMap', null)
11 | const currentNodeMap: NodeMap = {
12 | treeNodeExpand: (node) => {
13 | if (props.node !== node) {
14 | props.node.collapse()
15 | }
16 | },
17 | children: [],
18 | }
19 |
20 | if (parentNodeMap) {
21 | parentNodeMap.children.push(currentNodeMap)
22 | }
23 |
24 | provide('TreeNodeMap', currentNodeMap)
25 |
26 | return {
27 | broadcastExpanded: (node: Node): void => {
28 | if (!props.accordion) return
29 | for (const childNode of currentNodeMap.children) {
30 | childNode.treeNodeExpand(node)
31 | }
32 | },
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/packages/tree/src/model/util.ts:
--------------------------------------------------------------------------------
1 | import type Node from './node'
2 | import type { TreeKey, TreeNodeData } from '../tree.type'
3 |
4 | export const NODE_KEY = '$treeNodeId'
5 |
6 | export const markNodeData = function (node: Node, data: TreeNodeData): void {
7 | if (!data || data[NODE_KEY]) return
8 | Object.defineProperty(data, NODE_KEY, {
9 | value: node.id,
10 | enumerable: false,
11 | configurable: false,
12 | writable: false,
13 | })
14 | }
15 |
16 | export const getNodeKey = function (key: TreeKey, data: TreeNodeData): any {
17 | if (!key) return data[NODE_KEY]
18 | return data[key]
19 | }
20 |
--------------------------------------------------------------------------------
/packages/tree/src/tree-node-content.vue:
--------------------------------------------------------------------------------
1 |
40 |
--------------------------------------------------------------------------------
/packages/tree/src/tree-node-icon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
32 |
33 |
--------------------------------------------------------------------------------
/packages/tree/src/tree-node.vue:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
36 |
37 |
38 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
51 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
65 |
68 |
69 |
70 |
71 |
72 |
73 |
347 |
--------------------------------------------------------------------------------
/packages/tree/src/tree.type.ts:
--------------------------------------------------------------------------------
1 | import type {
2 | Component,
3 | ComponentInternalInstance,
4 | Ref,
5 | SetupContext,
6 | VNode,
7 | h,
8 | } from 'vue'
9 | import type Node from './model/node'
10 | import type TreeStore from './model/tree-store'
11 |
12 | export interface RootTreeType {
13 | ctx: SetupContext
14 | props: TreeComponentProps
15 | store: Ref
16 | root: Ref
17 | currentNode: Ref
18 | instance: ComponentInternalInstance
19 | }
20 |
21 | export declare type hType = typeof h
22 | export declare type TreeData = TreeNodeData[]
23 | export declare type TreeKey = string | number
24 | export declare interface FakeNode {
25 | data: TreeNodeData
26 | }
27 | export declare interface TreeNodeData {
28 | [key: string]: any
29 | }
30 | export declare interface TreeNodeLoadedDefaultProps {
31 | checked?: boolean
32 | }
33 | export declare interface TreeNodeChildState {
34 | all: boolean
35 | none: boolean
36 | allWithoutDisable: boolean·
37 | half: boolean
38 | }
39 | export declare interface TreeNodeOptions {
40 | data: TreeNodeData
41 | store: TreeStore
42 | parent?: Node
43 | }
44 | export declare interface TreeStoreNodesMap {
45 | [key: string]: Node
46 | }
47 | export declare interface TreeStoreOptions {
48 | key: TreeKey
49 | data: TreeData
50 | lazy: boolean
51 | props: TreeOptionProps
52 | load: LoadFunction
53 | currentNodeKey: TreeKey
54 | checkStrictly: boolean
55 | checkDescendants: boolean
56 | defaultCheckedKeys: TreeKey[]
57 | defaultExpandedKeys: TreeKey[]
58 | autoExpandParent: boolean
59 | defaultExpandAll: boolean
60 | filterNodeMethod: FilterNodeMethodFunction
61 | }
62 | export declare interface TreeOptionProps {
63 | children?: string
64 | label?: string | ((data: TreeNodeData, node: Node) => string)
65 | disabled?: string | ((data: TreeNodeData, node: Node) => string)
66 | isLeaf?: string | ((data: TreeNodeData, node: Node) => boolean)
67 | class?: (
68 | data: TreeNodeData,
69 | node: Node
70 | ) => string | { [key: string]: boolean } | string
71 | }
72 | export declare type RenderContentFunction = (
73 | h: hType,
74 | context: RenderContentContext
75 | ) => VNode | VNode[]
76 | export declare interface RenderContentContext {
77 | _self: ComponentInternalInstance
78 | node: Node
79 | data: TreeNodeData
80 | store: TreeStore
81 | }
82 | export declare type AllowDragFunction = (node: Node) => boolean
83 | export declare type DropType = 'inner' | 'prev' | 'next'
84 | export declare type AllowDropFunction = (
85 | draggingNode: Node,
86 | dropNode: Node,
87 | type: DropType
88 | ) => boolean
89 | export declare type LoadFunction = (
90 | rootNode: Node,
91 | loadedCallback: (data: TreeData) => void
92 | ) => void
93 | export declare type FilterValue = any
94 | export declare type FilterNodeMethodFunction = (
95 | value: FilterValue,
96 | data: TreeNodeData,
97 | child: Node
98 | ) => boolean
99 | export declare interface TreeComponentProps {
100 | data: TreeData
101 | emptyText: string
102 | renderAfterExpand: boolean
103 | nodeKey: string
104 | checkStrictly: boolean
105 | expandOnClickNode: boolean
106 | defaultExpandAll: boolean
107 | checkOnClickNode: boolean
108 | checkDescendants: boolean
109 | autoExpandParent: boolean
110 | defaultCheckedKeys: TreeKey[]
111 | defaultExpandedKeys: TreeKey[]
112 | currentNodeKey: TreeKey
113 | renderContent: RenderContentFunction
114 | showCheckbox: boolean
115 | draggable: boolean
116 | allowDrag: AllowDragFunction
117 | allowDrop: AllowDropFunction
118 | props: TreeOptionProps
119 | lazy: boolean
120 | highlightCurrent: boolean
121 | load: LoadFunction
122 | filterNodeMethod: FilterNodeMethodFunction
123 | accordion: boolean
124 | indent: number
125 | icon: string | Component
126 | }
127 |
--------------------------------------------------------------------------------
/packages/tree/src/tree.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
12 |
13 |
14 |
15 |
16 |
17 | {{
18 | emptyText ?? 'No Data'
19 | }}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
439 |
441 |
--------------------------------------------------------------------------------
/packages/tree/style/base.css:
--------------------------------------------------------------------------------
1 | .el-tree {
2 | position: relative;
3 | cursor: default;
4 | background: #ffffff;
5 | color: #606266;
6 | }
7 | .el-tree-node {
8 | white-space: nowrap;
9 | outline: none;
10 | }
11 | .el-tree-node:focus > .el-tree-node__content {
12 | background-color: #f5f7fa;
13 | }
14 | .el-tree-node__content {
15 | display: flex;
16 | align-items: center;
17 | height: 26px;
18 | cursor: pointer;
19 | }
20 | .el-tree-node__label {
21 | font-size: 13px;
22 | }
23 | .el-tree-node.is-expanded > .el-tree-node__children {
24 | display: block;
25 | }
26 | .el-tree-node > .el-tree-node__children {
27 | overflow: hidden;
28 | background-color: transparent;
29 | }
30 | .custom-tree-node {
31 | flex: 1;
32 | display: flex;
33 | align-items: center;
34 | justify-content: space-between;
35 | font-size: 14px;
36 | padding-right: 8px;
37 | }
38 | .el-tree__empty-block {
39 | position: relative;
40 | min-height: 60px;
41 | text-align: center;
42 | width: 100%;
43 | height: 100%;
44 | }
45 | .el-tree__empty-text {
46 | position: absolute;
47 | left: 50%;
48 | top: 50%;
49 | transform: translate(-50%,-50%);
50 | color: #909399;
51 | font-size: 14px;
52 | }
53 | .el-tree__drop-indicator {
54 | position: absolute;
55 | left: 0;
56 | right: 0;
57 | height: 1px;
58 | background-color: #409eff;
59 | }
60 | .el-tree-node__content {
61 | padding-left: 18px;
62 | }
63 | .el-tree-node__content>label.el-checkbox {
64 | margin-right: 8px;
65 | }
66 | .el-tree-node__content>.el-tree-node__expand-icon {
67 | padding: 6px;
68 | box-sizing: content-box;
69 | }
70 | .el-tree-node__expand-icon {
71 | cursor: pointer;
72 | color: #a8abb2;
73 | font-size: 12px;
74 | transform: rotate(0);
75 | transition: transform .3s ease-in-out;
76 | }
77 | .el-tree-node__expand-icon.expanded {
78 | transform: rotate(90deg);
79 | }
80 | .el-tree-node__content>.el-tree-node__expand-icon {
81 | padding: 6px;
82 | box-sizing: content-box;
83 | }
84 | .el-tree-node__expand-icon.is-leaf {
85 | color: transparent;
86 | cursor: default;
87 | }
88 |
--------------------------------------------------------------------------------
/packages/tree/style/tree.scss:
--------------------------------------------------------------------------------
1 | .org-tree-container {
2 | display: inline-block;
3 | padding: 15px;
4 | background-color: #fff;
5 | }
6 | .org-tree {
7 | display: table;
8 | text-align: center;
9 |
10 | &:before, &:after {
11 | content: '';
12 | display: table;
13 | }
14 |
15 | &:after {
16 | clear: both;
17 | }
18 | }
19 |
20 | .is-dragging {
21 | .org-tree-node-children {
22 | .org-tree-node {
23 | .org-tree-node-label {
24 | cursor: move;
25 | }
26 | }
27 | }
28 | }
29 |
30 | .is-drop-inner {
31 | background-color: #409eff;
32 | color: #fff;
33 | }
34 | .org-tree-node.collapsed {
35 | .org-tree-node-label:after {
36 | content: "";
37 | position: absolute;
38 | top: 100%;
39 | left: 0;
40 | width: 50%;
41 | height: 20px;
42 | border-right: 1px solid #ddd;
43 | }
44 | }
45 | .org-tree-node,
46 | .org-tree-node-children {
47 | position: relative;
48 | margin: 0;
49 | padding: 0;
50 | list-style-type: none;
51 |
52 | &:before, &:after {
53 | transition: all .35s;
54 | }
55 | }
56 | .org-tree-node-label {
57 | position: relative;
58 | display: inline-block;
59 | padding: 15px 0px;
60 | cursor: pointer;
61 | white-space: nowrap;
62 | .org-tree-node-label-inner {
63 | padding: 15px 30px;
64 | text-align: center;
65 | border-radius: 10px;
66 | border: 1px solid #ccc;
67 | // box-shadow: 0 1px 5px rgba(0, 0, 0, .15);
68 | }
69 | }
70 | .org-tree-node-icon {
71 | position: absolute;
72 | top: 100%;
73 | left: 51%;
74 | margin-left: -11px;
75 | margin-top: 9px;
76 | background-color: #fff;
77 | z-index: 10;
78 | cursor: pointer;
79 | transition: all .35s ease;
80 | }
81 | .org-tree-node-btn {
82 | // @extend .org-tree-node-icon;
83 | position: absolute;
84 | top: 84%;
85 | left: 61%;
86 |
87 | background-color: #fff;
88 | z-index: 10;
89 | cursor: pointer;
90 | transition: all .35s ease;
91 |
92 | box-shadow: 0 0 2px rgba(0, 0, 0, .15);
93 | border: 1px solid #ccc;
94 | border-radius: 50%;
95 | width: 20px;
96 | height: 20px;
97 | &:hover {
98 | background-color: #e7e8e9;
99 | transform: scale(1.15);
100 | }
101 |
102 | &:before, &:after {
103 | content: '';
104 | position: absolute;
105 | }
106 |
107 | &:before {
108 | top: 50%;
109 | left: 4px;
110 | right: 4px;
111 | height: 0;
112 | border-top: 1px solid #ccc;
113 | }
114 |
115 | &:after {
116 | top: 4px;
117 | left: 50%;
118 | bottom: 4px;
119 | width: 0;
120 | border-left: 2px solid #ccc;
121 | }
122 |
123 | &.expanded:after {
124 | border: none;
125 | }
126 | }
127 | .org-tree-node-children {
128 | .org-tree-node {
129 | padding-top: 20px;
130 | display: table-cell;
131 | vertical-align: top;
132 |
133 | &.is-leaf, &.collapsed {
134 | padding-left: 10px;
135 | padding-right: 10px;
136 | }
137 |
138 | &:before, &:after {
139 | content: '';
140 | position: absolute;
141 | top: 0;
142 | left: 0;
143 | width: 50%;
144 | height: 19px;
145 | }
146 |
147 | &:after {
148 | left: 50%;
149 | border-left: 2px solid #ddd;
150 | }
151 |
152 | &:not(:first-child):before,
153 | &:not(:last-child):after {
154 | border-top: 1px solid #ddd;
155 | }
156 | }
157 | }
158 | .org-tree-node-children {
159 | .org-tree-node.collapsed {
160 | padding-bottom: 30px;
161 |
162 | .org-tree-node-label:after {
163 | content: "";
164 | position: absolute;
165 | top: 100%;
166 | left: 0;
167 | width: 50%;
168 | height: 20px;
169 | border-right: 1px solid #ddd;
170 | }
171 | }
172 | }
173 | .org-tree > .org-tree-node {
174 | padding-top: 0;
175 |
176 | &:after {
177 | border-left: 0;
178 | }
179 | }
180 | .org-tree-node-children {
181 | padding-top: 20px;
182 | display: table;
183 |
184 | &:before {
185 | content: '';
186 | position: absolute;
187 | top: 0;
188 | left: 50%;
189 | width: 0;
190 | height: 20px;
191 | border-left: 2px solid #ddd;
192 | }
193 |
194 | &:after {
195 | content: '';
196 | display: table;
197 | clear: both;
198 | }
199 | }
200 |
201 | .horizontal {
202 | .org-tree-node {
203 | &.collapsed {
204 | .org-tree-node-label:after {
205 | content: '';
206 | position: absolute;
207 | top: 0;
208 | left: 100%;
209 | width: 20px;
210 | height: 50%;
211 | border-right: 0;
212 | border-bottom: 1px solid #ddd;
213 | }
214 | }
215 | }
216 | .org-tree-node-children {
217 | .org-tree-node {
218 | display: table-cell;
219 | float: none;
220 | padding-top: 0;
221 | padding-left: 20px;
222 |
223 | &.is-leaf, &.collapsed {
224 | padding-top: 10px;
225 | padding-bottom: 10px;
226 | }
227 |
228 | &:before, &:after {
229 | width: 19px;
230 | height: 50%;
231 | }
232 |
233 | &:after {
234 | top: 50%;
235 | left: 0;
236 | border-left: 0;
237 | }
238 |
239 | &:only-child:before {
240 | top: 1px;
241 | border-bottom: 1px solid #ddd;
242 | }
243 |
244 | &:not(:first-child):before,
245 | &:not(:last-child):after {
246 | border-top: 0;
247 | border-left: 2px solid #ddd;
248 | }
249 | &:not(:only-child):after {
250 | border-top: 1px solid #ddd;
251 | }
252 |
253 | .org-tree-node-inner {
254 | display: table;
255 | }
256 | }
257 | }
258 |
259 | .org-tree-node-label {
260 | display: table-cell;
261 | vertical-align: middle;
262 | }
263 |
264 | .org-tree-node-children .org-tree-node.collapsed {
265 | padding-right: 30px;
266 | .org-tree-node-label:after {
267 | top: 0;
268 | left: 100%;
269 | width: 20px;
270 | height: 50%;
271 | border-right: 0;
272 | border-bottom: 1px solid #ddd;
273 | }
274 | }
275 |
276 | .org-tree-node-btn {
277 | top: 50%;
278 | left: 100%;
279 | margin-top: -11px;
280 | margin-left: 9px;
281 | }
282 |
283 | & > .org-tree-node:only-child:before {
284 | border-bottom: 0;
285 | }
286 |
287 | .org-tree-node-children {
288 | display: table-cell;
289 | padding-top: 0;
290 | padding-left: 20px;
291 |
292 | &:before {
293 | top: 50%;
294 | left: 0;
295 | width: 20px;
296 | height: 0;
297 | border-left: 0;
298 | border-top: 1px solid #ddd;
299 | }
300 |
301 | &:after {
302 | display: none;
303 | }
304 |
305 | & > .org-tree-node {
306 | display: block;
307 | }
308 | }
309 | }
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yj-liuzepeng/vue-power-tree/a9a4122c723150ad95021dde28fb458062ccf0e9/public/favicon.ico
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
9 |
10 |
11 | -
12 |
13 | +
14 |
15 |
16 |
17 |
18 |
19 |
84 |
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yj-liuzepeng/vue-power-tree/a9a4122c723150ad95021dde28fb458062ccf0e9/src/assets/logo.png
--------------------------------------------------------------------------------
/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare module '*.vue' {
4 | import type { DefineComponent } from 'vue'
5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
6 | const component: DefineComponent<{}, {}, any>
7 | export default component
8 | }
9 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 |
4 | createApp(App).mount('#app')
5 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "useDefineForClassFields": true,
5 | "module": "esnext",
6 | "moduleResolution": "node",
7 | "strict": true,
8 | "jsx": "preserve",
9 | "sourceMap": true,
10 | "resolveJsonModule": true,
11 | "isolatedModules": true,
12 | "esModuleInterop": true,
13 | "lib": ["esnext", "dom"],
14 | "skipLibCheck": true
15 | },
16 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
17 | "references": [{ "path": "./tsconfig.node.json" }]
18 | }
19 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "esnext",
5 | "moduleResolution": "node"
6 | },
7 | "include": ["vite.config.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite"; // 工具函数,获取类型提示
2 | import { resolve } from "path";
3 |
4 | import vue from '@vitejs/plugin-vue';
5 | // 路径函数
6 | function pathResolve(dir) {
7 | return resolve(__dirname, ".", dir);
8 | }
9 |
10 | export default defineConfig({
11 | plugins:[vue()],
12 | resolve: {
13 | alias: { // 设置别名,@就代表src目录
14 | "@": pathResolve("src"),
15 | }
16 | },
17 | build: {
18 | lib: {
19 | entry: pathResolve('packages/index.ts'), // 入口文件
20 | name: 'VuePowerTree', // 暴露的全局变量
21 | fileName: (format) => `vue-power-tree.${format}.js` // 输出的包文件名
22 | },
23 | rollupOptions: {
24 | external: ['vue'], // 确保外部化处理那些不想打包进库的依赖
25 | output: {
26 | globals: { // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
27 | vue: 'Vue'
28 | }
29 | }
30 | }
31 | }
32 | });
--------------------------------------------------------------------------------