@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
@@ -253,7 +253,7 @@ export default defineComponent({
253
253
  <div class='footer quiet pad2 space-top1 center small'>
254
254
  Code coverage generated by
255
255
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
256
- at Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
256
+ at Fri May 13 2022 20:42:37 GMT+0800 (China Standard Time)
257
257
  </div>
258
258
  <script src="../../prettify.js"></script>
259
259
  <script>
@@ -23,23 +23,23 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">63.21% </span>
26
+ <span class="strong">62.92% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>55/87</span>
28
+ <span class='fraction'>56/89</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">36.61% </span>
33
+ <span class="strong">30.43% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>26/71</span>
35
+ <span class='fraction'>21/69</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">66.66% </span>
40
+ <span class="strong">61.9% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>14/21</span>
42
+ <span class='fraction'>13/21</span>
43
43
  </div>
44
44
 
45
45
 
@@ -95,15 +95,15 @@
95
95
 
96
96
  <tr>
97
97
  <td class="file medium" data-value="Framework.vue"><a href="Framework.vue.html">Framework.vue</a></td>
98
- <td data-value="78.57" class="pic medium">
99
- <div class="chart"><div class="cover-fill" style="width: 78%"></div><div class="cover-empty" style="width: 22%"></div></div>
98
+ <td data-value="75" class="pic medium">
99
+ <div class="chart"><div class="cover-fill" style="width: 75%"></div><div class="cover-empty" style="width: 25%"></div></div>
100
100
  </td>
101
- <td data-value="78.57" class="pct medium">78.57%</td>
102
- <td data-value="14" class="abs medium">11/14</td>
103
- <td data-value="61.53" class="pct medium">61.53%</td>
104
- <td data-value="26" class="abs medium">16/26</td>
105
- <td data-value="83.33" class="pct high">83.33%</td>
106
- <td data-value="6" class="abs high">5/6</td>
101
+ <td data-value="75" class="pct medium">75%</td>
102
+ <td data-value="16" class="abs medium">12/16</td>
103
+ <td data-value="45.83" class="pct low">45.83%</td>
104
+ <td data-value="24" class="abs low">11/24</td>
105
+ <td data-value="66.66" class="pct medium">66.66%</td>
106
+ <td data-value="6" class="abs medium">4/6</td>
107
107
  <td data-value="76.92" class="pct medium">76.92%</td>
108
108
  <td data-value="13" class="abs medium">10/13</td>
109
109
  </tr>
@@ -161,7 +161,7 @@
161
161
  <div class='footer quiet pad2 space-top1 center small'>
162
162
  Code coverage generated by
163
163
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
164
- at Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
164
+ at Fri May 13 2022 20:42:37 GMT+0800 (China Standard Time)
165
165
  </div>
166
166
  <script src="../../prettify.js"></script>
167
167
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">55.55% </span>
26
+ <span class="strong">42.3% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/18</span>
28
+ <span class='fraction'>11/26</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">42.85% </span>
33
+ <span class="strong">35.29% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>6/14</span>
35
+ <span class='fraction'>6/17</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">42.85% </span>
40
+ <span class="strong">37.5% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/7</span>
42
+ <span class='fraction'>3/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">71.42% </span>
47
+ <span class="strong">57.89% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/14</span>
49
+ <span class='fraction'>11/19</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 medium'></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>
@@ -132,7 +132,36 @@
132
132
  <a name='L67'></a><a href='#L67'>67</a>
133
133
  <a name='L68'></a><a href='#L68'>68</a>
134
134
  <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
158
+ <span class="cline-any cline-neutral">&nbsp;</span>
159
+ <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>
136
165
  <span class="cline-any cline-neutral">&nbsp;</span>
137
166
  <span class="cline-any cline-neutral">&nbsp;</span>
138
167
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -161,6 +190,7 @@
161
190
  <span class="cline-any cline-neutral">&nbsp;</span>
162
191
  <span class="cline-any cline-neutral">&nbsp;</span>
163
192
  <span class="cline-any cline-yes">1x</span>
193
+ <span class="cline-any cline-yes">1x</span>
164
194
  <span class="cline-any cline-neutral">&nbsp;</span>
165
195
  <span class="cline-any cline-yes">1x</span>
166
196
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -198,6 +228,20 @@
198
228
  <span class="cline-any cline-neutral">&nbsp;</span>
199
229
  <span class="cline-any cline-neutral">&nbsp;</span>
200
230
  <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-no">&nbsp;</span>
232
+ <span class="cline-any cline-no">&nbsp;</span>
233
+ <span class="cline-any cline-no">&nbsp;</span>
234
+ <span class="cline-any cline-no">&nbsp;</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
+ <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
201
245
  <span class="cline-any cline-neutral">&nbsp;</span>
202
246
  <span class="cline-any cline-neutral">&nbsp;</span>
203
247
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -215,7 +259,14 @@
215
259
  &lt;template v-for="(group, index) in list"&gt;
216
260
  &lt;el-collapse-item v-if="group.items &amp;&amp; group.items.length" :key="index" :name="index"&gt;
217
261
  &lt;template #title&gt;&lt;i class="el-icon-s-grid"&gt;&lt;/i&gt;{{ group.title }}&lt;/template&gt;
218
- &lt;div class="component-item" v-for="item in group.items" :key="item.type" @click="appendComponent(item)"&gt;
262
+ &lt;div
263
+ class="component-item"
264
+ v-for="item in group.items"
265
+ draggable="true"
266
+ :key="item.type"
267
+ @click="appendComponent(item)"
268
+ @dragstart="dragstartHandler(item, $event)"
269
+ &gt;
219
270
  &lt;m-icon :icon="item.icon"&gt;&lt;/m-icon&gt;
220
271
  &nbsp;
221
272
  &lt;el-tooltip effect="dark" placement="bottom" :content="item.text"&gt;
@@ -230,6 +281,7 @@
230
281
  &nbsp;
231
282
  &lt;script lang="ts"&gt;
232
283
  import { computed, defineComponent, inject, ref } from 'vue';
284
+ import serialize from 'serialize-javascript';
233
285
  &nbsp;
234
286
  import MIcon from '@editor/components/Icon.vue';
235
287
  import type { ComponentGroup, ComponentItem, Services } from '@editor/type';
@@ -266,6 +318,20 @@ export default defineComponent({
266
318
  ...data,
267
319
  });
268
320
  },
321
+ &nbsp;
322
+ <span class="fstat-no" title="function not covered" > dragstartHandler(</span>{ text<span class="cstat-no" title="statement not covered" >, t</span>ype<span class="cstat-no" title="statement not covered" >, <span class="cstat-no" title="statement not covered" >d</span>ata<span class="cstat-no" title="statement not covered" > </span>= {} }: ComponentItem, e</span>: DragEvent) {
323
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (e.dataTransfer) {</span>
324
+ <span class="cstat-no" title="statement not covered" > e.</span>dataTransfer.effectAllowed = 'move';
325
+ <span class="cstat-no" title="statement not covered" > e.</span>dataTransfer.setData(
326
+ 'data',
327
+ serialize({
328
+ name: text,
329
+ type,
330
+ ...data,
331
+ }).replace(/"(\w+)":\s/g, '$1: '),
332
+ );
333
+ }
334
+ },
269
335
  };
270
336
  },
271
337
  });
@@ -277,7 +343,7 @@ export default defineComponent({
277
343
  <div class='footer quiet pad2 space-top1 center small'>
278
344
  Code coverage generated by
279
345
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
280
- at Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
346
+ at Fri May 13 2022 20:42:37 GMT+0800 (China Standard Time)
281
347
  </div>
282
348
  <script src="../../../prettify.js"></script>
283
349
  <script>
@@ -23,30 +23,30 @@
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">68.57% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>11/12</span>
28
+ <span class='fraction'>24/35</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">23.43% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>18/26</span>
35
+ <span class='fraction'>15/64</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">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/7</span>
42
+ <span class='fraction'>9/18</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">70% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/11</span>
49
+ <span class='fraction'>21/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 medium'></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,23 +156,56 @@
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>
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>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
160
179
  <span class="cline-any cline-neutral">&nbsp;</span>
161
180
  <span class="cline-any cline-neutral">&nbsp;</span>
162
181
  <span class="cline-any cline-neutral">&nbsp;</span>
163
182
  <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-yes">1x</span>
184
+ <span class="cline-any cline-yes">1x</span>
164
185
  <span class="cline-any cline-neutral">&nbsp;</span>
186
+ <span class="cline-any cline-yes">1x</span>
165
187
  <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-yes">1x</span>
166
189
  <span class="cline-any cline-neutral">&nbsp;</span>
167
190
  <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-yes">1x</span>
168
192
  <span class="cline-any cline-neutral">&nbsp;</span>
169
193
  <span class="cline-any cline-neutral">&nbsp;</span>
170
194
  <span class="cline-any cline-neutral">&nbsp;</span>
195
+ <span class="cline-any cline-yes">1x</span>
196
+ <span class="cline-any cline-yes">1x</span>
197
+ <span class="cline-any cline-yes">1x</span>
198
+ <span class="cline-any cline-yes">1x</span>
199
+ <span class="cline-any cline-yes">1x</span>
200
+ <span class="cline-any cline-yes">1x</span>
171
201
  <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-yes">1x</span>
203
+ <span class="cline-any cline-no">&nbsp;</span>
172
204
  <span class="cline-any cline-neutral">&nbsp;</span>
173
205
  <span class="cline-any cline-neutral">&nbsp;</span>
174
206
  <span class="cline-any cline-neutral">&nbsp;</span>
175
207
  <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-no">&nbsp;</span>
176
209
  <span class="cline-any cline-neutral">&nbsp;</span>
177
210
  <span class="cline-any cline-neutral">&nbsp;</span>
178
211
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -180,19 +213,26 @@
180
213
  <span class="cline-any cline-neutral">&nbsp;</span>
181
214
  <span class="cline-any cline-neutral">&nbsp;</span>
182
215
  <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-yes">1x</span>
217
+ <span class="cline-any cline-yes">1x</span>
218
+ <span class="cline-any cline-no">&nbsp;</span>
183
219
  <span class="cline-any cline-neutral">&nbsp;</span>
184
220
  <span class="cline-any cline-neutral">&nbsp;</span>
185
221
  <span class="cline-any cline-neutral">&nbsp;</span>
186
222
  <span class="cline-any cline-neutral">&nbsp;</span>
187
223
  <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-no">&nbsp;</span>
188
225
  <span class="cline-any cline-neutral">&nbsp;</span>
189
226
  <span class="cline-any cline-neutral">&nbsp;</span>
190
227
  <span class="cline-any cline-neutral">&nbsp;</span>
191
228
  <span class="cline-any cline-neutral">&nbsp;</span>
192
229
  <span class="cline-any cline-neutral">&nbsp;</span>
193
230
  <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-yes">1x</span>
232
+ <span class="cline-any cline-no">&nbsp;</span>
194
233
  <span class="cline-any cline-neutral">&nbsp;</span>
195
234
  <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-no">&nbsp;</span>
196
236
  <span class="cline-any cline-neutral">&nbsp;</span>
197
237
  <span class="cline-any cline-neutral">&nbsp;</span>
198
238
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -205,30 +245,28 @@
205
245
  <span class="cline-any cline-neutral">&nbsp;</span>
206
246
  <span class="cline-any cline-neutral">&nbsp;</span>
207
247
  <span class="cline-any cline-neutral">&nbsp;</span>
208
- <span class="cline-any cline-yes">2x</span>
209
248
  <span class="cline-any cline-neutral">&nbsp;</span>
210
249
  <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-yes">1x</span>
211
251
  <span class="cline-any cline-neutral">&nbsp;</span>
212
252
  <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-yes">1x</span>
213
254
  <span class="cline-any cline-neutral">&nbsp;</span>
214
- <span class="cline-any cline-yes">2x</span>
255
+ <span class="cline-any cline-yes">1x</span>
215
256
  <span class="cline-any cline-neutral">&nbsp;</span>
216
257
  <span class="cline-any cline-neutral">&nbsp;</span>
217
258
  <span class="cline-any cline-neutral">&nbsp;</span>
218
- <span class="cline-any cline-yes">5x</span>
219
- <span class="cline-any cline-yes">5x</span>
220
- <span class="cline-any cline-yes">5x</span>
221
259
  <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">5x</span>
260
+ <span class="cline-any cline-yes">1x</span>
223
261
  <span class="cline-any cline-neutral">&nbsp;</span>
224
262
  <span class="cline-any cline-neutral">&nbsp;</span>
225
263
  <span class="cline-any cline-neutral">&nbsp;</span>
226
264
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-no">&nbsp;</span>
228
265
  <span class="cline-any cline-neutral">&nbsp;</span>
229
266
  <span class="cline-any cline-neutral">&nbsp;</span>
230
267
  <span class="cline-any cline-yes">1x</span>
231
268
  <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-no">&nbsp;</span>
232
270
  <span class="cline-any cline-neutral">&nbsp;</span>
233
271
  <span class="cline-any cline-neutral">&nbsp;</span>
234
272
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -237,106 +275,125 @@
237
275
  <span class="cline-any cline-neutral">&nbsp;</span>
238
276
  <span class="cline-any cline-yes">1x</span>
239
277
  <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-no">&nbsp;</span>
240
279
  <span class="cline-any cline-neutral">&nbsp;</span>
241
280
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-yes">1x</span>
243
281
  <span class="cline-any cline-neutral">&nbsp;</span>
244
282
  <span class="cline-any cline-neutral">&nbsp;</span>
245
283
  <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-yes">1x</span>
284
+ <span class="cline-any cline-no">&nbsp;</span>
247
285
  <span class="cline-any cline-neutral">&nbsp;</span>
248
286
  <span class="cline-any cline-neutral">&nbsp;</span>
249
287
  <span class="cline-any cline-neutral">&nbsp;</span>
250
288
  <span class="cline-any cline-neutral">&nbsp;</span>
251
289
  <span class="cline-any cline-neutral">&nbsp;</span>
252
290
  <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;
296
- &lt;/div&gt;
297
- &lt;/div&gt;
291
+ &lt;content-menu :menu-data="menuData" ref="menu" style="overflow: initial"&gt;&lt;/content-menu&gt;
298
292
  &lt;/template&gt;
299
293
  &nbsp;
300
294
  &lt;script lang="ts"&gt;
301
- import { computed, defineComponent, inject, ref } from 'vue';
295
+ import { computed, defineComponent, inject, markRaw, ref } from 'vue';
296
+ import { Delete, DocumentCopy, Files, Plus } from '@element-plus/icons';
302
297
  &nbsp;
303
- import type { MNode } from '@tmagic/schema';
298
+ import { NodeType } from '@tmagic/schema';
304
299
  &nbsp;
305
- import type { AddMNode, Services } from '@editor/type';
300
+ import ContentMenu from '@editor/components/ContentMenu.vue';
301
+ import type { ComponentGroup, MenuButton, MenuItem, Services } from '@editor/type';
306
302
  &nbsp;
307
303
  export default defineComponent({
308
- name: 'magic-editor-content-menu',
304
+ components: { ContentMenu },
309
305
  &nbsp;
310
306
  setup() {
311
307
  const services = inject&lt;Services&gt;('services');
312
- const subVisible = ref(false);
308
+ const menu = ref&lt;InstanceType&lt;typeof ContentMenu&gt;&gt;();
313
309
  const node = computed(() =&gt; services<span class="branch-0 cbranch-no" title="branch not covered" >?.e</span>ditorService.get('node'));
310
+ const isRoot = computed(() =&gt; node.value<span class="branch-1 cbranch-no" title="branch not covered" ><span class="branch-1 cbranch-no" title="branch not covered" >?.t</span>ype === N</span>odeType.ROOT);
311
+ const isPage = computed(() =&gt; node.value<span class="branch-1 cbranch-no" title="branch not covered" ><span class="branch-1 cbranch-no" title="branch not covered" >?.t</span>ype === N</span>odeType.PAGE);
312
+ const componentList = computed(<span class="fstat-no" title="function not covered" >() =&gt; <span class="cstat-no" title="statement not covered" >s</span>ervices?</span>.componentListService.getList() || []);
314
313
  &nbsp;
315
- return {
316
- subVisible,
317
- &nbsp;
318
- node,
314
+ const createMenuItems = <span class="fstat-no" title="function not covered" >(g</span>roup: ComponentGroup): MenuButton[] =&gt;
315
+ <span class="cstat-no" title="statement not covered" > group.</span>items.map(<span class="fstat-no" title="function not covered" >(c</span>omponent) =&gt; <span class="cstat-no" title="statement not covered" >({</span>
316
+ text: component.text,
317
+ type: 'button',
318
+ icon: component.icon,
319
+ handler: <span class="fstat-no" title="function not covered" >() =&gt; {</span>
320
+ <span class="cstat-no" title="statement not covered" > services?</span>.editorService.add({
321
+ name: component.text,
322
+ type: component.type,
323
+ ...(component.data || {}),
324
+ });
325
+ },
326
+ }));
319
327
  &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()),
321
- &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
- },
328
+ const getSubMenuData = computed&lt;MenuButton[]&gt;(() =&gt; {
329
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (node.value<span class="branch-1 cbranch-no" title="branch not covered" ><span class="branch-1 cbranch-no" title="branch not covered" >?.t</span>ype === '</span>tabs') {
330
+ <span class="cstat-no" title="statement not covered" > return [</span>
331
+ {
332
+ text: '标签页',
333
+ type: 'button',
334
+ icon: Files,
335
+ handler: <span class="fstat-no" title="function not covered" >() =&gt; {</span>
336
+ <span class="cstat-no" title="statement not covered" > services?</span>.editorService.add({
337
+ type: 'tab-pane',
338
+ });
339
+ },
340
+ },
341
+ ];
342
+ }
343
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (node.value<span class="branch-1 cbranch-no" title="branch not covered" ><span class="branch-1 cbranch-no" title="branch not covered" >?.i</span>tems) {</span>
344
+ <span class="cstat-no" title="statement not covered" > return (</span>
345
+ componentList.value.reduce(
346
+ <span class="fstat-no" title="function not covered" > (s</span>ubMenuData: MenuButton[], group: ComponentGroup, index) =&gt;
347
+ <span class="cstat-no" title="statement not covered" > subMenuData.</span>concat(
348
+ createMenuItems(group),
349
+ index &lt; componentList.value.length - 1
350
+ ? [
351
+ {
352
+ type: 'divider',
353
+ direction: 'horizontal',
354
+ },
355
+ ]
356
+ : [],
357
+ ),
358
+ [],
359
+ ) || []
360
+ );
361
+ }
362
+ return [];
363
+ });
329
364
  &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
- },
333
- &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);
336
- },
365
+ return {
366
+ menu,
367
+ menuData: computed&lt;MenuItem[]&gt;(() =&gt; [
368
+ {
369
+ type: 'button',
370
+ text: '新增',
371
+ icon: markRaw(Plus),
372
+ display: () =&gt; node.value<span class="branch-1 cbranch-no" title="branch not covered" ><span class="branch-1 cbranch-no" title="branch not covered" >?.i</span>tems,</span>
373
+ items: getSubMenuData.value,
374
+ },
375
+ {
376
+ type: 'button',
377
+ text: '复制',
378
+ icon: markRaw(DocumentCopy),
379
+ display: () =&gt; !isRoot.value,
380
+ handler: <span class="fstat-no" title="function not covered" >() =&gt; {</span>
381
+ <span class="cstat-no" title="statement not covered" > node.</span>value &amp;&amp; services?.editorService.copy(node.value);
382
+ },
383
+ },
384
+ {
385
+ type: 'button',
386
+ text: '删除',
387
+ icon: markRaw(Delete),
388
+ display: () =&gt; !isRoot.value &amp;&amp; !isPage.value,
389
+ handler: <span class="fstat-no" title="function not covered" >() =&gt; {</span>
390
+ <span class="cstat-no" title="statement not covered" > node.</span>value &amp;&amp; services?.editorService.remove(node.value);
391
+ },
392
+ },
393
+ ]),
337
394
  &nbsp;
338
- setSubVisitable(v: boolean) {
339
- subVisible.value = v;
395
+ <span class="fstat-no" title="function not covered" > show(</span>e: MouseEvent) {
396
+ <span class="cstat-no" title="statement not covered" > menu.</span>value?.show(e);
340
397
  },
341
398
  };
342
399
  },
@@ -349,7 +406,7 @@ export default defineComponent({
349
406
  <div class='footer quiet pad2 space-top1 center small'>
350
407
  Code coverage generated by
351
408
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
352
- at Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
409
+ at Fri May 13 2022 20:42:37 GMT+0800 (China Standard Time)
353
410
  </div>
354
411
  <script src="../../../prettify.js"></script>
355
412
  <script>