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 | # ccc-devtools | ||||||
| Cocos Creator 网页调试工具,运行时查看、修改节点树,实时更新节点属性,可视化缓存资源。 | 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" | <div id="app"></div> | ||||||
|     type="text/css"> | <script type="module" src="/src/main.ts"></script> | ||||||
| <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> |  | ||||||
| @@ -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== | ||||||