23
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,23 @@ | ||||
| # Logs | ||||
| logs | ||||
| *.log | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
| pnpm-debug.log* | ||||
| lerna-debug.log* | ||||
|  | ||||
| node_modules | ||||
| dist-ssr | ||||
| *.local | ||||
|  | ||||
| # Editor directories and files | ||||
| .vscode/* | ||||
| !.vscode/extensions.json | ||||
| .idea | ||||
| .DS_Store | ||||
| *.suo | ||||
| *.ntvs* | ||||
| *.njsproj | ||||
| *.sln | ||||
| *.sw? | ||||
							
								
								
									
										76
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @@ -1,78 +1,2 @@ | ||||
| # ccc-devtools | ||||
| Cocos Creator 网页调试工具,运行时查看、修改节点树,实时更新节点属性,可视化缓存资源。 | ||||
|  | ||||
| > 当前分支适用于 cocos creator 2.0-2.3 版本,其他版本需切换到对应分支 | ||||
|  | ||||
| ## 功能 | ||||
|  | ||||
| - 场景节点树实时显示,节点、组件属性实时显示更改 | ||||
|  | ||||
|  | ||||
|  | ||||
| - 可视化缓存资源 | ||||
|  | ||||
|  | ||||
|  | ||||
| - 标记场景中节点位置 | ||||
|  | ||||
|  | ||||
|  | ||||
| - 输出节点、组件引用到控制台 | ||||
|  | ||||
|  | ||||
|  | ||||
| - cc控制台功能扩展 | ||||
|  | ||||
|  | ||||
|  | ||||
| ## 全局使用 | ||||
|  | ||||
| 1. 点击 Creator 右上角进入编辑器 resources 目录,再依次进入`static/preview-templates`目录 | ||||
|  | ||||
|     | ||||
|  | ||||
| 2. 将本项目clone到上面的目录下,**如果使用下载压缩包的方式记得把后缀名-master去掉** | ||||
|  | ||||
|     | ||||
|  | ||||
| 3. 打开 `index.jade`,找到 `body` 将中间部分替换为 `include ./ccc-devtools/index.html`,**注意用tab键对齐** | ||||
|  | ||||
|     | ||||
|  | ||||
| ## 项目使用 | ||||
|  | ||||
| Cocos Creator 从 v2.2 开始新增了自定义网页预览功能。 | ||||
|  | ||||
| 1. 重复上面的操作步骤,将修改后的 `preview-templates` 目录拷贝到项目根目录 | ||||
|  | ||||
| 2. 将 `ccc-devtools/index.html` 里所有引用的资源路径 `app/editor/static/preview-templates/ccc-devtools/...` 替换为 `ccc-devtools/...` | ||||
|  | ||||
| 3. 重启 Cocos Creator | ||||
|  | ||||
| ## 自定义 | ||||
|  | ||||
| - 本项目使用了 vue 和 vuetify,可根据 [vuetify 文档](https://vuetifyjs.com/en/getting-started/quick-start/) 对页面进行修改 | ||||
|  | ||||
| - 节点、组件显示属性可在 `config.js` 里配置,目前支持 text,number,textarea,color,bool 几种类型 | ||||
|  | ||||
| ## 需求、更新 | ||||
|  | ||||
| https://github.com/potato47/ccc-devtools | ||||
|  | ||||
| 如果没有更改源码,可直接在目录下 git pull | ||||
|  | ||||
| 论坛讨论地址:https://forum.cocos.com/t/creator-20190201/71578 | ||||
|  | ||||
| ## 贡献指南 | ||||
|  | ||||
| - 版本号命名规则 https://semver.org/lang/zh-CN/ ,简单来讲,新功能第二位加一,修复bug第三位加一 | ||||
|  | ||||
| - 如果新增功能请在README中添加预览截图说明 | ||||
|  | ||||
| - 记得更新version.json中的版本号 | ||||
|  | ||||
| ## 前人种树 | ||||
|  | ||||
| - https://github.com/vuejs/vue | ||||
|  | ||||
| - https://github.com/vuetifyjs/vuetify | ||||
|   | ||||
							
								
								
									
										5
									
								
								auto-imports.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,5 @@ | ||||
| // Generated by 'unplugin-auto-import' | ||||
| export {} | ||||
| declare global { | ||||
|  | ||||
| } | ||||
							
								
								
									
										23
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,23 @@ | ||||
| // generated by unplugin-vue-components | ||||
| // We suggest you to commit this file into source control | ||||
| // Read more: https://github.com/vuejs/core/pull/3399 | ||||
| import '@vue/runtime-core' | ||||
|  | ||||
| export {} | ||||
|  | ||||
| declare module '@vue/runtime-core' { | ||||
|   export interface GlobalComponents { | ||||
|     CCComponent: typeof import('./src/components/CCComponent.vue')['default'] | ||||
|     CCNode: typeof import('./src/components/CCNode.vue')['default'] | ||||
|     ElButton: typeof import('element-plus/es')['ElButton'] | ||||
|     ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] | ||||
|     ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] | ||||
|     ElInput: typeof import('element-plus/es')['ElInput'] | ||||
|     ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] | ||||
|     ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] | ||||
|     ElTreeV2: typeof import('element-plus/es')['ElTreeV2'] | ||||
|     PropItem: typeof import('./src/components/PropItem.vue')['default'] | ||||
|     TreePanel: typeof import('./src/components/TreePanel.vue')['default'] | ||||
|     UserComponent: typeof import('./src/components/UserComponent.vue')['default'] | ||||
|   } | ||||
| } | ||||
							
								
								
									
										54
									
								
								config.js
									
									
									
									
									
								
							
							
						
						| @@ -1,54 +0,0 @@ | ||||
| const NEX_CONFIG = { | ||||
| 	nodeSchema: { | ||||
| 		node2d: { | ||||
| 			title: 'Node', | ||||
| 			key: 'cc.Node', | ||||
| 			rows: [ | ||||
| 				{ name: 'Name', key: 'name', type: 'text' }, | ||||
| 				{ name: 'X', key: 'x', type: 'number' }, | ||||
| 				{ name: 'Y', key: 'y', type: 'number' }, | ||||
| 				{ name: 'Width', key: 'width', type: 'number' }, | ||||
| 				{ name: 'Height', key: 'height', type: 'number' }, | ||||
| 				{ name: 'Angle', key: 'angle', type: 'number' }, | ||||
| 				{ name: 'ScaleX', key: 'scaleX', type: 'number' }, | ||||
| 				{ name: 'ScaleY', key: 'scaleY', type: 'number' }, | ||||
| 				{ name: 'Opacity', key: 'opacity', type: 'number' }, | ||||
| 				{ name: 'Color', key: 'hex_color', type: 'color' }, | ||||
| 				{ name: 'Group', key: 'group', type: 'text' }, | ||||
| 			] | ||||
| 		}, | ||||
| 		node3d: { | ||||
| 			title: 'Node', | ||||
| 			key: 'cc.Node', | ||||
| 			rows: [ | ||||
| 				// TODO: | ||||
| 			] | ||||
| 		}, | ||||
| 	}, | ||||
| 	componentsSchema: { | ||||
| 		'cc.Camera': { | ||||
| 			title: 'cc.Camera', | ||||
| 			key: 'cc.Camera', | ||||
| 			rows: [ | ||||
| 				{ name: 'Zoom Ratio', key: 'zoomRatio', type: 'number' }, | ||||
| 				{ name: 'Depth', key: 'depth', type: 'number' }, | ||||
| 				{ name: 'Bacground Color', key: 'hex_backgroundColor', rawKey: 'backgroundColor', type: 'color' }, | ||||
| 				{ name: 'Align with Screen', key: 'alignWithScreen', type: 'bool' }, | ||||
| 			] | ||||
| 		}, | ||||
| 		'cc.Sprite': { | ||||
| 			key: 'cc.Sprite', | ||||
| 			title: 'cc.Sprite', | ||||
| 			rows: [] | ||||
| 		}, | ||||
| 		'cc.Label': { | ||||
| 			title: 'cc.Label', | ||||
| 			key: 'cc.Label', | ||||
| 			rows: [ | ||||
| 				{ name: 'String', key: 'string', type: 'textarea' }, | ||||
| 				{ name: 'Font Size', key: 'fontSize', type: 'number' }, | ||||
| 				{ name: 'Line Height', key: 'lineHeight', type: 'number' }, | ||||
| 			] | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										251
									
								
								index.html
									
									
									
									
									
								
							
							
						
						| @@ -1,249 +1,2 @@ | ||||
| <link href="app/editor/static/preview-templates/ccc-devtools/libs/css/materialdesignicons.min.css" rel="stylesheet" | ||||
|     type="text/css"> | ||||
| <link href="app/editor/static/preview-templates/ccc-devtools/libs/css/vuetify.min.css" rel="stylesheet" type="text/css"> | ||||
| <style> | ||||
|     html { | ||||
|         overflow-y: auto; | ||||
|     } | ||||
| </style> | ||||
|  | ||||
| <v-app id="app"> | ||||
|     <v-app-bar app clipped-left color="gray" dense v-if="isShowTop"> | ||||
|         <v-app-bar-nav-icon @click.stop="drawer = !drawer"></v-app-bar-nav-icon> | ||||
|         <div id="recompiling"><span>Recompiling...</span></div> | ||||
|         <v-spacer></v-spacer> | ||||
|         <div class="toolbar"> | ||||
|             <div class="item"> | ||||
|                 <select id="opts-device"> | ||||
|                     <option value="0">Default</option> | ||||
|                 </select> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <v-btn id="btn-rotate" small height="25"><span style="color: #aaa;">Rotate</span></v-btn> | ||||
|             </div> | ||||
|             <span style="font-size: small;display: none;" class="item">Debug Mode:</span> | ||||
|             <div class="item" style="display: none;"> | ||||
|                 <select id="opts-debug-mode"> | ||||
|                     <option value="0">None</option> | ||||
|                     <option value="1">Info</option> | ||||
|                     <option value="2">Warn</option> | ||||
|                     <option value="3">Error</option> | ||||
|                     <option value="4">Info For Web Page</option> | ||||
|                     <option value="5">Warn For Web Page</option> | ||||
|                     <option value="6">Error For Web Page</option> | ||||
|                 </select> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <v-btn id="btn-show-fps" small height="25"><span style="color: #aaa;">Show FPS</span></v-btn> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <span style="font-size: small;color: #aaa;" class="item">FPS:</span><input id="input-set-fps" | ||||
|                     type="number" /> | ||||
|             </div> | ||||
|             <div style="margin-right: 0px;" class="item"> | ||||
|                 <v-btn id="btn-pause" small height="25"><span style="color: #aaa;">Pause</span></v-btn> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <v-btn id="btn-step" style="display: none;" small height="25"> | ||||
|                     <span style="color: #aaa;">Step</span> | ||||
|                 </v-btn> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <v-btn id="btn-recompile" small height="25"><span style="color: #aaa;">Recompile</span></v-btn> | ||||
|             </div> | ||||
|             <v-icon @click="openCocosDocs" small>mdi-cloud-search</v-icon> | ||||
|             <v-icon @click="openCocosForum" small>mdi-forum</v-icon> | ||||
|             <v-icon @click="openCacheDialog" small>mdi-table</v-icon> | ||||
|             <v-icon @click="openGithub" small>mdi-home</v-icon> | ||||
|         </div> | ||||
|     </v-app-bar> | ||||
|      | ||||
|     <div v-if="!isShowTop"> | ||||
|         <div id="recompiling"><span>Recompiling...</span></div> | ||||
|         <div class="toolbar"> | ||||
|             <div class="item"> | ||||
|                 <select id="opts-device"> | ||||
|                     <option value="0">Default</option> | ||||
|                 </select> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <v-btn id="btn-rotate" small height="25"><span style="color: #aaa;">Rotate</span></v-btn> | ||||
|             </div> | ||||
|             <span style="font-size: small;display: none;" class="item">Debug Mode:</span> | ||||
|             <div class="item" style="display: none;"> | ||||
|                 <select id="opts-debug-mode"> | ||||
|                     <option value="0">None</option> | ||||
|                     <option value="1">Info</option> | ||||
|                     <option value="2">Warn</option> | ||||
|                     <option value="3">Error</option> | ||||
|                     <option value="4">Info For Web Page</option> | ||||
|                     <option value="5">Warn For Web Page</option> | ||||
|                     <option value="6">Error For Web Page</option> | ||||
|                 </select> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <v-btn id="btn-show-fps" small height="25"><span style="color: #aaa;">Show FPS</span></v-btn> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <span style="font-size: small;color: #aaa;" class="item">FPS:</span><input id="input-set-fps" | ||||
|                     type="number" /> | ||||
|             </div> | ||||
|             <div style="margin-right: 0px;" class="item"> | ||||
|                 <v-btn id="btn-pause" small height="25"><span style="color: #aaa;">Pause</span></v-btn> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <v-btn id="btn-step" style="display: none;" small height="25"> | ||||
|                     <span style="color: #aaa;">Step</span> | ||||
|                 </v-btn> | ||||
|             </div> | ||||
|             <div class="item"> | ||||
|                 <v-btn id="btn-recompile" small height="25"><span style="color: #aaa;">Recompile</span></v-btn> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <v-navigation-drawer v-model="drawer" app clipped fixed width="512" v-if="isShowTop"> | ||||
|         <v-container style="height: 50%;overflow: auto;"> | ||||
|             <v-text-field v-model="treeSearchText" dense label="Search Node or Component" dark flat solo-inverted | ||||
|                 hide-details clearable clear-icon="mdi-close-circle-outline"></v-text-field> | ||||
|             <v-treeview :items="treeData" item-key="id" dense activatable :search="treeSearchText" | ||||
|                 :active.sync="selectedNodes"> | ||||
|                 <template v-slot:label="{ item, active }"> | ||||
|                     <label v-if="item.active" style="color: white;">{{ item.name }}</label> | ||||
|                     <label v-else style="color: gray;">{{ item.name }}</label> | ||||
|                 </template> | ||||
|             </v-treeview> | ||||
|         </v-container> | ||||
|         <v-container style="border-top: 2px solid darkgray;height: 50%;overflow-y: auto;"> | ||||
|             <template v-if="selectedNode"> | ||||
|                 <!-- Node --> | ||||
|                 <table style="width: 100%;color: white;" border="1"> | ||||
|                     <thead> | ||||
|                         <tr> | ||||
|                             <th colspan="2" style="text-align: left; padding: 10px;"> | ||||
|                                 <div class="float-left" style="display:inline-flex;"> | ||||
|                                     <v-simple-checkbox v-model="selectedNode.active"></v-simple-checkbox> | ||||
|                                     <span style="margin-left: 10px;">{{ nodeSchema.title }}</span> | ||||
|                                 </div> | ||||
|                                 <div class="float-right"> | ||||
|                                     <v-icon style="margin-left: 10px;margin-right: 10px;" @click="drawNodeRect()"> | ||||
|                                         mdi-adjust</v-icon> | ||||
|                                     <v-icon @click="outputNodeHandler()">mdi-send</v-icon> | ||||
|                                 </div> | ||||
|                             </th> | ||||
|                         </tr> | ||||
|                     </thead> | ||||
|                     <tbody> | ||||
|                         <tr v-for="row in nodeSchema.rows" :key="row.key"> | ||||
|                             <td style="padding: 10px;width: 40%;">{{ row.name }}</td> | ||||
|                             <td style="width: 60%;"> | ||||
|                                 <v-color-picker v-if="row.type == 'color'" class="ma-2" canvas-height="80" width="259" | ||||
|                                     v-model="selectedNode[row.key]"></v-color-picker> | ||||
|                                 <v-simple-checkbox v-else-if="row.type == 'bool'" v-model="selectedNode[row.key]" | ||||
|                                     style="padding: 10px;width: 100%;"></v-simple-checkbox> | ||||
|                                 <input v-else :type="row.type" v-model="selectedNode[row.key]" | ||||
|                                     style="padding: 10px;width: 100%;"></input> | ||||
|                             </td> | ||||
|                         </tr> | ||||
|                     </tbody> | ||||
|                 </table> | ||||
|                 <!-- Components --> | ||||
|                 <table v-for="component in componentsSchema" style="width: 100%;color: white;" border="1"> | ||||
|                     <thead> | ||||
|                         <tr> | ||||
|                             <th colspan="2" style="text-align: left; padding: 10px;"> | ||||
|                                 <div class="float-left" style="display:inline-flex;"> | ||||
|                                     <v-simple-checkbox v-model="selectedNode[component.key].enabled"> | ||||
|                                     </v-simple-checkbox> | ||||
|                                     <span style="margin-left: 10px;">{{ component.title }}</span> | ||||
|                                 </div> | ||||
|                                 <div class="float-right"> | ||||
|                                     <v-icon @click="outputComponentHandler(component.key)">mdi-send</v-icon> | ||||
|                                 </div> | ||||
|                             </th> | ||||
|                         </tr> | ||||
|                     </thead> | ||||
|                     <tbody> | ||||
|                         <tr v-for="row in component.rows" :key="row.key"> | ||||
|                             <td style="padding: 10px;width: 40%;">{{ row.name }}</td> | ||||
|                             <td style="width: 60%;"> | ||||
|                                 <v-color-picker v-if="row.type == 'color'" class="ma-2" canvas-height="80" width="259" | ||||
|                                     v-model="selectedNode[component.key][row.key]"></v-color-picker> | ||||
|                                 <textarea v-else-if="row.type == 'textarea'" rows="1" | ||||
|                                     v-model="selectedNode[component.key][row.key]" style="padding: 10px;width: 100%;"> | ||||
|                                 </textarea> | ||||
|                                 <v-simple-checkbox v-else-if="row.type == 'bool'" | ||||
|                                     v-model="selectedNode[component.key][row.key]" style="padding: 10px;width: 100%;"> | ||||
|                                 </v-simple-checkbox> | ||||
|                                 <input v-else :type="row.type" v-model="selectedNode[component.key][row.key]" | ||||
|                                     style="padding: 10px;width: 100%;"></input> | ||||
|                             </td> | ||||
|                         </tr> | ||||
|                     </tbody> | ||||
|                 </table> | ||||
|             </template> | ||||
|         </v-container> | ||||
|     </v-navigation-drawer> | ||||
|  | ||||
|     <v-content> | ||||
|         <v-container fill-height> | ||||
|             <div id="content" class="content"> | ||||
|                 <div class="contentWrap"> | ||||
|                     <div id="GameDiv" class="wrapper"><canvas id="GameCanvas"></canvas> | ||||
|                         <div id="splash"> | ||||
|                             <div class="progress-bar stripes"><span></span></div> | ||||
|                         </div> | ||||
|                         <div id="bulletin"> | ||||
|                             <div id="sceneIsEmpty" class="inner">预览场景中啥都没有,加点什么,或在编辑器中打开其它场景吧</div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </v-container> | ||||
|     </v-content> | ||||
|  | ||||
|     <v-dialog v-model="cacheDialog" persistent scrollable> | ||||
|         <v-card> | ||||
|             <v-card-title> | ||||
|                 {{ cacheTitle }} | ||||
|                 <v-spacer></v-spacer> | ||||
|                 <v-text-field v-model="cacheSearchText" append-icon="mdi-magnify" label="Search" single-line | ||||
|                     hide-details> | ||||
|                 </v-text-field> | ||||
|             </v-card-title> | ||||
|             <v-divider></v-divider> | ||||
|             <v-card-text> | ||||
|                 <v-data-table :headers="cacheHeaders" :items="cacheData" :search="cacheSearchText" :sort-by="['size']" | ||||
|                     :sort-desc="[true]" :footer-props="{ | ||||
|                         showFirstLastPage: true, | ||||
|                         firstIcon: 'mdi-chevron-double-left', | ||||
|                         lastIcon: 'mdi-chevron-double-right', | ||||
|                       }"> | ||||
|                     <template v-slot:item.size="{ item }"> | ||||
|                         {{ item.size == -1 ? '_' : (item.size +'MB') }} | ||||
|                     </template> | ||||
|                     <template v-slot:item.preview="{ item }"> | ||||
|                         <div style="height: 60px;display: flex;align-items: center;"> | ||||
|                             <img :src="window.location.protocol + '//' + window.location.host + '/' + item.preview" | ||||
|                                 style="max-height: 60px;max-width: 120px;" v-if="item.preview"> | ||||
|                             <template v-else>_</template> | ||||
|                         </div> | ||||
|                     </template> | ||||
|                 </v-data-table> | ||||
|             </v-card-text> | ||||
|             <v-divider></v-divider> | ||||
|             <v-card-actions> | ||||
|                 <v-btn color="blue darken-1" text @click="cacheDialog = false">Close</v-btn> | ||||
|                 <v-spacer></v-spacer> | ||||
|                 <v-switch v-model="cacheOnlyTexture" label="只显示纹理"></v-switch> | ||||
|             </v-card-actions> | ||||
|         </v-card> | ||||
|     </v-dialog> | ||||
|  | ||||
| </v-app> | ||||
|  | ||||
| <script src="app/editor/static/preview-templates/ccc-devtools/libs/js/vue.min.js"></script> | ||||
| <script src="app/editor/static/preview-templates/ccc-devtools/libs/js/vuetify.js"></script> | ||||
| <script src="app/editor/static/preview-templates/ccc-devtools/config.js"></script> | ||||
| <script src="app/editor/static/preview-templates/ccc-devtools/libs/js/cc-console-utils.js"></script> | ||||
| <script src="app/editor/static/preview-templates/ccc-devtools/preview.js"></script> | ||||
| <div id="app"></div> | ||||
| <script type="module" src="/src/main.ts"></script> | ||||
| @@ -1,336 +0,0 @@ | ||||
| /* cyrillic-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 100; | ||||
|   src: local('Roboto Thin'), local('Roboto-Thin'), url(../fonts/googlefonts-base.woff2) format('woff2'); | ||||
|   unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; | ||||
| } | ||||
| /* cyrillic */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 100; | ||||
|   src: local('Roboto Thin'), local('Roboto-Thin'), url(../fonts/googlefonts-base.woff22) format('woff2'); | ||||
|   unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; | ||||
| } | ||||
| /* greek-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 100; | ||||
|   src: local('Roboto Thin'), local('Roboto-Thin'), url(../fonts/googlefonts-base.woff22) format('woff2'); | ||||
|   unicode-range: U+1F00-1FFF; | ||||
| } | ||||
| /* greek */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 100; | ||||
|   src: local('Roboto Thin'), local('Roboto-Thin'), url(../fonts/googlefonts-base.woff22) format('woff2'); | ||||
|   unicode-range: U+0370-03FF; | ||||
| } | ||||
| /* vietnamese */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 100; | ||||
|   src: local('Roboto Thin'), local('Roboto-Thin'), url(../fonts/googlefonts-base.woff22) format('woff2'); | ||||
|   unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; | ||||
| } | ||||
| /* latin-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 100; | ||||
|   src: local('Roboto Thin'), local('Roboto-Thin'), url(../fonts/googlefonts-base.woff22) format('woff2'); | ||||
|   unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; | ||||
| } | ||||
| /* latin */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 100; | ||||
|   src: local('Roboto Thin'), local('Roboto-Thin'), url(../fonts/googlefonts-base.woff2format('woff2'); | ||||
|   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; | ||||
| } | ||||
| /* cyrillic-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 300; | ||||
|   src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; | ||||
| } | ||||
| /* cyrillic */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 300; | ||||
|   src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; | ||||
| } | ||||
| /* greek-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 300; | ||||
|   src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+1F00-1FFF; | ||||
| } | ||||
| /* greek */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 300; | ||||
|   src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0370-03FF; | ||||
| } | ||||
| /* vietnamese */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 300; | ||||
|   src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; | ||||
| } | ||||
| /* latin-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 300; | ||||
|   src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; | ||||
| } | ||||
| /* latin */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 300; | ||||
|   src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/googlefonts-base.woff2) format('woff2'); | ||||
|   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; | ||||
| } | ||||
| /* cyrillic-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 400; | ||||
|   src: local('Roboto'), local('Roboto-Regular'), url(../fonts/googlefonts-base.woff2format('woff2'); | ||||
|   unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; | ||||
| } | ||||
| /* cyrillic */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 400; | ||||
|   src: local('Roboto'), local('Roboto-Regular'), url(../fonts/googlefonts-base.woff2format('woff2'); | ||||
|   unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; | ||||
| } | ||||
| /* greek-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 400; | ||||
|   src: local('Roboto'), local('Roboto-Regular'), url(../fonts/googlefonts-base.woff2format('woff2'); | ||||
|   unicode-range: U+1F00-1FFF; | ||||
| } | ||||
| /* greek */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 400; | ||||
|   src: local('Roboto'), local('Roboto-Regular'), url(../fonts/googlefonts-base.woff2format('woff2'); | ||||
|   unicode-range: U+0370-03FF; | ||||
| } | ||||
| /* vietnamese */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 400; | ||||
|   src: local('Roboto'), local('Roboto-Regular'), url(../fonts/googlefonts-base.woff2format('woff2'); | ||||
|   unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; | ||||
| } | ||||
| /* latin-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 400; | ||||
|   src: local('Roboto'), local('Roboto-Regular'), url(../fonts/googlefonts-base.woff2format('woff2'); | ||||
|   unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; | ||||
| } | ||||
| /* latin */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 400; | ||||
|   src: local('Roboto'), local('Roboto-Regular'), url(../fonts/googlefonts-base.woff2rmat('woff2'); | ||||
|   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; | ||||
| } | ||||
| /* cyrillic-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 500; | ||||
|   src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; | ||||
| } | ||||
| /* cyrillic */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 500; | ||||
|   src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; | ||||
| } | ||||
| /* greek-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 500; | ||||
|   src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+1F00-1FFF; | ||||
| } | ||||
| /* greek */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 500; | ||||
|   src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0370-03FF; | ||||
| } | ||||
| /* vietnamese */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 500; | ||||
|   src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; | ||||
| } | ||||
| /* latin-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 500; | ||||
|   src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; | ||||
| } | ||||
| /* latin */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 500; | ||||
|   src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/googlefonts-base.woff2) format('woff2'); | ||||
|   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; | ||||
| } | ||||
| /* cyrillic-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 700; | ||||
|   src: local('Roboto Bold'), local('Roboto-Bold'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; | ||||
| } | ||||
| /* cyrillic */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 700; | ||||
|   src: local('Roboto Bold'), local('Roboto-Bold'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; | ||||
| } | ||||
| /* greek-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 700; | ||||
|   src: local('Roboto Bold'), local('Roboto-Bold'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+1F00-1FFF; | ||||
| } | ||||
| /* greek */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 700; | ||||
|   src: local('Roboto Bold'), local('Roboto-Bold'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0370-03FF; | ||||
| } | ||||
| /* vietnamese */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 700; | ||||
|   src: local('Roboto Bold'), local('Roboto-Bold'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; | ||||
| } | ||||
| /* latin-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 700; | ||||
|   src: local('Roboto Bold'), local('Roboto-Bold'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; | ||||
| } | ||||
| /* latin */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 700; | ||||
|   src: local('Roboto Bold'), local('Roboto-Bold'), url(../fonts/googlefonts-base.woff2) format('woff2'); | ||||
|   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; | ||||
| } | ||||
| /* cyrillic-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 900; | ||||
|   src: local('Roboto Black'), local('Roboto-Black'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; | ||||
| } | ||||
| /* cyrillic */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 900; | ||||
|   src: local('Roboto Black'), local('Roboto-Black'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; | ||||
| } | ||||
| /* greek-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 900; | ||||
|   src: local('Roboto Black'), local('Roboto-Black'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+1F00-1FFF; | ||||
| } | ||||
| /* greek */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 900; | ||||
|   src: local('Roboto Black'), local('Roboto-Black'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0370-03FF; | ||||
| } | ||||
| /* vietnamese */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 900; | ||||
|   src: local('Roboto Black'), local('Roboto-Black'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; | ||||
| } | ||||
| /* latin-ext */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 900; | ||||
|   src: local('Roboto Black'), local('Roboto-Black'), url(../fonts/googlefonts-base.woff2f2) format('woff2'); | ||||
|   unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; | ||||
| } | ||||
| /* latin */ | ||||
| @font-face { | ||||
|   font-family: 'Roboto'; | ||||
|   font-style: normal; | ||||
|   font-weight: 900; | ||||
|   src: local('Roboto Black'), local('Roboto-Black'), url(../fonts/googlefonts-base.woff2) format('woff2'); | ||||
|   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; | ||||
| } | ||||
							
								
								
									
										1
									
								
								libs/css/materialdesignicons.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										8
									
								
								libs/css/vuetify.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,167 +0,0 @@ | ||||
| const initConsoleUtil = function () { | ||||
|     if (cc.tree) return; | ||||
|     cc.tree = function (key) { | ||||
|         let index = key || 0; | ||||
|         let treeNode = function (node) { | ||||
|             let nameStyle = | ||||
|                 `color: ${node.parent === null || node.activeInHierarchy ? 'green' : 'grey'}; font-size: 14px;font-weight:bold`; | ||||
|             let propStyle = | ||||
|                 `color: black; background: lightgrey;margin-left: 5px;border-radius:3px;padding: 0 3px;font-size: 10px;font-weight:bold`; | ||||
|             let indexStyle = | ||||
|                 `color: orange; background: black;margin-left: 5px;border-radius:3px;padding:0 3px;fonrt-size: 10px;font-weight:bold;` | ||||
|             let nameValue = `%c${node.name}`; | ||||
|             let propValue = | ||||
|                 `%c${node.x.toFixed(0) + ',' + node.y.toFixed(0) + ',' + node.width.toFixed(0) + ',' + node.height.toFixed(0) + ',' + node.scale.toFixed(1)}` | ||||
|             let indexValue = `%c${index++}`; | ||||
|             if (node.childrenCount > 0) { | ||||
|                 console.groupCollapsed(nameValue + propValue + indexValue, nameStyle, | ||||
|                     propStyle, indexStyle); | ||||
|                 for (let i = 0; i < node.childrenCount; i++) { | ||||
|                     treeNode(node.children[i]); | ||||
|                 } | ||||
|                 console.groupEnd(); | ||||
|             } else { | ||||
|                 console.log(nameValue + propValue + indexValue, nameStyle, propStyle, | ||||
|                     indexStyle); | ||||
|             } | ||||
|         } | ||||
|         if (key) { | ||||
|             let node = cc.cat(key); | ||||
|             index = node['tempIndex']; | ||||
|             treeNode(node); | ||||
|         } else { | ||||
|             let scene = cc.director.getScene(); | ||||
|             treeNode(scene); | ||||
|         } | ||||
|         return '属性依次为x,y,width,height,scale.使用cc.cat(id)查看详细属性.'; | ||||
|     } | ||||
|     cc.cat = function (key) { | ||||
|         let index = 0; | ||||
|         let target; | ||||
|         let sortId = function (node) { | ||||
|             if (target) return; | ||||
|             if (cc.js.isNumber(key)) { | ||||
|                 if (key === index++) { | ||||
|                     target = node; | ||||
|                     return; | ||||
|                 } | ||||
|             } else { | ||||
|                 if (key.toLowerCase() === node.name.toLowerCase()) { | ||||
|                     target = node; | ||||
|                     return; | ||||
|                 } else { | ||||
|                     index++; | ||||
|                 } | ||||
|             } | ||||
|             if (node.childrenCount > 0) { | ||||
|                 for (let i = 0; i < node.childrenCount; i++) { | ||||
|                     sortId(node.children[i]); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         let scene = cc.director.getScene(); | ||||
|         sortId(scene); | ||||
|         target['tempIndex'] = cc.js.isNumber(key) ? key : index; | ||||
|         return target; | ||||
|     } | ||||
|     cc.list = function (key) { | ||||
|         let targets = []; | ||||
|         let step = function (node) { | ||||
|             if (node.name.toLowerCase().indexOf(key.toLowerCase()) > -1) { | ||||
|                 targets.push(node); | ||||
|             } | ||||
|             if (node.childrenCount > 0) { | ||||
|                 for (let i = 0; i < node.childrenCount; i++) { | ||||
|                     step(node.children[i]); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         let scene = cc.director.getScene(); | ||||
|         step(scene); | ||||
|         if (targets.length === 1) { | ||||
|             return targets[0]; | ||||
|         } else { | ||||
|             return targets; | ||||
|         } | ||||
|     } | ||||
|     cc.where = function (key) { | ||||
|         let target = key.name ? key : cc.cat(key); | ||||
|         if (!target) { | ||||
|             return null; | ||||
|         } | ||||
|         let rect = target.getBoundingBoxToWorld(); | ||||
|         let bgNode = new cc.Node(); | ||||
|         let graphics = bgNode.addComponent(cc.Graphics); | ||||
|         let scene = cc.director.getScene(); | ||||
|         scene.addChild(bgNode); | ||||
|         bgNode.position = rect.center; | ||||
|         bgNode.group = target.group; | ||||
|         bgNode.zIndex = cc.macro.MAX_ZINDEX; | ||||
|         let isZeroSize = rect.width === 0 || rect.height === 0; | ||||
|         if (isZeroSize) { | ||||
|             graphics.circle(0, 0, 100); | ||||
|             graphics.fillColor = cc.Color.GREEN; | ||||
|             graphics.fill(); | ||||
|         } else { | ||||
|             bgNode.width = rect.width; | ||||
|             bgNode.height = rect.height; | ||||
|             graphics.rect(-bgNode.width / 2, -bgNode.height / 2, bgNode.width, bgNode.height); | ||||
|             graphics.fillColor = new cc.Color().fromHEX('#E91E6390'); | ||||
|             graphics.fill(); | ||||
|         } | ||||
|         setTimeout(() => { | ||||
|             if (cc.isValid(bgNode)) { | ||||
|                 bgNode.destroy(); | ||||
|             } | ||||
|         }, 2000); | ||||
|         return target; | ||||
|     } | ||||
|     cc.cache = function () { | ||||
|         let rawCacheData = cc.loader._cache; | ||||
|         let cacheData = []; | ||||
|         let totalTextureSize = 0; | ||||
|         for (let k in rawCacheData) { | ||||
|             let item = rawCacheData[k]; | ||||
|             if (item.type !== 'js' && item.type !== 'json') { | ||||
|                 let itemName = '_'; | ||||
|                 let preview = ''; | ||||
|                 let content = (item.content && item.content.__classname__) ? item.content.__classname__ : item.type; | ||||
|                 let formatSize = -1; | ||||
|                 if (item.type === 'png' || item.type === 'jpg') { | ||||
|                     let texture = rawCacheData[k.replace('.' + item.type, '.json')]; | ||||
|                     if (texture && texture._owner && texture._owner._name) { | ||||
|                         itemName = texture._owner._name; | ||||
|                         preview = texture.content.url; | ||||
|                     } | ||||
|                 } else { | ||||
|                     if (item.content.name && item.content.name.length > 0) { | ||||
|                         itemName = item.content.name; | ||||
|                     } else if (item._owner) { | ||||
|                         itemName = (item._owner && item._owner.name) || '_'; | ||||
|                     } | ||||
|                     if (content === 'cc.Texture2D') { | ||||
|                         let texture = item.content; | ||||
|                         preview = texture.url; | ||||
|                         let textureSize = texture.width * texture.height * ((texture._native === '.jpg' ? 3 : 4) / 1024 / 1024); | ||||
|                         totalTextureSize += textureSize; | ||||
|                         // sizeStr = textureSize.toFixed(3) + 'M'; | ||||
|                         formatSize = Math.round(textureSize * 1000) / 1000; | ||||
|                     } else if (content === 'cc.SpriteFrame') { | ||||
|                         preview = item.content._texture.url; | ||||
|                     } | ||||
|                 } | ||||
|                 cacheData.push({ | ||||
|                     queueId: item.queueId, | ||||
|                     type: item.type, | ||||
|                     name: itemName, | ||||
|                     preview: preview, | ||||
|                     id: item.id, | ||||
|                     content: content, | ||||
|                     size: formatSize | ||||
|                 }); | ||||
|             } | ||||
|         } | ||||
|         let cacheTitle = `缓存 [文件总数:${cacheData.length}][纹理缓存:${totalTextureSize.toFixed(2) + 'M'}]`; | ||||
|         return [cacheData, cacheTitle]; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										6
									
								
								libs/js/vue.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										41498
									
								
								libs/js/vuetify.js
									
									
									
									
									
								
							
							
						
						
							
								
								
									
										26
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,26 @@ | ||||
| { | ||||
|   "name": "ccc-devtools", | ||||
|   "private": true, | ||||
|   "version": "0.0.0", | ||||
|   "license": "MIT", | ||||
|   "scripts": { | ||||
|     "dev": "vite", | ||||
|     "build": "vue-tsc --noEmit && vite build", | ||||
|     "preview": "vite preview", | ||||
|     "package": "node scripts/package.js" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "element-plus": "^2.2.6", | ||||
|     "vue": "^3.2.25", | ||||
|     "vue-final-modal": "^3.4.4" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@vitejs/plugin-vue": "^2.3.3", | ||||
|     "adm-zip": "^0.5.9", | ||||
|     "typescript": "^4.5.4", | ||||
|     "unplugin-auto-import": "^0.9.3", | ||||
|     "unplugin-vue-components": "^0.21.1", | ||||
|     "vite": "^2.9.9", | ||||
|     "vue-tsc": "^0.34.7" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										193
									
								
								preview.js
									
									
									
									
									
								
							
							
						
						| @@ -1,193 +0,0 @@ | ||||
| const app = new Vue({ | ||||
|     el: '#app', | ||||
|     vuetify: new Vuetify({ | ||||
|         theme: { dark: true } | ||||
|     }), | ||||
|     data: { | ||||
|         isShowTop: true, | ||||
|         drawer: false, | ||||
|         cacheDialog: false, | ||||
|         cacheTitle: '', | ||||
|         cacheHeaders: [ | ||||
|             { text: 'Type', value: 'type' }, | ||||
|             { text: 'Name', value: 'name' }, | ||||
|             { text: 'Preivew', value: 'preview' }, | ||||
|             { text: 'ID', value: 'id' }, | ||||
|             { text: 'Content', value: 'content' }, | ||||
|             { text: 'Size', value: 'size' }, | ||||
|         ], | ||||
|         cacheRawData: [], | ||||
|         cacheData: [], | ||||
|         cacheSearchText: null, | ||||
|         cacheOnlyTexture: true, | ||||
|         treeData: [], | ||||
|         selectedNodes: [], | ||||
|         intervalId: -1, | ||||
|         treeSearchText: null, | ||||
|         nodeSchema: {}, | ||||
|         componentsSchema: [], | ||||
|     }, | ||||
|     created() { | ||||
|         if (window.innerHeight === window.outerHeight) { // 手机端,chrome device模式 | ||||
|             this.isShowTop = false; | ||||
|         } | ||||
|         this.waitCCInit().then(() => { | ||||
|             if (this.isShowTop) { | ||||
|                 this.startUpdateTree(); | ||||
|             } | ||||
|             initConsoleUtil(); | ||||
|         }); | ||||
|     }, | ||||
|     watch: { | ||||
|         cacheOnlyTexture() { | ||||
|             this.updateCacheData(); | ||||
|         } | ||||
|     }, | ||||
|     computed: { | ||||
|         treeFilter() { | ||||
|             return (item, search, textKey) => item[textKey].indexOf(search) > -1; | ||||
|         }, | ||||
|         selectedNode() { | ||||
|             if (!this.selectedNodes.length) return undefined | ||||
|             let node = getNodeById(this.selectedNodes[0]); | ||||
|             if (node) { | ||||
|                 if (!node.hex_color) { | ||||
|                     cc.js.getset(node, 'hex_color', () => { | ||||
|                         return '#' + node.color.toHEX('#rrggbb'); | ||||
|                     }, (hex) => { | ||||
|                         node.color = new cc.Color().fromHEX(hex); | ||||
|                     }, false, true); | ||||
|                 } | ||||
|  | ||||
|                 let superPreLoad = node._onPreDestroy; | ||||
|                 node._onPreDestroy = () => { | ||||
|                     superPreLoad.apply(node); | ||||
|                     if (this.selectedNodes.length > 0 && this.selectedNodes[0] === node._id) { | ||||
|                         this.selectedNodes.pop(); | ||||
|                     } | ||||
|                 } | ||||
|                 this.nodeSchema = NEX_CONFIG.nodeSchema.node2d; | ||||
|                 let componentsSchema = []; | ||||
|                 for (let component of node._components) { | ||||
|                     let schema = NEX_CONFIG.componentsSchema[component.__classname__]; | ||||
|                     if (schema) { | ||||
|                         node[schema.key] = node.getComponent(schema.key); | ||||
|                         for (let i = 0; i < schema.rows.length; i++) { | ||||
|                             if (schema.rows[i].type === 'color') { | ||||
|                                 if (!node[schema.key][schema.rows[i].key]) { | ||||
|                                     cc.js.getset(node[schema.key], schema.rows[i].key, () => { | ||||
|                                         return '#' + node.getComponent(schema.key)[schema.rows[i].rawKey].toHEX('#rrggbb'); | ||||
|                                     }, (hex) => { | ||||
|                                         node.getComponent(schema.key)[schema.rows[i].rawKey] = new cc.Color().fromHEX(hex); | ||||
|                                     }, false, true); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } else { | ||||
|                         schema = { | ||||
|                             title: component.__classname__, | ||||
|                             key: component.__classname__ | ||||
|                         }; | ||||
|                         node[schema.key] = node.getComponent(schema.key); | ||||
|                     } | ||||
|                     componentsSchema.push(schema); | ||||
|                 } | ||||
|                 this.componentsSchema = componentsSchema; | ||||
|             } | ||||
|             return node; | ||||
|         }, | ||||
|     }, | ||||
|     methods: { | ||||
|         waitCCInit() { | ||||
|             return new Promise((resolve, reject) => { | ||||
|                 let id = setInterval(() => { | ||||
|                     if (window.cc) { | ||||
|                         resolve(); | ||||
|                         clearInterval(id); | ||||
|                     } | ||||
|                 }, 500); | ||||
|             }); | ||||
|         }, | ||||
|         refreshTree: function () { | ||||
|             if (!this.$data.drawer || !window.cc || !cc.director.getScene() || !cc.director.getScene().children) return; | ||||
|             this.$data.treeData = getChildren(cc.director.getScene()); | ||||
|         }, | ||||
|         startUpdateTree: function () { | ||||
|             this.$data.intervalId = setInterval(() => { | ||||
|                 this.refreshTree(); | ||||
|             }, 200); | ||||
|         }, | ||||
|         stopUpdateTree: function () { | ||||
|             clearInterval(this.$data.intervalId); | ||||
|         }, | ||||
|         outputNodeHandler(id) { | ||||
|             let i = 1; | ||||
|             while (window['temp' + i] !== undefined) { | ||||
|                 i++; | ||||
|             } | ||||
|             window['temp' + i] = this.selectedNode; | ||||
|             console.log('temp' + i); | ||||
|             console.log(window['temp' + i]); | ||||
|         }, | ||||
|         outputComponentHandler(component) { | ||||
|             let i = 1; | ||||
|             while (window['temp' + i] !== undefined) { | ||||
|                 i++; | ||||
|             } | ||||
|             window['temp' + i] = this.selectedNode.getComponent(component); | ||||
|             console.log('temp' + i); | ||||
|             console.log(window['temp' + i]); | ||||
|         }, | ||||
|         drawNodeRect() { | ||||
|             cc.where(this.selectedNode); | ||||
|         }, | ||||
|         updateCacheData() { | ||||
|             if (this.$data.cacheOnlyTexture) { | ||||
|                 this.$data.cacheData = this.$data.cacheRawData.filter(item => item.content === 'cc.Texture2D'); | ||||
|             } else { | ||||
|                 this.$data.cacheData = this.$data.cacheRawData; | ||||
|             } | ||||
|         }, | ||||
|         openCacheDialog() { | ||||
|             [this.$data.cacheRawData, this.$data.cacheTitle] = cc.cache(); | ||||
|             this.updateCacheData(); | ||||
|             this.$data.cacheDialog = true; | ||||
|         }, | ||||
|         openGithub() { | ||||
|             window.open('https://github.com/potato47/ccc-devtools'); | ||||
|         }, | ||||
|         openCocosForum() { | ||||
|             window.open('https://forum.cocos.com/'); | ||||
|         }, | ||||
|         openCocosDocs() { | ||||
|             window.open('https://docs.cocos.com/'); | ||||
|         } | ||||
|     } | ||||
| }); | ||||
|  | ||||
| function getChildren(node) { | ||||
|     return node.children.map(child => { | ||||
|         let children = (child.children && child.children.length > 0) ? getChildren(child) : []; | ||||
|         return { id: child._id, name: child.name, active: child.activeInHierarchy, children }; | ||||
|     }); | ||||
| } | ||||
|  | ||||
| function getNodeById(id) { | ||||
|     let target; | ||||
|     const search = function (node) { | ||||
|         if (node._id === id) { | ||||
|             target = node; | ||||
|             return; | ||||
|         } | ||||
|         if (node.childrenCount) { | ||||
|             for (let i = 0; i < node.childrenCount; i++) { | ||||
|                 if (!target) { | ||||
|                     search(node.children[i]); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     const scene = cc.director.getScene(); | ||||
|     search(scene); | ||||
|     return target; | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								release/preview-template.zip
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								release/preview-template/dist/assets/index.2ee0cb33.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										111
									
								
								release/preview-template/dist/assets/index.5ef8f116.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										3
									
								
								release/preview-template/dist/index.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| <script type="module" crossorigin src="/dist/assets/index.5ef8f116.js"></script> | ||||
| <link rel="stylesheet" href="/dist/assets/index.2ee0cb33.css"> | ||||
| <div id="app"></div> | ||||
							
								
								
									
										58
									
								
								release/preview-template/index.ejs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,58 @@ | ||||
| <html class="dark"> | ||||
|  | ||||
| <head> | ||||
|     <link rel="icon" href="./favicon.ico" /> | ||||
|     <meta charset="utf-8" /> | ||||
|     <title> | ||||
|         <%=title%> | ||||
|     </title> | ||||
|     <meta name="viewport" | ||||
|         content="width=device-width,user-scalable=no,initial-scale=1,minimum-scale=1,maximum-scale=1,minimal-ui=true" /> | ||||
|     <meta name="apple-mobile-web-app-capable" content="yes" /> | ||||
|     <meta name="full-screen" content="yes" /> | ||||
|     <meta name="screen-orientation" content="portrait" /> | ||||
|     <meta name="x5-fullscreen" content="true" /> | ||||
|     <meta name="360-fullscreen" content="true" /> | ||||
|     <meta name="renderer" content="webkit" /> | ||||
|     <meta name="force-rendering" content="webkit" /> | ||||
|     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> | ||||
|     <link rel="stylesheet" type="text/css" href="./index.css" /> | ||||
|     <link rel="stylesheet" href="https://unpkg.com/element-plus/dist/index.css" /> | ||||
|     <script src="https://unpkg.com/vue@next"></script> | ||||
|     <script src="https://unpkg.com/element-plus"></script> | ||||
| </head> | ||||
|  | ||||
| <body> | ||||
|     <%- include(cocosToolBar, {config: config}) %> | ||||
|     <div style="flex: auto;display: flex;"> | ||||
|         <% include ./dist/index.html %> | ||||
|         <div id="content" class="content"> | ||||
|             <div class="contentWrap"> | ||||
|                 <div id="GameDiv" class="wrapper"> | ||||
|                     <div id="Cocos3dGameContainer"> | ||||
|                         <canvas id="GameCanvas"></canvas> | ||||
|                     </div> | ||||
|                     <div id="splash"> | ||||
|                         <div class="progress-bar stripes"><span></span></div> | ||||
|                     </div> | ||||
|                     <div id="bulletin"> | ||||
|                         <div id="sceneIsEmpty" class="inner"> | ||||
|                             <%=tip_sceneIsEmpty%> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="error" id="error"> | ||||
|                         <div class="title">Error <i>(Please open the console to see detailed errors)</i></div> | ||||
|                         <div class="error-main"></div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <p class="footer"> | ||||
|                 Created with <a href="https://www.cocos.com/products" target="_blank" title="Cocos Creator">Cocos | ||||
|                     Creator</a> | ||||
|             </p> | ||||
|         </div> | ||||
|     </div> | ||||
|     <%- include(cocosTemplate, {}) %> | ||||
| </body> | ||||
|  | ||||
| </html> | ||||
							
								
								
									
										1
									
								
								release/preview-template/version.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| {"name":"ccc-devtools","version":"2022/7/17","author":"Next","repo":"https://github.com/potato47/ccc-devtools.git"} | ||||
| Before Width: | Height: | Size: 849 KiB | 
| Before Width: | Height: | Size: 121 KiB | 
| Before Width: | Height: | Size: 119 KiB | 
| Before Width: | Height: | Size: 205 KiB | 
| Before Width: | Height: | Size: 189 KiB | 
| Before Width: | Height: | Size: 9.2 KiB | 
| Before Width: | Height: | Size: 45 KiB | 
| Before Width: | Height: | Size: 211 KiB | 
							
								
								
									
										14
									
								
								scripts/package.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,14 @@ | ||||
| const AdmZip = require('adm-zip'); | ||||
| const path = require('path'); | ||||
| const fs = require('fs'); | ||||
|  | ||||
| const versionPath = path.join(__dirname, '../release/preview-template/version.json'); | ||||
| const versionContent = fs.readFileSync(versionPath, 'utf-8'); | ||||
| const fileObject = JSON.parse(versionContent); | ||||
| fileObject.version = new Date().toLocaleDateString(); | ||||
| fs.writeFileSync(versionPath, JSON.stringify(fileObject), 'utf-8'); | ||||
|  | ||||
| const zip = new AdmZip(); | ||||
|  | ||||
| zip.addLocalFolder(path.join(__dirname, '../release/preview-template')); | ||||
| zip.writeZip(path.join(__dirname, '../release/preview-template.zip')); | ||||
							
								
								
									
										39
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,39 @@ | ||||
| <script setup lang="ts"> | ||||
| import TreePanel from './components/TreePanel.vue'; | ||||
| import { ref } from 'vue'; | ||||
| let showTree = ref(false); | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
|   <div> | ||||
|     <vue-final-modal v-model="showTree" classes="modal-container" content-class="modal-content" :hide-overlay="true" | ||||
|       :click-to-close="false" :prevent-click="true" :drag="true" :fit-parent="true" drag-selector=".modal-drag"> | ||||
|       <TreePanel :show="showTree"></TreePanel> | ||||
|     </vue-final-modal> | ||||
|     <el-button size="small" @click="showTree = !showTree">节点树</el-button> | ||||
|     <el-button size="small" @click="showTree = !showTree">自定义监听</el-button> | ||||
|     <el-button size="small" @click="showTree = !showTree">设置</el-button> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <style scoped> | ||||
| :deep(.modal-container) { | ||||
|   display: flex; | ||||
|   justify-content: start; | ||||
|   align-items: center; | ||||
| } | ||||
|  | ||||
| :deep(.modal-content) { | ||||
|   position: relative; | ||||
|   display: flex; | ||||
|   flex-direction: column; | ||||
|   margin: 0; | ||||
|   padding: 0; | ||||
|   border: 1px solid #e2e8f0; | ||||
|   border-radius: 0.25rem; | ||||
|   background: #171920; | ||||
|   min-width: 400px; | ||||
|   height: 80%; | ||||
| } | ||||
| </style> | ||||
|  | ||||
							
								
								
									
										24
									
								
								src/components/CCComponent.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,24 @@ | ||||
| <template> | ||||
|     <div class="row"> | ||||
|         <el-checkbox v-model="component!.enabled" size="small" style="margin-right: 10px;" /> | ||||
|         <span style="flex: 1;">{{ name }}</span> | ||||
|         <el-button size="small" @click="Utils.outputToConsole(component)">></el-button> | ||||
|     </div> | ||||
|     <PropItem v-if="model" v-for="prop in model.props" :key="prop.key" :model="prop.custom ? model : component" :prop-name="prop.name" :prop-key="prop.key" | ||||
|         :update-key="updateKey!"></PropItem> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import PropItem from './PropItem.vue'; | ||||
| import Utils from '../misc/Utils'; | ||||
| import { ComponentManager } from '../misc/ComponentManager'; | ||||
|  | ||||
| const props = defineProps({ | ||||
|     name: String, | ||||
|     component: Object, | ||||
|     updateKey: Number, | ||||
| }); | ||||
|  | ||||
| const model = ComponentManager.getViewModel(props.name!, () => props.component)!; | ||||
|  | ||||
| </script> | ||||
							
								
								
									
										101
									
								
								src/components/CCNode.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,101 @@ | ||||
| <template> | ||||
|     <div class="row"> | ||||
|         <el-checkbox v-model="ccNode!.active" size="small" style="margin-right: 10px;" /> | ||||
|         <span class="header-title" style="flex: 1;">Node</span> | ||||
|         <el-button size="small">+</el-button> | ||||
|         <el-button size="small" @click="Utils.outputToConsole(ccNode)">></el-button> | ||||
|     </div> | ||||
|     <PropItem v-for="prop in NodeModel.props" :key="prop.key" :model="NodeModel" :prop-name="prop.name" | ||||
|         :prop-key="prop.key" :update-key="updateKey!"></PropItem> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import PropItem from './PropItem.vue'; | ||||
| import Utils from '../misc/Utils'; | ||||
|  | ||||
| const props = defineProps({ | ||||
|     ccNode: Object, | ||||
|     updateKey: Number, | ||||
| }); | ||||
|  | ||||
| class NodeModel { | ||||
|  | ||||
|     static props = [ | ||||
|         { name: 'Name', key: 'nodeName' }, | ||||
|         { name: 'X', key: 'x' }, | ||||
|         { name: 'Y', key: 'y' }, | ||||
|         { name: 'Z', key: 'z' }, | ||||
|         { name: 'Scale X', key: 'scaleX' }, | ||||
|         { name: 'Scale Y', key: 'scaleY' }, | ||||
|         { name: 'Scale Z', key: 'scaleZ' }, | ||||
|     ] | ||||
|  | ||||
|     static get ccNode(): any { | ||||
|         return props.ccNode; | ||||
|     } | ||||
|  | ||||
|     static get nodeName() { | ||||
|         return this.ccNode.name; | ||||
|     } | ||||
|  | ||||
|     static set nodeName(value: number) { | ||||
|         this.ccNode.name = value; | ||||
|     } | ||||
|  | ||||
|     static get x() { | ||||
|         return this.ccNode.getPosition().x; | ||||
|     } | ||||
|  | ||||
|     static set x(value: number) { | ||||
|         const originPos = this.ccNode.getPosition(); | ||||
|         this.ccNode.setPosition(value, originPos.y, originPos.z); | ||||
|     } | ||||
|  | ||||
|     static get y() { | ||||
|         return this.ccNode.getPosition().y; | ||||
|     } | ||||
|  | ||||
|     static set y(value: number) { | ||||
|         const originPos = this.ccNode.getPosition(); | ||||
|         this.ccNode.setPosition(originPos.x, value, originPos.z); | ||||
|     } | ||||
|  | ||||
|     static get z() { | ||||
|         return this.ccNode.getPosition().z; | ||||
|     } | ||||
|  | ||||
|     static set z(value: number) { | ||||
|         const originPos = this.ccNode.getPosition(); | ||||
|         this.ccNode.setPosition(originPos.x, originPos.y, value); | ||||
|     } | ||||
|  | ||||
|     static get scaleX() { | ||||
|         return this.ccNode.getScale().x; | ||||
|     } | ||||
|  | ||||
|     static set scaleX(value: number) { | ||||
|         const originScale = this.ccNode.getScale(); | ||||
|         this.ccNode.setScale(value, originScale.y, originScale.z); | ||||
|     } | ||||
|  | ||||
|     static get scaleY() { | ||||
|         return this.ccNode.getScale().y; | ||||
|     } | ||||
|  | ||||
|     static set scaleY(value: number) { | ||||
|         const originScale = this.ccNode.getScale(); | ||||
|         this.ccNode.setScale(originScale.x, value, originScale.z); | ||||
|     } | ||||
|  | ||||
|     static get scaleZ() { | ||||
|         return this.ccNode.getScale().z; | ||||
|     } | ||||
|  | ||||
|     static set scaleZ(value: number) { | ||||
|         const originScale = this.ccNode.getScale(); | ||||
|         this.ccNode.setScale(originScale.x, originScale.y, value); | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| </script> | ||||
							
								
								
									
										43
									
								
								src/components/PropItem.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,43 @@ | ||||
| <template> | ||||
|   <div class="row"> | ||||
|     <span style="flex: 1">{{ propName }}</span> | ||||
|     <el-input-number v-model="model[propKey]" :precision="2" size="small" controls-position="right" style="flex: 1" | ||||
|       v-if="getPropType() == 'number'" /> | ||||
|     <el-input size="small" v-model="model[propKey]" style="flex: 1" v-else-if="getPropType() == 'string'" /> | ||||
|     <el-checkbox v-model="model[propKey]" size="small" style="margin-left: 10px" | ||||
|       v-else-if="getPropType() == 'boolean'" /> | ||||
|     <el-color-picker v-model="CustomModel.color" size="small" style="flex: 1" color-format="hex" show-alpha | ||||
|       v-else-if="getPropType() == 'cc.Color'" /> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| const props = defineProps<{ | ||||
|   model: any; | ||||
|   propName: string; | ||||
|   propKey: string; | ||||
|   updateKey: number; | ||||
| }>(); | ||||
|  | ||||
| function getPropType() { | ||||
|   const data = props.model[props.propKey]; | ||||
|   const dataType = typeof data; | ||||
|   if (dataType === "object" && data.__classname__) { | ||||
|     return data.__classname__; | ||||
|   } | ||||
|   return dataType; | ||||
| } | ||||
|  | ||||
| class CustomModel { | ||||
|   static get color() { | ||||
|     const origin = props.model[props.propKey]; | ||||
|     const hexA = origin.a.toString(16); | ||||
|     return `#${origin.toHEX()}${hexA.length === 1 ? "0" + hexA : hexA}`; | ||||
|   } | ||||
|  | ||||
|   static set color(v: string) { | ||||
|     // @ts-ignore | ||||
|     props.model[props.propKey] = new cc.Color().fromHEX(v); | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										169
									
								
								src/components/TreePanel.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,169 @@ | ||||
| <template> | ||||
|   <div style="width: 100%;height: 30px;background-color: #26282f;display: flex;align-items: center;justify-content: center;color: white;" class="modal-drag"> | ||||
|     节点树 | ||||
|   </div> | ||||
|   <div style="width: 100%;overflow: auto;" :style="{ height: treeViewHeight }"> | ||||
|     <el-tree-v2 ref="treeView" :props="defaultProps" empty-text="正在加载场景" :highlight-current="true" | ||||
|       :expand-on-click-node="false" :default-expanded-keys="expandedKeys" @current-change="handleCurrentNodeChange" | ||||
|       @node-expand="handleNodeExpand" @node-collapse="handleNodeCollapse" :height="treeViewHeight"> | ||||
|       <template #default="{ node }"> | ||||
|         <span :class="{ 'node-hide': !node.data.active }">{{ node.label }}</span> | ||||
|       </template> | ||||
|     </el-tree-v2> | ||||
|   </div> | ||||
|   <div style="width: 100%;border-top: 2px solid #1d1e21;overflow: auto;flex: 1;"> | ||||
|     <template v-if="updateKey !== 0 && Utils.checkNodeValid(currentNode)"> | ||||
|       <el-scrollbar> | ||||
|         <CCNode :cc-node="currentNode" :update-key="updateKey"></CCNode> | ||||
|         <div class="row" style="height: 2px;background-color: #1d1e21"></div> | ||||
|         <template v-for="component in Utils.getComponents(currentNode)" :key="component.name"> | ||||
|           <CCComponent v-if="component.name.startsWith('cc.')" :component="component.target" :name="component.name" | ||||
|             :update-key="updateKey"></CCComponent> | ||||
|           <UserComponent v-else :component="component.target" :name="component.name" :update-key="updateKey"> | ||||
|           </UserComponent> | ||||
|           <div class="row" style="height: 2px;background-color: #1d1e21"></div> | ||||
|         </template> | ||||
|       </el-scrollbar> | ||||
|     </template> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts" setup> | ||||
| import { onMounted } from 'vue'; | ||||
| import { ref } from 'vue-demi'; | ||||
| import CCNode from './CCNode.vue'; | ||||
| import Utils from '../misc/Utils'; | ||||
| import CCComponent from './CCComponent.vue'; | ||||
| import UserComponent from './UserComponent.vue'; | ||||
|  | ||||
| const props = defineProps({ | ||||
|     show: Boolean, | ||||
| }); | ||||
|  | ||||
| interface TreeNode { | ||||
|   name: string; | ||||
|   uuid: string; | ||||
|   active: boolean; | ||||
|   children?: TreeNode[]; | ||||
|   path: string[]; | ||||
| } | ||||
|  | ||||
| let updateKey = ref(1); | ||||
| let currentNode: any; | ||||
| const expandedNodeMap = new Map(); | ||||
| let expandedKeys: string[] = []; | ||||
| const defaultProps = { | ||||
|   value: 'uuid', | ||||
|   label: 'name', | ||||
|   children: 'children', | ||||
| }; | ||||
|  | ||||
| const treeViewHeight = window.innerHeight * 0.4; | ||||
| const treeView = ref(null); | ||||
|  | ||||
| onMounted(() => { | ||||
|   console.log('ccc-devtools init'); | ||||
| }); | ||||
|  | ||||
| function getChildByUuidPath(node: any, path: string[], index: number): any { | ||||
|   if (index >= path.length) { | ||||
|     return node; | ||||
|   } | ||||
|   node = node.getChildByUuid(path[index]); | ||||
|   return getChildByUuidPath(node, path, index + 1); | ||||
| } | ||||
|  | ||||
| function handleCurrentNodeChange(data: TreeNode) { | ||||
|   console.log(data); | ||||
|   // @ts-ignore | ||||
|   const ccNode = getChildByUuidPath(cc.director.getScene(), data.path, 0); | ||||
|   if (data) { | ||||
|     currentNode = ccNode; | ||||
|   } else { | ||||
|     currentNode = null; | ||||
|   } | ||||
| } | ||||
|  | ||||
| function handleNodeExpand(data: TreeNode) { | ||||
|   expandedNodeMap.set(data.uuid, true); | ||||
|   expandedKeys = [...expandedNodeMap.keys()]; | ||||
| } | ||||
|  | ||||
| function handleNodeCollapse(data: TreeNode) { | ||||
|   expandedNodeMap.delete(data.uuid); | ||||
|   expandedKeys = [...expandedNodeMap.keys()]; | ||||
| } | ||||
|  | ||||
| function setChildren(container: TreeNode[], children: any[], path: string[]) { | ||||
|   children.forEach(ccNode => { | ||||
|     const childPath = path.concat(ccNode.uuid); | ||||
|     const node = { | ||||
|       uuid: ccNode.uuid, | ||||
|       name: ccNode.name, | ||||
|       active: ccNode.activeInHierarchy, | ||||
|       children: [], | ||||
|       path: childPath, | ||||
|     }; | ||||
|     if (ccNode.children && ccNode.children.length > 0) { | ||||
|       setChildren(node.children, ccNode.children, childPath); | ||||
|     } | ||||
|     container.push(node); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| function refreshTree() { | ||||
|   if (props.show) { | ||||
|     let value: TreeNode[] = []; | ||||
|     //@ts-ignore | ||||
|     setChildren(value, cc.director.getScene().children, []); | ||||
|     (treeView.value as any).setData(value); | ||||
|     updateKey.value = -updateKey.value; | ||||
|   } | ||||
|   window.requestAnimationFrame(refreshTree); | ||||
| } | ||||
|  | ||||
| function init() { | ||||
|   refreshTree(); | ||||
| } | ||||
|  | ||||
| const intervalId = setInterval(() => { | ||||
|   // @ts-ignore | ||||
|   if (window['cc'] && cc.director.getScene()) { | ||||
|     init(); | ||||
|     clearInterval(intervalId); | ||||
|   } | ||||
| }, 1000); | ||||
|  | ||||
| </script> | ||||
|  | ||||
| <style> | ||||
| .row { | ||||
|   display: flex; | ||||
|   justify-content: center; | ||||
|   margin: 10px; | ||||
| } | ||||
|  | ||||
| .el-input__inner { | ||||
|   text-align: left !important; | ||||
| } | ||||
|  | ||||
| .el-input__wrapper { | ||||
|   padding-left: 10px !important; | ||||
| } | ||||
|  | ||||
| .el-color-picker { | ||||
|   flex: 1 !important; | ||||
| } | ||||
|  | ||||
| .el-color-picker__trigger { | ||||
|   width: 100% !important; | ||||
| } | ||||
|  | ||||
| span { | ||||
|   color: #cfd3dc; | ||||
| } | ||||
|  | ||||
| .node-hide { | ||||
|   opacity: 0.3; | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										18
									
								
								src/components/UserComponent.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,18 @@ | ||||
| <template> | ||||
|     <div class="row"> | ||||
|         <el-checkbox v-model="component!.enabled" size="small" style="margin-right: 10px;" /> | ||||
|         <span class="header-title" style="flex: 1;">{{ name }}</span> | ||||
|         <el-button size="small" @click="Utils.outputToConsole(component)">></el-button> | ||||
|     </div> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import Utils from '../misc/Utils'; | ||||
|  | ||||
| defineProps({ | ||||
|     name: String, | ||||
|     component: Object, | ||||
|     updateKey: Number, | ||||
| }); | ||||
|  | ||||
| </script> | ||||
							
								
								
									
										12
									
								
								src/env.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,12 @@ | ||||
| /// <reference types="vite/client" /> | ||||
|  | ||||
| declare module '*.vue' { | ||||
|   import type { DefineComponent } from 'vue' | ||||
|   // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types | ||||
|   const component: DefineComponent<{}, {}, any> | ||||
|   export default component | ||||
| } | ||||
|  | ||||
| declare module "ccc" { | ||||
|   function hehe(): void; | ||||
| } | ||||
							
								
								
									
										6
									
								
								src/main.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,6 @@ | ||||
| import { createApp } from 'vue'; | ||||
| import App from './App.vue'; | ||||
| import 'element-plus/theme-chalk/dark/css-vars.css'; | ||||
| import vfmPlugin from 'vue-final-modal' | ||||
|  | ||||
| createApp(App).use(vfmPlugin).mount('#app'); | ||||
							
								
								
									
										100
									
								
								src/misc/ComponentManager.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,100 @@ | ||||
| interface IComponentProp { | ||||
|     name: string; | ||||
|     key: string; | ||||
|     custom?: boolean; | ||||
| } | ||||
|  | ||||
| interface IComponentViewModel { | ||||
|     props: IComponentProp[]; | ||||
| } | ||||
|  | ||||
| export class ComponentManager { | ||||
|     static getViewModel(name: string, componentGetter: any) { | ||||
|         switch (name) { | ||||
|             case 'cc.UITransform': | ||||
|                 return new CCUITransformModel(componentGetter); | ||||
|             case 'cc.Label': | ||||
|                 return new CCLabelModel(); | ||||
|             case 'cc.Sprite': | ||||
|                 return new CCSpriteModel(); | ||||
|             default: | ||||
|                 return null | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| class CCUITransformModel implements IComponentViewModel { | ||||
|  | ||||
|     private componentGetter: any; | ||||
|  | ||||
|     props: IComponentProp[] = [ | ||||
|         { name: 'Width', key: 'width', custom: true }, | ||||
|         { name: 'Height', key: 'height', custom: true }, | ||||
|         { name: 'Anchor X', key: 'anchorX', custom: true }, | ||||
|         { name: 'Anchor Y', key: 'anchorY', custom: true }, | ||||
|     ] | ||||
|  | ||||
|     constructor(componentGetter: any) { | ||||
|         this.componentGetter = componentGetter; | ||||
|     } | ||||
|  | ||||
|     get component(): any { | ||||
|         return this.componentGetter(); | ||||
|     } | ||||
|  | ||||
|     get width() { | ||||
|         return this.componentGetter().contentSize.width; | ||||
|     } | ||||
|  | ||||
|     set width(value: number) { | ||||
|         const origin = this.component.contentSize; | ||||
|         this.component.setContentSize(value, origin.height); | ||||
|     } | ||||
|  | ||||
|     get height() { | ||||
|         return this.component.contentSize.height; | ||||
|     } | ||||
|  | ||||
|     set height(value: number) { | ||||
|         const origin = this.component.contentSize; | ||||
|         this.component.setContentSize(origin.width, value); | ||||
|     } | ||||
|  | ||||
|     get anchorX() { | ||||
|         return this.component.anchorPoint.x; | ||||
|     } | ||||
|  | ||||
|     set anchorX(value: number) { | ||||
|         const origin = this.component.anchorPoint; | ||||
|         this.component.setAnchorPoint(value, origin.y); | ||||
|     } | ||||
|  | ||||
|     get anchorY() { | ||||
|         return this.component.anchorPoint.y; | ||||
|     } | ||||
|  | ||||
|     set anchorY(value: number) { | ||||
|         const origin = this.component.anchorPoint; | ||||
|         this.component.setAnchorPoint(origin.x, value); | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| class CCLabelModel implements IComponentViewModel { | ||||
|  | ||||
|     props: IComponentProp[] = [ | ||||
|         { name: 'String', key: 'string' }, | ||||
|         { name: 'Color', key: 'color' }, | ||||
|         { name: 'Font Size', key: 'fontSize' }, | ||||
|         { name: 'Line Height', key: 'lineHeight' }, | ||||
|     ]; | ||||
|  | ||||
| } | ||||
|  | ||||
| class CCSpriteModel implements IComponentViewModel { | ||||
|  | ||||
|     props: IComponentProp[] = [ | ||||
|         { name: 'Color', key: 'color' }, | ||||
|     ]; | ||||
|  | ||||
| } | ||||
							
								
								
									
										31
									
								
								src/misc/Utils.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,31 @@ | ||||
| export default class Utils { | ||||
|  | ||||
|     static checkNodeValid(ccNode: any) { | ||||
|         // @ts-ignore | ||||
|         return ccNode && cc.isValid(ccNode) | ||||
|     } | ||||
|  | ||||
|     static outputToConsole(target: any) { | ||||
|         let i = 1; | ||||
|         // @ts-ignore | ||||
|         while (window['temp' + i] !== undefined) { | ||||
|             i++; | ||||
|         } | ||||
|         // @ts-ignore | ||||
|         window['temp' + i] = target; | ||||
|         console.log('temp' + i); | ||||
|         // @ts-ignore | ||||
|         console.log(window['temp' + i]); | ||||
|     } | ||||
|  | ||||
|     static getComponentName(component: any) { | ||||
|         return component.__classname__; | ||||
|     } | ||||
|  | ||||
|     static getComponents(ccNode: any) { | ||||
|         return ccNode.components.map((component: any) => { | ||||
|             return { name: component.__classname__, target: component } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										18
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,18 @@ | ||||
| { | ||||
|   "compilerOptions": { | ||||
|     "target": "esnext", | ||||
|     "useDefineForClassFields": true, | ||||
|     "module": "esnext", | ||||
|     "moduleResolution": "node", | ||||
|     "strict": true, | ||||
|     "jsx": "preserve", | ||||
|     "sourceMap": true, | ||||
|     "resolveJsonModule": true, | ||||
|     "isolatedModules": false, | ||||
|     "esModuleInterop": true, | ||||
|     "lib": ["esnext", "dom"], | ||||
|     "skipLibCheck": true | ||||
|   }, | ||||
|   "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], | ||||
|   "references": [{ "path": "./tsconfig.node.json" }] | ||||
| } | ||||
							
								
								
									
										8
									
								
								tsconfig.node.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | ||||
| { | ||||
|   "compilerOptions": { | ||||
|     "composite": true, | ||||
|     "module": "esnext", | ||||
|     "moduleResolution": "node" | ||||
|   }, | ||||
|   "include": ["vite.config.ts"] | ||||
| } | ||||
| @@ -1,6 +0,0 @@ | ||||
| { | ||||
|     "name": "ccc-devtools", | ||||
|     "version": "2d-v2.0", | ||||
|     "author": "Next", | ||||
|     "repo": "https://github.com/potato47/ccc-devtools.git" | ||||
| } | ||||
							
								
								
									
										23
									
								
								vite.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,23 @@ | ||||
| import { defineConfig } from 'vite' | ||||
| import vue from '@vitejs/plugin-vue' | ||||
| import AutoImport from 'unplugin-auto-import/vite' | ||||
| import Components from 'unplugin-vue-components/vite' | ||||
| import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' | ||||
|  | ||||
| // https://vitejs.dev/config/ | ||||
| export default defineConfig({ | ||||
|   plugins: [ | ||||
|     vue(), | ||||
|     AutoImport({ | ||||
|       resolvers: [ElementPlusResolver()], | ||||
|     }), | ||||
|     Components({ | ||||
|       resolvers: [ElementPlusResolver()], | ||||
|     }), | ||||
|   ], | ||||
|   base: '/dist/', | ||||
|   build: { | ||||
|     outDir: './release/preview-template/dist', | ||||
|     emptyOutDir: true | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										876
									
								
								yarn.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,876 @@ | ||||
| # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. | ||||
| # yarn lockfile v1 | ||||
|  | ||||
|  | ||||
| "@antfu/utils@^0.5.2": | ||||
|   version "0.5.2" | ||||
|   resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.5.2.tgz#8c2d931ff927be0ebe740169874a3d4004ab414b" | ||||
|   integrity sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA== | ||||
|  | ||||
| "@babel/parser@^7.16.4": | ||||
|   version "7.18.8" | ||||
|   resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.8.tgz#822146080ac9c62dac0823bb3489622e0bc1cbdf" | ||||
|   integrity sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA== | ||||
|  | ||||
| "@ctrl/tinycolor@^3.4.1": | ||||
|   version "3.4.1" | ||||
|   resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" | ||||
|   integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== | ||||
|  | ||||
| "@element-plus/icons-vue@^2.0.6": | ||||
|   version "2.0.6" | ||||
|   resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.0.6.tgz#8490e7a3193c17515d10c3be0544d800afe6a228" | ||||
|   integrity sha512-lPpG8hYkjL/Z97DH5Ei6w6o22Z4YdNglWCNYOPcB33JCF2A4wye6HFgSI7hEt9zdLyxlSpiqtgf9XcYU+m5mew== | ||||
|  | ||||
| "@floating-ui/core@^0.7.3": | ||||
|   version "0.7.3" | ||||
|   resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-0.7.3.tgz#d274116678ffae87f6b60e90f88cc4083eefab86" | ||||
|   integrity sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg== | ||||
|  | ||||
| "@floating-ui/dom@^0.5.4": | ||||
|   version "0.5.4" | ||||
|   resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-0.5.4.tgz#4eae73f78bcd4bd553ae2ade30e6f1f9c73fe3f1" | ||||
|   integrity sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg== | ||||
|   dependencies: | ||||
|     "@floating-ui/core" "^0.7.3" | ||||
|  | ||||
| "@nodelib/fs.scandir@2.1.5": | ||||
|   version "2.1.5" | ||||
|   resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" | ||||
|   integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== | ||||
|   dependencies: | ||||
|     "@nodelib/fs.stat" "2.0.5" | ||||
|     run-parallel "^1.1.9" | ||||
|  | ||||
| "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": | ||||
|   version "2.0.5" | ||||
|   resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" | ||||
|   integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== | ||||
|  | ||||
| "@nodelib/fs.walk@^1.2.3": | ||||
|   version "1.2.8" | ||||
|   resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" | ||||
|   integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== | ||||
|   dependencies: | ||||
|     "@nodelib/fs.scandir" "2.1.5" | ||||
|     fastq "^1.6.0" | ||||
|  | ||||
| "@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7": | ||||
|   version "2.11.7" | ||||
|   resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671" | ||||
|   integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ== | ||||
|  | ||||
| "@rollup/pluginutils@^4.2.1": | ||||
|   version "4.2.1" | ||||
|   resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" | ||||
|   integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== | ||||
|   dependencies: | ||||
|     estree-walker "^2.0.1" | ||||
|     picomatch "^2.2.2" | ||||
|  | ||||
| "@types/lodash-es@^4.17.6": | ||||
|   version "4.17.6" | ||||
|   resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" | ||||
|   integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== | ||||
|   dependencies: | ||||
|     "@types/lodash" "*" | ||||
|  | ||||
| "@types/lodash@*", "@types/lodash@^4.14.182": | ||||
|   version "4.14.182" | ||||
|   resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" | ||||
|   integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== | ||||
|  | ||||
| "@types/web-bluetooth@^0.0.14": | ||||
|   version "0.0.14" | ||||
|   resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz#94e175b53623384bff1f354cdb3197a8d63cdbe5" | ||||
|   integrity sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A== | ||||
|  | ||||
| "@vitejs/plugin-vue@^2.3.3": | ||||
|   version "2.3.3" | ||||
|   resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.3.tgz#fbf80cc039b82ac21a1acb0f0478de8f61fbf600" | ||||
|   integrity sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw== | ||||
|  | ||||
| "@volar/code-gen@0.34.17": | ||||
|   version "0.34.17" | ||||
|   resolved "https://registry.npmmirror.com/@volar/code-gen/-/code-gen-0.34.17.tgz#fd46e369454e6bd9599b511500b4c43acb9730bd" | ||||
|   integrity sha512-rHR7BA71BJ/4S7xUOPMPiB7uk6iU9oTWpEMZxFi5VGC9iJmDncE82WzU5iYpcbOBCVHsOjMh0+5CGMgdO6SaPA== | ||||
|   dependencies: | ||||
|     "@volar/source-map" "0.34.17" | ||||
|  | ||||
| "@volar/source-map@0.34.17": | ||||
|   version "0.34.17" | ||||
|   resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-0.34.17.tgz#79efc4d088e11f59fc857953185a1f852df70968" | ||||
|   integrity sha512-3yn1IMXJGGWB/G817/VFlFMi8oh5pmE7VzUqvgMZMrppaZpKj6/juvJIEiXNxRsgWc0RxIO8OSp4htdPUg1Raw== | ||||
|  | ||||
| "@volar/vue-code-gen@0.34.17": | ||||
|   version "0.34.17" | ||||
|   resolved "https://registry.npmmirror.com/@volar/vue-code-gen/-/vue-code-gen-0.34.17.tgz#55ca9c21b38c91bf362761b268a77b9f0ecae8bf" | ||||
|   integrity sha512-17pzcK29fyFWUc+C82J3JYSnA+jy3QNrIldb9kPaP9Itbik05ZjEIyEue9FjhgIAuHeYSn4LDM5s6nGjxyfhsQ== | ||||
|   dependencies: | ||||
|     "@volar/code-gen" "0.34.17" | ||||
|     "@volar/source-map" "0.34.17" | ||||
|     "@vue/compiler-core" "^3.2.36" | ||||
|     "@vue/compiler-dom" "^3.2.36" | ||||
|     "@vue/shared" "^3.2.36" | ||||
|  | ||||
| "@volar/vue-typescript@0.34.17": | ||||
|   version "0.34.17" | ||||
|   resolved "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-0.34.17.tgz#497eb471ebac25ff61af04031b78ec71a34d470b" | ||||
|   integrity sha512-U0YSVIBPRWVPmgJHNa4nrfq88+oS+tmyZNxmnfajIw9A/GOGZQiKXHC0k09SVvbYXlsjgJ6NIjhm9NuAhGRQjg== | ||||
|   dependencies: | ||||
|     "@volar/code-gen" "0.34.17" | ||||
|     "@volar/source-map" "0.34.17" | ||||
|     "@volar/vue-code-gen" "0.34.17" | ||||
|     "@vue/compiler-sfc" "^3.2.36" | ||||
|     "@vue/reactivity" "^3.2.36" | ||||
|  | ||||
| "@vue/compiler-core@3.2.37", "@vue/compiler-core@^3.2.36": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a" | ||||
|   integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg== | ||||
|   dependencies: | ||||
|     "@babel/parser" "^7.16.4" | ||||
|     "@vue/shared" "3.2.37" | ||||
|     estree-walker "^2.0.2" | ||||
|     source-map "^0.6.1" | ||||
|  | ||||
| "@vue/compiler-dom@3.2.37", "@vue/compiler-dom@^3.2.36": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz#10d2427a789e7c707c872da9d678c82a0c6582b5" | ||||
|   integrity sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ== | ||||
|   dependencies: | ||||
|     "@vue/compiler-core" "3.2.37" | ||||
|     "@vue/shared" "3.2.37" | ||||
|  | ||||
| "@vue/compiler-sfc@3.2.37", "@vue/compiler-sfc@^3.2.36": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4" | ||||
|   integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg== | ||||
|   dependencies: | ||||
|     "@babel/parser" "^7.16.4" | ||||
|     "@vue/compiler-core" "3.2.37" | ||||
|     "@vue/compiler-dom" "3.2.37" | ||||
|     "@vue/compiler-ssr" "3.2.37" | ||||
|     "@vue/reactivity-transform" "3.2.37" | ||||
|     "@vue/shared" "3.2.37" | ||||
|     estree-walker "^2.0.2" | ||||
|     magic-string "^0.25.7" | ||||
|     postcss "^8.1.10" | ||||
|     source-map "^0.6.1" | ||||
|  | ||||
| "@vue/compiler-ssr@3.2.37": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz#4899d19f3a5fafd61524a9d1aee8eb0505313cff" | ||||
|   integrity sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw== | ||||
|   dependencies: | ||||
|     "@vue/compiler-dom" "3.2.37" | ||||
|     "@vue/shared" "3.2.37" | ||||
|  | ||||
| "@vue/reactivity-transform@3.2.37": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz#0caa47c4344df4ae59f5a05dde2a8758829f8eca" | ||||
|   integrity sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg== | ||||
|   dependencies: | ||||
|     "@babel/parser" "^7.16.4" | ||||
|     "@vue/compiler-core" "3.2.37" | ||||
|     "@vue/shared" "3.2.37" | ||||
|     estree-walker "^2.0.2" | ||||
|     magic-string "^0.25.7" | ||||
|  | ||||
| "@vue/reactivity@3.2.37", "@vue/reactivity@^3.2.36": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848" | ||||
|   integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A== | ||||
|   dependencies: | ||||
|     "@vue/shared" "3.2.37" | ||||
|  | ||||
| "@vue/runtime-core@3.2.37": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz#7ba7c54bb56e5d70edfc2f05766e1ca8519966e3" | ||||
|   integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ== | ||||
|   dependencies: | ||||
|     "@vue/reactivity" "3.2.37" | ||||
|     "@vue/shared" "3.2.37" | ||||
|  | ||||
| "@vue/runtime-dom@3.2.37": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz#002bdc8228fa63949317756fb1e92cdd3f9f4bbd" | ||||
|   integrity sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw== | ||||
|   dependencies: | ||||
|     "@vue/runtime-core" "3.2.37" | ||||
|     "@vue/shared" "3.2.37" | ||||
|     csstype "^2.6.8" | ||||
|  | ||||
| "@vue/server-renderer@3.2.37": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz#840a29c8dcc29bddd9b5f5ffa22b95c0e72afdfc" | ||||
|   integrity sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA== | ||||
|   dependencies: | ||||
|     "@vue/compiler-ssr" "3.2.37" | ||||
|     "@vue/shared" "3.2.37" | ||||
|  | ||||
| "@vue/shared@3.2.37", "@vue/shared@^3.2.36": | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702" | ||||
|   integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw== | ||||
|  | ||||
| "@vueuse/core@^8.7.5": | ||||
|   version "8.9.4" | ||||
|   resolved "https://registry.npmmirror.com/@vueuse/core/-/core-8.9.4.tgz#c7db40f19390b3c9f4ff9294a30461497f62ec19" | ||||
|   integrity sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q== | ||||
|   dependencies: | ||||
|     "@types/web-bluetooth" "^0.0.14" | ||||
|     "@vueuse/metadata" "8.9.4" | ||||
|     "@vueuse/shared" "8.9.4" | ||||
|     vue-demi "*" | ||||
|  | ||||
| "@vueuse/metadata@8.9.4": | ||||
|   version "8.9.4" | ||||
|   resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-8.9.4.tgz#a4132db33e4c1b1023636acfa20aa7b37ab3d978" | ||||
|   integrity sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw== | ||||
|  | ||||
| "@vueuse/shared@8.9.4": | ||||
|   version "8.9.4" | ||||
|   resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-8.9.4.tgz#c9741c30ffb666b50d62f0dd80b76119fd47573e" | ||||
|   integrity sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag== | ||||
|   dependencies: | ||||
|     vue-demi "*" | ||||
|  | ||||
| acorn@^8.7.1: | ||||
|   version "8.7.1" | ||||
|   resolved "https://registry.npmmirror.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" | ||||
|   integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== | ||||
|  | ||||
| adm-zip@^0.5.9: | ||||
|   version "0.5.9" | ||||
|   resolved "https://registry.npmmirror.com/adm-zip/-/adm-zip-0.5.9.tgz#b33691028333821c0cf95c31374c5462f2905a83" | ||||
|   integrity sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg== | ||||
|  | ||||
| anymatch@~3.1.2: | ||||
|   version "3.1.2" | ||||
|   resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" | ||||
|   integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== | ||||
|   dependencies: | ||||
|     normalize-path "^3.0.0" | ||||
|     picomatch "^2.0.4" | ||||
|  | ||||
| async-validator@^4.2.5: | ||||
|   version "4.2.5" | ||||
|   resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" | ||||
|   integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== | ||||
|  | ||||
| balanced-match@^1.0.0: | ||||
|   version "1.0.2" | ||||
|   resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" | ||||
|   integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== | ||||
|  | ||||
| binary-extensions@^2.0.0: | ||||
|   version "2.2.0" | ||||
|   resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" | ||||
|   integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== | ||||
|  | ||||
| brace-expansion@^2.0.1: | ||||
|   version "2.0.1" | ||||
|   resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" | ||||
|   integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== | ||||
|   dependencies: | ||||
|     balanced-match "^1.0.0" | ||||
|  | ||||
| braces@^3.0.2, braces@~3.0.2: | ||||
|   version "3.0.2" | ||||
|   resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" | ||||
|   integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== | ||||
|   dependencies: | ||||
|     fill-range "^7.0.1" | ||||
|  | ||||
| chokidar@^3.5.3: | ||||
|   version "3.5.3" | ||||
|   resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" | ||||
|   integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== | ||||
|   dependencies: | ||||
|     anymatch "~3.1.2" | ||||
|     braces "~3.0.2" | ||||
|     glob-parent "~5.1.2" | ||||
|     is-binary-path "~2.1.0" | ||||
|     is-glob "~4.0.1" | ||||
|     normalize-path "~3.0.0" | ||||
|     readdirp "~3.6.0" | ||||
|   optionalDependencies: | ||||
|     fsevents "~2.3.2" | ||||
|  | ||||
| csstype@^2.6.8: | ||||
|   version "2.6.20" | ||||
|   resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" | ||||
|   integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== | ||||
|  | ||||
| dayjs@^1.11.3: | ||||
|   version "1.11.3" | ||||
|   resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz#4754eb694a624057b9ad2224b67b15d552589258" | ||||
|   integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== | ||||
|  | ||||
| debug@^4.3.4: | ||||
|   version "4.3.4" | ||||
|   resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" | ||||
|   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== | ||||
|   dependencies: | ||||
|     ms "2.1.2" | ||||
|  | ||||
| element-plus@^2.2.6: | ||||
|   version "2.2.9" | ||||
|   resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.2.9.tgz#f0366dfb2048d614813926274cb443f17e5fdef2" | ||||
|   integrity sha512-jYbL0JkCdv95rkT6trZJjCAizLPySa0qcd2cgq+57SKQnCZAcNDDq4GbTuFRnNavdoeCJnuM3HIficTIUpsMOQ== | ||||
|   dependencies: | ||||
|     "@ctrl/tinycolor" "^3.4.1" | ||||
|     "@element-plus/icons-vue" "^2.0.6" | ||||
|     "@floating-ui/dom" "^0.5.4" | ||||
|     "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7" | ||||
|     "@types/lodash" "^4.14.182" | ||||
|     "@types/lodash-es" "^4.17.6" | ||||
|     "@vueuse/core" "^8.7.5" | ||||
|     async-validator "^4.2.5" | ||||
|     dayjs "^1.11.3" | ||||
|     escape-html "^1.0.3" | ||||
|     lodash "^4.17.21" | ||||
|     lodash-es "^4.17.21" | ||||
|     lodash-unified "^1.0.2" | ||||
|     memoize-one "^6.0.0" | ||||
|     normalize-wheel-es "^1.1.2" | ||||
|  | ||||
| esbuild-android-64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz#9e4682c36dcf6e7b71b73d2a3723a96e0fdc5054" | ||||
|   integrity sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww== | ||||
|  | ||||
| esbuild-android-arm64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz#9861b1f7e57d1dd1f23eeef6198561c5f34b51f6" | ||||
|   integrity sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g== | ||||
|  | ||||
| esbuild-darwin-64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz#fd30a5ebe28704a3a117126c60f98096c067c8d1" | ||||
|   integrity sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg== | ||||
|  | ||||
| esbuild-darwin-arm64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz#c04a3a57dad94a972c66a697a68a25aa25947f41" | ||||
|   integrity sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A== | ||||
|  | ||||
| esbuild-freebsd-64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz#c404dbd66c98451395b1eef0fa38b73030a7be82" | ||||
|   integrity sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ== | ||||
|  | ||||
| esbuild-freebsd-arm64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz#b62cec96138ebc5937240ce3e1b97902963ea74a" | ||||
|   integrity sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA== | ||||
|  | ||||
| esbuild-linux-32@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz#495b1cc011b8c64d8bbaf65509c1e7135eb9ddbf" | ||||
|   integrity sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA== | ||||
|  | ||||
| esbuild-linux-64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz#3f28dd8f986e6ff42f38888ee435a9b1fb916a56" | ||||
|   integrity sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg== | ||||
|  | ||||
| esbuild-linux-arm64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz#a52e99ae30246566dc5f33e835aa6ca98ef70e33" | ||||
|   integrity sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA== | ||||
|  | ||||
| esbuild-linux-arm@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz#7c33d05a64ec540cf7474834adaa57b3167bbe97" | ||||
|   integrity sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg== | ||||
|  | ||||
| esbuild-linux-mips64le@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz#ed062bd844b587be649443831eb84ba304685f25" | ||||
|   integrity sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA== | ||||
|  | ||||
| esbuild-linux-ppc64le@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz#c0786fb5bddffd90c10a2078181513cbaf077958" | ||||
|   integrity sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw== | ||||
|  | ||||
| esbuild-linux-riscv64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz#579b0e7cc6fce4bfc698e991a52503bb616bec49" | ||||
|   integrity sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ== | ||||
|  | ||||
| esbuild-linux-s390x@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz#09eb15c753e249a500b4e28d07c5eef7524a9740" | ||||
|   integrity sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ== | ||||
|  | ||||
| esbuild-netbsd-64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz#f7337cd2bddb7cc9d100d19156f36c9ca117b58d" | ||||
|   integrity sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ== | ||||
|  | ||||
| esbuild-openbsd-64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz#1f8bdc49f8a44396e73950a3fb6b39828563631d" | ||||
|   integrity sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA== | ||||
|  | ||||
| esbuild-sunos-64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz#47d042739365b61aa8ca642adb69534a8eef9f7a" | ||||
|   integrity sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw== | ||||
|  | ||||
| esbuild-windows-32@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz#79198c88ec9bde163c18a6b430c34eab098ec21a" | ||||
|   integrity sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA== | ||||
|  | ||||
| esbuild-windows-64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz#b36b230d18d1ee54008e08814c4799c7806e8c79" | ||||
|   integrity sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw== | ||||
|  | ||||
| esbuild-windows-arm64@0.14.49: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz#d83c03ff6436caf3262347cfa7e16b0a8049fae7" | ||||
|   integrity sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA== | ||||
|  | ||||
| esbuild@^0.14.27: | ||||
|   version "0.14.49" | ||||
|   resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.49.tgz#b82834760eba2ddc17b44f05cfcc0aaca2bae492" | ||||
|   integrity sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw== | ||||
|   optionalDependencies: | ||||
|     esbuild-android-64 "0.14.49" | ||||
|     esbuild-android-arm64 "0.14.49" | ||||
|     esbuild-darwin-64 "0.14.49" | ||||
|     esbuild-darwin-arm64 "0.14.49" | ||||
|     esbuild-freebsd-64 "0.14.49" | ||||
|     esbuild-freebsd-arm64 "0.14.49" | ||||
|     esbuild-linux-32 "0.14.49" | ||||
|     esbuild-linux-64 "0.14.49" | ||||
|     esbuild-linux-arm "0.14.49" | ||||
|     esbuild-linux-arm64 "0.14.49" | ||||
|     esbuild-linux-mips64le "0.14.49" | ||||
|     esbuild-linux-ppc64le "0.14.49" | ||||
|     esbuild-linux-riscv64 "0.14.49" | ||||
|     esbuild-linux-s390x "0.14.49" | ||||
|     esbuild-netbsd-64 "0.14.49" | ||||
|     esbuild-openbsd-64 "0.14.49" | ||||
|     esbuild-sunos-64 "0.14.49" | ||||
|     esbuild-windows-32 "0.14.49" | ||||
|     esbuild-windows-64 "0.14.49" | ||||
|     esbuild-windows-arm64 "0.14.49" | ||||
|  | ||||
| escape-html@^1.0.3: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" | ||||
|   integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== | ||||
|  | ||||
| escape-string-regexp@^5.0.0: | ||||
|   version "5.0.0" | ||||
|   resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" | ||||
|   integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== | ||||
|  | ||||
| estree-walker@^2.0.1, estree-walker@^2.0.2: | ||||
|   version "2.0.2" | ||||
|   resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" | ||||
|   integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== | ||||
|  | ||||
| fast-glob@^3.2.11: | ||||
|   version "3.2.11" | ||||
|   resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" | ||||
|   integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== | ||||
|   dependencies: | ||||
|     "@nodelib/fs.stat" "^2.0.2" | ||||
|     "@nodelib/fs.walk" "^1.2.3" | ||||
|     glob-parent "^5.1.2" | ||||
|     merge2 "^1.3.0" | ||||
|     micromatch "^4.0.4" | ||||
|  | ||||
| fastq@^1.6.0: | ||||
|   version "1.13.0" | ||||
|   resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" | ||||
|   integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== | ||||
|   dependencies: | ||||
|     reusify "^1.0.4" | ||||
|  | ||||
| fill-range@^7.0.1: | ||||
|   version "7.0.1" | ||||
|   resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" | ||||
|   integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== | ||||
|   dependencies: | ||||
|     to-regex-range "^5.0.1" | ||||
|  | ||||
| fsevents@~2.3.2: | ||||
|   version "2.3.2" | ||||
|   resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" | ||||
|   integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== | ||||
|  | ||||
| function-bind@^1.1.1: | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" | ||||
|   integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== | ||||
|  | ||||
| glob-parent@^5.1.2, glob-parent@~5.1.2: | ||||
|   version "5.1.2" | ||||
|   resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" | ||||
|   integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== | ||||
|   dependencies: | ||||
|     is-glob "^4.0.1" | ||||
|  | ||||
| has@^1.0.3: | ||||
|   version "1.0.3" | ||||
|   resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" | ||||
|   integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== | ||||
|   dependencies: | ||||
|     function-bind "^1.1.1" | ||||
|  | ||||
| is-binary-path@~2.1.0: | ||||
|   version "2.1.0" | ||||
|   resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" | ||||
|   integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== | ||||
|   dependencies: | ||||
|     binary-extensions "^2.0.0" | ||||
|  | ||||
| is-core-module@^2.9.0: | ||||
|   version "2.9.0" | ||||
|   resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" | ||||
|   integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== | ||||
|   dependencies: | ||||
|     has "^1.0.3" | ||||
|  | ||||
| is-extglob@^2.1.1: | ||||
|   version "2.1.1" | ||||
|   resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" | ||||
|   integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== | ||||
|  | ||||
| is-glob@^4.0.1, is-glob@~4.0.1: | ||||
|   version "4.0.3" | ||||
|   resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" | ||||
|   integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== | ||||
|   dependencies: | ||||
|     is-extglob "^2.1.1" | ||||
|  | ||||
| is-number@^7.0.0: | ||||
|   version "7.0.0" | ||||
|   resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" | ||||
|   integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== | ||||
|  | ||||
| jsonc-parser@^3.0.0: | ||||
|   version "3.1.0" | ||||
|   resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d" | ||||
|   integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== | ||||
|  | ||||
| local-pkg@^0.4.1, local-pkg@^0.4.2: | ||||
|   version "0.4.2" | ||||
|   resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f" | ||||
|   integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg== | ||||
|  | ||||
| lodash-es@^4.17.21: | ||||
|   version "4.17.21" | ||||
|   resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" | ||||
|   integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== | ||||
|  | ||||
| lodash-unified@^1.0.2: | ||||
|   version "1.0.2" | ||||
|   resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.2.tgz#bb2694db3533781e5cce984af60cfaea318b83c1" | ||||
|   integrity sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g== | ||||
|  | ||||
| lodash@^4.17.21: | ||||
|   version "4.17.21" | ||||
|   resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" | ||||
|   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== | ||||
|  | ||||
| magic-string@^0.25.7: | ||||
|   version "0.25.9" | ||||
|   resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" | ||||
|   integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== | ||||
|   dependencies: | ||||
|     sourcemap-codec "^1.4.8" | ||||
|  | ||||
| magic-string@^0.26.2: | ||||
|   version "0.26.2" | ||||
|   resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.2.tgz#5331700e4158cd6befda738bb6b0c7b93c0d4432" | ||||
|   integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== | ||||
|   dependencies: | ||||
|     sourcemap-codec "^1.4.8" | ||||
|  | ||||
| memoize-one@^6.0.0: | ||||
|   version "6.0.0" | ||||
|   resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" | ||||
|   integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== | ||||
|  | ||||
| merge2@^1.3.0: | ||||
|   version "1.4.1" | ||||
|   resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" | ||||
|   integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== | ||||
|  | ||||
| micromatch@^4.0.4: | ||||
|   version "4.0.5" | ||||
|   resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" | ||||
|   integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== | ||||
|   dependencies: | ||||
|     braces "^3.0.2" | ||||
|     picomatch "^2.3.1" | ||||
|  | ||||
| minimatch@^5.1.0: | ||||
|   version "5.1.0" | ||||
|   resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" | ||||
|   integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== | ||||
|   dependencies: | ||||
|     brace-expansion "^2.0.1" | ||||
|  | ||||
| mlly@^0.5.3, mlly@^0.5.4: | ||||
|   version "0.5.4" | ||||
|   resolved "https://registry.npmmirror.com/mlly/-/mlly-0.5.4.tgz#e7c68574c95a4b2ba25e76dfcd1b2a545335af70" | ||||
|   integrity sha512-gFlsLWCjVwu/LM/ZfYUkmnbBoz7eyBIMUwVQYDqhd8IvtNFDeZ95uwAyxHE2Xx7tQwePQaCo4fECZ9MWFEUTgQ== | ||||
|   dependencies: | ||||
|     pathe "^0.3.1" | ||||
|     pkg-types "^0.3.3" | ||||
|  | ||||
| ms@2.1.2: | ||||
|   version "2.1.2" | ||||
|   resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" | ||||
|   integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== | ||||
|  | ||||
| nanoid@^3.3.4: | ||||
|   version "3.3.4" | ||||
|   resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" | ||||
|   integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== | ||||
|  | ||||
| normalize-path@^3.0.0, normalize-path@~3.0.0: | ||||
|   version "3.0.0" | ||||
|   resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" | ||||
|   integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== | ||||
|  | ||||
| normalize-wheel-es@^1.1.2: | ||||
|   version "1.1.2" | ||||
|   resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz#285e43676a62d687bf145e33452ea6be435162d0" | ||||
|   integrity sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png== | ||||
|  | ||||
| path-parse@^1.0.7: | ||||
|   version "1.0.7" | ||||
|   resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" | ||||
|   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== | ||||
|  | ||||
| pathe@^0.3.0, pathe@^0.3.1, pathe@^0.3.2: | ||||
|   version "0.3.2" | ||||
|   resolved "https://registry.npmmirror.com/pathe/-/pathe-0.3.2.tgz#016345ed643027404d7a9ed8d1454ad997a1483a" | ||||
|   integrity sha512-qhnmX0TOqlCvdWWTkoM83wh5J8fZ2yhbDEc9MlsnAEtEc+JCwxUKEwmd6pkY9hRe6JR1Uecbc14VcAKX2yFSTA== | ||||
|  | ||||
| picocolors@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" | ||||
|   integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== | ||||
|  | ||||
| picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: | ||||
|   version "2.3.1" | ||||
|   resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" | ||||
|   integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== | ||||
|  | ||||
| pkg-types@^0.3.3: | ||||
|   version "0.3.3" | ||||
|   resolved "https://registry.npmmirror.com/pkg-types/-/pkg-types-0.3.3.tgz#3c25e45274e1c586ec7811dcc3449afde846e463" | ||||
|   integrity sha512-6AJcCMnjUQPQv/Wk960w0TOmjhdjbeaQJoSKWRQv9N3rgkessCu6J0Ydsog/nw1MbpnxHuPzYbfOn2KmlZO1FA== | ||||
|   dependencies: | ||||
|     jsonc-parser "^3.0.0" | ||||
|     mlly "^0.5.3" | ||||
|     pathe "^0.3.0" | ||||
|  | ||||
| postcss@^8.1.10, postcss@^8.4.13: | ||||
|   version "8.4.14" | ||||
|   resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" | ||||
|   integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== | ||||
|   dependencies: | ||||
|     nanoid "^3.3.4" | ||||
|     picocolors "^1.0.0" | ||||
|     source-map-js "^1.0.2" | ||||
|  | ||||
| queue-microtask@^1.2.2: | ||||
|   version "1.2.3" | ||||
|   resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" | ||||
|   integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== | ||||
|  | ||||
| readdirp@~3.6.0: | ||||
|   version "3.6.0" | ||||
|   resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" | ||||
|   integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== | ||||
|   dependencies: | ||||
|     picomatch "^2.2.1" | ||||
|  | ||||
| resolve@^1.22.0, resolve@^1.22.1: | ||||
|   version "1.22.1" | ||||
|   resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" | ||||
|   integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== | ||||
|   dependencies: | ||||
|     is-core-module "^2.9.0" | ||||
|     path-parse "^1.0.7" | ||||
|     supports-preserve-symlinks-flag "^1.0.0" | ||||
|  | ||||
| reusify@^1.0.4: | ||||
|   version "1.0.4" | ||||
|   resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" | ||||
|   integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== | ||||
|  | ||||
| rollup@^2.59.0: | ||||
|   version "2.77.0" | ||||
|   resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.0.tgz#749eaa5ac09b6baa52acc076bc46613eddfd53f4" | ||||
|   integrity sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g== | ||||
|   optionalDependencies: | ||||
|     fsevents "~2.3.2" | ||||
|  | ||||
| run-parallel@^1.1.9: | ||||
|   version "1.2.0" | ||||
|   resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" | ||||
|   integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== | ||||
|   dependencies: | ||||
|     queue-microtask "^1.2.2" | ||||
|  | ||||
| scule@^0.2.1: | ||||
|   version "0.2.1" | ||||
|   resolved "https://registry.npmmirror.com/scule/-/scule-0.2.1.tgz#0c1dc847b18e07219ae9a3832f2f83224e2079dc" | ||||
|   integrity sha512-M9gnWtn3J0W+UhJOHmBxBTwv8mZCan5i1Himp60t6vvZcor0wr+IM0URKmIglsWJ7bRujNAVVN77fp+uZaWoKg== | ||||
|  | ||||
| source-map-js@^1.0.2: | ||||
|   version "1.0.2" | ||||
|   resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" | ||||
|   integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== | ||||
|  | ||||
| source-map@^0.6.1: | ||||
|   version "0.6.1" | ||||
|   resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" | ||||
|   integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== | ||||
|  | ||||
| sourcemap-codec@^1.4.8: | ||||
|   version "1.4.8" | ||||
|   resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" | ||||
|   integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== | ||||
|  | ||||
| strip-literal@^0.4.0: | ||||
|   version "0.4.0" | ||||
|   resolved "https://registry.npmmirror.com/strip-literal/-/strip-literal-0.4.0.tgz#0f90e86daecc1eb23c61c62d25238ffad4524634" | ||||
|   integrity sha512-ql/sBDoJOybTKSIOWrrh8kgUEMjXMwRAkZTD0EwiwxQH/6tTPkZvMIEjp0CRlpi6V5FMiJyvxeRkEi1KrGISoA== | ||||
|   dependencies: | ||||
|     acorn "^8.7.1" | ||||
|  | ||||
| supports-preserve-symlinks-flag@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" | ||||
|   integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== | ||||
|  | ||||
| to-regex-range@^5.0.1: | ||||
|   version "5.0.1" | ||||
|   resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" | ||||
|   integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== | ||||
|   dependencies: | ||||
|     is-number "^7.0.0" | ||||
|  | ||||
| typescript@^4.5.4: | ||||
|   version "4.7.4" | ||||
|   resolved "https://registry.npmmirror.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" | ||||
|   integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== | ||||
|  | ||||
| unimport@^0.4.5: | ||||
|   version "0.4.5" | ||||
|   resolved "https://registry.npmmirror.com/unimport/-/unimport-0.4.5.tgz#aa4c4aa2ef1027352f9ad79693f083929f18b660" | ||||
|   integrity sha512-DnmiSt/HQIfhdcxOy4CGqwZDBh3WHg33euX1ge4X8hvquKBmw2PFvhoAJaBKxscOz0oYosoPoPT4tkDZWHhV0Q== | ||||
|   dependencies: | ||||
|     "@rollup/pluginutils" "^4.2.1" | ||||
|     escape-string-regexp "^5.0.0" | ||||
|     fast-glob "^3.2.11" | ||||
|     local-pkg "^0.4.2" | ||||
|     magic-string "^0.26.2" | ||||
|     mlly "^0.5.4" | ||||
|     pathe "^0.3.2" | ||||
|     scule "^0.2.1" | ||||
|     strip-literal "^0.4.0" | ||||
|     unplugin "^0.7.2" | ||||
|  | ||||
| unplugin-auto-import@^0.9.3: | ||||
|   version "0.9.3" | ||||
|   resolved "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.9.3.tgz#bdcfe8f40cf74eece7bad2b37ad319ae4e019b97" | ||||
|   integrity sha512-S3fC/kp98v+HhELCCG4jm4fhd/BbXhhcmFxxQ/JHXefLPtz9WTCOsSq3pq7U4D94xJ0eyZOPo/56Y9iUf3kskw== | ||||
|   dependencies: | ||||
|     "@antfu/utils" "^0.5.2" | ||||
|     "@rollup/pluginutils" "^4.2.1" | ||||
|     local-pkg "^0.4.2" | ||||
|     magic-string "^0.26.2" | ||||
|     unimport "^0.4.5" | ||||
|     unplugin "^0.7.2" | ||||
|  | ||||
| unplugin-vue-components@^0.21.1: | ||||
|   version "0.21.1" | ||||
|   resolved "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.21.1.tgz#8ff156da1faaef368d8fad9fa7573c80ad4ccfa0" | ||||
|   integrity sha512-8MhIT323q1EUu7rz6NfQeiHqDrZKtygy6s9jzcQAuuZUM2T38SHlPT5YJjBOZmM0Bau6YuNTKfBBX4iHzeusaQ== | ||||
|   dependencies: | ||||
|     "@antfu/utils" "^0.5.2" | ||||
|     "@rollup/pluginutils" "^4.2.1" | ||||
|     chokidar "^3.5.3" | ||||
|     debug "^4.3.4" | ||||
|     fast-glob "^3.2.11" | ||||
|     local-pkg "^0.4.1" | ||||
|     magic-string "^0.26.2" | ||||
|     minimatch "^5.1.0" | ||||
|     resolve "^1.22.1" | ||||
|     unplugin "^0.7.1" | ||||
|  | ||||
| unplugin@^0.7.1, unplugin@^0.7.2: | ||||
|   version "0.7.2" | ||||
|   resolved "https://registry.npmmirror.com/unplugin/-/unplugin-0.7.2.tgz#4127012fdc2c84ea4ce03ce75e3d4f54ea47bba1" | ||||
|   integrity sha512-m7thX4jP8l5sETpLdUASoDOGOcHaOVtgNyrYlToyQUvILUtEzEnngRBrHnAX3IKqooJVmXpoa/CwQ/QqzvGaHQ== | ||||
|   dependencies: | ||||
|     acorn "^8.7.1" | ||||
|     chokidar "^3.5.3" | ||||
|     webpack-sources "^3.2.3" | ||||
|     webpack-virtual-modules "^0.4.4" | ||||
|  | ||||
| vite@^2.9.9: | ||||
|   version "2.9.14" | ||||
|   resolved "https://registry.npmmirror.com/vite/-/vite-2.9.14.tgz#c438324c6594afd1050df3777da981dee988bb1b" | ||||
|   integrity sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw== | ||||
|   dependencies: | ||||
|     esbuild "^0.14.27" | ||||
|     postcss "^8.4.13" | ||||
|     resolve "^1.22.0" | ||||
|     rollup "^2.59.0" | ||||
|   optionalDependencies: | ||||
|     fsevents "~2.3.2" | ||||
|  | ||||
| vue-demi@*: | ||||
|   version "0.13.5" | ||||
|   resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.5.tgz#d5eddbc9eaefb89ce5995269d1fa6b0486312092" | ||||
|   integrity sha512-tO3K2bML3AwiHmVHeKCq6HLef2st4zBXIV5aEkoJl6HZ+gJWxWv2O8wLH8qrA3SX3lDoTDHNghLX1xZg83MXvw== | ||||
|  | ||||
| vue-final-modal@^3.4.4: | ||||
|   version "3.4.4" | ||||
|   resolved "https://registry.npmmirror.com/vue-final-modal/-/vue-final-modal-3.4.4.tgz#9f4cdb0aabab86a14eb0c005b2645159b0f2095c" | ||||
|   integrity sha512-4nOLU+cMcUqAT0kg+64+Hi96kkQPOph2LOJa7Fl58BXlTyhfRxaMuz3M91wi2ooMIL4poWA8428P5GIAXSpuZg== | ||||
|  | ||||
| vue-tsc@^0.34.7: | ||||
|   version "0.34.17" | ||||
|   resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-0.34.17.tgz#332fc5c31d64bb9b74b0f26050f3ab067a9a7d6f" | ||||
|   integrity sha512-jzUXky44ZLHC4daaJag7FQr3idlPYN719/K1eObGljz5KaS2UnVGTU/XSYCd7d6ampYYg4OsyalbHyJIxV0aEQ== | ||||
|   dependencies: | ||||
|     "@volar/vue-typescript" "0.34.17" | ||||
|  | ||||
| vue@^3.2.25: | ||||
|   version "3.2.37" | ||||
|   resolved "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz#da220ccb618d78579d25b06c7c21498ca4e5452e" | ||||
|   integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ== | ||||
|   dependencies: | ||||
|     "@vue/compiler-dom" "3.2.37" | ||||
|     "@vue/compiler-sfc" "3.2.37" | ||||
|     "@vue/runtime-dom" "3.2.37" | ||||
|     "@vue/server-renderer" "3.2.37" | ||||
|     "@vue/shared" "3.2.37" | ||||
|  | ||||
| webpack-sources@^3.2.3: | ||||
|   version "3.2.3" | ||||
|   resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" | ||||
|   integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== | ||||
|  | ||||
| webpack-virtual-modules@^0.4.4: | ||||
|   version "0.4.4" | ||||
|   resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz#a19fcf371923c59c4712d63d7d194b1e4d8262cc" | ||||
|   integrity sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA== | ||||