vite-uni-dev-tool 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/v2/AppInfo/index.vue +41 -0
  2. package/dist/v2/AutoSizer/index.vue +189 -0
  3. package/dist/v2/AutoSizer/index1.vue +193 -0
  4. package/dist/v2/AutoSizer/utils.ts +49 -0
  5. package/dist/v2/CaptureScreen/index.vue +78 -0
  6. package/dist/v2/CloseButton/index.vue +32 -0
  7. package/dist/v2/Connection/index.vue +94 -0
  8. package/dist/v2/ConsoleList/ConsoleItem.vue +235 -0
  9. package/dist/v2/ConsoleList/RunJSInput.vue +243 -0
  10. package/dist/v2/ConsoleList/index.vue +164 -0
  11. package/dist/v2/ConsoleList/staticTips.js +1144 -0
  12. package/dist/v2/DevTool/index.vue +162 -0
  13. package/dist/v2/DevToolButton/index.vue +228 -0
  14. package/dist/v2/DevToolTitle/index.vue +28 -0
  15. package/dist/v2/DevToolWindow/index.vue +1051 -0
  16. package/dist/v2/DeviceInfo/index.vue +48 -0
  17. package/dist/v2/Empty/empty.png +0 -0
  18. package/dist/v2/Empty/index.vue +40 -0
  19. package/dist/v2/FilterInput/index.vue +100 -0
  20. package/dist/v2/JsonPretty/components/Brackets/index.vue +30 -0
  21. package/dist/v2/JsonPretty/components/Carets/index.vue +65 -0
  22. package/dist/v2/JsonPretty/components/CheckController/index.vue +127 -0
  23. package/dist/v2/JsonPretty/components/TreeNode/index.vue +417 -0
  24. package/dist/v2/JsonPretty/hooks/useClipboard.ts +21 -0
  25. package/dist/v2/JsonPretty/hooks/useError.ts +21 -0
  26. package/dist/v2/JsonPretty/index.vue +531 -0
  27. package/dist/v2/JsonPretty/type.ts +125 -0
  28. package/dist/v2/JsonPretty/utils/index.js +211 -0
  29. package/dist/v2/NetworkList/NetworkDetail.vue +215 -0
  30. package/dist/v2/NetworkList/NetworkItem.vue +135 -0
  31. package/dist/v2/NetworkList/index.vue +148 -0
  32. package/dist/v2/PiniaList/index.vue +79 -0
  33. package/dist/v2/RouteList/index.vue +137 -0
  34. package/dist/v2/RunJS/index.vue +128 -0
  35. package/dist/v2/SettingList/index.vue +318 -0
  36. package/dist/v2/SourceCode/index.vue +237 -0
  37. package/dist/v2/StorageList/index.vue +165 -0
  38. package/dist/v2/SystemInfo/index.vue +49 -0
  39. package/dist/v2/Tabs/index.vue +127 -0
  40. package/dist/v2/Tag/index.vue +91 -0
  41. package/dist/v2/UniEvent/UniEventItem.vue +157 -0
  42. package/dist/v2/UniEvent/index.vue +127 -0
  43. package/dist/v2/UploadList/UploadDetail.vue +204 -0
  44. package/dist/v2/UploadList/UploadItem.vue +134 -0
  45. package/dist/v2/UploadList/index.vue +143 -0
  46. package/dist/v2/VirtualList/index.vue +140 -0
  47. package/dist/v2/VirtualListPro/AutoSize.vue +50 -0
  48. package/dist/v2/VirtualListPro/index.vue +255 -0
  49. package/dist/v2/VirtualListPro/readme.md +40 -0
  50. package/dist/v2/VuexList/index.vue +80 -0
  51. package/dist/v2/WebSocket/WebSocketItem.vue +129 -0
  52. package/dist/v2/WebSocket/WebSocketList.vue +183 -0
  53. package/dist/v2/WebSocket/index.vue +155 -0
  54. package/dist/v2/WindowInfo/index.vue +49 -0
  55. package/dist/v3/AppInfo/index.vue +35 -0
  56. package/dist/v3/AutoSizer/index.vue +193 -0
  57. package/dist/v3/AutoSizer/index1.vue +186 -0
  58. package/dist/v3/AutoSizer/utils.ts +49 -0
  59. package/dist/v3/CaptureScreen/index.vue +62 -0
  60. package/dist/v3/CloseButton/index.vue +29 -0
  61. package/dist/v3/Connection/index.vue +88 -0
  62. package/dist/v3/ConsoleList/ConsoleItem.vue +208 -0
  63. package/dist/v3/ConsoleList/RunJSInput.vue +240 -0
  64. package/dist/v3/ConsoleList/index.vue +139 -0
  65. package/dist/v3/ConsoleList/staticTips.ts +1145 -0
  66. package/dist/v3/DevTool/index.vue +217 -0
  67. package/dist/v3/DevToolButton/index.vue +210 -0
  68. package/dist/v3/DevToolTitle/index.vue +21 -0
  69. package/dist/v3/DevToolWindow/index.vue +1116 -0
  70. package/dist/v3/DeviceInfo/index.vue +32 -0
  71. package/dist/v3/Empty/empty.png +0 -0
  72. package/dist/v3/Empty/index.vue +28 -0
  73. package/dist/v3/FilterInput/index.vue +87 -0
  74. package/dist/v3/JsonPretty/components/Brackets/index.vue +23 -0
  75. package/dist/v3/JsonPretty/components/Carets/index.vue +59 -0
  76. package/dist/v3/JsonPretty/components/CheckController/index.vue +125 -0
  77. package/dist/v3/JsonPretty/components/TreeNode/index.vue +349 -0
  78. package/dist/v3/JsonPretty/hooks/useClipboard.ts +21 -0
  79. package/dist/v3/JsonPretty/hooks/useError.ts +21 -0
  80. package/dist/v3/JsonPretty/index.vue +476 -0
  81. package/dist/v3/JsonPretty/type.ts +125 -0
  82. package/dist/v3/JsonPretty/utils/index.ts +172 -0
  83. package/dist/v3/NetworkList/NetworkDetail.vue +194 -0
  84. package/dist/v3/NetworkList/NetworkItem.vue +120 -0
  85. package/dist/v3/NetworkList/index.vue +128 -0
  86. package/dist/v3/PiniaList/index.vue +64 -0
  87. package/dist/v3/RouteList/index.vue +121 -0
  88. package/dist/v3/RunJS/index.vue +128 -0
  89. package/dist/v3/SettingList/index.vue +313 -0
  90. package/dist/v3/SourceCode/index.vue +231 -0
  91. package/dist/v3/StorageList/index.vue +170 -0
  92. package/dist/v3/SystemInfo/index.vue +34 -0
  93. package/dist/v3/Tabs/index.vue +123 -0
  94. package/dist/v3/Tag/index.vue +89 -0
  95. package/dist/v3/UniEvent/UniEventItem.vue +126 -0
  96. package/dist/v3/UniEvent/index.vue +98 -0
  97. package/dist/v3/UploadList/UploadDetail.vue +192 -0
  98. package/dist/v3/UploadList/UploadItem.vue +117 -0
  99. package/dist/v3/UploadList/index.vue +117 -0
  100. package/dist/v3/VirtualList/index.vue +112 -0
  101. package/dist/v3/VirtualListPro/AutoSize.vue +43 -0
  102. package/dist/v3/VirtualListPro/index.vue +238 -0
  103. package/dist/v3/VirtualListPro/readme.md +40 -0
  104. package/dist/v3/VuexList/index.vue +54 -0
  105. package/dist/v3/WebSocket/WebSocketItem.vue +103 -0
  106. package/dist/v3/WebSocket/WebSocketList.vue +161 -0
  107. package/dist/v3/WebSocket/index.vue +124 -0
  108. package/dist/v3/WindowInfo/index.vue +33 -0
  109. package/package.json +1 -1
@@ -0,0 +1,531 @@
1
+ <template>
2
+ <view
3
+ :class="{
4
+ 'json-pretty-tree': true,
5
+ 'is-virtual': virtual,
6
+ dark: theme === 'dark',
7
+ }"
8
+ :style="
9
+ showLineNumber
10
+ ? {
11
+ paddingLeft: `${
12
+ Number(originFlatData.length.toString().length) * 12
13
+ }px`,
14
+ ...style,
15
+ }
16
+ : style
17
+ "
18
+ >
19
+ <VirtualListPro
20
+ v-if="autoVirtual"
21
+ :height="state.height"
22
+ :pageSize="pageSize"
23
+ :dataSource="flatData"
24
+ scroll-with-animation
25
+ showBackTop
26
+ >
27
+ <template v-slot="{ list, start }">
28
+ <AutoSize
29
+ v-for="(item, index) in list"
30
+ :index="start + index"
31
+ :key="start + index"
32
+ >
33
+ <TreeNode
34
+ :data="data"
35
+ :rootPath="rootPath"
36
+ :indent="indent"
37
+ :node="item"
38
+ :collapsed="!!state.hiddenPaths[item.path]"
39
+ :theme="theme"
40
+ :showDoubleQuotes="showDoubleQuotes"
41
+ :showLength="showLength"
42
+ :checked="selectedPaths.includes(item.path)"
43
+ :selectableType="selectableType"
44
+ :showLine="showLine"
45
+ :showLineNumber="showLineNumber"
46
+ :showSelectController="showSelectController"
47
+ :selectOnClickNode="selectOnClickNode"
48
+ :nodeSelectable="nodeSelectable"
49
+ :highlightSelectedNode="highlightSelectedNode"
50
+ :editable="editable"
51
+ :editableTrigger="editableTrigger"
52
+ :showIcon="showIcon"
53
+ :showKeyValueSpace="showKeyValueSpace"
54
+ :showNodeActions="showNodeActions"
55
+ @nodeClick="handleNodeClick"
56
+ @nodeMouseover="handleNodeMouseover"
57
+ @bracketsClick="handleBracketsClick"
58
+ @iconClick="handleIconClick"
59
+ @selectedChange="handleSelectedChange"
60
+ @valueChange="handleValueChange"
61
+ :style="
62
+ itemHeight && itemHeight !== 20
63
+ ? { lineHeight: `${itemHeight}px` }
64
+ : {}
65
+ "
66
+ />
67
+ </AutoSize>
68
+ </template>
69
+ </VirtualListPro>
70
+ <template v-else>
71
+ <TreeNode
72
+ v-for="item in flatData"
73
+ :key="item.id"
74
+ :data="data"
75
+ :rootPath="rootPath"
76
+ :indent="indent"
77
+ :node="item"
78
+ :collapsed="!!state.hiddenPaths[item.path]"
79
+ :theme="theme"
80
+ :showDoubleQuotes="showDoubleQuotes"
81
+ :showLength="showLength"
82
+ :checked="selectedPaths.includes(item.path)"
83
+ :selectableType="selectableType"
84
+ :showLine="showLine"
85
+ :showLineNumber="showLineNumber"
86
+ :showSelectController="showSelectController"
87
+ :selectOnClickNode="selectOnClickNode"
88
+ :nodeSelectable="nodeSelectable"
89
+ :highlightSelectedNode="highlightSelectedNode"
90
+ :editable="editable"
91
+ :editableTrigger="editableTrigger"
92
+ :showIcon="showIcon"
93
+ :showKeyValueSpace="showKeyValueSpace"
94
+ :showNodeActions="showNodeActions"
95
+ @nodeClick="handleNodeClick"
96
+ @nodeMouseover="handleNodeMouseover"
97
+ @bracketsClick="handleBracketsClick"
98
+ @iconClick="handleIconClick"
99
+ @selectedChange="handleSelectedChange"
100
+ @valueChange="handleValueChange"
101
+ :style="
102
+ itemHeight && itemHeight !== 20
103
+ ? { lineHeight: `${itemHeight}px` }
104
+ : {}
105
+ "
106
+ />
107
+ </template>
108
+ </view>
109
+ </template>
110
+
111
+ <script>
112
+ import TreeNode from './components/TreeNode/index.vue';
113
+ import VirtualListPro from '../VirtualListPro/index.vue';
114
+ import AutoSize from '../VirtualListPro/AutoSize.vue';
115
+ import { emitError, jsonFlatten, cloneDeep, isFunction } from './utils';
116
+ import { setValueByPath } from '../../utils';
117
+
118
+ export default {
119
+ components: {
120
+ TreeNode,
121
+ VirtualListPro,
122
+ AutoSize,
123
+ },
124
+ props: {
125
+ data: {
126
+ type: [Object, Array],
127
+ default: () => {},
128
+ },
129
+ fontSize: {
130
+ type: String,
131
+ default: '12px',
132
+ },
133
+ itemHeight: {
134
+ type: Number,
135
+ default: 20,
136
+ },
137
+ height: {
138
+ type: Number,
139
+ default: 400,
140
+ },
141
+ deep: {
142
+ type: Number,
143
+ default: Infinity,
144
+ },
145
+ collapsedNodeLength: {
146
+ type: Number,
147
+ default: Infinity,
148
+ },
149
+ collapsedOnClickBrackets: {
150
+ type: Boolean,
151
+ default: true,
152
+ },
153
+ pathCollapsible: {
154
+ type: Function,
155
+ default: () => false,
156
+ },
157
+ nodeSelectable: {
158
+ type: Function,
159
+ default: () => false,
160
+ },
161
+ rootPath: {
162
+ type: String,
163
+ default: 'root',
164
+ },
165
+ indent: {
166
+ type: Number,
167
+ default: 2,
168
+ },
169
+ showDoubleQuotes: {
170
+ type: Boolean,
171
+ default: true,
172
+ },
173
+ showLine: {
174
+ type: Boolean,
175
+ default: true,
176
+ },
177
+ selectOnClickNode: {
178
+ type: Boolean,
179
+ default: true,
180
+ },
181
+ highlightSelectedNode: {
182
+ type: Boolean,
183
+ default: true,
184
+ },
185
+ theme: {
186
+ type: String,
187
+ default: 'light',
188
+ },
189
+ showKeyValueSpace: {
190
+ type: Boolean,
191
+ default: true,
192
+ },
193
+ editableTrigger: {
194
+ type: String,
195
+ default: 'click',
196
+ },
197
+ virtual: {
198
+ type: Boolean,
199
+ default: false,
200
+ },
201
+ autoVirtualRow: {
202
+ type: Number,
203
+ default: null,
204
+ },
205
+ selectedValue: {
206
+ type: [String, Array],
207
+ default: '',
208
+ },
209
+ selectableType: {
210
+ type: String,
211
+ default: '',
212
+ },
213
+ showLength: {
214
+ type: Boolean,
215
+ default: false,
216
+ },
217
+ showLineNumber: {
218
+ type: Boolean,
219
+ default: false,
220
+ },
221
+ showSelectController: {
222
+ type: Boolean,
223
+ default: false,
224
+ },
225
+ editable: {
226
+ type: Boolean,
227
+ default: false,
228
+ },
229
+ showIcon: {
230
+ type: Boolean,
231
+ default: true,
232
+ },
233
+ showNodeActions: {
234
+ type: Boolean,
235
+ default: false,
236
+ },
237
+ collapsed: {
238
+ type: Boolean,
239
+ default: false,
240
+ },
241
+ },
242
+ data() {
243
+ return {
244
+ // 响应式状态
245
+ state: {
246
+ translateY: 0,
247
+ visibleData: [],
248
+ hiddenPaths: {},
249
+ height: this.height ?? 400,
250
+ },
251
+ };
252
+ },
253
+ computed: {
254
+ // 计算扁平化数据
255
+ originFlatData() {
256
+ return jsonFlatten(this.data, this.rootPath);
257
+ },
258
+ // 计算分页大小
259
+ pageSize() {
260
+ return Math.ceil(this.height / this.itemHeight) + 5;
261
+ },
262
+ // 计算处理后的扁平化数据
263
+ flatData() {
264
+ let startHiddenItem = null;
265
+ const data = [];
266
+ const length = this.originFlatData.length;
267
+
268
+ for (let i = 0; i < length; i++) {
269
+ const cur = this.originFlatData[i];
270
+ const item = {
271
+ ...cur,
272
+ id: i,
273
+ };
274
+ const isHidden = this.state.hiddenPaths[item.path];
275
+
276
+ if (startHiddenItem && startHiddenItem.path === item.path) {
277
+ const isObject = startHiddenItem.type === 'objectStart';
278
+ const mergeItem = {
279
+ ...item,
280
+ ...startHiddenItem,
281
+ showComma: item.showComma,
282
+ content: isObject ? '{...}' : '[...]',
283
+ type: isObject ? 'objectCollapsed' : 'arrayCollapsed',
284
+ };
285
+ startHiddenItem = null;
286
+ data.push(mergeItem);
287
+ } else if (isHidden && !startHiddenItem) {
288
+ startHiddenItem = item;
289
+ continue;
290
+ } else {
291
+ if (startHiddenItem) continue;
292
+ else data.push(item);
293
+ }
294
+ }
295
+ return data;
296
+ },
297
+ // 计算选中路径
298
+ selectedPaths() {
299
+ const value = this.selectedValue;
300
+ if (value && this.selectableType === 'multiple' && Array.isArray(value)) {
301
+ return value;
302
+ }
303
+ return [value];
304
+ },
305
+ // 计算属性错误信息
306
+ propsErrorMessage() {
307
+ const error =
308
+ this.selectableType &&
309
+ !this.selectOnClickNode &&
310
+ !this.showSelectController;
311
+ return error
312
+ ? 'When selectableType is not null, selectOnClickNode and showSelectController cannot be false at the same time, because this will cause the selection to fail.'
313
+ : '';
314
+ },
315
+ // 计算是否自动启用虚拟列表
316
+ autoVirtual() {
317
+ if (this.virtual) return true;
318
+ if (typeof this.autoVirtualRow === 'number') {
319
+ return this.flatData.length > this.autoVirtualRow;
320
+ }
321
+ return false;
322
+ },
323
+ },
324
+ watch: {
325
+ // 监听深度变化
326
+ deep(newVal) {
327
+ if (newVal) {
328
+ this.state.hiddenPaths = this.initHiddenPaths(
329
+ newVal,
330
+ this.collapsedNodeLength,
331
+ );
332
+ }
333
+ },
334
+ // 监听折叠节点长度变化
335
+ collapsedNodeLength(newVal) {
336
+ if (newVal) {
337
+ this.state.hiddenPaths = this.initHiddenPaths(this.deep, newVal);
338
+ }
339
+ },
340
+ // 监听是否折叠
341
+ collapsed: {
342
+ handler(val) {
343
+ if (val) {
344
+ this.updateCollapsedPaths(true, this.rootPath);
345
+ }
346
+ },
347
+ immediate: true,
348
+ },
349
+ // 监听数据变化
350
+ data: {
351
+ handler() {
352
+ // 数据变化时重新计算
353
+ this.state.hiddenPaths = this.initHiddenPaths(
354
+ this.deep,
355
+ this.collapsedNodeLength,
356
+ );
357
+ },
358
+ deep: true,
359
+ },
360
+ },
361
+ mounted() {
362
+ // 检查属性错误
363
+ if (this.propsErrorMessage) {
364
+ emitError(this.propsErrorMessage);
365
+ }
366
+ },
367
+ methods: {
368
+ // 初始化隐藏路径
369
+ initHiddenPaths(deep, collapsedNodeLength) {
370
+ return this.originFlatData.reduce((acc, item) => {
371
+ const doCollapse =
372
+ item.level >= deep || item.length >= collapsedNodeLength;
373
+ const pathComparison =
374
+ isFunction(this.pathCollapsible) && this.pathCollapsible(item);
375
+
376
+ if (
377
+ (item.type === 'objectStart' || item.type === 'arrayStart') &&
378
+ (doCollapse || pathComparison)
379
+ ) {
380
+ return {
381
+ ...acc,
382
+ [item.path]: 1,
383
+ };
384
+ }
385
+ return acc;
386
+ }, {});
387
+ },
388
+ // 更新可见数据
389
+ updateVisibleData(scrollTop = 0) {
390
+ const flatDataValue = this.flatData ?? [];
391
+ if (this.autoVirtual) {
392
+ const visibleCount = this.height / this.itemHeight;
393
+ const scrollCount = Math.floor(scrollTop / this.itemHeight);
394
+ let start =
395
+ scrollCount < 0
396
+ ? 0
397
+ : scrollCount + visibleCount > flatDataValue.length
398
+ ? flatDataValue.length - visibleCount
399
+ : scrollCount;
400
+
401
+ if (start < 0) start = 0;
402
+ const end = start + visibleCount;
403
+
404
+ this.state.translateY = start * this.itemHeight;
405
+ this.state.visibleData = flatDataValue.filter(
406
+ (item, index) => index >= start && index < end,
407
+ );
408
+ } else {
409
+ this.state.visibleData = flatDataValue;
410
+ }
411
+ },
412
+ // 处理节点点击
413
+ handleNodeClick(node) {
414
+ this.$emit('nodeClick', node);
415
+ },
416
+ // 处理节点鼠标悬停
417
+ handleNodeMouseover(node) {
418
+ this.$emit('nodeMouseover', node);
419
+ },
420
+ // 处理选中变化
421
+ handleSelectedChange({ path }) {
422
+ const type = this.selectableType;
423
+ if (type === 'multiple') {
424
+ const index = this.selectedPaths.findIndex((item) => item === path);
425
+ const newVal = [...this.selectedPaths];
426
+
427
+ if (index !== -1) {
428
+ newVal.splice(index, 1);
429
+ } else {
430
+ newVal.push(path);
431
+ }
432
+
433
+ this.$emit('update:selectedValue', newVal);
434
+ this.$emit('selectedChange', newVal, [...this.selectedPaths]);
435
+ } else if (type === 'single') {
436
+ if (this.selectedPaths[0] !== path) {
437
+ const [oldVal] = this.selectedPaths;
438
+ const newVal = path;
439
+ this.$emit('update:selectedValue', newVal);
440
+ this.$emit('selectedChange', newVal, oldVal);
441
+ }
442
+ }
443
+ },
444
+ // 更新折叠路径
445
+ updateCollapsedPaths(collapsed, path) {
446
+ if (collapsed) {
447
+ this.state.hiddenPaths = {
448
+ ...this.state.hiddenPaths,
449
+ [path]: 1,
450
+ };
451
+ } else {
452
+ const newPaths = { ...this.state.hiddenPaths };
453
+ delete newPaths[path];
454
+ this.state.hiddenPaths = newPaths;
455
+ }
456
+
457
+ if (path === this.rootPath) {
458
+ this.state.height = collapsed ? this.itemHeight : this.height;
459
+ }
460
+ },
461
+ // 处理括号点击
462
+ handleBracketsClick(collapsed, node) {
463
+ if (this.collapsedOnClickBrackets) {
464
+ this.updateCollapsedPaths(collapsed, node.path);
465
+ }
466
+ this.$emit('bracketsClick', collapsed, node);
467
+ },
468
+ // 处理图标点击
469
+ handleIconClick(collapsed, node) {
470
+ this.updateCollapsedPaths(collapsed, node.path);
471
+ this.$emit('iconClick', collapsed, node);
472
+ },
473
+ // 处理值变化
474
+ handleValueChange(value, path) {
475
+ const newData = cloneDeep(this.data);
476
+ const rootPath = this.rootPath;
477
+ const key = path.slice(rootPath.length);
478
+ setValueByPath(newData, key, value);
479
+ this.$emit('update:data', newData);
480
+ },
481
+ },
482
+ };
483
+ </script>
484
+
485
+ <style>
486
+ .json-pretty-tree {
487
+ /* theme color */
488
+ --json-pretty-color-primary: #9254de;
489
+ --json-pretty-color-info: #1d8ce0;
490
+ --json-pretty-color-error: #ff4d4f;
491
+ --json-pretty-color-success: #888888;
492
+ --json-pretty-color-nil: #020201;
493
+
494
+ /* field values color */
495
+ --json-pretty-color-string: var(--json-pretty-color-success);
496
+ --json-pretty-color-number: var(--json-pretty-color-info);
497
+ --json-pretty-color-boolean: var(--json-pretty-color-info);
498
+ --json-pretty-color-null: var(--json-pretty-color-nil);
499
+ --json-pretty-color-undefined: var(--json-pretty-color-nil);
500
+
501
+ /* highlight */
502
+ --json-pretty-highlight-bg-color: rgba(146, 84, 222, 0.1);
503
+ --json-pretty-highlight-bg-color-dark: #2e4558;
504
+
505
+ /* comment */
506
+ --json-pretty-comment-color: #bfcbd9;
507
+
508
+ /* common border-color */
509
+ --json-pretty-border-color: #bfcbd9;
510
+
511
+ font-family:
512
+ 'Monaco', 'Menlo', 'Consolas', 'Bitstream Vera Sans Mono', monospace;
513
+ font-size: v-bind(fontSize);
514
+ text-align: left;
515
+ overflow: auto;
516
+ position: relative;
517
+ width: 100%;
518
+ }
519
+
520
+ .json-pretty-tree.is-virtual {
521
+ overflow: auto;
522
+ }
523
+
524
+ .json-pretty-tree-node {
525
+ white-space: nowrap;
526
+ }
527
+
528
+ .dark {
529
+ /* 深色主题样式 */
530
+ }
531
+ </style>
@@ -0,0 +1,125 @@
1
+ import type { CSSProperties } from 'vue';
2
+
3
+ export type JsonPrettyNodeProps = {
4
+ data: any;
5
+ rootPath: string;
6
+ indent: number;
7
+ showLength: boolean;
8
+ showDoubleQuotes: boolean;
9
+ renderNodeKey: any;
10
+ renderNodeValue: any;
11
+ };
12
+ export interface NodeDataType extends JSONFlattenReturnType {
13
+ id: number;
14
+ }
15
+
16
+ export interface JSONFlattenOptions {
17
+ key?: string;
18
+ index?: number;
19
+ showComma: boolean;
20
+ length: number;
21
+ type:
22
+ | 'content'
23
+ | 'objectStart'
24
+ | 'objectEnd'
25
+ | 'objectCollapsed'
26
+ | 'arrayStart'
27
+ | 'arrayEnd'
28
+ | 'arrayCollapsed';
29
+ }
30
+
31
+ export type JSONDataType =
32
+ | string
33
+ | number
34
+ | boolean
35
+ | unknown[]
36
+ | Record<string, unknown>
37
+ | null;
38
+
39
+ export interface JSONFlattenReturnType extends JSONFlattenOptions {
40
+ content: string | number | null | boolean;
41
+ level: number;
42
+ path: string;
43
+ }
44
+
45
+ export type StyleValue =
46
+ | false
47
+ | null
48
+ | undefined
49
+ | string
50
+ | CSSProperties
51
+ | Array<StyleValue>;
52
+
53
+ // 定义 Props 类型
54
+ type SelectableType = 'single' | 'multiple' | null;
55
+
56
+ export type TreeNodeProps = Partial<{
57
+ data: any;
58
+ indent: number;
59
+ showLength: boolean;
60
+ showDoubleQuotes: boolean;
61
+ selectableType: SelectableType;
62
+ showSelectController: boolean;
63
+ showLine: boolean;
64
+ showLineNumber: boolean;
65
+ showNodeActions: boolean;
66
+ selectOnClickNode: boolean;
67
+ highlightSelectedNode: boolean;
68
+ showIcon: boolean;
69
+ theme: string;
70
+ showKeyValueSpace: boolean;
71
+ editable: boolean;
72
+ editableTrigger: string;
73
+ node: NodeDataType;
74
+ checked: boolean;
75
+ collapsed: boolean;
76
+ style: CSSProperties;
77
+ fontSize: string;
78
+ onNodeClick: (node: NodeDataType) => void;
79
+ onNodeMouseover: (node: NodeDataType) => void;
80
+ onBracketsClick: (collapsed: boolean, node: NodeDataType) => void;
81
+ onIconClick: (collapsed: boolean, node: NodeDataType) => void;
82
+ onValueChange: (value: boolean, path: string) => void;
83
+ onSelectedChange: (node: NodeDataType) => void;
84
+ }> &
85
+ TreeNodeRequiredProps;
86
+
87
+ export type TreeNodeRequiredProps = {
88
+ node: NodeDataType;
89
+ rootPath: string;
90
+ nodeSelectable: (node: NodeDataType) => boolean;
91
+ };
92
+
93
+ export type TreeRequired = TreeNodeRequiredProps & {};
94
+
95
+ export type Tree = Partial<TreeNodeProps> &
96
+ Partial<
97
+ {
98
+ deep: number;
99
+ collapsedNodeLength: number;
100
+ virtual: boolean;
101
+ itemHeight: number;
102
+ height: number;
103
+ selectedValue: string | Array<any>;
104
+ collapsedOnClickBrackets: boolean;
105
+ style: CSSProperties;
106
+ pathCollapsible: (node: NodeDataType) => boolean;
107
+ /** 超过行数将会自动启用虚拟列表 */
108
+ autoVirtualRow: number;
109
+ } & TreeRequired
110
+ >;
111
+
112
+ export interface ScrollEvent {
113
+ detail: {
114
+ scrollLeft: number; // 横向滚动距离
115
+ scrollTop: number; // 纵向滚动距离
116
+ scrollHeight: number; // 可滚动区域的高度
117
+ scrollWidth: number; // 可滚动区域的宽度
118
+ deltaX: number; // 横向滚动增量
119
+ deltaY: number; // 纵向滚动增量
120
+ };
121
+ target: EventTarget; // 事件源组件
122
+ currentTarget: EventTarget; // 当前组件
123
+ timeStamp: number; // 事件触发时间戳
124
+ type: string; // 事件类型,这里是 'scroll'
125
+ }