@kp-ui/lowcode-pc 1.0.0-alpha.9 → 1.0.1

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 (97) hide show
  1. package/assets/styles/style.css +189 -51
  2. package/core/src/components/common/render/Debugger.vue.js +1 -1
  3. package/core/src/components/common/render/Debugger.vue2.js +1 -1
  4. package/core/src/components/common/render/Debugger.vue2.js.map +1 -1
  5. package/core/src/components/common/render/LowcodeRenderProvider.vue.js +10 -1
  6. package/core/src/components/common/render/LowcodeRenderProvider.vue.js.map +1 -1
  7. package/core/src/components/common/render/useFormContext.js +3 -2
  8. package/core/src/components/common/render/useFormContext.js.map +1 -1
  9. package/core/src/constants/WidgetTypeEnum.js +1 -0
  10. package/core/src/constants/WidgetTypeEnum.js.map +1 -1
  11. package/core/src/hooks/useAppRef.js +1 -0
  12. package/core/src/hooks/useAppRef.js.map +1 -1
  13. package/core/src/hooks/useDataHttp.js +3 -3
  14. package/core/src/hooks/useDataHttp.js.map +1 -1
  15. package/core/src/hooks/useDesigner.js +3 -1
  16. package/core/src/hooks/useDesigner.js.map +1 -1
  17. package/core/src/hooks/useField.js +97 -64
  18. package/core/src/hooks/useField.js.map +1 -1
  19. package/core/src/hooks/useWebMCP.js +82 -0
  20. package/core/src/hooks/useWebMCP.js.map +1 -0
  21. package/core/src/lang/en-US.js +33 -0
  22. package/core/src/lang/en-US.js.map +1 -1
  23. package/core/src/lang/zh-CN.js +64 -11
  24. package/core/src/lang/zh-CN.js.map +1 -1
  25. package/install.js +1 -1
  26. package/install.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue.js +1 -1
  29. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js +17 -3
  30. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js.map +1 -1
  31. package/src/components/desginer/form-widget/container-widget/useTableWidget.js +23 -5
  32. package/src/components/desginer/form-widget/container-widget/useTableWidget.js.map +1 -1
  33. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue.js +1 -1
  34. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js.map +1 -1
  35. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js +0 -1
  36. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js.map +1 -1
  37. package/src/components/desginer/widget-panel/advanced/data-table.js +2 -0
  38. package/src/components/desginer/widget-panel/advanced/data-table.js.map +1 -1
  39. package/src/components/desginer/widget-panel/containers/grid-sub-form.js +5 -0
  40. package/src/components/desginer/widget-panel/containers/grid-sub-form.js.map +1 -1
  41. package/src/components/desginer/widget-panel/containers/grid.js +1 -3
  42. package/src/components/desginer/widget-panel/containers/grid.js.map +1 -1
  43. package/src/components/field-widget/bpmn-editor-widget.vue.js +1 -1
  44. package/src/components/field-widget/bpmn-editor-widget.vue2.js +1 -1
  45. package/src/components/field-widget/bpmn-editor-widget.vue2.js.map +1 -1
  46. package/src/components/field-widget/button-list-widget.vue.js +1 -1
  47. package/src/components/field-widget/button-list-widget.vue2.js +1 -2
  48. package/src/components/field-widget/button-list-widget.vue2.js.map +1 -1
  49. package/src/components/field-widget/code-editor-widget.vue.js +1 -1
  50. package/src/components/field-widget/code-editor-widget.vue2.js +1 -1
  51. package/src/components/field-widget/code-editor-widget.vue2.js.map +1 -1
  52. package/src/components/field-widget/divider-widget.vue2.js +1 -1
  53. package/src/components/field-widget/divider-widget.vue2.js.map +1 -1
  54. package/src/components/field-widget/diy-compontent-widget.vue2.js +1 -1
  55. package/src/components/field-widget/diy-compontent-widget.vue2.js.map +1 -1
  56. package/src/components/field-widget/dropdown-widget.vue.js +1 -1
  57. package/src/components/field-widget/dropdown-widget.vue2.js +12 -20
  58. package/src/components/field-widget/dropdown-widget.vue2.js.map +1 -1
  59. package/src/components/field-widget/file-upload-widget.vue.js +1 -1
  60. package/src/components/field-widget/file-upload-widget.vue2.js +12 -16
  61. package/src/components/field-widget/file-upload-widget.vue2.js.map +1 -1
  62. package/src/components/field-widget/form-item-wrapper.vue.js +1 -1
  63. package/src/components/field-widget/form-item-wrapper.vue2.js.map +1 -1
  64. package/src/components/field-widget/number-widget.vue2.js +1 -1
  65. package/src/components/field-widget/number-widget.vue2.js.map +1 -1
  66. package/src/components/field-widget/radio-widget.vue.js +1 -1
  67. package/src/components/field-widget/radio-widget.vue2.js +5 -6
  68. package/src/components/field-widget/radio-widget.vue2.js.map +1 -1
  69. package/src/components/field-widget/rich-editor-widget.vue.js +1 -1
  70. package/src/components/field-widget/rich-editor-widget.vue2.js +1 -1
  71. package/src/components/field-widget/rich-editor-widget.vue2.js.map +1 -1
  72. package/src/components/field-widget/textarea-widget.vue.js +1 -1
  73. package/src/components/field-widget/textarea-widget.vue2.js +1 -1
  74. package/src/components/field-widget/textarea-widget.vue2.js.map +1 -1
  75. package/src/components/field-widget/treeSelect-widget.vue2.js +8 -9
  76. package/src/components/field-widget/treeSelect-widget.vue2.js.map +1 -1
  77. package/src/components/field-widget/vue-render-widget.vue2.js +1 -1
  78. package/src/components/field-widget/vue-render-widget.vue2.js.map +1 -1
  79. package/src/components/form-render/container-items/data-table-widget.vue.js +1 -1
  80. package/src/components/form-render/container-items/data-table-widget.vue2.js +83 -4
  81. package/src/components/form-render/container-items/data-table-widget.vue2.js.map +1 -1
  82. package/src/components/form-render/container-items/grid-sub-form-widget.vue.js +1 -1
  83. package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js +24 -5
  84. package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js.map +1 -1
  85. package/src/components/public/DataTableColumnDialog.vue.js +8 -0
  86. package/src/components/public/DataTableColumnDialog.vue.js.map +1 -0
  87. package/src/components/public/DataTableColumnDialog.vue2.js +333 -0
  88. package/src/components/public/DataTableColumnDialog.vue2.js.map +1 -0
  89. package/src/components/public/DynamicDialog.vue.js +0 -1
  90. package/src/components/public/DynamicDialog.vue.js.map +1 -1
  91. package/src/components/render/index.vue2.js +0 -1
  92. package/src/components/render/index.vue2.js.map +1 -1
  93. package/stats.html +1 -1
  94. package/core/src/utils/event-bus.js +0 -8
  95. package/core/src/utils/event-bus.js.map +0 -1
  96. package/src/components/field-widget/useField.js +0 -578
  97. package/src/components/field-widget/useField.js.map +0 -1
@@ -1,17 +1,49 @@
1
- @charset "UTF-8";.sub-form-container[data-v-80b2c408] {
1
+ @charset "UTF-8";/* 全局css变量 */
2
+ .primary-color {
3
+ color: var(--ant-primary-color);
4
+ }
5
+ .background-opacity {
6
+ background: var(--ant-primary-4);
7
+ }
8
+ .form-widget-list .ghost {
9
+ content: '';
10
+ font-size: 0;
11
+ height: 3px;
12
+ box-sizing: border-box;
13
+ background: var(--ant-primary-4);
14
+ border: 2px solid var(--ant-primary-4);
15
+ outline-width: 0;
16
+ padding: 0;
17
+ overflow: hidden;
18
+ }
19
+ /* 滚动条样式 end */
20
+ .button-text-highlight.ant-btn {
21
+ font-weight: bold;
22
+ color: var(--ant-primary-color);
23
+ }
24
+ .custom-divider.ant-divider {
25
+ font-size: 14px;
26
+ margin: 5px;
27
+ }
28
+ .field-wrapper .full-width-input {
29
+ width: 100% !important;
30
+ }
31
+ @tailwind components;
32
+ @tailwind utilities;
33
+ .sub-form-container[data-v-a3f1d201] {
2
34
  margin-bottom: 16px;
3
35
  text-align: left;
4
36
  background: #fafafa;
5
37
  border-radius: 8px;
6
38
  padding: 10px;
7
39
  }
8
- .sub-form-container .header-row[data-v-80b2c408] {
40
+ .sub-form-container .header-row[data-v-a3f1d201] {
9
41
  margin-top: 15px;
10
42
  }
11
- .sub-form-container .header-row[data-v-80b2c408] .action-button {
43
+ .sub-form-container .header-row[data-v-a3f1d201] .action-button {
12
44
  height: 35px;
13
45
  }
14
- .sub-form-container .sub-form-row[data-v-80b2c408] {
46
+ .sub-form-container .sub-form-row[data-v-a3f1d201] {
15
47
  display: flex;
16
48
  align-items: center;
17
49
  background: white;
@@ -19,22 +51,22 @@
19
51
  border-radius: 6px;
20
52
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
21
53
  }
22
- .sub-form-container .sub-form-row .row-number-span[data-v-80b2c408] {
54
+ .sub-form-container .sub-form-row .row-number-span[data-v-a3f1d201] {
23
55
  margin-left: 16px;
24
56
  }
25
- .sub-form-action-column[data-v-80b2c408] {
57
+ .sub-form-action-column[data-v-a3f1d201] {
26
58
  display: inline-block;
27
59
  align-items: center;
28
60
  text-align: center;
29
61
  padding: 8px;
30
62
  }
31
- .grid-sub-form-data-row[data-v-80b2c408] {
63
+ .grid-sub-form-data-row[data-v-a3f1d201] {
32
64
  display: inline-block;
33
65
  flex: 1;
34
66
  padding: 10px;
35
67
  position: relative;
36
68
  }
37
- .grid-sub-form-data-row[data-v-80b2c408]:before, .grid-sub-form-data-row[data-v-80b2c408]:after {
69
+ .grid-sub-form-data-row[data-v-a3f1d201]:before, .grid-sub-form-data-row[data-v-a3f1d201]:after {
38
70
  content: "";
39
71
  display: inline-block;
40
72
  width: 1px;
@@ -44,16 +76,16 @@
44
76
  top: 50%;
45
77
  transform: translateY(-50%);
46
78
  }
47
- .grid-sub-form-data-row[data-v-80b2c408]:before {
79
+ .grid-sub-form-data-row[data-v-a3f1d201]:before {
48
80
  left: 0;
49
81
  }
50
- .grid-sub-form-data-row[data-v-80b2c408]:after {
82
+ .grid-sub-form-data-row[data-v-a3f1d201]:after {
51
83
  right: 0;
52
84
  }
53
- .grid-sub-form-data-row[data-v-80b2c408] .ant-form-item {
85
+ .grid-sub-form-data-row[data-v-a3f1d201] .ant-form-item {
54
86
  margin-bottom: 0;
55
87
  }
56
- div.row-no-column[data-v-80b2c408] {
88
+ div.row-no-column[data-v-a3f1d201] {
57
89
  display: flex;
58
90
  align-items: center;
59
91
  width: 50px;
@@ -64,7 +96,7 @@ div.row-no-column[data-v-80b2c408] {
64
96
  font-size: 14px;
65
97
  color: #666;
66
98
  }
67
- .action-button-column[data-v-80b2c408] {
99
+ .action-button-column[data-v-a3f1d201] {
68
100
  width: 140px;
69
101
  }.grid-cell[data-v-13ad810a] {
70
102
  padding: 3px;
@@ -92,13 +124,110 @@ div.row-no-column[data-v-80b2c408] {
92
124
  flex-direction: column;
93
125
  min-height: 300px;
94
126
  }
95
- .talbe-wrapper[data-v-598f1ef3] {
127
+ .column-row[data-v-7ae2c55f] {
128
+ height: 400px;
129
+ display: flex;
130
+ }
131
+ .column-row .col-left[data-v-7ae2c55f],
132
+ .column-row .col-right[data-v-7ae2c55f] {
133
+ display: flex;
134
+ flex-direction: column;
135
+ height: 100%;
136
+ }
137
+ .column-row .col-left[data-v-7ae2c55f] {
138
+ padding-left: 20px !important;
139
+ padding-right: 10px !important;
140
+ border-right: 1px solid #f0f0f0;
141
+ }
142
+ .column-row .col-right[data-v-7ae2c55f] {
143
+ padding-left: 10px !important;
144
+ }
145
+ .column-row .col-left-title[data-v-7ae2c55f],
146
+ .column-row .col-right-title[data-v-7ae2c55f] {
147
+ display: flex;
148
+ justify-content: space-between;
149
+ align-items: center;
150
+ margin-bottom: 10px;
151
+ }
152
+ .column-row .col-left-title .title[data-v-7ae2c55f],
153
+ .column-row .col-right-title .title[data-v-7ae2c55f] {
154
+ font-weight: 500;
155
+ color: #333;
156
+ }
157
+ .column-row .col-left-title .search[data-v-7ae2c55f],
158
+ .column-row .col-right-title .search[data-v-7ae2c55f] {
159
+ width: 150px;
160
+ }
161
+ .column-row .col-left-content[data-v-7ae2c55f],
162
+ .column-row .col-right-content[data-v-7ae2c55f] {
163
+ flex: 1 0 0;
164
+ overflow-y: auto;
165
+ overflow-x: hidden;
166
+ }
167
+ .column-row .checkbox-row[data-v-7ae2c55f] {
168
+ margin-top: 10px;
169
+ }
170
+ .column-row .col-right-content-item[data-v-7ae2c55f] {
171
+ margin-right: 5px;
172
+ height: 32px;
173
+ display: flex;
174
+ align-items: center;
175
+ }
176
+ .column-row .col-right-content-item .col-right-content-item-left[data-v-7ae2c55f] {
177
+ flex: 1 0 0;
178
+ display: flex;
179
+ align-items: center;
180
+ }
181
+ .column-row .col-right-content-item .col-right-content-item-left .drag-handle[data-v-7ae2c55f] {
182
+ cursor: move;
183
+ margin-right: 8px;
184
+ flex-shrink: 0;
185
+ }
186
+ .column-row .col-right-content-item .col-right-content-item-left .title[data-v-7ae2c55f] {
187
+ flex: 1 0 0;
188
+ overflow: hidden;
189
+ text-overflow: ellipsis;
190
+ white-space: nowrap;
191
+ font-size: 14px;
192
+ }
193
+ .column-row .col-right-content-item .col-right-content-item-left .icon-ding[data-v-7ae2c55f] {
194
+ margin-left: 8px;
195
+ flex-shrink: 0;
196
+ opacity: 0;
197
+ transition: opacity 0.2s;
198
+ }
199
+ .column-row .col-right-content-item .col-right-content-item-left .icon-ding[data-v-7ae2c55f]:hover {
200
+ opacity: 1;
201
+ }
202
+ .column-row .col-right-content-item .col-right-content-item-left .icon-ding.showIcon[data-v-7ae2c55f] {
203
+ opacity: 1;
204
+ }
205
+ .column-row .col-right-content-item:hover .icon-ding[data-v-7ae2c55f] {
206
+ opacity: 1;
207
+ }
208
+ .column-row .col-right-content-item .col-right-content-item-right[data-v-7ae2c55f] {
209
+ flex: 1 0 0;
210
+ display: flex;
211
+ justify-content: flex-end;
212
+ padding-right: 10px;
213
+ }
214
+ .column-row .col-right-content-item .col-right-content-item-right[data-v-7ae2c55f] .icon-guanbi {
215
+ opacity: 0.6;
216
+ }
217
+ .column-row .col-right-content-item .col-right-content-item-right[data-v-7ae2c55f] .icon-guanbi:hover {
218
+ opacity: 1;
219
+ }
220
+ .talbe-wrapper[data-v-02a5f9df] {
96
221
  width: 100%;
97
222
  }
98
- .talbe-wrapper .vxe-grid[data-v-598f1ef3] {
223
+ .talbe-wrapper .table-toolbar[data-v-02a5f9df] {
224
+ padding: 8px 0;
225
+ margin-bottom: 8px;
226
+ }
227
+ .talbe-wrapper .vxe-grid[data-v-02a5f9df] {
99
228
  width: 100%;
100
229
  }
101
- .talbe-wrapper__pagination[data-v-598f1ef3] {
230
+ .talbe-wrapper__pagination[data-v-02a5f9df] {
102
231
  margin-top: 10px;
103
232
  display: flex;
104
233
  justify-content: end;
@@ -276,7 +405,7 @@ div.row-no-column[data-v-80b2c408] {
276
405
  .desginer-canvas[data-v-2b8c9959] .ant-form-item {
277
406
  margin-bottom: 0;
278
407
  }/* 调试面板样式 */
279
- .debug-panel[data-v-68185782] {
408
+ .debug-panel[data-v-10eb5e61] {
280
409
  position: absolute;
281
410
  top: 0;
282
411
  right: 0;
@@ -291,18 +420,18 @@ div.row-no-column[data-v-80b2c408] {
291
420
  border-top-left-radius: 8px;
292
421
  border-bottom-left-radius: 8px;
293
422
  }
294
- .debug-panel[data-v-68185782] .jv-container .jv-code {
423
+ .debug-panel[data-v-10eb5e61] .jv-container .jv-code {
295
424
  padding: 0;
296
425
  }
297
- .debug-panel.collapsed[data-v-68185782] {
426
+ .debug-panel.collapsed[data-v-10eb5e61] {
298
427
  transform: translateX(400px);
299
428
  }
300
- .debug-panel.collapsed .debug-toggle[data-v-68185782] {
429
+ .debug-panel.collapsed .debug-toggle[data-v-10eb5e61] {
301
430
  left: -40px;
302
431
  border-radius: 8px 0 0 8px;
303
432
  width: 40px;
304
433
  }
305
- .debug-panel .debug-toggle[data-v-68185782] {
434
+ .debug-panel .debug-toggle[data-v-10eb5e61] {
306
435
  position: absolute;
307
436
  left: -40px;
308
437
  top: 20px;
@@ -321,20 +450,20 @@ div.row-no-column[data-v-80b2c408] {
321
450
  padding: 8px 0;
322
451
  user-select: none;
323
452
  }
324
- .debug-panel .debug-content[data-v-68185782] {
453
+ .debug-panel .debug-content[data-v-10eb5e61] {
325
454
  flex: 1;
326
455
  overflow: auto;
327
456
  padding: 16px;
328
457
  background-color: #f5f7fa;
329
458
  }
330
- .debug-panel .debug-content .debug-section[data-v-68185782] {
459
+ .debug-panel .debug-content .debug-section[data-v-10eb5e61] {
331
460
  margin-bottom: 24px;
332
461
  background-color: #fff;
333
462
  border-radius: 8px;
334
463
  padding: 16px;
335
464
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
336
465
  }
337
- .debug-panel .debug-content .debug-section h3[data-v-68185782] {
466
+ .debug-panel .debug-content .debug-section h3[data-v-10eb5e61] {
338
467
  margin: 0 0 12px 0;
339
468
  font-size: 14px;
340
469
  font-weight: 600;
@@ -342,18 +471,18 @@ div.row-no-column[data-v-80b2c408] {
342
471
  border-bottom: 1px solid #e8e8e8;
343
472
  padding-bottom: 8px;
344
473
  }
345
- .debug-panel .debug-content .debug-section .empty-state[data-v-68185782] {
474
+ .debug-panel .debug-content .debug-section .empty-state[data-v-10eb5e61] {
346
475
  color: #999;
347
476
  font-size: 12px;
348
477
  text-align: center;
349
478
  padding: 20px;
350
479
  }
351
- .debug-panel .debug-content .debug-section .widget-list[data-v-68185782] {
480
+ .debug-panel .debug-content .debug-section .widget-list[data-v-10eb5e61] {
352
481
  display: flex;
353
482
  flex-direction: column;
354
483
  gap: 2px;
355
484
  }
356
- .debug-panel .debug-content .debug-section .widget-list .widget-item[data-v-68185782] {
485
+ .debug-panel .debug-content .debug-section .widget-list .widget-item[data-v-10eb5e61] {
357
486
  border: 1px solid #e8e8e8;
358
487
  border-radius: 4px;
359
488
  padding: 2px 4px;
@@ -361,12 +490,12 @@ div.row-no-column[data-v-80b2c408] {
361
490
  background-color: #fafafa;
362
491
  cursor: pointer;
363
492
  }
364
- .debug-panel .debug-content .debug-section .widget-list .widget-item .widget-key[data-v-68185782] {
493
+ .debug-panel .debug-content .debug-section .widget-list .widget-item .widget-key[data-v-10eb5e61] {
365
494
  font-weight: 600;
366
495
  color: var(--ant-primary-color);
367
496
  font-size: 12px;
368
497
  }
369
- .debug-panel .debug-content pre[data-v-68185782] {
498
+ .debug-panel .debug-content pre[data-v-10eb5e61] {
370
499
  margin: 0;
371
500
  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
372
501
  font-size: 12px;
@@ -378,41 +507,41 @@ div.row-no-column[data-v-80b2c408] {
378
507
  color: #333;
379
508
  }
380
509
 
381
- .field-wrapper[data-v-0930180b] {
510
+ .field-wrapper[data-v-fe290edb] {
382
511
  position: relative;
383
512
  }
384
- .ant-form-item[data-v-0930180b] {
513
+ .ant-form-item[data-v-fe290edb] {
385
514
  position: relative;
386
515
  /* 隐藏Chrome浏览器中el-input数字输入框右侧的上下调整小箭头 */
387
516
  }
388
- .ant-form-item[data-v-0930180b] .ant-form-item-label {
517
+ .ant-form-item[data-v-fe290edb] .ant-form-item-label {
389
518
  white-space: nowrap;
390
519
  text-overflow: ellipsis;
391
520
  }
392
- .ant-form-item span.custom-label[data-v-0930180b] {
521
+ .ant-form-item span.custom-label[data-v-fe290edb] {
393
522
  display: flex;
394
523
  }
395
- .ant-form-item span.custom-label i[data-v-0930180b] {
524
+ .ant-form-item span.custom-label i[data-v-fe290edb] {
396
525
  margin: 0 3px;
397
526
  }
398
- .ant-form-item[data-v-0930180b] .hide-spin-button input::-webkit-outer-spin-button,
399
- .ant-form-item[data-v-0930180b] .hide-spin-button input::-webkit-inner-spin-button {
527
+ .ant-form-item[data-v-fe290edb] .hide-spin-button input::-webkit-outer-spin-button,
528
+ .ant-form-item[data-v-fe290edb] .hide-spin-button input::-webkit-inner-spin-button {
400
529
  -webkit-appearance: none !important;
401
- }[data-v-fb5e5201] .bjs-powered-by {
530
+ }[data-v-3974eef4] .bjs-powered-by {
402
531
  display: none;
403
532
  }
404
- [data-v-fb5e5201] .bjs-breadcrumbs {
533
+ [data-v-3974eef4] .bjs-breadcrumbs {
405
534
  display: none;
406
- }.flex[data-v-b51e000d] {
535
+ }.flex[data-v-198d712e] {
407
536
  flex: 1;
408
537
  display: flex;
409
538
  justify-content: var(--flex);
410
539
  }.hide-text-span[data-v-f3a8f507] span {
411
540
  display: none;
412
- }.designer[data-v-6c36fd38] {
541
+ }.designer[data-v-7291d54f] {
413
542
  position: relative;
414
543
  }
415
- .designer[data-v-6c36fd38]::before {
544
+ .designer[data-v-7291d54f]::before {
416
545
  position: absolute;
417
546
  z-index: 99;
418
547
  content: "";
@@ -434,20 +563,20 @@ div.row-no-column[data-v-80b2c408] {
434
563
  }
435
564
  .auto-full-width[data-v-4aad080a] .ant-picker {
436
565
  width: 100% !important;
437
- }.hide-text-span[data-v-41213ad4] span {
566
+ }.hide-text-span[data-v-8b716c42] span {
438
567
  display: none;
439
- }.fileUploadTip[data-v-98bac580] {
568
+ }.fileUploadTip[data-v-69c9393f] {
440
569
  font-size: 12px;
441
570
  margin-top: 10px;
442
571
  }
443
572
  /* form-item-wrapper已引入,还需要重复引入吗? */
444
573
  /* form-item-wrapper已引入,还需要重复引入吗? */
445
- /* form-item-wrapper已引入,还需要重复引入吗? */.rich-editor-widget[data-v-c4e08a91] .ql-toolbar.ql-snow {
574
+ /* form-item-wrapper已引入,还需要重复引入吗? */.rich-editor-widget[data-v-4fccf1cc] .ql-toolbar.ql-snow {
446
575
  border-color: #d9d9d9;
447
576
  border-top-left-radius: 8px;
448
577
  border-top-right-radius: 8px;
449
578
  }
450
- .rich-editor-widget[data-v-c4e08a91] .ql-container.ql-snow {
579
+ .rich-editor-widget[data-v-4fccf1cc] .ql-container.ql-snow {
451
580
  border-bottom-left-radius: 8px;
452
581
  border-bottom-right-radius: 8px;
453
582
  border-color: #d9d9d9;
@@ -479,7 +608,7 @@ div.row-no-column[data-v-80b2c408] {
479
608
  /* form-item-wrapper已引入,还需要重复引入吗? */
480
609
  .readonly-mode-switch[data-v-abb9e521] {
481
610
  display: none;
482
- }.readonly-mode-field[data-v-04869c36] {
611
+ }.readonly-mode-field[data-v-ee000014] {
483
612
  display: inline-block;
484
613
  white-space: pre-wrap;
485
614
  line-height: 1.5;
@@ -575,13 +704,18 @@ div.row-no-column[data-v-80b2c408] {
575
704
  }
576
705
  .grid-container .form-widget-list[data-v-d41dbfac] {
577
706
  min-height: 28px;
578
- }.talbe-wrapper[data-v-ad6fb3c4] {
707
+ }.top-action[data-v-d47a2444] {
708
+ display: flex;
709
+ gap: 8px;
710
+ padding: 4px 0 8px;
711
+ }
712
+ .talbe-wrapper[data-v-d47a2444] {
579
713
  width: 100%;
580
714
  }
581
- .talbe-wrapper .vxe-grid[data-v-ad6fb3c4] {
715
+ .talbe-wrapper .vxe-grid[data-v-d47a2444] {
582
716
  width: 100%;
583
717
  }
584
- .talbe-wrapper__pagination[data-v-ad6fb3c4] {
718
+ .talbe-wrapper__pagination[data-v-d47a2444] {
585
719
  margin-top: 10px;
586
720
  display: flex;
587
721
  justify-content: end;
@@ -646,12 +780,16 @@ div.row-no-column[data-v-80b2c408] {
646
780
  display: flex;
647
781
  align-items: center;
648
782
  height: 35px;
649
- }.box-container[data-v-c1520bd7] {
783
+ }.box-container[data-v-e857478a] {
650
784
  width: 100%;
651
785
  position: relative;
652
786
  padding-bottom: 20px;
653
787
  display: flex;
788
+ min-width: 0;
789
+ overflow: hidden;
654
790
  }
655
- .box-container[data-v-c1520bd7] .designer-widget-list {
791
+ .box-container[data-v-e857478a] .designer-widget-list {
656
792
  flex: 1;
793
+ overflow: hidden;
794
+ min-width: 0;
657
795
  }
@@ -1,7 +1,7 @@
1
1
  import _sfc_main from "./Debugger.vue2.js";
2
2
  /* empty css */
3
3
  import _export_sfc from "../../../../../_virtual/_plugin-vue_export-helper.js";
4
- const Debugger = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-68185782"]]);
4
+ const Debugger = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-10eb5e61"]]);
5
5
  export {
6
6
  Debugger as default
7
7
  };
@@ -22,7 +22,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
22
22
  const debugVisible = useModel(__props, "visible");
23
23
  const formDataModel = inject("formData", {});
24
24
  const widgetRefList = inject("refList", ref(/* @__PURE__ */ new Map()));
25
- const formConfig = inject("formConfig");
25
+ const formConfig = inject("formConfig", ref({}));
26
26
  return (_ctx, _cache) => {
27
27
  return openBlock(), createElementBlock("div", {
28
28
  class: normalizeClass(["debug-panel", { collapsed: !debugVisible.value }])
@@ -1 +1 @@
1
- {"version":3,"file":"Debugger.vue2.js","sources":["../../../../../../../core/src/components/common/render/Debugger.vue"],"sourcesContent":["<template>\n <div class=\"debug-panel\" :class=\"{ collapsed: !debugVisible }\">\n <div class=\"debug-toggle\" @click=\"debugVisible = !debugVisible\">\n {{ debugVisible ? '收起' : '调试' }}\n </div>\n <div class=\"debug-content\">\n <div class=\"debug-section\">\n <h3>Form Data Model</h3>\n <JsonViewer :value=\"formDataModel\" :expand-depth=\"5\" />\n </div>\n <div class=\"debug-section\">\n <h3>Widget Ref List ({{ widgetRefList.size }} widgets)</h3>\n <div class=\"widget-list\">\n <div\n v-for=\"[key, value] in widgetRefList\"\n @click=\"console.log(value)\"\n :key=\"key\"\n class=\"widget-item\"\n >\n <div class=\"widget-key\">{{ key }}</div>\n </div>\n </div>\n </div>\n <div class=\"debug-section\">\n <h3>FormConfig</h3>\n <div class=\"widget-list\">\n <JsonViewer :value=\"formConfig\" :expand-depth=\"5\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { ref, inject } from 'vue';\n import JsonViewer from 'vue-json-viewer';\n const debugVisible = defineModel('visible', {\n type: Boolean,\n default: false\n });\n\n const formDataModel = inject('formData', {});\n const widgetRefList = inject('refList', ref(new Map()));\n const formConfig = inject('formConfig');\n</script>\n\n<style lang=\"less\" scoped>\n /* 调试面板样式 */\n .debug-panel {\n position: absolute;\n top: 0;\n right: 0;\n width: 400px;\n height: 100vh;\n background-color: #fff;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);\n z-index: 9999;\n transition: transform 0.3s ease-in-out;\n display: flex;\n flex-direction: column;\n border-top-left-radius: 8px;\n border-bottom-left-radius: 8px;\n :deep(.jv-container .jv-code) {\n padding: 0;\n }\n\n &.collapsed {\n transform: translateX(400px);\n\n .debug-toggle {\n left: -40px;\n border-radius: 8px 0 0 8px;\n width: 40px;\n }\n }\n\n .debug-toggle {\n position: absolute;\n left: -40px;\n top: 20px;\n width: 40px;\n height: 40px;\n background-color: var(--ant-primary-color);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-radius: 8px 0 0 8px;\n font-size: 12px;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);\n writing-mode: vertical-lr;\n padding: 8px 0;\n user-select: none;\n }\n\n .debug-content {\n flex: 1;\n overflow: auto;\n padding: 16px;\n background-color: #f5f7fa;\n\n .debug-section {\n margin-bottom: 24px;\n background-color: #fff;\n border-radius: 8px;\n padding: 16px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n\n h3 {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n border-bottom: 1px solid #e8e8e8;\n padding-bottom: 8px;\n }\n\n .empty-state {\n color: #999;\n font-size: 12px;\n text-align: center;\n padding: 20px;\n }\n\n .widget-list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n\n .widget-item {\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 2px 4px;\n line-height: 1.2;\n background-color: #fafafa;\n cursor: pointer;\n\n .widget-key {\n font-weight: 600;\n color: var(--ant-primary-color);\n font-size: 12px;\n }\n }\n }\n }\n\n pre {\n margin: 0;\n font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n font-size: 12px;\n white-space: pre-wrap;\n word-wrap: break-word;\n background-color: #f5f5f5;\n padding: 8px;\n border-radius: 4px;\n color: #333;\n }\n }\n }\n</style>\n"],"names":["_useModel","_createElementBlock","_normalizeClass","_createElementVNode","_createVNode","_unref","_toDisplayString","_openBlock","_Fragment","_renderList"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoCI,UAAM,eAAeA,SAAW,SAAC,SAGhC;AAED,UAAM,gBAAgB,OAAO,YAAY,EAAE;AAC3C,UAAM,gBAAgB,OAAO,WAAW,IAAI,oBAAI,IAAA,CAAK,CAAC;AACtD,UAAM,aAAa,OAAO,YAAY;;0BA1CtCC,mBA6BM,OAAA;AAAA,QA7BD,OAAKC,eAAA,CAAC,eAAa,EAAA,WAAA,CAAuB,aAAA,OAAY,CAAA;AAAA,MAAA;QACvDC,mBAEM,OAAA;AAAA,UAFD,OAAM;AAAA,UAAgB,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,aAAA,QAAY,CAAI,aAAA;AAAA,QAAA,mBAC3C,aAAA,QAAY,OAAA,IAAA,GAAA,CAAA;AAAA,QAEnBA,mBAwBM,OAxBN,YAwBM;AAAA,UAvBFA,mBAGM,OAHN,YAGM;AAAA,YAFF,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAA,mBAAwB,YAApB,mBAAe,EAAA;AAAA,YACnBC,YAAuDC,MAAA,UAAA,GAAA;AAAA,cAA1C,OAAOA,MAAA,aAAA;AAAA,cAAgB,gBAAc;AAAA,YAAA;;UAEtDF,mBAYM,OAZN,YAYM;AAAA,YAXFA,mBAA2D,YAAvD,sBAAiBG,gBAAGD,qBAAc,IAAI,IAAG,aAAS,CAAA;AAAA,YACtDF,mBASM,OATN,YASM;AAAA,eARFI,UAAA,IAAA,GAAAN,mBAOMO,UAAA,MAAAC,WANqBJ,MAAA,aAAA,GAAa,CAAA,CAA5B,KAAK,KAAK,MAAA;oCADtBJ,mBAOM,OAAA;AAAA,kBALD,SAAK,CAAA,WAAE,QAAQ,IAAI,KAAK;AAAA,kBACxB;AAAA,kBACD,OAAM;AAAA,gBAAA;kBAENE,mBAAuC,OAAvC,YAAuCG,gBAAZ,GAAG,GAAA,CAAA;AAAA,gBAAA;;;;UAI1CH,mBAKM,OALN,YAKM;AAAA,YAJF,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAA,mBAAmB,YAAf,cAAU,EAAA;AAAA,YACdA,mBAEM,OAFN,YAEM;AAAA,cADFC,YAAoDC,MAAA,UAAA,GAAA;AAAA,gBAAvC,OAAOA,MAAA,UAAA;AAAA,gBAAa,gBAAc;AAAA,cAAA;;;;;;;;"}
1
+ {"version":3,"file":"Debugger.vue2.js","sources":["../../../../../../../core/src/components/common/render/Debugger.vue"],"sourcesContent":["<template>\n <div class=\"debug-panel\" :class=\"{ collapsed: !debugVisible }\">\n <div class=\"debug-toggle\" @click=\"debugVisible = !debugVisible\">\n {{ debugVisible ? '收起' : '调试' }}\n </div>\n <div class=\"debug-content\">\n <div class=\"debug-section\">\n <h3>Form Data Model</h3>\n <JsonViewer :value=\"formDataModel\" :expand-depth=\"5\" />\n </div>\n <div class=\"debug-section\">\n <h3>Widget Ref List ({{ widgetRefList.size }} widgets)</h3>\n <div class=\"widget-list\">\n <div\n v-for=\"[key, value] in widgetRefList\"\n @click=\"console.log(value)\"\n :key=\"key\"\n class=\"widget-item\"\n >\n <div class=\"widget-key\">{{ key }}</div>\n </div>\n </div>\n </div>\n <div class=\"debug-section\">\n <h3>FormConfig</h3>\n <div class=\"widget-list\">\n <JsonViewer :value=\"formConfig\" :expand-depth=\"5\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { ref, inject } from 'vue';\n import JsonViewer from 'vue-json-viewer';\n const debugVisible = defineModel('visible', {\n type: Boolean,\n default: false\n });\n\n const formDataModel = inject('formData', {});\n const widgetRefList = inject('refList', ref(new Map()));\n const formConfig = inject('formConfig', ref({}));\n</script>\n\n<style lang=\"less\" scoped>\n /* 调试面板样式 */\n .debug-panel {\n position: absolute;\n top: 0;\n right: 0;\n width: 400px;\n height: 100vh;\n background-color: #fff;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);\n z-index: 9999;\n transition: transform 0.3s ease-in-out;\n display: flex;\n flex-direction: column;\n border-top-left-radius: 8px;\n border-bottom-left-radius: 8px;\n :deep(.jv-container .jv-code) {\n padding: 0;\n }\n\n &.collapsed {\n transform: translateX(400px);\n\n .debug-toggle {\n left: -40px;\n border-radius: 8px 0 0 8px;\n width: 40px;\n }\n }\n\n .debug-toggle {\n position: absolute;\n left: -40px;\n top: 20px;\n width: 40px;\n height: 40px;\n background-color: var(--ant-primary-color);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-radius: 8px 0 0 8px;\n font-size: 12px;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);\n writing-mode: vertical-lr;\n padding: 8px 0;\n user-select: none;\n }\n\n .debug-content {\n flex: 1;\n overflow: auto;\n padding: 16px;\n background-color: #f5f7fa;\n\n .debug-section {\n margin-bottom: 24px;\n background-color: #fff;\n border-radius: 8px;\n padding: 16px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n\n h3 {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n border-bottom: 1px solid #e8e8e8;\n padding-bottom: 8px;\n }\n\n .empty-state {\n color: #999;\n font-size: 12px;\n text-align: center;\n padding: 20px;\n }\n\n .widget-list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n\n .widget-item {\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 2px 4px;\n line-height: 1.2;\n background-color: #fafafa;\n cursor: pointer;\n\n .widget-key {\n font-weight: 600;\n color: var(--ant-primary-color);\n font-size: 12px;\n }\n }\n }\n }\n\n pre {\n margin: 0;\n font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n font-size: 12px;\n white-space: pre-wrap;\n word-wrap: break-word;\n background-color: #f5f5f5;\n padding: 8px;\n border-radius: 4px;\n color: #333;\n }\n }\n }\n</style>\n"],"names":["_useModel","_createElementBlock","_normalizeClass","_createElementVNode","_createVNode","_unref","_toDisplayString","_openBlock","_Fragment","_renderList"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoCI,UAAM,eAAeA,SAAW,SAAC,SAGhC;AAED,UAAM,gBAAgB,OAAO,YAAY,EAAE;AAC3C,UAAM,gBAAgB,OAAO,WAAW,IAAI,oBAAI,IAAA,CAAK,CAAC;AACtD,UAAM,aAAa,OAAO,cAAc,IAAI,CAAA,CAAE,CAAC;;0BA1C/CC,mBA6BM,OAAA;AAAA,QA7BD,OAAKC,eAAA,CAAC,eAAa,EAAA,WAAA,CAAuB,aAAA,OAAY,CAAA;AAAA,MAAA;QACvDC,mBAEM,OAAA;AAAA,UAFD,OAAM;AAAA,UAAgB,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,aAAA,QAAY,CAAI,aAAA;AAAA,QAAA,mBAC3C,aAAA,QAAY,OAAA,IAAA,GAAA,CAAA;AAAA,QAEnBA,mBAwBM,OAxBN,YAwBM;AAAA,UAvBFA,mBAGM,OAHN,YAGM;AAAA,YAFF,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAA,mBAAwB,YAApB,mBAAe,EAAA;AAAA,YACnBC,YAAuDC,MAAA,UAAA,GAAA;AAAA,cAA1C,OAAOA,MAAA,aAAA;AAAA,cAAgB,gBAAc;AAAA,YAAA;;UAEtDF,mBAYM,OAZN,YAYM;AAAA,YAXFA,mBAA2D,YAAvD,sBAAiBG,gBAAGD,qBAAc,IAAI,IAAG,aAAS,CAAA;AAAA,YACtDF,mBASM,OATN,YASM;AAAA,eARFI,UAAA,IAAA,GAAAN,mBAOMO,UAAA,MAAAC,WANqBJ,MAAA,aAAA,GAAa,CAAA,CAA5B,KAAK,KAAK,MAAA;oCADtBJ,mBAOM,OAAA;AAAA,kBALD,SAAK,CAAA,WAAE,QAAQ,IAAI,KAAK;AAAA,kBACxB;AAAA,kBACD,OAAM;AAAA,gBAAA;kBAENE,mBAAuC,OAAvC,YAAuCG,gBAAZ,GAAG,GAAA,CAAA;AAAA,gBAAA;;;;UAI1CH,mBAKM,OALN,YAKM;AAAA,YAJF,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAA,mBAAmB,YAAf,cAAU,EAAA;AAAA,YACdA,mBAEM,OAFN,YAEM;AAAA,cADFC,YAAoDC,MAAA,UAAA,GAAA;AAAA,gBAAvC,OAAOA,MAAA,UAAA;AAAA,gBAAa,gBAAc;AAAA,cAAA;;;;;;;;"}
@@ -1,6 +1,7 @@
1
1
  import { defineComponent, watch, provide, renderSlot } from "vue";
2
2
  import { useLocaleStore } from "@kp-ui/i18n";
3
3
  import { storeToRefs } from "pinia";
4
+ import { useWebMCP } from "../../../hooks/useWebMCP.js";
4
5
  import { useI18n } from "../../../utils/i18n.js";
5
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
7
  ...{
@@ -17,7 +18,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
17
18
  context: {}
18
19
  },
19
20
  setup(__props) {
20
- var _a, _b, _c, _d;
21
+ var _a, _b, _c, _d, _e, _f;
21
22
  const props = __props;
22
23
  const localeStore = useLocaleStore();
23
24
  const {
@@ -26,6 +27,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
26
27
  const {
27
28
  initLocale
28
29
  } = useI18n();
30
+ const {
31
+ registerWebMCPTools
32
+ } = useWebMCP(props.context);
29
33
  watch(locale, () => {
30
34
  initLocale(locale.value);
31
35
  }, {
@@ -41,6 +45,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
41
45
  var _a2;
42
46
  return (_a2 = props.context) == null ? void 0 : _a2.readModeFlag.value;
43
47
  });
48
+ provide("layoutType", (_e = props.context) == null ? void 0 : _e.layoutType);
49
+ provide("designer", (_f = props.context) == null ? void 0 : _f.designer);
50
+ if (typeof window !== "undefined") {
51
+ registerWebMCPTools();
52
+ }
44
53
  return (_ctx, _cache) => {
45
54
  return renderSlot(_ctx.$slots, "default");
46
55
  };
@@ -1 +1 @@
1
- {"version":3,"file":"LowcodeRenderProvider.vue.js","sources":["../../../../../../../core/src/components/common/render/LowcodeRenderProvider.vue"],"sourcesContent":["<template>\n <slot></slot>\n</template>\n<script lang=\"tsx\" setup>\n import { useI18n, type Widget } from '@kp-ui/lowcode-core';\n import { Component, provide, watch } from 'vue';\n import { useLocaleStore } from '@kp-ui/i18n';\n import { storeToRefs } from 'pinia';\n\n defineOptions({\n inheritAttrs: false,\n name: 'LowcodeRenderProvider'\n });\n\n const props = withDefaults(\n defineProps<{\n designState?: boolean;\n getWidget: (widget: Widget) => Component;\n context: any;\n }>(),\n {\n designState: false\n }\n );\n\n const localeStore = useLocaleStore();\n const { locale } = storeToRefs(localeStore);\n const { initLocale } = useI18n();\n\n watch(\n locale,\n () => {\n initLocale(locale.value);\n },\n {\n immediate: true\n }\n );\n\n provide('designState', props.designState); // 设计态标识\n provide('getWidget', props.getWidget);\n provide('formConfig', props.context?.formConfig);\n provide('formWidgetId', props.context?.formWidgetId);\n // 提供给子组件的数据\n provide('refList', props.context?.widgetRefList);\n provide('formData', props.context?.formDataModel);\n provide('getReadMode', () => props.context?.readModeFlag.value);\n</script>\n"],"names":["props","__props","localeStore","useLocaleStore","locale","storeToRefs","initLocale","useI18n","watch","value","immediate","provide","designState","getWidget","context","formConfig","formWidgetId","widgetRefList","formDataModel","readModeFlag","_renderSlot","_ctx","$slots"],"mappings":";;;;;;;;;;;;;;;;;;;;AAcI,UAAMA,QAAQC;AAWd,UAAMC,cAAcC,eAAc;AAClC,UAAM;AAAA,MAAEC;AAAAA,IAAO,IAAIC,YAAYH,WAAW;AAC1C,UAAM;AAAA,MAAEI;AAAAA,QAAeC,QAAO;AAE9BC,UACIJ,QACA,MAAM;AACFE,iBAAWF,OAAOK,KAAK;AAAA,IAC3B,GACA;AAAA,MACIC,WAAW;AAAA,IACf,CACJ;AAEAC,YAAQ,eAAeX,MAAMY,WAAW;AACxCD,YAAQ,aAAaX,MAAMa,SAAS;AACpCF,YAAQ,eAAcX,WAAMc,YAANd,mBAAee,UAAU;AAC/CJ,YAAQ,iBAAgBX,WAAMc,YAANd,mBAAegB,YAAY;AAEnDL,YAAQ,YAAWX,WAAMc,YAANd,mBAAeiB,aAAa;AAC/CN,YAAQ,aAAYX,WAAMc,YAANd,mBAAekB,aAAa;AAChDP,YAAQ,eAAe,MAAA;;AAAMX,cAAAA,MAAAA,MAAMc,YAANd,gBAAAA,IAAemB,aAAaV;AAAAA,KAAK;;aA7C9DW,WAAaC,KAAAC,QAAA,SAAA;AAAA;;;"}
1
+ {"version":3,"file":"LowcodeRenderProvider.vue.js","sources":["../../../../../../../core/src/components/common/render/LowcodeRenderProvider.vue"],"sourcesContent":["<template>\n <slot></slot>\n</template>\n<script lang=\"tsx\" setup>\n import { useI18n, type Widget, useWebMCP } from '@kp-ui/lowcode-core';\n import { Component, provide, ref, watch } from 'vue';\n import { useLocaleStore } from '@kp-ui/i18n';\n import { storeToRefs } from 'pinia';\n\n defineOptions({\n inheritAttrs: false,\n name: 'LowcodeRenderProvider'\n });\n\n const props = withDefaults(\n defineProps<{\n designState?: boolean;\n getWidget: (widget: Widget) => Component;\n context: any;\n }>(),\n {\n designState: false\n }\n );\n\n const localeStore = useLocaleStore();\n const { locale } = storeToRefs(localeStore);\n const { initLocale } = useI18n();\n const { registerWebMCPTools } = useWebMCP(props.context);\n\n watch(\n locale,\n () => {\n initLocale(locale.value);\n },\n {\n immediate: true\n }\n );\n\n provide('designState', props.designState); // 设计态标识\n provide('getWidget', props.getWidget);\n provide('formConfig', props.context?.formConfig);\n provide('formWidgetId', props.context?.formWidgetId);\n // 提供给子组件的数据\n provide('refList', props.context?.widgetRefList);\n provide('formData', props.context?.formDataModel);\n provide('getReadMode', () => props.context?.readModeFlag.value);\n provide('layoutType', props.context?.layoutType);\n provide('designer', props.context?.designer);\n\n // 挂载全局方法供 Chrome DevTools 调用\n if (typeof window !== 'undefined') {\n // WebMCP 规范注册\n registerWebMCPTools();\n }\n</script>\n"],"names":["props","__props","localeStore","useLocaleStore","locale","storeToRefs","initLocale","useI18n","registerWebMCPTools","useWebMCP","context","watch","value","immediate","provide","designState","getWidget","formConfig","formWidgetId","widgetRefList","formDataModel","readModeFlag","layoutType","designer","window","_renderSlot","_ctx","$slots"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAcI,UAAMA,QAAQC;AAWd,UAAMC,cAAcC,eAAc;AAClC,UAAM;AAAA,MAAEC;AAAAA,IAAO,IAAIC,YAAYH,WAAW;AAC1C,UAAM;AAAA,MAAEI;AAAAA,QAAeC,QAAO;AAC9B,UAAM;AAAA,MAAEC;AAAAA,IAAoB,IAAIC,UAAUT,MAAMU,OAAO;AAEvDC,UACIP,QACA,MAAM;AACFE,iBAAWF,OAAOQ,KAAK;AAAA,IAC3B,GACA;AAAA,MACIC,WAAW;AAAA,IACf,CACJ;AAEAC,YAAQ,eAAed,MAAMe,WAAW;AACxCD,YAAQ,aAAad,MAAMgB,SAAS;AACpCF,YAAQ,eAAcd,WAAMU,YAANV,mBAAeiB,UAAU;AAC/CH,YAAQ,iBAAgBd,WAAMU,YAANV,mBAAekB,YAAY;AAEnDJ,YAAQ,YAAWd,WAAMU,YAANV,mBAAemB,aAAa;AAC/CL,YAAQ,aAAYd,WAAMU,YAANV,mBAAeoB,aAAa;AAChDN,YAAQ,eAAe,MAAA;;AAAMd,cAAAA,MAAAA,MAAMU,YAANV,gBAAAA,IAAeqB,aAAaT;AAAAA,KAAK;AAC9DE,YAAQ,eAAcd,WAAMU,YAANV,mBAAesB,UAAU;AAC/CR,YAAQ,aAAYd,WAAMU,YAANV,mBAAeuB,QAAQ;AAG3C,QAAI,OAAOC,WAAW,aAAa;AAE/BhB,0BAAmB;AAAA,IACvB;;aAtDAiB,WAAaC,KAAAC,QAAA,SAAA;AAAA;;;"}
@@ -130,8 +130,9 @@ const useFormContext = ({ renderForm, props }) => {
130
130
  const fieldChangeEventHandler = () => {
131
131
  emitter.off$("fieldChange");
132
132
  emitter.on$("fieldChange", ({ fieldName, value }) => {
133
- value = value ?? "";
134
- set(formDataModel.value, fieldName, value);
133
+ if (fieldName) {
134
+ set(formDataModel.value, fieldName, value);
135
+ }
135
136
  });
136
137
  };
137
138
  const onFormDetail = async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useFormContext.js","sources":["../../../../../../../core/src/components/common/render/useFormContext.ts"],"sourcesContent":["import { computed, nextTick, onMounted, provide, ref, useTemplateRef, watchEffect } from 'vue';\nimport {\n useFormValidation,\n FormConfig,\n Widget,\n cloneFormConfigWithoutEventHandler,\n generateId,\n getContainerWidgetByName,\n insertCustomCssToHead,\n insertGlobalFunctionsToHtml\n} from '@kp-ui/lowcode-core';\nimport { cloneDeep, set } from 'lodash-es';\nimport { message } from 'ant-design-vue';\nimport { getUuidKey } from '@kp-ui/tool';\nimport { routerReloadStatus, useComRef, useExecFunction, useRef } from 'tmgc2-share';\nimport { useEmitter } from '@kp-ui/lowcode-core/src/utils/useEmitter';\nimport { useI18n, useAppRef } from '@kp-ui/lowcode-core';\n\nexport interface FormRenderProps {\n vfCtx?: Record<string, any>;\n formJson?: any;\n formData?: Record<string, any>;\n optionData?: Record<string, any>;\n disabledMode?: boolean;\n renderConfig?: {\n languageName?: string;\n };\n parentForm?: any;\n dynamicCreation?: boolean;\n debug?: boolean;\n}\n\n/**\n * 表单上下文配置\n */\nexport interface FormContextOptions {\n props: FormRenderProps;\n renderForm: any;\n}\n\n/**\n * 创建表单上下文\n * @param options 表单上下文配置\n * @returns 表单上下文\n */\nexport const useFormContext = ({ renderForm, props }: FormContextOptions) => {\n const { formJson } = props;\n const dynamicDialogRef = useTemplateRef<any>('dynamicDialogRef');\n const { i18nt } = useI18n();\n const [readModeFlag, setReadMode] = useRef(false);\n\n const emitter = useEmitter();\n\n const formJsonObj = ref();\n // 状态变量\n const formDataModel = ref<Record<string, any>>({});\n const isLoading = ref(false);\n const widgetRefList = ref<Map<string, any>>(new Map());\n const dialogProps = ref({});\n const childFormRef = ref();\n\n const formWidgetId = Symbol('formWidget');\n\n const dialogOrDrawerRef = ref();\n\n const { executeFunction, context, execHttpFunction } = useExecFunction();\n const { getFormRef, getWidgetRef, registerToRefList } = useAppRef(widgetRefList, formWidgetId);\n\n // 计算属性\n const formConfig = computed<FormConfig>(() => formJsonObj.value?.formConfig || {});\n\n const widgetList = computed(() => formJsonObj.value?.widgetList || []);\n const labelPosition = computed(() => {\n return formConfig.value?.labelPosition || 'horizontal';\n });\n\n const setChildFormRef = chid => {\n childFormRef.value = chid;\n };\n\n const labelWidth = computed(() => {\n return formConfig.value?.labelWidth ? `${formConfig.value.labelWidth}px` : '80px';\n });\n\n const customClass = computed(() => {\n return formConfig.value?.customClass || '';\n });\n\n // 初始化表单验证器\n let formValidator = useFormValidation(renderForm);\n\n // 监听 widgetList 变化,重新初始化验证器\n watchEffect(() => {\n formValidator = useFormValidation(renderForm);\n });\n\n /**\n * 设置表单JSON数据\n */\n const setFormJson = async (json: any) => {\n formJsonObj.value = json || { widgetList: [], formConfig: {} };\n\n // 重新构建表单数据模型\n formDataModel.value = {};\n insertCustomCode();\n await nextTick();\n handleOnMounted();\n };\n\n /**\n * 获取表单数据\n */\n const getFormData = () => {\n return formDataModel.value || {};\n };\n\n /**\n * 设置表单数据\n */\n const setFormData = (data: Record<string, any>) => {\n if (!data) return;\n // 更新表单数据模型\n Object.keys(data).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(formDataModel.value, key)) {\n formDataModel.value[key] = data[key];\n }\n });\n };\n\n /**\n * 设置加载状态\n */\n const setLoading = (loading: boolean) => {\n isLoading.value = loading;\n };\n\n /**\n * 重置表单验证\n */\n const resetValidation = () => {\n formValidator.resetValidation();\n };\n\n /**\n * 清除表单验证\n */\n const clearValidate = () => {\n formValidator.clearValidate();\n };\n\n const setDialogOrDrawerRef = (ddRef: any) => {\n dialogOrDrawerRef.value = ddRef;\n };\n\n /**\n * 当显示多级嵌套弹窗或抽屉时,获取最顶层VFormRender组件实例\n * @returns {object}\n */\n const getTopFormRef = () => {\n if (!props.parentForm) {\n return getFormRef();\n }\n\n let topFormRef = props.parentForm;\n while (topFormRef.parentForm) {\n topFormRef = topFormRef.parentForm;\n }\n\n return topFormRef;\n };\n\n /**\n * 显示弹窗表单,动态创建v-form-render组件,option-data、global-dsv等属性继承父级表单\n * @param dialogName\n * @param formData\n * @param extraData\n */\n const showDialog = (dialogName, formData = {}, extraData = {}) => {\n const topFormRef = getTopFormRef();\n const dialogCon = (getContainerWidgetByName(topFormRef?.widgetList || [], dialogName) ||\n getContainerWidgetByName(widgetList.value || [], dialogName)) as Widget | null;\n\n if (dialogCon === null) {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n\n if (!dialogName || dialogCon.type !== 'vf-dialog') {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n const dFormJson = {\n widgetList: cloneDeep(dialogCon?.widgetList || []),\n formConfig: cloneFormConfigWithoutEventHandler(topFormRef?.formConfig?.value || {})\n };\n const wrapperDivId = getUuidKey();\n dialogProps.value = {\n options: dialogCon.options,\n formJson: dFormJson,\n formData: { ...formData },\n optionData: topFormRef.optionData,\n parentFormRef: context.value,\n extraData: extraData,\n wrapperId: wrapperDivId,\n vfCtx: { ...formData }\n };\n\n dynamicDialogRef.value?.show();\n };\n /**\n * 获取父级VFormRender组件实例\n * @returns {object}\n */\n const getParentFormRef = () => {\n return props.parentForm;\n };\n\n const getChildFormRef = () => {\n return dynamicDialogRef.value?.getFormRef();\n };\n\n /**\n * 字段值变化事件处理器\n */\n const fieldChangeEventHandler = () => {\n emitter.off$('fieldChange');\n emitter.on$('fieldChange', ({ fieldName, value }) => {\n // 过滤掉错误值\n value = value ?? '';\n set(formDataModel.value, fieldName, value);\n });\n };\n\n const onFormDetail = async () => {\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformDetail, {\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const onFormUpdate = async () => {\n const valid = await formValidator.validate();\n if (!valid) throw new Error(i18nt('表单验证失败'));\n\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformUpdate, {\n data: formDataModel.value,\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const handleOnMounted = () => {\n if (formConfig.value?.onFormMounted) {\n console.log('onFormMounted: ');\n executeFunction({\n functionBody: formConfig.value?.onFormMounted\n });\n }\n };\n\n /**\n * 插入自定义样式和脚本\n * @param cssCode CSS代码\n * @param functions 自定义函数\n * @param formId 表单ID\n */\n const insertCustomCode = () => {\n const formId = 'vfRender' + generateId();\n const { cssCode, functions } = formConfig.value;\n console.log({ cssCode });\n\n if (cssCode) {\n insertCustomCssToHead(cssCode, formId || '');\n }\n if (functions) {\n insertGlobalFunctionsToHtml(functions, formId || '');\n }\n };\n\n const reload = () => {\n const router = context.value?.$router;\n router?.replace({\n query: {\n ...router.currentRoute.value.query,\n _t: Date.now()\n }\n });\n };\n\n const goBack = (reloadStatus?: routerReloadStatus, cb?: () => void) => {\n const goBack = getFormRef().vfCtx?.goBack;\n if (typeof goBack === 'function') {\n goBack(reloadStatus, cb);\n } else {\n const router = context.value?.$router;\n router?.go(-1);\n }\n };\n\n const getFieldValue = (field: string) => {\n return formDataModel.value[field];\n };\n\n const getVfCtx = () => {\n return props.vfCtx;\n };\n\n onMounted(() => {\n if (formJson) {\n setFormJson(formJson);\n }\n fieldChangeEventHandler();\n });\n\n const expose = {\n context,\n i18nt,\n goBack,\n reload,\n formValidator,\n getFieldValue,\n resetValidation,\n clearValidate,\n getVfCtx,\n getParentFormRef,\n getFormRef,\n getWidgetRef,\n showDialog,\n getFormData,\n getChildFormRef,\n setFormData,\n setReadMode,\n setFormJson,\n setLoading,\n onFormDetail,\n onFormUpdate,\n formDataModel,\n isLoading,\n vfCtx: props.vfCtx,\n // 计算属性\n formConfig,\n dynamicDialogRef,\n setChildFormRef,\n setDialogOrDrawerRef\n };\n\n return {\n formWidgetId,\n registerToRefList,\n dialogOrDrawerRef,\n\n emitter,\n // 状态\n formJsonObj,\n readModeFlag,\n // 引用\n widgetRefList,\n\n widgetList,\n labelPosition,\n labelWidth,\n customClass,\n dialogProps,\n\n expose,\n ...expose\n };\n};\n"],"names":["goBack"],"mappings":"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"}
1
+ {"version":3,"file":"useFormContext.js","sources":["../../../../../../../core/src/components/common/render/useFormContext.ts"],"sourcesContent":["import { computed, nextTick, onMounted, provide, ref, useTemplateRef, watchEffect } from 'vue';\nimport {\n useFormValidation,\n FormConfig,\n Widget,\n cloneFormConfigWithoutEventHandler,\n generateId,\n getContainerWidgetByName,\n insertCustomCssToHead,\n insertGlobalFunctionsToHtml\n} from '@kp-ui/lowcode-core';\nimport { cloneDeep, set } from 'lodash-es';\nimport { message } from 'ant-design-vue';\nimport { getUuidKey } from '@kp-ui/tool';\nimport { routerReloadStatus, useComRef, useExecFunction, useRef } from 'tmgc2-share';\nimport { useEmitter } from '@kp-ui/lowcode-core/src/utils/useEmitter';\nimport { useI18n, useAppRef } from '@kp-ui/lowcode-core';\n\nexport interface FormRenderProps {\n vfCtx?: Record<string, any>;\n formJson?: any;\n formData?: Record<string, any>;\n optionData?: Record<string, any>;\n disabledMode?: boolean;\n renderConfig?: {\n languageName?: string;\n };\n parentForm?: any;\n dynamicCreation?: boolean;\n debug?: boolean;\n}\n\n/**\n * 表单上下文配置\n */\nexport interface FormContextOptions {\n props: FormRenderProps;\n renderForm: any;\n}\n\n/**\n * 创建表单上下文\n * @param options 表单上下文配置\n * @returns 表单上下文\n */\nexport const useFormContext = ({ renderForm, props }: FormContextOptions) => {\n const { formJson } = props;\n const dynamicDialogRef = useTemplateRef<any>('dynamicDialogRef');\n const { i18nt } = useI18n();\n const [readModeFlag, setReadMode] = useRef(false);\n\n const emitter = useEmitter();\n\n const formJsonObj = ref();\n // 状态变量\n const formDataModel = ref<Record<string, any>>({});\n const isLoading = ref(false);\n const widgetRefList = ref<Map<string, any>>(new Map());\n const dialogProps = ref({});\n const childFormRef = ref();\n\n const formWidgetId = Symbol('formWidget');\n\n const dialogOrDrawerRef = ref();\n\n const { executeFunction, context, execHttpFunction } = useExecFunction();\n const { getFormRef, getWidgetRef, registerToRefList } = useAppRef(widgetRefList, formWidgetId);\n\n // 计算属性\n const formConfig = computed<FormConfig>(() => formJsonObj.value?.formConfig || {});\n\n const widgetList = computed(() => formJsonObj.value?.widgetList || []);\n const labelPosition = computed(() => {\n return formConfig.value?.labelPosition || 'horizontal';\n });\n\n const setChildFormRef = chid => {\n childFormRef.value = chid;\n };\n\n const labelWidth = computed(() => {\n return formConfig.value?.labelWidth ? `${formConfig.value.labelWidth}px` : '80px';\n });\n\n const customClass = computed(() => {\n return formConfig.value?.customClass || '';\n });\n\n // 初始化表单验证器\n let formValidator = useFormValidation(renderForm);\n\n // 监听 widgetList 变化,重新初始化验证器\n watchEffect(() => {\n formValidator = useFormValidation(renderForm);\n });\n\n /**\n * 设置表单JSON数据\n */\n const setFormJson = async (json: any) => {\n formJsonObj.value = json || { widgetList: [], formConfig: {} };\n\n // 重新构建表单数据模型\n formDataModel.value = {};\n insertCustomCode();\n await nextTick();\n handleOnMounted();\n };\n\n /**\n * 获取表单数据\n */\n const getFormData = () => {\n return formDataModel.value || {};\n };\n\n /**\n * 设置表单数据\n */\n const setFormData = (data: Record<string, any>) => {\n if (!data) return;\n // 更新表单数据模型\n Object.keys(data).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(formDataModel.value, key)) {\n formDataModel.value[key] = data[key];\n }\n });\n };\n\n /**\n * 设置加载状态\n */\n const setLoading = (loading: boolean) => {\n isLoading.value = loading;\n };\n\n /**\n * 重置表单验证\n */\n const resetValidation = () => {\n formValidator.resetValidation();\n };\n\n /**\n * 清除表单验证\n */\n const clearValidate = () => {\n formValidator.clearValidate();\n };\n\n const setDialogOrDrawerRef = (ddRef: any) => {\n dialogOrDrawerRef.value = ddRef;\n };\n\n /**\n * 当显示多级嵌套弹窗或抽屉时,获取最顶层VFormRender组件实例\n * @returns {object}\n */\n const getTopFormRef = () => {\n if (!props.parentForm) {\n return getFormRef();\n }\n\n let topFormRef = props.parentForm;\n while (topFormRef.parentForm) {\n topFormRef = topFormRef.parentForm;\n }\n\n return topFormRef;\n };\n\n /**\n * 显示弹窗表单,动态创建v-form-render组件,option-data、global-dsv等属性继承父级表单\n * @param dialogName\n * @param formData\n * @param extraData\n */\n const showDialog = (dialogName, formData = {}, extraData = {}) => {\n const topFormRef = getTopFormRef();\n const dialogCon = (getContainerWidgetByName(topFormRef?.widgetList || [], dialogName) ||\n getContainerWidgetByName(widgetList.value || [], dialogName)) as Widget | null;\n\n if (dialogCon === null) {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n\n if (!dialogName || dialogCon.type !== 'vf-dialog') {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n const dFormJson = {\n widgetList: cloneDeep(dialogCon?.widgetList || []),\n formConfig: cloneFormConfigWithoutEventHandler(topFormRef?.formConfig?.value || {})\n };\n const wrapperDivId = getUuidKey();\n dialogProps.value = {\n options: dialogCon.options,\n formJson: dFormJson,\n formData: { ...formData },\n optionData: topFormRef.optionData,\n parentFormRef: context.value,\n extraData: extraData,\n wrapperId: wrapperDivId,\n vfCtx: { ...formData }\n };\n\n dynamicDialogRef.value?.show();\n };\n /**\n * 获取父级VFormRender组件实例\n * @returns {object}\n */\n const getParentFormRef = () => {\n return props.parentForm;\n };\n\n const getChildFormRef = () => {\n return dynamicDialogRef.value?.getFormRef();\n };\n\n /**\n * 字段值变化事件处理器\n */\n const fieldChangeEventHandler = () => {\n emitter.off$('fieldChange');\n emitter.on$('fieldChange', ({ fieldName, value }) => {\n if (fieldName) {\n // 过滤掉错误值\n set(formDataModel.value, fieldName, value);\n }\n });\n };\n\n const onFormDetail = async () => {\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformDetail, {\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const onFormUpdate = async () => {\n const valid = await formValidator.validate();\n if (!valid) throw new Error(i18nt('表单验证失败'));\n\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformUpdate, {\n data: formDataModel.value,\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const handleOnMounted = () => {\n if (formConfig.value?.onFormMounted) {\n console.log('onFormMounted: ');\n executeFunction({\n functionBody: formConfig.value?.onFormMounted\n });\n }\n };\n\n /**\n * 插入自定义样式和脚本\n * @param cssCode CSS代码\n * @param functions 自定义函数\n * @param formId 表单ID\n */\n const insertCustomCode = () => {\n const formId = 'vfRender' + generateId();\n const { cssCode, functions } = formConfig.value;\n console.log({ cssCode });\n\n if (cssCode) {\n insertCustomCssToHead(cssCode, formId || '');\n }\n if (functions) {\n insertGlobalFunctionsToHtml(functions, formId || '');\n }\n };\n\n const reload = () => {\n const router = context.value?.$router;\n router?.replace({\n query: {\n ...router.currentRoute.value.query,\n _t: Date.now()\n }\n });\n };\n\n const goBack = (reloadStatus?: routerReloadStatus, cb?: () => void) => {\n const goBack = getFormRef().vfCtx?.goBack;\n if (typeof goBack === 'function') {\n goBack(reloadStatus, cb);\n } else {\n const router = context.value?.$router;\n router?.go(-1);\n }\n };\n\n const getFieldValue = (field: string) => {\n return formDataModel.value[field];\n };\n\n const getVfCtx = () => {\n return props.vfCtx;\n };\n\n onMounted(() => {\n if (formJson) {\n setFormJson(formJson);\n }\n fieldChangeEventHandler();\n });\n\n const expose = {\n context,\n i18nt,\n goBack,\n reload,\n formValidator,\n getFieldValue,\n resetValidation,\n clearValidate,\n getVfCtx,\n getParentFormRef,\n getFormRef,\n getWidgetRef,\n showDialog,\n getFormData,\n getChildFormRef,\n setFormData,\n setReadMode,\n setFormJson,\n setLoading,\n onFormDetail,\n onFormUpdate,\n formDataModel,\n isLoading,\n vfCtx: props.vfCtx,\n // 计算属性\n formConfig,\n dynamicDialogRef,\n setChildFormRef,\n setDialogOrDrawerRef\n };\n\n return {\n formWidgetId,\n registerToRefList,\n dialogOrDrawerRef,\n\n emitter,\n // 状态\n formJsonObj,\n readModeFlag,\n // 引用\n widgetRefList,\n\n widgetList,\n labelPosition,\n labelWidth,\n customClass,\n dialogProps,\n\n expose,\n ...expose\n };\n};\n"],"names":["goBack"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  var WidgetTypeEnum = /* @__PURE__ */ ((WidgetTypeEnum2) => {
2
2
  WidgetTypeEnum2["input"] = "input-widget";
3
+ WidgetTypeEnum2["inputField"] = "input-field-widget";
3
4
  WidgetTypeEnum2["textarea"] = "textarea-widget";
4
5
  WidgetTypeEnum2["number"] = "number-widget";
5
6
  WidgetTypeEnum2["select"] = "select-widget";