@kp-ui/lowcode 2.14.0-beta.1 → 2.14.0-beta.3

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 (56) hide show
  1. package/install.js +26 -25
  2. package/package.json +2 -2
  3. package/src/components/form-designer/form-widget/field-widget/diy-compontent-widget.vue.js +1 -1
  4. package/src/components/form-designer/index.vue.js +55 -54
  5. package/src/components/form-designer/setting-panel/form-crud-setting.vue.js +62 -23
  6. package/src/components/form-designer/setting-panel/index.vue.js +4 -323
  7. package/src/components/form-designer/setting-panel/index.vue2.js +273 -0
  8. package/src/components/form-designer/setting-panel/property-editor/button-list-editor.vue2.js +5 -4
  9. package/src/components/form-designer/setting-panel/property-editor/container-data-table/customRowEvent/data-table-customRow-editor.vue.js +1 -0
  10. package/src/components/form-designer/setting-panel/property-editor/container-data-table/data-table-dsEnabled-editor.vue.js +5 -4
  11. package/src/components/form-designer/setting-panel/property-editor/container-data-table/data-table-pagination-editor.vue.js +1 -0
  12. package/src/components/form-designer/setting-panel/property-editor/container-data-table/data-table-selections-editor.vue2.js +19 -18
  13. package/src/components/form-designer/setting-panel/property-editor/container-data-table/data-table-showButtonsColumn-editor.vue.js +9 -8
  14. package/src/components/form-designer/setting-panel/property-editor/container-data-table/data-table-tableColumns-editor.vue.js +1 -1
  15. package/src/components/form-designer/setting-panel/property-editor/container-data-table/data-table-tableColumns-editor.vue2.js +7 -6
  16. package/src/components/form-designer/setting-panel/property-editor/container-vf-dialog/bodyStyle-editor.vue2.js +7 -6
  17. package/src/components/form-designer/setting-panel/property-editor/customRender-editor.vue.js +2 -40
  18. package/src/components/form-designer/setting-panel/property-editor/customRender-editor.vue2.js +41 -0
  19. package/src/components/form-designer/setting-panel/property-editor/event-handler/onClickIcon-editor.vue.js +2 -47
  20. package/src/components/form-designer/setting-panel/property-editor/event-handler/onClickIcon-editor.vue2.js +44 -0
  21. package/src/components/form-designer/setting-panel/property-editor/event-handler/onCreated-editor.vue.js +2 -47
  22. package/src/components/form-designer/setting-panel/property-editor/event-handler/onCreated-editor.vue2.js +43 -0
  23. package/src/components/form-designer/setting-panel/property-editor/event-handler/onOkButtonClick-editor.vue.js +2 -46
  24. package/src/components/form-designer/setting-panel/property-editor/event-handler/onOkButtonClick-editor.vue2.js +43 -0
  25. package/src/components/form-designer/setting-panel/property-editor/event-handler/onValidate-editor.vue.js +2 -47
  26. package/src/components/form-designer/setting-panel/property-editor/event-handler/onValidate-editor.vue2.js +44 -0
  27. package/src/components/form-designer/setting-panel/property-editor/field-dropdown/dropdown-menuList-editor.vue.js +2 -66
  28. package/src/components/form-designer/setting-panel/property-editor/field-dropdown/dropdown-menuList-editor.vue2.js +42 -0
  29. package/src/components/form-designer/setting-panel/property-editor/field-html-text/htmlContent-editor.vue.js +5 -4
  30. package/src/components/form-designer/setting-panel/property-editor/hidden-editor.vue.js +6 -5
  31. package/src/components/form-designer/setting-panel/property-editor/index.js +98 -99
  32. package/src/components/form-designer/setting-panel/property-editor/labelIconClass-editor.vue.js +8 -7
  33. package/src/components/form-designer/setting-panel/property-editor/optionItems-editor.vue.js +38 -35
  34. package/src/components/form-designer/setting-panel/propertyRegister.js +6 -2
  35. package/src/components/form-render/container-item/data-table-item.vue.js +149 -0
  36. package/src/components/form-render/container-item/grid-col-item.vue.js +149 -0
  37. package/src/components/form-render/container-item/grid-item.vue.js +92 -0
  38. package/src/components/form-render/container-item/grid-sub-form-item.vue.js +319 -0
  39. package/src/components/form-render/container-item/index.js +24 -0
  40. package/src/components/form-render/container-item/sub-form-item.vue.js +429 -0
  41. package/src/components/form-render/container-item/tab-item.vue.js +160 -0
  42. package/src/components/form-render/container-item/table-cell-item.vue.js +95 -0
  43. package/src/components/form-render/container-item/table-item.vue.js +96 -0
  44. package/src/components/form-render/container-item/vf-collapse-item.vue.js +252 -0
  45. package/src/components/form-render/container-item/vf-dialog-item.vue.js +12 -0
  46. package/src/components/form-render/container-item/vf-drawer-item.vue.js +12 -0
  47. package/src/components/form-render/index.vue.js +2 -1
  48. package/src/components/http-editor/index.vue.js +10 -10
  49. package/src/components/public/ActionButtonListRender.vue.js +19 -24
  50. package/src/lang/en-US.js +1 -3
  51. package/src/lang/zh-CN.js +0 -3
  52. package/src/utils/useEmitter.js +57 -0
  53. package/src/utils/util.js +50 -49
  54. package/stats.html +1 -1
  55. package/styles/style.css +1 -1
  56. package/src/components/form-designer/setting-panel/property-editor/event-handler/onVformAdd-editor.vue.js +0 -49
package/install.js CHANGED
@@ -1,34 +1,35 @@
1
1
  /* empty css */
2
- import { i18n as n } from "./src/utils/i18n.js";
2
+ import { i18n as d } from "./src/utils/i18n.js";
3
3
  import "./_virtual/virtual_svg-icons-register.js";
4
- import { addAdvancedFieldSchema as h, addBasicFieldSchema as w, addContainerWidgetSchema as C, addCustomWidgetSchema as F } from "./src/components/form-designer/widget-panel/widgetsConfig.js";
5
- import { basicFieldsEnums as S } from "./src/components/form-designer/widget-panel/basicFieldsEnums.js";
6
- import { default as R } from "./src/components/form-designer/index.vue.js";
7
- import { default as W } from "./src/components/form-render/index.vue.js";
4
+ import { addAdvancedFieldSchema as w, addBasicFieldSchema as F, addContainerWidgetSchema as P, addCustomWidgetSchema as S } from "./src/components/form-designer/widget-panel/widgetsConfig.js";
5
+ import { basicFieldsEnums as R } from "./src/components/form-designer/widget-panel/basicFieldsEnums.js";
6
+ import { default as M } from "./src/components/form-designer/index.vue.js";
7
+ import { default as y } from "./src/components/form-render/index.vue.js";
8
8
  import s from "./src/components/form-designer/form-widget/container-widget/index.js";
9
- import { openCustomerModal as p } from "./src/components/public/CustomerModal/useCustomerModal.js";
10
- import { default as A } from "./src/components/form-render/SubmitButtonRender.vue.js";
11
- import { default as I } from "./src/utils/emitter.js";
12
- import { useLowcode as U } from "./src/hooks/useLowcode.js";
13
- const $ = (r) => {
14
- const { app: o, http: e, factoryRender: t, useMountApp: i, getUserInfo: a } = r;
15
- o.config.globalProperties.$http = e, o.config.globalProperties.$getUserInfo = a, o.config.globalProperties.$factoryRender = t, o.config.globalProperties.$i18n = n.$st, o.config.globalProperties.$openCustomerModal = (m) => p(m, i), o.use(s);
16
- const d = window.$vform ?? {};
9
+ import p from "./src/components/form-render/container-item/index.js";
10
+ import { openCustomerModal as f } from "./src/components/public/CustomerModal/useCustomerModal.js";
11
+ import { default as B } from "./src/components/form-render/SubmitButtonRender.vue.js";
12
+ import { default as U } from "./src/utils/emitter.js";
13
+ import { useLowcode as D } from "./src/hooks/useLowcode.js";
14
+ const b = (r) => {
15
+ const { app: o, http: e, factoryRender: t, useMountApp: i, getUserInfo: m } = r;
16
+ o.config.globalProperties.$http = e, o.config.globalProperties.$getUserInfo = m, o.config.globalProperties.$factoryRender = t, o.config.globalProperties.$i18n = d.$st, o.config.globalProperties.$openCustomerModal = (n) => f(n, i), o.use(s), o.use(p);
17
+ const a = window.$vform ?? {};
17
18
  window.$vform = {
18
- ...d,
19
+ ...a,
19
20
  $http: e
20
21
  };
21
22
  };
22
23
  export {
23
- A as SubmitButtonRender,
24
- R as VFormDesigner,
25
- W as VFormRender,
26
- h as addAdvancedFieldSchema,
27
- w as addBasicFieldSchema,
28
- C as addContainerWidgetSchema,
29
- F as addCustomWidgetSchema,
30
- S as basicFieldsEnums,
31
- I as emitter,
32
- $ as registerLowcodeCore,
33
- U as useLowcode
24
+ B as SubmitButtonRender,
25
+ M as VFormDesigner,
26
+ y as VFormRender,
27
+ w as addAdvancedFieldSchema,
28
+ F as addBasicFieldSchema,
29
+ P as addContainerWidgetSchema,
30
+ S as addCustomWidgetSchema,
31
+ R as basicFieldsEnums,
32
+ U as emitter,
33
+ b as registerLowcodeCore,
34
+ D as useLowcode
34
35
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kp-ui/lowcode",
3
- "version": "2.14.0-beta.1",
3
+ "version": "2.14.0-beta.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -9,7 +9,7 @@
9
9
  "@kp-ui/i18n": "0.0.12",
10
10
  "@kp-ui/tool": "1.0.33",
11
11
  "@surely-vue/table": "5.0.3",
12
- "ace-builds": "1.42.0",
12
+ "ace-builds": "1.43.4",
13
13
  "animate.css": "^4.1.1",
14
14
  "ant-design-vue": "4.2.6",
15
15
  "axios": "^1.3.5",
@@ -63,7 +63,7 @@ const x = {
63
63
  context: this,
64
64
  params: { data: this.fieldModel },
65
65
  keys: ["data"]
66
- });
66
+ }) ?? "";
67
67
  }
68
68
  }
69
69
  }, g = { class: "slot-wrapper-render" };
@@ -1,23 +1,23 @@
1
- import C from "./widget-panel/index.vue.js";
2
- import v from "./toolbar-panel/index.vue.js";
3
- import F from "./setting-panel/index.vue.js";
4
- import w from "./form-widget/index.vue.js";
5
- import { createDesigner as b } from "./designer.js";
6
- import { traverseAllWidgets as y, getAllContainerWidgets as f, getAllFieldWidgets as c, deepClone as m, addWindowResizeHandler as R } from "../../utils/util.js";
7
- import x from "../../utils/i18n.js";
8
- import { isEmpty as J } from "lodash-es";
9
- import { resolveComponent as o, createBlock as A, openBlock as D, withCtx as n, createVNode as r, createSlots as S, renderList as V, renderSlot as H, createElementVNode as B } from "vue";
1
+ import v from "./widget-panel/index.vue.js";
2
+ import F from "./toolbar-panel/index.vue.js";
3
+ import w from "./setting-panel/index.vue.js";
4
+ import b from "./form-widget/index.vue.js";
5
+ import { createDesigner as y } from "./designer.js";
6
+ import { traverseAllWidgets as R, getAllContainerWidgets as c, getAllFieldWidgets as m, deepClone as u, addWindowResizeHandler as x } from "../../utils/util.js";
7
+ import J from "../../utils/i18n.js";
8
+ import { isEmpty as A } from "lodash-es";
9
+ import { resolveComponent as n, createBlock as D, openBlock as S, withCtx as o, createVNode as r, createSlots as V, renderList as H, renderSlot as B, createElementVNode as E } from "vue";
10
10
  /* empty css */
11
- import E from "../../../_virtual/_plugin-vue_export-helper.js";
12
- const N = {
11
+ import N from "../../../_virtual/_plugin-vue_export-helper.js";
12
+ const P = {
13
13
  name: "VFormDesigner",
14
14
  componentName: "VFormDesigner",
15
- mixins: [x],
15
+ mixins: [J],
16
16
  components: {
17
- WidgetPanel: C,
18
- ToolbarPanel: v,
19
- SettingPanel: F,
20
- VFormWidget: w
17
+ WidgetPanel: v,
18
+ ToolbarPanel: F,
19
+ SettingPanel: w,
20
+ VFormWidget: b
21
21
  },
22
22
  props: {
23
23
  /* 保存jsonApi */
@@ -80,7 +80,7 @@ const N = {
80
80
  //是否正在加载中
81
81
  caseName: "",
82
82
  scrollerHeight: 0,
83
- designer: b(this),
83
+ designer: y(this),
84
84
  fieldList: []
85
85
  };
86
86
  },
@@ -94,7 +94,7 @@ const N = {
94
94
  created() {
95
95
  },
96
96
  mounted() {
97
- this.initLocale(), this.scrollerHeight = window.innerHeight - 56 - 36 + "px", R(() => {
97
+ this.initLocale(), this.scrollerHeight = window.innerHeight - 56 - 36 + "px", x(() => {
98
98
  this.$nextTick(() => {
99
99
  this.scrollerHeight = window.innerHeight - 56 - 36 + "px";
100
100
  });
@@ -123,7 +123,7 @@ const N = {
123
123
  * @param {*} importObj
124
124
  */
125
125
  setJsonImport(e = {}) {
126
- if (!J(e))
126
+ if (!A(e))
127
127
  try {
128
128
  if (!e || !e.formConfig)
129
129
  throw new Error(this.i18nt("designer.hint.invalidJsonFormat"));
@@ -145,8 +145,8 @@ const N = {
145
145
  },
146
146
  getFormJson() {
147
147
  return {
148
- widgetList: m(this.designer.widgetList),
149
- formConfig: m(this.designer.formConfig)
148
+ widgetList: u(this.designer.widgetList),
149
+ formConfig: u(this.designer.formConfig)
150
150
  };
151
151
  },
152
152
  clearDesigner() {
@@ -181,14 +181,14 @@ const N = {
181
181
  * @returns {*[]}
182
182
  */
183
183
  getFieldWidgets(e = null) {
184
- return e ? c(e) : c(this.designer.widgetList);
184
+ return e ? m(e) : m(this.designer.widgetList);
185
185
  },
186
186
  /**
187
187
  * 获取所有容器组件
188
188
  * @returns {*[]}
189
189
  */
190
190
  getContainerWidgets(e = null) {
191
- return e ? f(e) : f(this.designer.widgetList);
191
+ return e ? c(e) : c(this.designer.widgetList);
192
192
  },
193
193
  /**
194
194
  * 升级表单json,以补充最新的组件属性
@@ -199,7 +199,7 @@ const N = {
199
199
  this.$message.error("Invalid form json!");
200
200
  return;
201
201
  }
202
- return y(e.widgetList, (t) => {
202
+ return R(e.widgetList, (t) => {
203
203
  this.designer.upgradeWidgetConfig(t);
204
204
  }), this.designer.upgradeFormConfig(e.formConfig), e;
205
205
  },
@@ -242,50 +242,50 @@ const N = {
242
242
  }
243
243
  //TODO: 增加更多方法!!
244
244
  }
245
- }, P = { class: "container-scroll-bar" };
246
- function k(e, t, s, M, i, l) {
247
- const u = o("WidgetPanel"), d = o("a-layout-sider"), p = o("toolbar-panel"), W = o("a-layout-header"), _ = o("VFormWidget"), a = o("a-layout-content"), L = o("setting-panel"), g = o("a-layout");
248
- return D(), A(g, { class: "main-container full-height" }, {
249
- default: n(() => [
250
- r(g, null, {
251
- default: n(() => [
252
- r(d, {
245
+ }, k = { class: "container-scroll-bar" };
246
+ function M(e, t, s, j, i, d) {
247
+ const p = n("WidgetPanel"), l = n("a-layout-sider"), W = n("toolbar-panel"), _ = n("a-layout-header"), L = n("VFormWidget"), g = n("a-layout-content"), C = n("setting-panel"), a = n("a-layout");
248
+ return S(), D(a, { class: "main-container full-height" }, {
249
+ default: o(() => [
250
+ r(a, null, {
251
+ default: o(() => [
252
+ r(l, {
253
253
  width: i.leftWidth,
254
254
  class: "side-panel"
255
255
  }, {
256
- default: n(() => [
257
- r(u, { designer: i.designer }, null, 8, ["designer"])
256
+ default: o(() => [
257
+ r(p, { designer: i.designer }, null, 8, ["designer"])
258
258
  ]),
259
259
  _: 1
260
260
  }, 8, ["width"]),
261
- r(a, { class: "center-layout-container" }, {
262
- default: n(() => [
263
- r(W, { class: "toolbar-header" }, {
264
- default: n(() => [
265
- r(p, {
261
+ r(g, { class: "center-layout-container" }, {
262
+ default: o(() => [
263
+ r(_, { class: "toolbar-header" }, {
264
+ default: o(() => [
265
+ r(W, {
266
266
  saveJsonApi: s.saveJsonApi,
267
267
  designer: i.designer,
268
268
  "global-dsv": s.globalDsv,
269
- changeLeftWidth: l.changeLeftWidth,
270
- changeRightWidth: l.changeRightWidth,
269
+ changeLeftWidth: d.changeLeftWidth,
270
+ changeRightWidth: d.changeRightWidth,
271
271
  leftWidth: i.leftWidth,
272
272
  rightWidth: i.rightWidth,
273
273
  ref: "toolbarRef"
274
- }, S({ _: 2 }, [
275
- V(e.$slots, (j, h) => ({
276
- name: h,
277
- fn: n(() => [
278
- H(e.$slots, h)
274
+ }, V({ _: 2 }, [
275
+ H(e.$slots, (h, f) => ({
276
+ name: f,
277
+ fn: o(() => [
278
+ B(e.$slots, f)
279
279
  ])
280
280
  }))
281
281
  ]), 1032, ["saveJsonApi", "designer", "global-dsv", "changeLeftWidth", "changeRightWidth", "leftWidth", "rightWidth"])
282
282
  ]),
283
283
  _: 3
284
284
  }),
285
- r(a, { class: "form-widget-main" }, {
286
- default: n(() => [
287
- B("div", P, [
288
- r(_, {
285
+ r(g, { class: "form-widget-main" }, {
286
+ default: o(() => [
287
+ E("div", k, [
288
+ r(L, {
289
289
  designer: i.designer,
290
290
  "form-config": i.designer.formConfig,
291
291
  "global-dsv": s.globalDsv,
@@ -298,11 +298,12 @@ function k(e, t, s, M, i, l) {
298
298
  ]),
299
299
  _: 3
300
300
  }),
301
- r(d, { width: i.rightWidth }, {
302
- default: n(() => [
303
- r(L, {
301
+ r(l, { width: i.rightWidth }, {
302
+ default: o(() => [
303
+ r(C, {
304
304
  designer: i.designer,
305
305
  "selected-widget": i.designer.selectedWidget,
306
+ "onUpdate:selectedWidget": t[0] || (t[0] = (h) => i.designer.selectedWidget = h),
306
307
  "global-dsv": s.globalDsv,
307
308
  "form-config": i.designer.formConfig
308
309
  }, null, 8, ["designer", "selected-widget", "global-dsv", "form-config"])
@@ -316,7 +317,7 @@ function k(e, t, s, M, i, l) {
316
317
  _: 3
317
318
  });
318
319
  }
319
- const Z = /* @__PURE__ */ E(N, [["render", k]]);
320
+ const Z = /* @__PURE__ */ N(P, [["render", M]]);
320
321
  export {
321
322
  Z as default
322
323
  };
@@ -1,38 +1,77 @@
1
- import { defineComponent as s, useModel as d, createElementBlock as m, openBlock as f, createVNode as r, unref as t } from "vue";
2
- import n from "../../http-editor/index.vue.js";
3
- import { useI18n as p } from "../../../utils/i18n.js";
4
- const u = { class: "t-p-[10px]" }, _ = /* @__PURE__ */ s({
1
+ import { defineComponent as f, useModel as v, ref as m, reactive as g, watch as b, createElementBlock as C, openBlock as c, Fragment as w, createElementVNode as h, createVNode as n, unref as i } from "vue";
2
+ import p from "../../http-editor/index.vue.js";
3
+ import { HttpEditor as H } from "tmgc2-share";
4
+ import { useI18n as L } from "../../../utils/i18n.js";
5
+ import "lodash-es";
6
+ const M = { class: "t-p-[10px]" }, _ = /* @__PURE__ */ f({
5
7
  __name: "form-crud-setting",
6
8
  props: {
7
9
  formConfig: {
8
10
  type: Object,
9
11
  default: () => ({
10
12
  serveList: {
11
- vformUpdate: {},
12
- vformDetail: {}
13
+ vformUpdate: {
14
+ http: { url: "", method: "get", params: {}, data: {} },
15
+ dataReqHandlerCode: "",
16
+ dataHandlerCode: ""
17
+ },
18
+ vformDetail: {
19
+ http: { url: "", method: "get", params: {}, data: {} },
20
+ dataReqHandlerCode: "",
21
+ dataHandlerCode: ""
22
+ },
23
+ list: []
13
24
  }
14
25
  })
15
26
  },
16
27
  formConfigModifiers: {}
17
28
  },
18
29
  emits: ["update:formConfig"],
19
- setup(l) {
20
- const { i18nt: e } = p(), o = d(l, "formConfig");
21
- return (v, i) => (f(), m("div", u, [
22
- r(n, {
23
- label: t(e)("designer.hint.表单编辑api"),
24
- buttonName: t(e)("designer.setting.edit"),
25
- drawerTitle: t(e)("表单配置"),
26
- optionModel: o.value.serveList.vformUpdate,
27
- "onUpdate:optionModel": i[0] || (i[0] = (a) => o.value.serveList.vformUpdate = a)
28
- }, null, 8, ["label", "buttonName", "drawerTitle", "optionModel"]),
29
- r(n, {
30
- label: t(e)("designer.hint.表单详情API"),
31
- buttonName: t(e)("designer.setting.edit"),
32
- drawerTitle: t(e)("表单配置"),
33
- optionModel: o.value.serveList.vformDetail
34
- }, null, 8, ["label", "buttonName", "drawerTitle", "optionModel"])
35
- ]));
30
+ setup(u) {
31
+ const { i18nt: a } = L(), o = v(u, "formConfig"), r = m(!1), d = g({
32
+ index: -1,
33
+ isNew: !1
34
+ }), l = m({
35
+ http: {
36
+ url: "",
37
+ method: "get",
38
+ params: {},
39
+ data: {}
40
+ },
41
+ dataReqHandlerCode: "",
42
+ dataHandlerCode: ""
43
+ });
44
+ return b(r, (s, e) => {
45
+ var t;
46
+ if (s === !1 && e === !0) {
47
+ if (!((t = l.value.http) != null && t.url))
48
+ return;
49
+ d.isNew ? (o.value.serveList.list || (o.value.serveList.list = []), o.value.serveList.list.push(l.value)) : d.index > -1 && (o.value.serveList.list[d.index] = l.value);
50
+ }
51
+ }), (s, e) => (c(), C(w, null, [
52
+ h("div", M, [
53
+ n(p, {
54
+ label: i(a)("designer.hint.表单编辑api"),
55
+ buttonName: i(a)("designer.setting.edit"),
56
+ drawerTitle: i(a)("表单配置"),
57
+ optionModel: o.value.serveList.vformUpdate,
58
+ "onUpdate:optionModel": e[0] || (e[0] = (t) => o.value.serveList.vformUpdate = t)
59
+ }, null, 8, ["label", "buttonName", "drawerTitle", "optionModel"]),
60
+ n(p, {
61
+ label: i(a)("designer.hint.表单详情API"),
62
+ buttonName: i(a)("designer.setting.edit"),
63
+ drawerTitle: i(a)("表单配置"),
64
+ optionModel: o.value.serveList.vformDetail
65
+ }, null, 8, ["label", "buttonName", "drawerTitle", "optionModel"])
66
+ ]),
67
+ n(i(H), {
68
+ "option-model": l.value,
69
+ "onUpdate:optionModel": e[1] || (e[1] = (t) => l.value = t),
70
+ visible: r.value,
71
+ "onUpdate:visible": e[2] || (e[2] = (t) => r.value = t),
72
+ "drawer-title": "接口配置"
73
+ }, null, 8, ["option-model", "visible"])
74
+ ], 64));
36
75
  }
37
76
  });
38
77
  export {