@tmagic/editor 1.0.0-rc.5 → 1.0.0-rc.6

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 (58) hide show
  1. package/coverage/clover.xml +189 -167
  2. package/coverage/coverage-final.json +6 -6
  3. package/coverage/lcov-report/index.html +42 -42
  4. package/coverage/lcov-report/src/Editor.vue.html +48 -9
  5. package/coverage/lcov-report/src/components/ContentMenu.vue.html +135 -36
  6. package/coverage/lcov-report/src/components/Icon.vue.html +1 -1
  7. package/coverage/lcov-report/src/components/ScrollViewer.vue.html +1 -1
  8. package/coverage/lcov-report/src/components/ToolButton.vue.html +1 -1
  9. package/coverage/lcov-report/src/components/index.html +18 -18
  10. package/coverage/lcov-report/src/index.html +15 -15
  11. package/coverage/lcov-report/src/layouts/AddPageBox.vue.html +1 -1
  12. package/coverage/lcov-report/src/layouts/Framework.vue.html +1 -1
  13. package/coverage/lcov-report/src/layouts/NavMenu.vue.html +1 -1
  14. package/coverage/lcov-report/src/layouts/PropsPanel.vue.html +1 -1
  15. package/coverage/lcov-report/src/layouts/Resizer.vue.html +1 -1
  16. package/coverage/lcov-report/src/layouts/index.html +1 -1
  17. package/coverage/lcov-report/src/layouts/sidebar/ComponentListPanel.vue.html +1 -1
  18. package/coverage/lcov-report/src/layouts/sidebar/LayerMenu.vue.html +15 -6
  19. package/coverage/lcov-report/src/layouts/sidebar/LayerPanel.vue.html +1 -1
  20. package/coverage/lcov-report/src/layouts/sidebar/Sidebar.vue.html +1 -1
  21. package/coverage/lcov-report/src/layouts/sidebar/TabPane.vue.html +1 -1
  22. package/coverage/lcov-report/src/layouts/sidebar/index.html +11 -11
  23. package/coverage/lcov-report/src/layouts/workspace/PageBar.vue.html +1 -1
  24. package/coverage/lcov-report/src/layouts/workspace/Stage.vue.html +1 -1
  25. package/coverage/lcov-report/src/layouts/workspace/ViewerMenu.vue.html +15 -6
  26. package/coverage/lcov-report/src/layouts/workspace/Workspace.vue.html +1 -1
  27. package/coverage/lcov-report/src/layouts/workspace/index.html +11 -11
  28. package/coverage/lcov-report/src/services/BaseService.ts.html +1 -1
  29. package/coverage/lcov-report/src/services/componentList.ts.html +1 -1
  30. package/coverage/lcov-report/src/services/editor.ts.html +3 -3
  31. package/coverage/lcov-report/src/services/events.ts.html +1 -1
  32. package/coverage/lcov-report/src/services/history.ts.html +1 -1
  33. package/coverage/lcov-report/src/services/index.html +1 -1
  34. package/coverage/lcov-report/src/services/props.ts.html +4 -4
  35. package/coverage/lcov-report/src/services/ui.ts.html +1 -1
  36. package/coverage/lcov-report/src/type.ts.html +1 -1
  37. package/coverage/lcov-report/src/utils/compose.ts.html +1 -1
  38. package/coverage/lcov-report/src/utils/config.ts.html +1 -1
  39. package/coverage/lcov-report/src/utils/editor.ts.html +21 -9
  40. package/coverage/lcov-report/src/utils/index.html +12 -12
  41. package/coverage/lcov-report/src/utils/index.ts.html +1 -1
  42. package/coverage/lcov-report/src/utils/logger.ts.html +1 -1
  43. package/coverage/lcov-report/src/utils/props.ts.html +1 -1
  44. package/coverage/lcov-report/src/utils/scroll-viewer.ts.html +1 -1
  45. package/coverage/lcov-report/src/utils/undo-redo.ts.html +1 -1
  46. package/coverage/lcov.info +495 -448
  47. package/dist/tmagic-editor.es.js +68 -28
  48. package/dist/tmagic-editor.es.js.map +1 -1
  49. package/dist/tmagic-editor.umd.js +69 -29
  50. package/dist/tmagic-editor.umd.js.map +1 -1
  51. package/dist/types/src/Editor.vue.d.ts +19 -1
  52. package/package.json +7 -7
  53. package/src/Editor.vue +14 -1
  54. package/src/components/ContentMenu.vue +58 -25
  55. package/src/layouts/sidebar/LayerMenu.vue +3 -0
  56. package/src/layouts/workspace/ViewerMenu.vue +3 -0
  57. package/src/services/editor.ts +2 -2
  58. package/src/services/props.ts +3 -3
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">59.13% </span>
26
+ <span class="strong">58.84% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>968/1637</span>
28
+ <span class='fraction'>978/1662</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">25.54% </span>
33
+ <span class="strong">25.21% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>326/1276</span>
35
+ <span class='fraction'>326/1293</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">52.14% </span>
40
+ <span class="strong">52.11% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>207/397</span>
42
+ <span class='fraction'>209/401</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">61.6% </span>
47
+ <span class="strong">61.36% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>900/1461</span>
49
+ <span class='fraction'>910/1483</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,32 +80,32 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="src"><a href="src/index.html">src</a></td>
83
- <td data-value="94.02" class="pic high">
83
+ <td data-value="94.36" class="pic high">
84
84
  <div class="chart"><div class="cover-fill" style="width: 94%"></div><div class="cover-empty" style="width: 6%"></div></div>
85
85
  </td>
86
- <td data-value="94.02" class="pct high">94.02%</td>
87
- <td data-value="67" class="abs high">63/67</td>
86
+ <td data-value="94.36" class="pct high">94.36%</td>
87
+ <td data-value="71" class="abs high">67/71</td>
88
88
  <td data-value="78.57" class="pct medium">78.57%</td>
89
89
  <td data-value="14" class="abs medium">11/14</td>
90
- <td data-value="89.28" class="pct high">89.28%</td>
91
- <td data-value="28" class="abs high">25/28</td>
92
- <td data-value="95.45" class="pct high">95.45%</td>
93
- <td data-value="66" class="abs high">63/66</td>
90
+ <td data-value="90" class="pct high">90%</td>
91
+ <td data-value="30" class="abs high">27/30</td>
92
+ <td data-value="95.71" class="pct high">95.71%</td>
93
+ <td data-value="70" class="abs high">67/70</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
97
97
  <td class="file medium" data-value="src/components"><a href="src/components/index.html">src/components</a></td>
98
- <td data-value="64.8" class="pic medium">
99
- <div class="chart"><div class="cover-fill" style="width: 64%"></div><div class="cover-empty" style="width: 36%"></div></div>
98
+ <td data-value="59.85" class="pic medium">
99
+ <div class="chart"><div class="cover-fill" style="width: 59%"></div><div class="cover-empty" style="width: 41%"></div></div>
100
100
  </td>
101
- <td data-value="64.8" class="pct medium">64.8%</td>
102
- <td data-value="125" class="abs medium">81/125</td>
103
- <td data-value="40.27" class="pct low">40.27%</td>
104
- <td data-value="144" class="abs low">58/144</td>
105
- <td data-value="60.52" class="pct medium">60.52%</td>
106
- <td data-value="38" class="abs medium">23/38</td>
107
- <td data-value="71.17" class="pct medium">71.17%</td>
108
- <td data-value="111" class="abs medium">79/111</td>
101
+ <td data-value="59.85" class="pct medium">59.85%</td>
102
+ <td data-value="142" class="abs medium">85/142</td>
103
+ <td data-value="36.02" class="pct low">36.02%</td>
104
+ <td data-value="161" class="abs low">58/161</td>
105
+ <td data-value="57.5" class="pct medium">57.5%</td>
106
+ <td data-value="40" class="abs medium">23/40</td>
107
+ <td data-value="66.4" class="pct medium">66.4%</td>
108
+ <td data-value="125" class="abs medium">83/125</td>
109
109
  </tr>
110
110
 
111
111
  <tr>
@@ -125,32 +125,32 @@
125
125
 
126
126
  <tr>
127
127
  <td class="file low" data-value="src/layouts/sidebar"><a href="src/layouts/sidebar/index.html">src/layouts/sidebar</a></td>
128
- <td data-value="45.55" class="pic low">
128
+ <td data-value="45.85" class="pic low">
129
129
  <div class="chart"><div class="cover-fill" style="width: 45%"></div><div class="cover-empty" style="width: 55%"></div></div>
130
130
  </td>
131
- <td data-value="45.55" class="pct low">45.55%</td>
132
- <td data-value="180" class="abs low">82/180</td>
131
+ <td data-value="45.85" class="pct low">45.85%</td>
132
+ <td data-value="181" class="abs low">83/181</td>
133
133
  <td data-value="13.67" class="pct low">13.67%</td>
134
134
  <td data-value="234" class="abs low">32/234</td>
135
135
  <td data-value="34.54" class="pct low">34.54%</td>
136
136
  <td data-value="55" class="abs low">19/55</td>
137
- <td data-value="49.35" class="pct low">49.35%</td>
138
- <td data-value="156" class="abs low">77/156</td>
137
+ <td data-value="49.68" class="pct low">49.68%</td>
138
+ <td data-value="157" class="abs low">78/157</td>
139
139
  </tr>
140
140
 
141
141
  <tr>
142
142
  <td class="file low" data-value="src/layouts/workspace"><a href="src/layouts/workspace/index.html">src/layouts/workspace</a></td>
143
- <td data-value="38.41" class="pic low">
143
+ <td data-value="38.61" class="pic low">
144
144
  <div class="chart"><div class="cover-fill" style="width: 38%"></div><div class="cover-empty" style="width: 62%"></div></div>
145
145
  </td>
146
- <td data-value="38.41" class="pct low">38.41%</td>
147
- <td data-value="302" class="abs low">116/302</td>
146
+ <td data-value="38.61" class="pct low">38.61%</td>
147
+ <td data-value="303" class="abs low">117/303</td>
148
148
  <td data-value="12.64" class="pct low">12.64%</td>
149
149
  <td data-value="506" class="abs low">64/506</td>
150
150
  <td data-value="23.71" class="pct low">23.71%</td>
151
151
  <td data-value="97" class="abs low">23/97</td>
152
- <td data-value="39.77" class="pct low">39.77%</td>
153
- <td data-value="269" class="abs low">107/269</td>
152
+ <td data-value="40" class="pct low">40%</td>
153
+ <td data-value="270" class="abs low">108/270</td>
154
154
  </tr>
155
155
 
156
156
  <tr>
@@ -170,17 +170,17 @@
170
170
 
171
171
  <tr>
172
172
  <td class="file medium" data-value="src/utils"><a href="src/utils/index.html">src/utils</a></td>
173
- <td data-value="58.23" class="pic medium">
174
- <div class="chart"><div class="cover-fill" style="width: 58%"></div><div class="cover-empty" style="width: 42%"></div></div>
173
+ <td data-value="57.89" class="pic medium">
174
+ <div class="chart"><div class="cover-fill" style="width: 57%"></div><div class="cover-empty" style="width: 43%"></div></div>
175
175
  </td>
176
- <td data-value="58.23" class="pct medium">58.23%</td>
177
- <td data-value="340" class="abs medium">198/340</td>
176
+ <td data-value="57.89" class="pct medium">57.89%</td>
177
+ <td data-value="342" class="abs medium">198/342</td>
178
178
  <td data-value="42.99" class="pct low">42.99%</td>
179
179
  <td data-value="107" class="abs low">46/107</td>
180
180
  <td data-value="55.38" class="pct medium">55.38%</td>
181
181
  <td data-value="65" class="abs medium">36/65</td>
182
- <td data-value="56.16" class="pct medium">56.16%</td>
183
- <td data-value="292" class="abs medium">164/292</td>
182
+ <td data-value="55.78" class="pct medium">55.78%</td>
183
+ <td data-value="294" class="abs medium">164/294</td>
184
184
  </tr>
185
185
 
186
186
  </tbody>
@@ -191,7 +191,7 @@
191
191
  <div class='footer quiet pad2 space-top1 center small'>
192
192
  Code coverage generated by
193
193
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at Tue May 31 2022 20:04:27 GMT+0800 (China Standard Time)
194
+ at Mon Jun 06 2022 15:27:48 GMT+0800 (China Standard Time)
195
195
  </div>
196
196
  <script src="prettify.js"></script>
197
197
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">92.98% </span>
26
+ <span class="strong">93.44% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>53/57</span>
28
+ <span class='fraction'>57/61</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">88% </span>
40
+ <span class="strong">88.88% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>22/25</span>
42
+ <span class='fraction'>24/27</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">94.64% </span>
47
+ <span class="strong">95% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>53/56</span>
49
+ <span class='fraction'>57/60</span>
50
50
  </div>
51
51
 
52
52
 
@@ -306,7 +306,20 @@
306
306
  <a name='L241'></a><a href='#L241'>241</a>
307
307
  <a name='L242'></a><a href='#L242'>242</a>
308
308
  <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
310
323
  <span class="cline-any cline-neutral">&nbsp;</span>
311
324
  <span class="cline-any cline-neutral">&nbsp;</span>
312
325
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -398,6 +411,16 @@
398
411
  <span class="cline-any cline-neutral">&nbsp;</span>
399
412
  <span class="cline-any cline-neutral">&nbsp;</span>
400
413
  <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-yes">1x</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-neutral">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-yes">1x</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
424
  <span class="cline-any cline-neutral">&nbsp;</span>
402
425
  <span class="cline-any cline-yes">1x</span>
403
426
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -546,6 +569,9 @@
546
569
  <span class="cline-any cline-yes">1x</span>
547
570
  <span class="cline-any cline-neutral">&nbsp;</span>
548
571
  <span class="cline-any cline-yes">1x</span>
572
+ <span class="cline-any cline-yes">1x</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-yes">1x</span>
549
575
  <span class="cline-any cline-neutral">&nbsp;</span>
550
576
  <span class="cline-any cline-neutral">&nbsp;</span>
551
577
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -607,7 +633,7 @@ import eventsService from '@editor/services/events';
607
633
  import historyService from '@editor/services/history';
608
634
  import propsService from '@editor/services/props';
609
635
  import uiService from '@editor/services/ui';
610
- import type { ComponentGroup, MenuBarData, Services, SideBarData, StageRect } from '@editor/type';
636
+ import type { ComponentGroup, MenuBarData, MenuItem, Services, SideBarData, StageRect } from '@editor/type';
611
637
  &nbsp;
612
638
  export default defineComponent({
613
639
  name: 'm-editor',
@@ -638,6 +664,16 @@ export default defineComponent({
638
664
  sidebar: {
639
665
  type: Object as PropType&lt;SideBarData&gt;,
640
666
  },
667
+ &nbsp;
668
+ layerContentMenu: {
669
+ type: Array as PropType&lt;MenuItem[]&gt;,
670
+ default: () =&gt; [],
671
+ },
672
+ &nbsp;
673
+ stageContentMenu: {
674
+ type: Array as PropType&lt;MenuItem[]&gt;,
675
+ default: () =&gt; [],
676
+ },
641
677
  &nbsp;
642
678
  /** 顶部工具栏配置 */
643
679
  menu: {
@@ -787,6 +823,9 @@ export default defineComponent({
787
823
  };
788
824
  &nbsp;
789
825
  provide('services', services);
826
+ &nbsp;
827
+ provide('layerContentMenu', props.layerContentMenu);
828
+ provide('stageContentMenu', props.stageContentMenu);
790
829
  &nbsp;
791
830
  return services;
792
831
  },
@@ -799,7 +838,7 @@ export default defineComponent({
799
838
  <div class='footer quiet pad2 space-top1 center small'>
800
839
  Code coverage generated by
801
840
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
802
- at Tue May 31 2022 20:04:27 GMT+0800 (China Standard Time)
841
+ at Mon Jun 06 2022 15:27:48 GMT+0800 (China Standard Time)
803
842
  </div>
804
843
  <script src="../prettify.js"></script>
805
844
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">40% </span>
26
+ <span class="strong">34.04% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>12/30</span>
28
+ <span class='fraction'>16/47</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/23</span>
35
+ <span class='fraction'>0/40</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">25% </span>
40
+ <span class="strong">20% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/8</span>
42
+ <span class='fraction'>2/10</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">40% </span>
47
+ <span class="strong">36.36% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>12/30</span>
49
+ <span class='fraction'>16/44</span>
50
50
  </div>
51
51
 
52
52
 
@@ -170,7 +170,46 @@
170
170
  <a name='L105'></a><a href='#L105'>105</a>
171
171
  <a name='L106'></a><a href='#L106'>106</a>
172
172
  <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
211
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
213
  <span class="cline-any cline-neutral">&nbsp;</span>
175
214
  <span class="cline-any cline-neutral">&nbsp;</span>
176
215
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -206,6 +245,13 @@
206
245
  <span class="cline-any cline-neutral">&nbsp;</span>
207
246
  <span class="cline-any cline-neutral">&nbsp;</span>
208
247
  <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-yes">3x</span>
209
255
  <span class="cline-any cline-yes">3x</span>
210
256
  <span class="cline-any cline-yes">3x</span>
211
257
  <span class="cline-any cline-yes">3x</span>
@@ -218,21 +264,37 @@
218
264
  <span class="cline-any cline-yes">3x</span>
219
265
  <span class="cline-any cline-no">&nbsp;</span>
220
266
  <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-no">&nbsp;</span>
268
+ <span class="cline-any cline-no">&nbsp;</span>
221
269
  <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">3x</span>
223
- <span class="cline-any cline-yes">3x</span>
270
+ <span class="cline-any cline-no">&nbsp;</span>
224
271
  <span class="cline-any cline-neutral">&nbsp;</span>
225
272
  <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-yes">3x</span>
274
+ <span class="cline-any cline-no">&nbsp;</span>
275
+ <span class="cline-any cline-no">&nbsp;</span>
276
+ <span class="cline-any cline-no">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
278
  <span class="cline-any cline-no">&nbsp;</span>
227
279
  <span class="cline-any cline-no">&nbsp;</span>
228
280
  <span class="cline-any cline-neutral">&nbsp;</span>
229
281
  <span class="cline-any cline-no">&nbsp;</span>
230
282
  <span class="cline-any cline-neutral">&nbsp;</span>
231
283
  <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-yes">3x</span>
285
+ <span class="cline-any cline-yes">3x</span>
232
286
  <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-yes">3x</span>
233
288
  <span class="cline-any cline-neutral">&nbsp;</span>
234
289
  <span class="cline-any cline-neutral">&nbsp;</span>
235
290
  <span class="cline-any cline-yes">3x</span>
291
+ <span class="cline-any cline-no">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-no">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-yes">3x</span>
297
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
298
  <span class="cline-any cline-neutral">&nbsp;</span>
237
299
  <span class="cline-any cline-neutral">&nbsp;</span>
238
300
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -243,6 +305,7 @@
243
305
  <span class="cline-any cline-neutral">&nbsp;</span>
244
306
  <span class="cline-any cline-neutral">&nbsp;</span>
245
307
  <span class="cline-any cline-no">&nbsp;</span>
308
+ <span class="cline-any cline-no">&nbsp;</span>
246
309
  <span class="cline-any cline-neutral">&nbsp;</span>
247
310
  <span class="cline-any cline-no">&nbsp;</span>
248
311
  <span class="cline-any cline-no">&nbsp;</span>
@@ -257,6 +320,9 @@
257
320
  <span class="cline-any cline-neutral">&nbsp;</span>
258
321
  <span class="cline-any cline-neutral">&nbsp;</span>
259
322
  <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
326
  <span class="cline-any cline-neutral">&nbsp;</span>
261
327
  <span class="cline-any cline-neutral">&nbsp;</span>
262
328
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -290,13 +356,19 @@
290
356
  &gt;&lt;/tool-button&gt;
291
357
  &lt;/div&gt;
292
358
  &lt;teleport to="body"&gt;
293
- &lt;content-menu class="sub-menu" ref="subMenu" :menu-data="subMenuData"&gt;&lt;/content-menu&gt;
359
+ &lt;content-menu
360
+ class="sub-menu"
361
+ ref="subMenu"
362
+ :menu-data="subMenuData"
363
+ :is-sub-menu="true"
364
+ @hide="hide"
365
+ &gt;&lt;/content-menu&gt;
294
366
  &lt;/teleport&gt;
295
367
  &lt;/div&gt;
296
368
  &lt;/template&gt;
297
369
  &nbsp;
298
370
  &lt;script lang="ts"&gt;
299
- import { defineComponent, nextTick, onMounted, PropType, ref } from 'vue';
371
+ import { defineComponent, nextTick, onMounted, onUnmounted, PropType, ref } from 'vue';
300
372
  &nbsp;
301
373
  import { MenuButton, MenuItem } from '@editor/type';
302
374
  &nbsp;
@@ -310,9 +382,16 @@ export default defineComponent({
310
382
  type: Array as PropType&lt;MenuItem[]&gt;,
311
383
  default: <span class="fstat-no" title="function not covered" >() =&gt; <span class="cstat-no" title="statement not covered" >[</span>],</span>
312
384
  },
385
+ &nbsp;
386
+ isSubMenu: {
387
+ type: Boolean,
388
+ default: false,
389
+ },
313
390
  },
314
391
  &nbsp;
315
- setup() {
392
+ emits: ['hide', 'show'],
393
+ &nbsp;
394
+ setup(props, { emit }) {
316
395
  const menu = ref&lt;HTMLDivElement&gt;();
317
396
  const subMenu = ref&lt;any&gt;();
318
397
  const visible = ref(false);
@@ -323,20 +402,35 @@ export default defineComponent({
323
402
  });
324
403
  &nbsp;
325
404
  const hide = <span class="fstat-no" title="function not covered" >() =&gt; {</span>
405
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!visible.value) <span class="cstat-no" title="statement not covered" >return;</span></span>
406
+ &nbsp;
326
407
  <span class="cstat-no" title="statement not covered" > visible.</span>value = false;
408
+ <span class="cstat-no" title="statement not covered" > subMenu.</span>value?.hide();
409
+ &nbsp;
410
+ <span class="cstat-no" title="statement not covered" > emit(</span>'hide');
411
+ };
412
+ &nbsp;
413
+ const hideHandler = <span class="fstat-no" title="function not covered" >(e</span>: MouseEvent) =&gt; {
414
+ const target = <span class="cstat-no" title="statement not covered" >e.target as HTMLElement | undefined;</span>
415
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!visible.value || !target) {</span>
416
+ <span class="cstat-no" title="statement not covered" > return;</span>
417
+ }
418
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (menu.value?.contains(target) || subMenu.value?.$el?.contains(target)) {</span>
419
+ <span class="cstat-no" title="statement not covered" > return;</span>
420
+ }
421
+ <span class="cstat-no" title="statement not covered" > hide();</span>
327
422
  };
328
423
  &nbsp;
329
424
  onMounted(() =&gt; {
330
- globalThis.addEventListener(
331
- 'mousedown',
332
- <span class="fstat-no" title="function not covered" > (e</span>: MouseEvent) =&gt; {
333
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!visible.value || (e.target &amp;&amp; menu.value?.contains(e.target as HTMLElement))) {</span>
334
- <span class="cstat-no" title="statement not covered" > return;</span>
335
- }
336
- <span class="cstat-no" title="statement not covered" > hide();</span>
337
- },
338
- true,
339
- );
425
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (props.isSubMenu) <span class="cstat-no" title="statement not covered" >return;</span>
426
+ &nbsp;
427
+ globalThis.addEventListener('mousedown', hideHandler, true);
428
+ });
429
+ &nbsp;
430
+ onUnmounted(<span class="fstat-no" title="function not covered" >() =&gt; {</span>
431
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (props.isSubMenu) <span class="cstat-no" title="statement not covered" >return;</span></span>
432
+ &nbsp;
433
+ <span class="cstat-no" title="statement not covered" > globalThis.</span>removeEventListener('mousedown', hideHandler, true);
340
434
  });
341
435
  &nbsp;
342
436
  return {
@@ -349,21 +443,26 @@ export default defineComponent({
349
443
  hide,
350
444
  &nbsp;
351
445
  <span class="fstat-no" title="function not covered" > show(</span>e: MouseEvent) {
352
- <span class="cstat-no" title="statement not covered" > visible.</span>value = true;
446
+ // 加settimeout是以为,如果菜单中的按钮监听的是mouseup,那么菜单显示出来时鼠标如果正好在菜单上就会马上触发按钮的mouseup
447
+ <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" ></span>() =&gt; {</span>
448
+ <span class="cstat-no" title="statement not covered" > visible.</span>value = true;
353
449
  &nbsp;
354
- <span class="cstat-no" title="statement not covered" > nextTick(<span class="fstat-no" title="function not covered" >(</span>) =&gt; {</span>
355
- const menuHeight = <span class="cstat-no" title="statement not covered" >menu.value?.clientHeight || 0;</span>
450
+ <span class="cstat-no" title="statement not covered" > nextTick(<span class="fstat-no" title="function not covered" >(</span>) =&gt; {</span>
451
+ const menuHeight = <span class="cstat-no" title="statement not covered" >menu.value?.clientHeight || 0;</span>
356
452
  &nbsp;
357
- let top = <span class="cstat-no" title="statement not covered" >e.clientY;</span>
358
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (menuHeight + e.clientY &gt; document.body.clientHeight) {</span>
359
- <span class="cstat-no" title="statement not covered" > top </span>= document.body.clientHeight - menuHeight;
360
- }
453
+ let top = <span class="cstat-no" title="statement not covered" >e.clientY;</span>
454
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (menuHeight + e.clientY &gt; document.body.clientHeight) {</span>
455
+ <span class="cstat-no" title="statement not covered" > top </span>= document.body.clientHeight - menuHeight;
456
+ }
361
457
  &nbsp;
362
- <span class="cstat-no" title="statement not covered" > menuStyle.</span>value = {
363
- top: `${top}px`,
364
- left: `${e.clientX + 2}px`,
365
- };
366
- });
458
+ <span class="cstat-no" title="statement not covered" > menuStyle.</span>value = {
459
+ top: `${top}px`,
460
+ left: `${e.clientX}px`,
461
+ };
462
+ &nbsp;
463
+ <span class="cstat-no" title="statement not covered" > emit(</span>'show');
464
+ });
465
+ }, 300);
367
466
  },
368
467
  &nbsp;
369
468
  <span class="fstat-no" title="function not covered" > showSubMenu(</span>item: MenuItem) {
@@ -391,7 +490,7 @@ export default defineComponent({
391
490
  <div class='footer quiet pad2 space-top1 center small'>
392
491
  Code coverage generated by
393
492
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
394
- at Tue May 31 2022 20:04:27 GMT+0800 (China Standard Time)
493
+ at Mon Jun 06 2022 15:27:48 GMT+0800 (China Standard Time)
395
494
  </div>
396
495
  <script src="../../prettify.js"></script>
397
496
  <script>
@@ -157,7 +157,7 @@ export default defineComponent({
157
157
  <div class='footer quiet pad2 space-top1 center small'>
158
158
  Code coverage generated by
159
159
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
160
- at Tue May 31 2022 20:04:27 GMT+0800 (China Standard Time)
160
+ at Mon Jun 06 2022 15:27:48 GMT+0800 (China Standard Time)
161
161
  </div>
162
162
  <script src="../../prettify.js"></script>
163
163
  <script>
@@ -268,7 +268,7 @@ export default defineComponent({
268
268
  <div class='footer quiet pad2 space-top1 center small'>
269
269
  Code coverage generated by
270
270
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
271
- at Tue May 31 2022 20:04:27 GMT+0800 (China Standard Time)
271
+ at Mon Jun 06 2022 15:27:48 GMT+0800 (China Standard Time)
272
272
  </div>
273
273
  <script src="../../prettify.js"></script>
274
274
  <script>
@@ -757,7 +757,7 @@ export default defineComponent({
757
757
  <div class='footer quiet pad2 space-top1 center small'>
758
758
  Code coverage generated by
759
759
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
760
- at Tue May 31 2022 20:04:27 GMT+0800 (China Standard Time)
760
+ at Mon Jun 06 2022 15:27:48 GMT+0800 (China Standard Time)
761
761
  </div>
762
762
  <script src="../../prettify.js"></script>
763
763
  <script>