vite-uni-dev-tool 1.1.0 → 1.2.0

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 (135) hide show
  1. package/README.md +8 -0
  2. package/dist/const.cjs +1 -1
  3. package/dist/const.d.ts +1 -0
  4. package/dist/const.d.ts.map +1 -1
  5. package/dist/const.js +1 -1
  6. package/dist/core.d.ts.map +1 -1
  7. package/dist/core.js +2 -2
  8. package/dist/i18n/locales/en.cjs +1 -1
  9. package/dist/i18n/locales/en.d.ts +5 -0
  10. package/dist/i18n/locales/en.d.ts.map +1 -1
  11. package/dist/i18n/locales/en.js +1 -1
  12. package/dist/i18n/locales/zh-Hans.cjs +1 -1
  13. package/dist/i18n/locales/zh-Hans.d.ts +5 -0
  14. package/dist/i18n/locales/zh-Hans.d.ts.map +1 -1
  15. package/dist/i18n/locales/zh-Hans.js +1 -1
  16. package/dist/modules/devIntercept/index.cjs +9 -9
  17. package/dist/modules/devIntercept/index.d.ts +1 -1
  18. package/dist/modules/devIntercept/index.d.ts.map +1 -1
  19. package/dist/modules/devIntercept/index.js +9 -9
  20. package/dist/modules/devStore/index.cjs +1 -1
  21. package/dist/modules/devStore/index.d.ts.map +1 -1
  22. package/dist/modules/devStore/index.js +1 -1
  23. package/dist/plugins/uniDevTool/transform/transformMain.cjs +3 -3
  24. package/dist/plugins/uniDevTool/transform/transformMain.d.ts +2 -1
  25. package/dist/plugins/uniDevTool/transform/transformMain.d.ts.map +1 -1
  26. package/dist/plugins/uniDevTool/transform/transformMain.js +3 -3
  27. package/dist/plugins/uniDevTool/transform/transformVue.cjs +31 -25
  28. package/dist/plugins/uniDevTool/transform/transformVue.d.ts +2 -1
  29. package/dist/plugins/uniDevTool/transform/transformVue.d.ts.map +1 -1
  30. package/dist/plugins/uniDevTool/transform/transformVue.js +30 -24
  31. package/dist/plugins/uniDevTool/uniDevTool.cjs +3 -3
  32. package/dist/plugins/uniDevTool/uniDevTool.d.ts +3 -1
  33. package/dist/plugins/uniDevTool/uniDevTool.d.ts.map +1 -1
  34. package/dist/plugins/uniDevTool/uniDevTool.js +3 -3
  35. package/dist/type.d.ts +3 -0
  36. package/dist/type.d.ts.map +1 -1
  37. package/dist/v3/DevTool/components/BluetoothList/BluetoothItem.vue +199 -199
  38. package/dist/v3/DevTool/components/BluetoothList/BluetoothTool.vue +730 -730
  39. package/dist/v3/DevTool/components/BluetoothList/index.vue +167 -167
  40. package/dist/v3/DevTool/components/CaptureScreen/index.vue +109 -109
  41. package/dist/v3/DevTool/components/ConsoleList/ConsoleItem.vue +230 -225
  42. package/dist/v3/DevTool/components/ConsoleList/RunJSInput.vue +247 -247
  43. package/dist/v3/DevTool/components/ConsoleList/index.vue +171 -171
  44. package/dist/v3/DevTool/components/ConsoleList/staticTips.ts +1145 -1145
  45. package/dist/v3/DevTool/components/DevToolTitle/index.vue +24 -24
  46. package/dist/v3/DevTool/components/DevToolWindow/DevToolOverlay.vue +197 -197
  47. package/dist/v3/DevTool/components/DevToolWindow/hooks/dataUtils.ts +48 -48
  48. package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolData.ts +387 -387
  49. package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolHandlers.ts +629 -629
  50. package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolOverlay.ts +201 -197
  51. package/dist/v3/DevTool/components/ElEvent/ElEventItem.vue +105 -105
  52. package/dist/v3/DevTool/components/ElEvent/index.vue +106 -106
  53. package/dist/v3/DevTool/components/Instance/components/InstanceTreeNode.vue +265 -265
  54. package/dist/v3/DevTool/components/Instance/flatten.ts +226 -226
  55. package/dist/v3/DevTool/components/Instance/index.vue +94 -94
  56. package/dist/v3/DevTool/components/Instance/registry.ts +49 -49
  57. package/dist/v3/DevTool/components/Instance/transformTree.ts +375 -375
  58. package/dist/v3/DevTool/components/Instance/transformTreeCtx.ts +268 -268
  59. package/dist/v3/DevTool/components/Instance/typing.d.ts +43 -43
  60. package/dist/v3/DevTool/components/InstanceDetail/index.vue +485 -485
  61. package/dist/v3/DevTool/components/JsonDetail/index.vue +70 -70
  62. package/dist/v3/DevTool/components/NFCList/NFCItem.vue +112 -112
  63. package/dist/v3/DevTool/components/NFCList/NFCTool.vue +454 -454
  64. package/dist/v3/DevTool/components/NFCList/const.ts +56 -56
  65. package/dist/v3/DevTool/components/NFCList/index.vue +94 -94
  66. package/dist/v3/DevTool/components/NetworkList/InterceptConfig.vue +624 -624
  67. package/dist/v3/DevTool/components/NetworkList/InterceptItem.vue +140 -140
  68. package/dist/v3/DevTool/components/NetworkList/NetworkDetail.vue +287 -287
  69. package/dist/v3/DevTool/components/NetworkList/NetworkIntercept.vue +88 -88
  70. package/dist/v3/DevTool/components/NetworkList/NetworkItem.vue +163 -163
  71. package/dist/v3/DevTool/components/NetworkList/NetworkSend.vue +589 -589
  72. package/dist/v3/DevTool/components/NetworkList/const.ts +4 -4
  73. package/dist/v3/DevTool/components/NetworkList/hooks/useNetworkForm.ts +86 -86
  74. package/dist/v3/DevTool/components/NetworkList/index.vue +160 -160
  75. package/dist/v3/DevTool/components/NetworkList/utils.ts +101 -101
  76. package/dist/v3/DevTool/components/Performance/index.vue +498 -498
  77. package/dist/v3/DevTool/components/Performance/modules/PerformanceMetrics.vue +153 -153
  78. package/dist/v3/DevTool/components/Performance/modules/usePerformanceChart.ts +460 -460
  79. package/dist/v3/DevTool/components/Performance/modules/usePerformanceData.ts +258 -258
  80. package/dist/v3/DevTool/components/PiniaList/index.vue +93 -93
  81. package/dist/v3/DevTool/components/RunJS/index.vue +148 -148
  82. package/dist/v3/DevTool/components/ScanCodeList/ScanCodeItem.vue +97 -97
  83. package/dist/v3/DevTool/components/ScanCodeList/index.vue +100 -100
  84. package/dist/v3/DevTool/components/SettingButton/index.vue +45 -45
  85. package/dist/v3/DevTool/components/SettingList/index.vue +218 -218
  86. package/dist/v3/DevTool/components/SettingList/modules/SettingBarrage.vue +304 -304
  87. package/dist/v3/DevTool/components/SettingList/modules/SettingDevTool.vue +212 -212
  88. package/dist/v3/DevTool/components/SettingList/modules/SettingInfo.vue +157 -157
  89. package/dist/v3/DevTool/components/SettingList/modules/SettingLanguage.vue +74 -74
  90. package/dist/v3/DevTool/components/SettingList/modules/SettingLog.vue +230 -230
  91. package/dist/v3/DevTool/components/SettingList/typing.d.ts +2 -2
  92. package/dist/v3/DevTool/components/SourceCode/Line.vue +127 -127
  93. package/dist/v3/DevTool/components/SourceCode/parseCode.ts +609 -609
  94. package/dist/v3/DevTool/components/StorageList/index.vue +174 -174
  95. package/dist/v3/DevTool/components/TransferList/TransferDetail.vue +268 -268
  96. package/dist/v3/DevTool/components/VuexList/index.vue +84 -84
  97. package/dist/v3/DevTool/index.vue +1 -0
  98. package/dist/v3/components/AppTransition/index.vue +176 -176
  99. package/dist/v3/components/AutoSizer/index.vue +192 -192
  100. package/dist/v3/components/AutoSizer/index1.vue +184 -184
  101. package/dist/v3/components/AutoSizer/utils.ts +49 -49
  102. package/dist/v3/components/Barrage/BarrageItem.vue +137 -137
  103. package/dist/v3/components/Barrage/index.vue +202 -202
  104. package/dist/v3/components/CircularButton/index.vue +84 -84
  105. package/dist/v3/components/CustomSwiper/CustomSwiperItem.vue +49 -49
  106. package/dist/v3/components/CustomSwiper/index.vue +104 -104
  107. package/dist/v3/components/DevErrorBoundary/index.vue +380 -0
  108. package/dist/v3/components/Empty/index.vue +29 -29
  109. package/dist/v3/components/FilterSelect/index.vue +179 -179
  110. package/dist/v3/components/JsonPretty/components/Brackets/index.vue +27 -27
  111. package/dist/v3/components/JsonPretty/components/Carets/index.vue +59 -59
  112. package/dist/v3/components/JsonPretty/components/CheckController/index.vue +136 -136
  113. package/dist/v3/components/JsonPretty/components/TreeNode/index.vue +387 -387
  114. package/dist/v3/components/JsonPretty/hooks/useClipboard.ts +21 -21
  115. package/dist/v3/components/JsonPretty/hooks/useError.ts +21 -21
  116. package/dist/v3/components/JsonPretty/type.ts +127 -127
  117. package/dist/v3/components/JsonPretty/utils/index.ts +169 -169
  118. package/dist/v3/components/MovableContainer/index.vue +8 -4
  119. package/dist/v3/components/Pick/index.vue +322 -322
  120. package/dist/v3/components/Tag/index.vue +113 -113
  121. package/dist/v3/components/VirtualList/AutoSize.vue +40 -40
  122. package/dist/v3/components/VirtualList/index.vue +416 -416
  123. package/dist/v3/hooks/useBluetooth/index.ts +561 -561
  124. package/dist/v3/hooks/useContainerStyle.ts +153 -153
  125. package/dist/v3/hooks/useNFC/index.ts +107 -107
  126. package/dist/v3/hooks/useNFC/typing.d.ts +396 -396
  127. package/dist/v3/hooks/useNFC/useNFCAndroid.ts +966 -966
  128. package/dist/v3/hooks/useNFC/useNFCMpWeiXin.ts +812 -812
  129. package/dist/v3/hooks/useNFC/utils.ts +754 -754
  130. package/dist/v3/hooks/useRequest/index.ts +586 -586
  131. package/dist/v3/hooks/useRequest/utils.ts +267 -267
  132. package/dist/v3/hooks/useScanCode/index.ts +206 -206
  133. package/dist/v3/hooks/useWebsocket/index.ts +253 -253
  134. package/dist/v3/styles/theme.ts +12 -12
  135. package/package.json +9 -1
@@ -1,247 +1,247 @@
1
- <template>
2
- <view class="run-js-input-wrapper">
3
- <view class="run-js-input-icon"></view>
4
- <input
5
- :value="code"
6
- class="run-js-input"
7
- :placeholder="t('common.runPlaceholder')"
8
- @confirm="debounceConfirm"
9
- @input="onChange" />
10
- <view class="run-js-tips">
11
- <view
12
- class="run-js-tips-item"
13
- v-for="(item, index) in tips"
14
- :key="index"
15
- @click="onChoose(item.name)">
16
- {{ item.name }}{{ item.description ? ': ' : ' ' }}{{ item.description }}
17
- </view>
18
- </view>
19
- </view>
20
- </template>
21
- <script lang="ts" setup>
22
- import { ref } from 'vue';
23
- import {
24
- staticTips,
25
- singleTips,
26
- flatStaticTips,
27
- baseSymbols,
28
- type Tip,
29
- } from './staticTips';
30
- import { debounce } from '../../../../utils';
31
- import { useI18n } from '../../../../i18n';
32
-
33
- const { t } = useI18n();
34
-
35
- const emit = defineEmits<{
36
- (e: 'run', value: string): void;
37
- }>();
38
-
39
- const code = ref('');
40
-
41
- const tips = ref<Tip[]>([]);
42
-
43
- // 微信真机调试为什么触发两次 confirm ???
44
- function onConfirm() {
45
- tips.value = [];
46
- const value = code.value;
47
- if (!value) return;
48
- code.value = '';
49
-
50
- emit('run', value);
51
- }
52
- const debounceConfirm = debounce(onConfirm, 500, { leading: true });
53
-
54
- /**
55
- * 1.对象,方法,变量 在 ; ( , =,==,=== , + , - , * , / , && , || ?? 之后 开始提示
56
- *
57
- * Math
58
- * console
59
- *
60
- * 2.在 . 之后 提示
61
- *
62
- * Math.a
63
- * console.a
64
- *
65
- *
66
- * 3.对方法,属性返回值进行提示
67
- *
68
- * Math.abc().
69
- *
70
- *
71
- * any, void 不进行提示
72
- *
73
- * 4. [] 数组提示
74
- *
75
- * [1,2].concat([2,3].map(parseInt))
76
- *
77
- * 5. (值) 推断提示
78
- * ({}).valueOf()
79
- *
80
- *
81
- * @param e 输入框内容
82
- */
83
- function onChange(e: any) {
84
- const { value, cursor } = e.detail as { value: string; cursor: number };
85
-
86
- code.value = value;
87
- // 光标之前的内容
88
- const content = value.slice(0, cursor);
89
-
90
- // 获取符号之后的内容
91
- const lastIndex = getBaseSymbolLastIndex(content);
92
-
93
- const con = lastIndex > -1 ? value.substring(lastIndex + 1) : value;
94
-
95
- if (!con) {
96
- // 不存在内容
97
- tips.value = [];
98
- } else {
99
- // 存在内容
100
-
101
- // 一级点之后的内容
102
- const [main, sub] = con.split('.');
103
-
104
- if (singleTips.includes(main) && con.includes('.')) {
105
- const list = [
106
- ...(staticTips[main]?.attr ?? []),
107
- ...(staticTips[main]?.fun ?? []),
108
- ];
109
-
110
- if (sub) {
111
- tips.value = list.filter((item) => item.name.startsWith(sub));
112
- } else {
113
- tips.value = list;
114
- }
115
- } else {
116
- if (main.includes(')') && con.includes('.')) {
117
- // 方法调用之后的提示
118
-
119
- // 获取方法名称 倒数第二个 . 到最后一个 ( 之间为方法名称
120
- const s = getSecondLastDotPosition(content);
121
- const e = content.lastIndexOf('(');
122
- const methodName = content.substring(s + 1, e);
123
-
124
- const fn = findFunction(methodName);
125
- // 获取方法返回值
126
- const result = fn?.[0]?.result?.[0];
127
- if (result && result !== 'any' && result !== 'void') {
128
- tips.value = Object.values(staticTips?.[result] ?? {}).flat(2);
129
- } else {
130
- tips.value = [];
131
- }
132
- } else {
133
- // 基础提示
134
- tips.value = singleTips
135
- .filter((item) => item.startsWith(con))
136
- .map((item) => ({
137
- name: item,
138
- description: '',
139
- result: ['any'],
140
- }));
141
- }
142
- }
143
- }
144
- }
145
- function onChoose(_name: string) {
146
- // TODO 选择提示
147
- // const lastIndex = code.value.lastIndexOf(';');
148
- // const con =
149
- // lastIndex > -1 ? code.value?.substring(lastIndex + 1) : code.value;
150
- // const lastCon = con.lastIndexOf('.');
151
- // if (lastCon > -1) {
152
- // code.value = con.substring(0, lastCon + 1) + name;
153
- // } else {
154
- // code.value = name;
155
- // }
156
- // tips.value = [];
157
- }
158
-
159
- function getBaseSymbolLastIndex(code: string) {
160
- for (let i = code.length - 1; i >= 0; i--) {
161
- if (baseSymbols.includes(code[i])) {
162
- return i; // 找到最后一个符号的位置
163
- }
164
- }
165
- return -1; // 未找到任何符号
166
- }
167
-
168
- function getSecondLastDotPosition(str: string) {
169
- let dotCount = 0;
170
- for (let i = str.length - 1; i >= 0; i--) {
171
- if (str[i] === '.') {
172
- dotCount++;
173
- if (dotCount === 2) {
174
- return i;
175
- }
176
- }
177
- }
178
- return -1; // 未找到足够的点号
179
- }
180
-
181
- function findFunction(fn: string) {
182
- return flatStaticTips.filter((item) => item.name.startsWith(fn));
183
- }
184
- </script>
185
- <style scoped>
186
- .run-js-input-wrapper {
187
- position: relative;
188
- display: flex;
189
- align-items: center;
190
- padding: 0 16px;
191
- height: 32px;
192
- border-top: 1px solid var(--dev-tool-border-color);
193
- border-bottom: 1px solid var(--dev-tool-border-color);
194
- box-sizing: border-box;
195
- }
196
-
197
- .run-js-input-icon {
198
- margin: 10px 0 10px -4px;
199
- width: 8px;
200
- height: 8px;
201
- border: 1px solid var(--dev-tool-text-color);
202
- border-bottom-color: transparent;
203
- border-left-color: transparent;
204
- overflow: hidden;
205
- transform: rotate(45deg);
206
- transition: border 0.3s;
207
- }
208
-
209
- .run-js-input {
210
- margin: 1px 0 1px 16px;
211
- min-height: 26px;
212
- width: 100%;
213
- border: 1px solid transparent;
214
- font-size: var(--dev-tool-base-font-size);
215
- color: var(--dev-tool-text-color);
216
- transition: color 0.3s;
217
- }
218
-
219
- .run-js-tips {
220
- position: absolute;
221
- bottom: 31px;
222
- left: 0;
223
- background-color: var(--dev-tool-bg-color);
224
- width: 100%;
225
- max-height: 200px;
226
- padding: 0 16px 0 36px;
227
- box-sizing: border-box;
228
- overflow: hidden auto;
229
- box-shadow: 0 0 4px 0 rgb(0 0 0 / 10%);
230
- }
231
-
232
- .run-js-tips-item {
233
- display: flex;
234
- align-items: center;
235
- height: 28px;
236
- width: 100%;
237
- white-space: nowrap;
238
- border: 1px solid transparent;
239
- border-bottom: 1px solid var(--dev-tool-border-color);
240
- overflow: hidden;
241
- text-overflow: ellipsis;
242
- }
243
-
244
- .run-js-tips-item-active {
245
- border: 1px solid var(--dev-tool-main-color);
246
- }
247
- </style>
1
+ <template>
2
+ <view class="run-js-input-wrapper">
3
+ <view class="run-js-input-icon"></view>
4
+ <input
5
+ :value="code"
6
+ class="run-js-input"
7
+ :placeholder="t('common.runPlaceholder')"
8
+ @confirm="debounceConfirm"
9
+ @input="onChange" />
10
+ <view class="run-js-tips">
11
+ <view
12
+ class="run-js-tips-item"
13
+ v-for="(item, index) in tips"
14
+ :key="index"
15
+ @click="onChoose(item.name)">
16
+ {{ item.name }}{{ item.description ? ': ' : ' ' }}{{ item.description }}
17
+ </view>
18
+ </view>
19
+ </view>
20
+ </template>
21
+ <script lang="ts" setup>
22
+ import { ref } from 'vue';
23
+ import {
24
+ staticTips,
25
+ singleTips,
26
+ flatStaticTips,
27
+ baseSymbols,
28
+ type Tip,
29
+ } from './staticTips';
30
+ import { debounce } from '../../../../utils';
31
+ import { useI18n } from '../../../../i18n';
32
+
33
+ const { t } = useI18n();
34
+
35
+ const emit = defineEmits<{
36
+ (e: 'run', value: string): void;
37
+ }>();
38
+
39
+ const code = ref('');
40
+
41
+ const tips = ref<Tip[]>([]);
42
+
43
+ // 微信真机调试为什么触发两次 confirm ???
44
+ function onConfirm() {
45
+ tips.value = [];
46
+ const value = code.value;
47
+ if (!value) return;
48
+ code.value = '';
49
+
50
+ emit('run', value);
51
+ }
52
+ const debounceConfirm = debounce(onConfirm, 500, { leading: true });
53
+
54
+ /**
55
+ * 1.对象,方法,变量 在 ; ( , =,==,=== , + , - , * , / , && , || ?? 之后 开始提示
56
+ *
57
+ * Math
58
+ * console
59
+ *
60
+ * 2.在 . 之后 提示
61
+ *
62
+ * Math.a
63
+ * console.a
64
+ *
65
+ *
66
+ * 3.对方法,属性返回值进行提示
67
+ *
68
+ * Math.abc().
69
+ *
70
+ *
71
+ * any, void 不进行提示
72
+ *
73
+ * 4. [] 数组提示
74
+ *
75
+ * [1,2].concat([2,3].map(parseInt))
76
+ *
77
+ * 5. (值) 推断提示
78
+ * ({}).valueOf()
79
+ *
80
+ *
81
+ * @param e 输入框内容
82
+ */
83
+ function onChange(e: any) {
84
+ const { value, cursor } = e.detail as { value: string; cursor: number };
85
+
86
+ code.value = value;
87
+ // 光标之前的内容
88
+ const content = value.slice(0, cursor);
89
+
90
+ // 获取符号之后的内容
91
+ const lastIndex = getBaseSymbolLastIndex(content);
92
+
93
+ const con = lastIndex > -1 ? value.substring(lastIndex + 1) : value;
94
+
95
+ if (!con) {
96
+ // 不存在内容
97
+ tips.value = [];
98
+ } else {
99
+ // 存在内容
100
+
101
+ // 一级点之后的内容
102
+ const [main, sub] = con.split('.');
103
+
104
+ if (singleTips.includes(main) && con.includes('.')) {
105
+ const list = [
106
+ ...(staticTips[main]?.attr ?? []),
107
+ ...(staticTips[main]?.fun ?? []),
108
+ ];
109
+
110
+ if (sub) {
111
+ tips.value = list.filter((item) => item.name.startsWith(sub));
112
+ } else {
113
+ tips.value = list;
114
+ }
115
+ } else {
116
+ if (main.includes(')') && con.includes('.')) {
117
+ // 方法调用之后的提示
118
+
119
+ // 获取方法名称 倒数第二个 . 到最后一个 ( 之间为方法名称
120
+ const s = getSecondLastDotPosition(content);
121
+ const e = content.lastIndexOf('(');
122
+ const methodName = content.substring(s + 1, e);
123
+
124
+ const fn = findFunction(methodName);
125
+ // 获取方法返回值
126
+ const result = fn?.[0]?.result?.[0];
127
+ if (result && result !== 'any' && result !== 'void') {
128
+ tips.value = Object.values(staticTips?.[result] ?? {}).flat(2);
129
+ } else {
130
+ tips.value = [];
131
+ }
132
+ } else {
133
+ // 基础提示
134
+ tips.value = singleTips
135
+ .filter((item) => item.startsWith(con))
136
+ .map((item) => ({
137
+ name: item,
138
+ description: '',
139
+ result: ['any'],
140
+ }));
141
+ }
142
+ }
143
+ }
144
+ }
145
+ function onChoose(_name: string) {
146
+ // TODO 选择提示
147
+ // const lastIndex = code.value.lastIndexOf(';');
148
+ // const con =
149
+ // lastIndex > -1 ? code.value?.substring(lastIndex + 1) : code.value;
150
+ // const lastCon = con.lastIndexOf('.');
151
+ // if (lastCon > -1) {
152
+ // code.value = con.substring(0, lastCon + 1) + name;
153
+ // } else {
154
+ // code.value = name;
155
+ // }
156
+ // tips.value = [];
157
+ }
158
+
159
+ function getBaseSymbolLastIndex(code: string) {
160
+ for (let i = code.length - 1; i >= 0; i--) {
161
+ if (baseSymbols.includes(code[i])) {
162
+ return i; // 找到最后一个符号的位置
163
+ }
164
+ }
165
+ return -1; // 未找到任何符号
166
+ }
167
+
168
+ function getSecondLastDotPosition(str: string) {
169
+ let dotCount = 0;
170
+ for (let i = str.length - 1; i >= 0; i--) {
171
+ if (str[i] === '.') {
172
+ dotCount++;
173
+ if (dotCount === 2) {
174
+ return i;
175
+ }
176
+ }
177
+ }
178
+ return -1; // 未找到足够的点号
179
+ }
180
+
181
+ function findFunction(fn: string) {
182
+ return flatStaticTips.filter((item) => item.name.startsWith(fn));
183
+ }
184
+ </script>
185
+ <style scoped>
186
+ .run-js-input-wrapper {
187
+ position: relative;
188
+ display: flex;
189
+ align-items: center;
190
+ padding: 0 16px;
191
+ height: 32px;
192
+ border-top: 1px solid var(--dev-tool-border-color);
193
+ border-bottom: 1px solid var(--dev-tool-border-color);
194
+ box-sizing: border-box;
195
+ }
196
+
197
+ .run-js-input-icon {
198
+ margin: 10px 0 10px -4px;
199
+ width: 8px;
200
+ height: 8px;
201
+ border: 1px solid var(--dev-tool-text-color);
202
+ border-bottom-color: transparent;
203
+ border-left-color: transparent;
204
+ overflow: hidden;
205
+ transform: rotate(45deg);
206
+ transition: border 0.3s;
207
+ }
208
+
209
+ .run-js-input {
210
+ margin: 1px 0 1px 16px;
211
+ min-height: 26px;
212
+ width: 100%;
213
+ border: 1px solid transparent;
214
+ font-size: var(--dev-tool-base-font-size);
215
+ color: var(--dev-tool-text-color);
216
+ transition: color 0.3s;
217
+ }
218
+
219
+ .run-js-tips {
220
+ position: absolute;
221
+ bottom: 31px;
222
+ left: 0;
223
+ background-color: var(--dev-tool-bg-color);
224
+ width: 100%;
225
+ max-height: 200px;
226
+ padding: 0 16px 0 36px;
227
+ box-sizing: border-box;
228
+ overflow: hidden auto;
229
+ box-shadow: 0 0 4px 0 rgb(0 0 0 / 10%);
230
+ }
231
+
232
+ .run-js-tips-item {
233
+ display: flex;
234
+ align-items: center;
235
+ height: 28px;
236
+ width: 100%;
237
+ white-space: nowrap;
238
+ border: 1px solid transparent;
239
+ border-bottom: 1px solid var(--dev-tool-border-color);
240
+ overflow: hidden;
241
+ text-overflow: ellipsis;
242
+ }
243
+
244
+ .run-js-tips-item-active {
245
+ border: 1px solid var(--dev-tool-main-color);
246
+ }
247
+ </style>