├── .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 | ![npm](https://img-blog.csdnimg.cn/img_convert/16748ef14013d0f2b347849f454708ea.png) 16 | 17 | ![npm](https://liuzepeng.com/drag.png) 18 | 19 | ![npm](https://liuzepeng.com/zdy.png) 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 | 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 | 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 | 9 | 10 | 32 | 33 | -------------------------------------------------------------------------------- /packages/tree/src/tree-node.vue: -------------------------------------------------------------------------------- 1 | 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 | 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 | 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 | }); --------------------------------------------------------------------------------