@tmagic/editor 1.0.0-beta.13 → 1.0.0-beta.16

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 (101) hide show
  1. package/coverage/clover.xml +703 -601
  2. package/coverage/coverage-final.json +35 -33
  3. package/coverage/lcov-report/index.html +56 -56
  4. package/coverage/lcov-report/src/Editor.vue.html +1 -1
  5. package/coverage/lcov-report/{layouts/sidebar/LayerMenu.vue.html → src/components/ContentMenu.vue.html} +137 -95
  6. package/coverage/lcov-report/src/components/Icon.vue.html +5 -5
  7. package/coverage/lcov-report/src/components/ScrollViewer.vue.html +1 -1
  8. package/coverage/lcov-report/src/components/ToolButton.vue.html +180 -63
  9. package/coverage/lcov-report/src/components/index.html +34 -19
  10. package/coverage/lcov-report/src/index.html +1 -1
  11. package/coverage/lcov-report/src/layouts/AddPageBox.vue.html +1 -1
  12. package/coverage/lcov-report/src/layouts/Framework.vue.html +13 -13
  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 +15 -15
  17. package/coverage/lcov-report/src/layouts/sidebar/ComponentListPanel.vue.html +78 -12
  18. package/coverage/lcov-report/src/layouts/sidebar/LayerMenu.vue.html +149 -92
  19. package/coverage/lcov-report/src/layouts/sidebar/LayerPanel.vue.html +43 -121
  20. package/coverage/lcov-report/src/layouts/sidebar/Sidebar.vue.html +23 -140
  21. package/coverage/lcov-report/{utils/undo-redo.ts.html → src/layouts/sidebar/TabPane.vue.html} +94 -118
  22. package/coverage/lcov-report/src/layouts/sidebar/index.html +64 -49
  23. package/coverage/lcov-report/src/layouts/workspace/PageBar.vue.html +99 -12
  24. package/coverage/lcov-report/src/layouts/workspace/Stage.vue.html +86 -95
  25. package/coverage/lcov-report/src/layouts/workspace/ViewerMenu.vue.html +208 -97
  26. package/coverage/lcov-report/src/layouts/workspace/Workspace.vue.html +3 -3
  27. package/coverage/lcov-report/src/layouts/workspace/index.html +35 -35
  28. package/coverage/lcov-report/src/services/BaseService.ts.html +11 -11
  29. package/coverage/lcov-report/src/services/componentList.ts.html +1 -1
  30. package/coverage/lcov-report/src/services/editor.ts.html +103 -10
  31. package/coverage/lcov-report/src/services/events.ts.html +1 -1
  32. package/coverage/lcov-report/src/services/history.ts.html +29 -8
  33. package/coverage/lcov-report/src/services/index.html +25 -25
  34. package/coverage/lcov-report/src/services/props.ts.html +4 -7
  35. package/coverage/lcov-report/src/services/ui.ts.html +1 -1
  36. package/coverage/lcov-report/src/type.ts.html +8 -14
  37. package/coverage/lcov-report/src/utils/compose.ts.html +4 -4
  38. package/coverage/lcov-report/src/utils/config.ts.html +1 -1
  39. package/coverage/lcov-report/src/utils/editor.ts.html +2 -2
  40. package/coverage/lcov-report/src/utils/index.html +1 -1
  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 +59 -2
  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 +1679 -1402
  47. package/dist/style.css +47 -20
  48. package/dist/tmagic-editor.es.js +732 -485
  49. package/dist/tmagic-editor.es.js.map +1 -1
  50. package/dist/tmagic-editor.umd.js +733 -485
  51. package/dist/tmagic-editor.umd.js.map +1 -1
  52. package/dist/types/src/Editor.vue.d.ts +1 -1
  53. package/dist/types/src/components/ToolButton.vue.d.ts +12 -1
  54. package/dist/types/src/fields/UISelect.vue.d.ts +4 -1
  55. package/dist/types/src/index.d.ts +1 -0
  56. package/dist/types/src/layouts/CodeEditor.vue.d.ts +13 -4
  57. package/dist/types/src/layouts/sidebar/ComponentListPanel.vue.d.ts +1 -0
  58. package/dist/types/src/layouts/sidebar/Sidebar.vue.d.ts +2 -3
  59. package/dist/types/src/layouts/sidebar/TabPane.vue.d.ts +14 -0
  60. package/dist/types/src/layouts/workspace/PageBar.vue.d.ts +2 -0
  61. package/dist/types/src/services/history.d.ts +1 -0
  62. package/dist/types/src/services/props.d.ts +2 -2
  63. package/dist/types/src/type.d.ts +6 -8
  64. package/dist/types/src/utils/polyfills.d.ts +0 -0
  65. package/package.json +15 -10
  66. package/src/components/ContentMenu.vue +107 -0
  67. package/src/components/ToolButton.vue +66 -27
  68. package/src/fields/UISelect.vue +14 -6
  69. package/src/index.ts +2 -0
  70. package/src/layouts/CodeEditor.vue +20 -10
  71. package/src/layouts/Framework.vue +6 -6
  72. package/src/layouts/sidebar/ComponentListPanel.vue +23 -1
  73. package/src/layouts/sidebar/LayerMenu.vue +91 -72
  74. package/src/layouts/sidebar/LayerPanel.vue +23 -49
  75. package/src/layouts/sidebar/Sidebar.vue +13 -52
  76. package/src/layouts/sidebar/TabPane.vue +68 -0
  77. package/src/layouts/workspace/PageBar.vue +35 -6
  78. package/src/layouts/workspace/Stage.vue +41 -44
  79. package/src/layouts/workspace/ViewerMenu.vue +104 -67
  80. package/src/layouts/workspace/Workspace.vue +2 -2
  81. package/src/services/editor.ts +33 -2
  82. package/src/services/history.ts +7 -0
  83. package/src/services/props.ts +2 -3
  84. package/src/theme/common/var.scss +1 -0
  85. package/src/theme/component-list-panel.scss +2 -0
  86. package/src/theme/content-menu.scss +33 -26
  87. package/src/theme/layer-panel.scss +1 -1
  88. package/src/theme/nav-menu.scss +6 -2
  89. package/src/theme/page-bar.scss +22 -1
  90. package/src/theme/props-panel.scss +4 -0
  91. package/src/type.ts +6 -8
  92. package/src/utils/editor.ts +1 -1
  93. package/src/utils/polyfills.ts +22 -0
  94. package/src/utils/props.ts +19 -0
  95. package/coverage/lcov-report/Icon.vue.html +0 -172
  96. package/coverage/lcov-report/ToolButton.vue.html +0 -655
  97. package/coverage/lcov-report/layouts/sidebar/index.html +0 -116
  98. package/coverage/lcov-report/utils/index.html +0 -116
  99. package/dist/types/src/layouts/sidebar/LayerPanel.vue.d.ts +0 -980
  100. package/dist/types/src/layouts/workspace/Stage.vue.d.ts +0 -188
  101. package/dist/types/src/layouts/workspace/ViewerMenu.vue.d.ts +0 -18
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">62.31% </span>
26
+ <span class="strong">61.02% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>921/1478</span>
28
+ <span class='fraction'>969/1588</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">31.19% </span>
33
+ <span class="strong">28.25% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>335/1074</span>
35
+ <span class='fraction'>332/1175</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">59.05% </span>
40
+ <span class="strong">56.66% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>212/359</span>
42
+ <span class='fraction'>221/390</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">64.71% </span>
47
+ <span class="strong">63.43% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>853/1318</span>
49
+ <span class='fraction'>897/1414</span>
50
50
  </div>
51
51
 
52
52
 
@@ -95,77 +95,77 @@
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="79.26" class="pic medium">
99
- <div class="chart"><div class="cover-fill" style="width: 79%"></div><div class="cover-empty" style="width: 21%"></div></div>
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>
100
100
  </td>
101
- <td data-value="79.26" class="pct medium">79.26%</td>
102
- <td data-value="82" class="abs medium">65/82</td>
103
- <td data-value="48.67" class="pct low">48.67%</td>
104
- <td data-value="113" class="abs low">55/113</td>
105
- <td data-value="74.07" class="pct medium">74.07%</td>
106
- <td data-value="27" class="abs medium">20/27</td>
107
- <td data-value="88.73" class="pct high">88.73%</td>
108
- <td data-value="71" class="abs high">63/71</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.97" class="pct low">40.97%</td>
104
+ <td data-value="144" class="abs low">59/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>
109
109
  </tr>
110
110
 
111
111
  <tr>
112
112
  <td class="file medium" data-value="src/layouts"><a href="src/layouts/index.html">src/layouts</a></td>
113
- <td data-value="63.21" class="pic medium">
114
- <div class="chart"><div class="cover-fill" style="width: 63%"></div><div class="cover-empty" style="width: 37%"></div></div>
113
+ <td data-value="62.92" class="pic medium">
114
+ <div class="chart"><div class="cover-fill" style="width: 62%"></div><div class="cover-empty" style="width: 38%"></div></div>
115
115
  </td>
116
- <td data-value="63.21" class="pct medium">63.21%</td>
117
- <td data-value="87" class="abs medium">55/87</td>
118
- <td data-value="36.61" class="pct low">36.61%</td>
119
- <td data-value="71" class="abs low">26/71</td>
120
- <td data-value="66.66" class="pct medium">66.66%</td>
121
- <td data-value="21" class="abs medium">14/21</td>
116
+ <td data-value="62.92" class="pct medium">62.92%</td>
117
+ <td data-value="89" class="abs medium">56/89</td>
118
+ <td data-value="30.43" class="pct low">30.43%</td>
119
+ <td data-value="69" class="abs low">21/69</td>
120
+ <td data-value="61.9" class="pct medium">61.9%</td>
121
+ <td data-value="21" class="abs medium">13/21</td>
122
122
  <td data-value="67.1" class="pct medium">67.1%</td>
123
123
  <td data-value="76" class="abs medium">51/76</td>
124
124
  </tr>
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="47.4" class="pic low">
129
- <div class="chart"><div class="cover-fill" style="width: 47%"></div><div class="cover-empty" style="width: 53%"></div></div>
128
+ <td data-value="48.33" class="pic low">
129
+ <div class="chart"><div class="cover-fill" style="width: 48%"></div><div class="cover-empty" style="width: 52%"></div></div>
130
130
  </td>
131
- <td data-value="47.4" class="pct low">47.4%</td>
132
- <td data-value="154" class="abs low">73/154</td>
133
- <td data-value="23.62" class="pct low">23.62%</td>
134
- <td data-value="182" class="abs low">43/182</td>
135
- <td data-value="52.27" class="pct medium">52.27%</td>
136
- <td data-value="44" class="abs medium">23/44</td>
137
- <td data-value="49.63" class="pct low">49.63%</td>
138
- <td data-value="137" class="abs low">68/137</td>
131
+ <td data-value="48.33" class="pct low">48.33%</td>
132
+ <td data-value="180" class="abs low">87/180</td>
133
+ <td data-value="17.09" class="pct low">17.09%</td>
134
+ <td data-value="234" class="abs low">40/234</td>
135
+ <td data-value="43.63" class="pct low">43.63%</td>
136
+ <td data-value="55" class="abs low">24/55</td>
137
+ <td data-value="51.28" class="pct medium">51.28%</td>
138
+ <td data-value="156" class="abs medium">80/156</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="44.15" class="pic low">
143
+ <td data-value="44.32" class="pic low">
144
144
  <div class="chart"><div class="cover-fill" style="width: 44%"></div><div class="cover-empty" style="width: 56%"></div></div>
145
145
  </td>
146
- <td data-value="44.15" class="pct low">44.15%</td>
147
- <td data-value="265" class="abs low">117/265</td>
148
- <td data-value="16.99" class="pct low">16.99%</td>
149
- <td data-value="406" class="abs low">69/406</td>
150
- <td data-value="32.94" class="pct low">32.94%</td>
151
- <td data-value="85" class="abs low">28/85</td>
152
- <td data-value="45.53" class="pct low">45.53%</td>
153
- <td data-value="235" class="abs low">107/235</td>
146
+ <td data-value="44.32" class="pct low">44.32%</td>
147
+ <td data-value="282" class="abs low">125/282</td>
148
+ <td data-value="16.11" class="pct low">16.11%</td>
149
+ <td data-value="422" class="abs low">68/422</td>
150
+ <td data-value="36.55" class="pct low">36.55%</td>
151
+ <td data-value="93" class="abs low">34/93</td>
152
+ <td data-value="45.6" class="pct low">45.6%</td>
153
+ <td data-value="250" class="abs low">114/250</td>
154
154
  </tr>
155
155
 
156
156
  <tr>
157
157
  <td class="file medium" data-value="src/services"><a href="src/services/index.html">src/services</a></td>
158
- <td data-value="72.52" class="pic medium">
159
- <div class="chart"><div class="cover-fill" style="width: 72%"></div><div class="cover-empty" style="width: 28%"></div></div>
158
+ <td data-value="71.14" class="pic medium">
159
+ <div class="chart"><div class="cover-fill" style="width: 71%"></div><div class="cover-empty" style="width: 29%"></div></div>
160
160
  </td>
161
- <td data-value="72.52" class="pct medium">72.52%</td>
162
- <td data-value="484" class="abs medium">351/484</td>
163
- <td data-value="46.96" class="pct low">46.96%</td>
164
- <td data-value="181" class="abs low">85/181</td>
165
- <td data-value="74.44" class="pct medium">74.44%</td>
166
- <td data-value="90" class="abs medium">67/90</td>
167
- <td data-value="76.47" class="pct medium">76.47%</td>
168
- <td data-value="442" class="abs medium">338/442</td>
161
+ <td data-value="71.14" class="pct medium">71.14%</td>
162
+ <td data-value="506" class="abs medium">360/506</td>
163
+ <td data-value="47.02" class="pct low">47.02%</td>
164
+ <td data-value="185" class="abs low">87/185</td>
165
+ <td data-value="73.62" class="pct medium">73.62%</td>
166
+ <td data-value="91" class="abs medium">67/91</td>
167
+ <td data-value="74.78" class="pct medium">74.78%</td>
168
+ <td data-value="464" class="abs medium">347/464</td>
169
169
  </tr>
170
170
 
171
171
  <tr>
@@ -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 Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
194
+ at Fri May 13 2022 20:42:37 GMT+0800 (China Standard Time)
195
195
  </div>
196
196
  <script src="prettify.js"></script>
197
197
  <script>
@@ -772,7 +772,7 @@ export default defineComponent({
772
772
  <div class='footer quiet pad2 space-top1 center small'>
773
773
  Code coverage generated by
774
774
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
775
- at Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
775
+ at Fri May 13 2022 20:42:37 GMT+0800 (China Standard Time)
776
776
  </div>
777
777
  <script src="../prettify.js"></script>
778
778
  <script>
@@ -3,7 +3,7 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for layouts/sidebar/LayerMenu.vue</title>
6
+ <title>Code coverage report for src/components/ContentMenu.vue</title>
7
7
  <meta charset="utf-8" />
8
8
  <link rel="stylesheet" href="../../prettify.css" />
9
9
  <link rel="stylesheet" href="../../base.css" />
@@ -19,34 +19,34 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">layouts/sidebar</a> LayerMenu.vue</h1>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> ContentMenu.vue</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">91.66% </span>
26
+ <span class="strong">40% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>11/12</span>
28
+ <span class='fraction'>12/30</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">69.23% </span>
33
+ <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>18/26</span>
35
+ <span class='fraction'>0/23</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">85.71% </span>
40
+ <span class="strong">25% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/7</span>
42
+ <span class='fraction'>2/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90.9% </span>
47
+ <span class="strong">40% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/11</span>
49
+ <span class='fraction'>12/30</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line high'></div>
64
+ <div class='status-line low'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -156,12 +156,21 @@
156
156
  <a name='L91'></a><a href='#L91'>91</a>
157
157
  <a name='L92'></a><a href='#L92'>92</a>
158
158
  <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
160
- <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-neutral">&nbsp;</span>
162
- <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-neutral">&nbsp;</span>
164
- <span class="cline-any cline-neutral">&nbsp;</span>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
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>
165
174
  <span class="cline-any cline-neutral">&nbsp;</span>
166
175
  <span class="cline-any cline-neutral">&nbsp;</span>
167
176
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -180,54 +189,70 @@
180
189
  <span class="cline-any cline-neutral">&nbsp;</span>
181
190
  <span class="cline-any cline-neutral">&nbsp;</span>
182
191
  <span class="cline-any cline-neutral">&nbsp;</span>
192
+ <span class="cline-any cline-yes">2x</span>
183
193
  <span class="cline-any cline-neutral">&nbsp;</span>
184
194
  <span class="cline-any cline-neutral">&nbsp;</span>
185
195
  <span class="cline-any cline-neutral">&nbsp;</span>
196
+ <span class="cline-any cline-yes">2x</span>
186
197
  <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-yes">2x</span>
187
199
  <span class="cline-any cline-neutral">&nbsp;</span>
188
200
  <span class="cline-any cline-neutral">&nbsp;</span>
189
201
  <span class="cline-any cline-neutral">&nbsp;</span>
190
202
  <span class="cline-any cline-neutral">&nbsp;</span>
191
203
  <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-no">&nbsp;</span>
192
205
  <span class="cline-any cline-neutral">&nbsp;</span>
193
206
  <span class="cline-any cline-neutral">&nbsp;</span>
194
207
  <span class="cline-any cline-neutral">&nbsp;</span>
195
208
  <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-yes">6x</span>
210
+ <span class="cline-any cline-yes">6x</span>
211
+ <span class="cline-any cline-yes">6x</span>
212
+ <span class="cline-any cline-yes">6x</span>
213
+ <span class="cline-any cline-yes">6x</span>
196
214
  <span class="cline-any cline-neutral">&nbsp;</span>
197
215
  <span class="cline-any cline-neutral">&nbsp;</span>
198
216
  <span class="cline-any cline-neutral">&nbsp;</span>
199
217
  <span class="cline-any cline-neutral">&nbsp;</span>
218
+ <span class="cline-any cline-yes">6x</span>
219
+ <span class="cline-any cline-no">&nbsp;</span>
200
220
  <span class="cline-any cline-neutral">&nbsp;</span>
201
221
  <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-yes">6x</span>
223
+ <span class="cline-any cline-yes">6x</span>
202
224
  <span class="cline-any cline-neutral">&nbsp;</span>
203
225
  <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-no">&nbsp;</span>
227
+ <span class="cline-any cline-no">&nbsp;</span>
204
228
  <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-no">&nbsp;</span>
205
230
  <span class="cline-any cline-neutral">&nbsp;</span>
206
231
  <span class="cline-any cline-neutral">&nbsp;</span>
207
232
  <span class="cline-any cline-neutral">&nbsp;</span>
208
- <span class="cline-any cline-yes">1x</span>
209
233
  <span class="cline-any cline-neutral">&nbsp;</span>
210
234
  <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-yes">6x</span>
211
236
  <span class="cline-any cline-neutral">&nbsp;</span>
212
237
  <span class="cline-any cline-neutral">&nbsp;</span>
213
238
  <span class="cline-any cline-neutral">&nbsp;</span>
214
- <span class="cline-any cline-yes">1x</span>
215
239
  <span class="cline-any cline-neutral">&nbsp;</span>
216
240
  <span class="cline-any cline-neutral">&nbsp;</span>
217
241
  <span class="cline-any cline-neutral">&nbsp;</span>
218
- <span class="cline-any cline-yes">4x</span>
219
- <span class="cline-any cline-yes">4x</span>
220
- <span class="cline-any cline-yes">4x</span>
221
242
  <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">4x</span>
223
243
  <span class="cline-any cline-neutral">&nbsp;</span>
224
244
  <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-no">&nbsp;</span>
225
246
  <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-no">&nbsp;</span>
248
+ <span class="cline-any cline-no">&nbsp;</span>
226
249
  <span class="cline-any cline-neutral">&nbsp;</span>
227
250
  <span class="cline-any cline-no">&nbsp;</span>
251
+ <span class="cline-any cline-no">&nbsp;</span>
252
+ <span class="cline-any cline-no">&nbsp;</span>
228
253
  <span class="cline-any cline-neutral">&nbsp;</span>
229
254
  <span class="cline-any cline-neutral">&nbsp;</span>
230
- <span class="cline-any cline-yes">1x</span>
255
+ <span class="cline-any cline-no">&nbsp;</span>
231
256
  <span class="cline-any cline-neutral">&nbsp;</span>
232
257
  <span class="cline-any cline-neutral">&nbsp;</span>
233
258
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -235,108 +260,125 @@
235
260
  <span class="cline-any cline-neutral">&nbsp;</span>
236
261
  <span class="cline-any cline-neutral">&nbsp;</span>
237
262
  <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-yes">1x</span>
263
+ <span class="cline-any cline-no">&nbsp;</span>
264
+ <span class="cline-any cline-no">&nbsp;</span>
265
+ <span class="cline-any cline-no">&nbsp;</span>
239
266
  <span class="cline-any cline-neutral">&nbsp;</span>
240
267
  <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-no">&nbsp;</span>
269
+ <span class="cline-any cline-no">&nbsp;</span>
270
+ <span class="cline-any cline-no">&nbsp;</span>
241
271
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-yes">1x</span>
243
272
  <span class="cline-any cline-neutral">&nbsp;</span>
244
273
  <span class="cline-any cline-neutral">&nbsp;</span>
245
274
  <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-yes">1x</span>
247
275
  <span class="cline-any cline-neutral">&nbsp;</span>
248
276
  <span class="cline-any cline-neutral">&nbsp;</span>
249
277
  <span class="cline-any cline-neutral">&nbsp;</span>
250
278
  <span class="cline-any cline-neutral">&nbsp;</span>
251
279
  <span class="cline-any cline-neutral">&nbsp;</span>
252
280
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">&lt;template&gt;
253
- &lt;div v-if="node" class="magic-editor-content-menu"&gt;
254
- &lt;div
255
- v-if="node.items"
256
- class="magic-editor-content-menu-item"
257
- @mouseenter="setSubVisitable(true)"
258
- @mouseleave="setSubVisitable(false)"
259
- &gt;
260
- 新增
261
- &lt;/div&gt;
262
- &lt;div v-if="node.type !== 'app'" class="magic-editor-content-menu-item" @click="() =&gt; copy(node)"&gt;复制&lt;/div&gt;
263
- &lt;div
264
- v-if="node.type !== 'app' &amp;&amp; node.type !== 'page'"
265
- class="magic-editor-content-menu-item"
266
- @click="() =&gt; remove()"
267
- &gt;
268
- 删除
269
- &lt;/div&gt;
270
- &lt;div class="subMenu" v-show="subVisible" @mouseenter="setSubVisitable(true)" @mouseleave="setSubVisitable(false)"&gt;
271
- &lt;el-scrollbar&gt;
272
- &lt;template v-if="node.type === 'tabs'"&gt;
273
- &lt;div
274
- class="magic-editor-content-menu-item"
275
- @click="
276
- () =&gt;
277
- append({
278
- type: 'tab-pane',
279
- })
280
- "
281
- &gt;
282
- 标签
283
- &lt;/div&gt;
284
- &lt;/template&gt;
285
- &lt;template v-else-if="node.items"&gt;
286
- &lt;div v-for="list in componentGroupList" :key="list.title"&gt;
287
- &lt;template v-for="item in list.items"&gt;
288
- &lt;div class="magic-editor-content-menu-item" v-if="item" :key="item.type" @click="() =&gt; append(item)"&gt;
289
- {{ item.text }}
290
- &lt;/div&gt;
291
- &lt;/template&gt;
292
- &lt;div class="separation"&gt;&lt;/div&gt;
293
- &lt;/div&gt;
294
- &lt;/template&gt;
295
- &lt;/el-scrollbar&gt;
281
+ &lt;div v-if="menuData.length" v-show="visible" class="magic-editor-content-menu" ref="menu" :style="menuStyle"&gt;
282
+ &lt;div&gt;
283
+ &lt;tool-button
284
+ v-for="(item, index) in menuData"
285
+ event-type="mouseup"
286
+ :data="item"
287
+ :key="index"
288
+ @mouseup="hide"
289
+ @mouseenter="showSubMenu(item)"
290
+ &gt;&lt;/tool-button&gt;
296
291
  &lt;/div&gt;
292
+ &lt;teleport to="body"&gt;
293
+ &lt;content-menu class="sub-menu" ref="subMenu" :menu-data="subMenuData"&gt;&lt;/content-menu&gt;
294
+ &lt;/teleport&gt;
297
295
  &lt;/div&gt;
298
296
  &lt;/template&gt;
299
297
  &nbsp;
300
298
  &lt;script lang="ts"&gt;
301
- import { computed, defineComponent, inject, ref } from 'vue';
299
+ import { defineComponent, nextTick, onMounted, PropType, ref } from 'vue';
302
300
  &nbsp;
303
- import type { MNode } from '@tmagic/schema';
301
+ import { MenuButton, MenuItem } from '@editor/type';
304
302
  &nbsp;
305
- import type { AddMNode, Services } from '@editor/type';
303
+ import ToolButton from './ToolButton.vue';
306
304
  &nbsp;
307
305
  export default defineComponent({
308
- name: 'magic-editor-content-menu',
306
+ components: { ToolButton },
307
+ &nbsp;
308
+ props: {
309
+ menuData: {
310
+ type: Array as PropType&lt;MenuItem[]&gt;,
311
+ default: <span class="fstat-no" title="function not covered" >() =&gt; <span class="cstat-no" title="statement not covered" >[</span>],</span>
312
+ },
313
+ },
309
314
  &nbsp;
310
315
  setup() {
311
- const services = inject&lt;Services&gt;('services');
312
- const subVisible = ref(false);
313
- const node = computed(() =&gt; services<span class="branch-0 cbranch-no" title="branch not covered" >?.e</span>ditorService.get('node'));
316
+ const menu = ref&lt;HTMLDivElement&gt;();
317
+ const subMenu = ref&lt;any&gt;();
318
+ const visible = ref(false);
319
+ const subMenuData = ref&lt;MenuItem[]&gt;([]);
320
+ const menuStyle = ref({
321
+ left: '0',
322
+ top: '0',
323
+ });
324
+ &nbsp;
325
+ const hide = <span class="fstat-no" title="function not covered" >() =&gt; {</span>
326
+ <span class="cstat-no" title="statement not covered" > visible.</span>value = false;
327
+ };
328
+ &nbsp;
329
+ 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
+ );
340
+ });
314
341
  &nbsp;
315
342
  return {
316
- subVisible,
343
+ menu,
344
+ subMenu,
345
+ visible,
346
+ menuStyle,
347
+ subMenuData,
317
348
  &nbsp;
318
- node,
349
+ hide,
319
350
  &nbsp;
320
- componentGroupList: computed(<span class="fstat-no" title="function not covered" >() =&gt; <span class="cstat-no" title="statement not covered" >s</span>ervices?</span>.componentListService.getList()),
351
+ <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;
321
353
  &nbsp;
322
- append(config: AddMNode) {
323
- services<span class="branch-0 cbranch-no" title="branch not covered" >?.e</span>ditorService.add({
324
- name: config.text,
325
- type: config.type,
326
- ...(config.data || {}),
327
- });
328
- },
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>
329
356
  &nbsp;
330
- remove() {
331
- node.value &amp;&amp; services<span class="branch-0 cbranch-no" title="branch not covered" >?.e</span>ditorService.remove(node.value);
332
- },
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
+ }
333
361
  &nbsp;
334
- copy(node?: MNode) {
335
- node &amp;&amp; services<span class="branch-0 cbranch-no" title="branch not covered" >?.e</span>ditorService.copy(node);
362
+ <span class="cstat-no" title="statement not covered" > menuStyle.</span>value = {
363
+ top: `${top}px`,
364
+ left: `${e.clientX}px`,
365
+ };
366
+ });
336
367
  },
337
368
  &nbsp;
338
- setSubVisitable(v: boolean) {
339
- subVisible.value = v;
369
+ <span class="fstat-no" title="function not covered" > showSubMenu(</span>item: MenuItem) {
370
+ const menuItem = <span class="cstat-no" title="statement not covered" >item as MenuButton;</span>
371
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof item !== 'object' || !menuItem.items?.length) {</span>
372
+ <span class="cstat-no" title="statement not covered" > return;</span>
373
+ }
374
+ &nbsp;
375
+ <span class="cstat-no" title="statement not covered" > subMenuData.</span>value = menuItem.items;
376
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (menu.value) {</span>
377
+ <span class="cstat-no" title="statement not covered" > subMenu.</span>value.show({
378
+ clientX: menu.value.offsetLeft + menu.value.clientWidth,
379
+ clientY: menu.value.offsetTop,
380
+ });
381
+ }
340
382
  },
341
383
  };
342
384
  },
@@ -349,7 +391,7 @@ export default defineComponent({
349
391
  <div class='footer quiet pad2 space-top1 center small'>
350
392
  Code coverage generated by
351
393
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
352
- at Thu Apr 14 2022 14:28:05 GMT+0800 (China Standard Time)
394
+ at Fri May 13 2022 20:42:37 GMT+0800 (China Standard Time)
353
395
  </div>
354
396
  <script src="../../prettify.js"></script>
355
397
  <script>
@@ -100,10 +100,10 @@
100
100
  <span class="cline-any cline-neutral">&nbsp;</span>
101
101
  <span class="cline-any cline-neutral">&nbsp;</span>
102
102
  <span class="cline-any cline-neutral">&nbsp;</span>
103
- <span class="cline-any cline-yes">2x</span>
104
- <span class="cline-any cline-yes">2x</span>
103
+ <span class="cline-any cline-yes">4x</span>
104
+ <span class="cline-any cline-yes">4x</span>
105
105
  <span class="cline-any cline-neutral">&nbsp;</span>
106
- <span class="cline-any cline-yes">2x</span>
106
+ <span class="cline-any cline-yes">4x</span>
107
107
  <span class="cline-any cline-neutral">&nbsp;</span>
108
108
  <span class="cline-any cline-neutral">&nbsp;</span>
109
109
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -115,7 +115,7 @@
115
115
  <span class="cline-any cline-neutral">&nbsp;</span>
116
116
  <span class="cline-any cline-neutral">&nbsp;</span>
117
117
  <span class="cline-any cline-neutral">&nbsp;</span>
118
- <span class="cline-any cline-yes">6x</span>
118
+ <span class="cline-any cline-yes">22x</span>
119
119
  <span class="cline-any cline-neutral">&nbsp;</span>
120
120
  <span class="cline-any cline-neutral">&nbsp;</span>
121
121
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -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 Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
160
+ at Fri May 13 2022 20:42:37 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 Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
271
+ at Fri May 13 2022 20:42:37 GMT+0800 (China Standard Time)
272
272
  </div>
273
273
  <script src="../../prettify.js"></script>
274
274
  <script>