@shjjs/visual-ui 1.0.28 → 1.0.29

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.
@@ -29,7 +29,7 @@ const y = class y {
29
29
  */
30
30
  static parse({ sources: t, callback: a, tId: e, isStore: s = !1, noUseMapping: i = !1, isInterval: n = !0 }) {
31
31
  return a ?? (a = () => {
32
- }), t && k(t) && t.length > 0 ? new Promise((p, o) => {
32
+ }), t && k(t) && t.length > 0 && t[0] ? new Promise((p, o) => {
33
33
  P.cleanupPreviousWebSockets(this.wsInstances, t.map((r) => r.id), e);
34
34
  const f = /* @__PURE__ */ new Set(), h = this.wsInstances.get(e) || /* @__PURE__ */ new Set();
35
35
  t.forEach((r) => {
@@ -1,22 +1,23 @@
1
- var m = Object.defineProperty;
2
- var f = (a, e, t) => e in a ? m(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
3
- var d = (a, e, t) => f(a, typeof e != "symbol" ? e + "" : e, t);
4
- import { cloneDeep as l } from "lodash";
5
- import { executeLinkAction as y } from "./actions/linkAction.mjs";
6
- import { executeMoveAction as A } from "./actions/moveAction.mjs";
1
+ var d = Object.defineProperty;
2
+ var f = (s, e, t) => e in s ? d(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
3
+ var m = (s, e, t) => f(s, typeof e != "symbol" ? e + "" : e, t);
4
+ import { cloneDeep as y } from "lodash";
5
+ import { executeLinkAction as A } from "./actions/linkAction.mjs";
6
+ import { executeMoveAction as g } from "./actions/moveAction.mjs";
7
7
  import { executeSendApiAction as h } from "./actions/sendApiAction.mjs";
8
8
  import { executeScaleAction as x } from "./actions/scaleAction.mjs";
9
- import { executeRotateAction as g } from "./actions/rotateAction.mjs";
10
- import { executeUpdatePageAction as E } from "./actions/updatePageAction.mjs";
11
- import { executeInvokeAction as S } from "./actions/invokeAction.mjs";
12
- import { executeFullScreenAction as b } from "./actions/fullScreenAction.mjs";
9
+ import { executeRotateAction as S } from "./actions/rotateAction.mjs";
10
+ import { executeUpdatePageAction as b } from "./actions/updatePageAction.mjs";
11
+ import { executeInvokeAction as E } from "./actions/invokeAction.mjs";
12
+ import { executeFullScreenAction as V } from "./actions/fullScreenAction.mjs";
13
13
  import { executeUpdateVariableAction as w } from "./actions/updateVariableAction.mjs";
14
14
  import { executeUpdateWidgetAction as M } from "./actions/updateWidgetAction.mjs";
15
15
  import { executeUeCommonsWebscoketAction as U } from "./actions/ueCommonsWebscoketAction.mjs";
16
16
  import { executeUeShjExecMethodAction as k } from "./actions/ueShjExecMethodAction.mjs";
17
17
  import { executeUnityWebglExecMethodAction as C } from "./actions/unityWebglExecMethodAction.mjs";
18
- import { executeUnityIframeExecMethodAction as N } from "./actions/unityIframeExecMethodAction.mjs";
19
- import { executeVrSceneMethodAction as V } from "./actions/vrSceneMethodAction.mjs";
18
+ import { executeUnityIframeExecMethodAction as D } from "./actions/unityIframeExecMethodAction.mjs";
19
+ import { executeVrSceneMethodAction as N } from "./actions/vrSceneMethodAction.mjs";
20
+ import { DataSourceUtils as l } from "../datasource/utils/utils.mjs";
20
21
  class W {
21
22
  /**
22
23
  * 添加事件解析器
@@ -24,8 +25,8 @@ class W {
24
25
  * @param parser 事件解析器
25
26
  */
26
27
  static addAction(e, t) {
27
- const o = Array.from(this.actions).find((r) => r.type === e);
28
- o && this.actions.delete(o), this.actions.add({ type: e, parser: t });
28
+ const i = Array.from(this.actions).find((r) => r.type === e);
29
+ i && this.actions.delete(i), this.actions.add({ type: e, parser: t });
29
30
  }
30
31
  /**
31
32
  * 获取事件解析器
@@ -33,7 +34,7 @@ class W {
33
34
  * @returns 事件解析器
34
35
  */
35
36
  static getAction(e) {
36
- const t = Array.from(this.actions).find((o) => o.type === e);
37
+ const t = Array.from(this.actions).find((i) => i.type === e);
37
38
  return t == null ? void 0 : t.parser;
38
39
  }
39
40
  /**
@@ -42,22 +43,22 @@ class W {
42
43
  * @param type 事件类型
43
44
  * @param params 参数
44
45
  */
45
- static parseEvents(e, t, o) {
46
- e != null && e.length && e.forEach((r, p) => {
46
+ static parseEvents(e, t, i) {
47
+ e != null && e.length && e.forEach((r, c) => {
47
48
  r.eventType === t && setTimeout(() => {
48
49
  const u = new CustomEvent("event-params-log", {
49
50
  detail: {
50
51
  eventId: r.id,
51
- params: o
52
+ params: i
52
53
  }
53
54
  });
54
55
  window.dispatchEvent(u);
55
- const s = this.filterEvent(r, o);
56
- if (!this.conditionLogic(r, s) || !r.actions)
56
+ const p = this.filterEvent(r, i);
57
+ if (!this.conditionLogic(r, p) || !r.actions)
57
58
  return;
58
59
  const n = this.getAction(r.actions);
59
- n && n(r, s);
60
- }, r.delay + p * 10);
60
+ n && n(r, p);
61
+ }, r.delay + c * 10);
61
62
  });
62
63
  }
63
64
  /**
@@ -67,19 +68,20 @@ class W {
67
68
  * @returns 过滤后的参数
68
69
  */
69
70
  static filterEvent(e, t) {
70
- let o = l(t);
71
+ let i = y(t);
71
72
  if (e.filterCode)
72
73
  try {
73
- const r = `
74
+ const r = l.getVariableData();
75
+ let c = `
74
76
  ${e.filterCode}
75
77
 
76
78
  // 在这里调用 filter 函数,并传递 data 参数
77
79
  return filter(data);
78
80
  `;
79
- o = new Function("data", r)(t);
81
+ c = c.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, ""), c = l.replaceStringVariables(c, r), i = new Function("data", c)(t);
80
82
  } catch {
81
83
  }
82
- return o;
84
+ return i;
83
85
  }
84
86
  /**
85
87
  * 条件逻辑判断
@@ -88,68 +90,69 @@ class W {
88
90
  * @returns 是否通过
89
91
  */
90
92
  static conditionLogic(e, t) {
91
- var u, s;
92
- if (!((s = (u = e.condition) == null ? void 0 : u.list) != null && s.length))
93
+ var u, p;
94
+ if (!((p = (u = e.condition) == null ? void 0 : u.list) != null && p.length))
93
95
  return !0;
94
- const o = (n) => {
96
+ const i = (n) => {
95
97
  if (n.type === "field") {
96
98
  if (!n.conditionName) return !1;
97
- const i = t[n.conditionName];
98
- if (i === void 0) return !1;
99
- const c = n.conditionValue;
99
+ const a = t[n.conditionName];
100
+ if (a === void 0) return !1;
101
+ const o = n.conditionValue;
100
102
  switch (n.conditionExpression) {
101
103
  case "eq":
102
- return i.toString() === (c || "").toString();
104
+ return a.toString() === (o || "").toString();
103
105
  case "neq":
104
- return i !== c;
106
+ return a !== o;
105
107
  case "lt":
106
- return i < Number(c);
108
+ return a < Number(o);
107
109
  case "gt":
108
- return i > Number(c);
110
+ return a > Number(o);
109
111
  case "lte":
110
- return i <= Number(c);
112
+ return a <= Number(o);
111
113
  case "gte":
112
- return i >= Number(c);
114
+ return a >= Number(o);
113
115
  case "includes":
114
- return i.includes(c);
116
+ return a.includes(o);
115
117
  case "noincludes":
116
- return !i.includes(c);
118
+ return !a.includes(o);
117
119
  default:
118
120
  return !1;
119
121
  }
120
122
  }
121
123
  if (n.type === "custom")
122
124
  try {
123
- const i = `
125
+ const a = l.getVariableData();
126
+ let o = `
124
127
  ${n.customValue}
125
128
  return condition(data);
126
129
  `;
127
- return new Function("data", i)(t);
130
+ return o = o.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, ""), o = l.replaceStringVariables(o, a), new Function("data", o)(t);
128
131
  } catch {
129
132
  return !1;
130
133
  }
131
134
  return !1;
132
- }, r = e.condition.list.map(o);
135
+ }, r = e.condition.list.map(i);
133
136
  return e.condition.type === "and" ? r.every(Boolean) : r.some(Boolean);
134
137
  }
135
138
  }
136
139
  /** 事件动作 */
137
- d(W, "actions", /* @__PURE__ */ new Set([
138
- { type: "link", parser: y },
140
+ m(W, "actions", /* @__PURE__ */ new Set([
141
+ { type: "link", parser: A },
139
142
  { type: "sendApi", parser: h },
140
- { type: "move", parser: A },
143
+ { type: "move", parser: g },
141
144
  { type: "scale", parser: x },
142
- { type: "rotate", parser: g },
143
- { type: "updatePage", parser: E },
144
- { type: "invoke", parser: S },
145
- { type: "fullscreen", parser: b },
145
+ { type: "rotate", parser: S },
146
+ { type: "updatePage", parser: b },
147
+ { type: "invoke", parser: E },
148
+ { type: "fullscreen", parser: V },
146
149
  { type: "updateVariable", parser: w },
147
150
  { type: "updateWidget", parser: M },
148
151
  { type: "ueCommonsWebscoket", parser: U },
149
152
  { type: "ueShjExecMethod", parser: k },
150
153
  { type: "unityWebglExecMethod", parser: C },
151
- { type: "unityIframeExecMethod", parser: N },
152
- { type: "vrSceneMethod", parser: V }
154
+ { type: "unityIframeExecMethod", parser: D },
155
+ { type: "vrSceneMethod", parser: N }
153
156
  ]));
154
157
  export {
155
158
  W as SHJParseEvent
@@ -1,4 +1,4 @@
1
- "use strict";var b=Object.defineProperty;var U=(S,e,a)=>e in S?b(S,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):S[e]=a;var P=(S,e,a)=>U(S,typeof e!="symbol"?e+"":e,a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("lodash"),F=require("./sources/static.js"),A=require("./sources/url.js"),j=require("./sources/variable.js"),v=require("./sources/api.js"),K=require("./sources/ws.js"),I=require("./utils/utils.js"),x=require("./sources/storage.js"),g=class g{static addParser(e,a){this.parsers.add({type:e,parser:a})}static getParser(e){const a=Array.from(this.parsers).find(t=>t.type===e);return a==null?void 0:a.parser}static parse({sources:e,callback:a,tId:t,isStore:s=!1,noUseMapping:i=!1,isInterval:n=!0}){return a??(a=()=>{}),e&&y.isArray(e)&&e.length>0?new Promise((u,o)=>{I.DataSourceUtils.cleanupPreviousWebSockets(this.wsInstances,e.map(r=>r.id),t);const c=new Set,h=this.wsInstances.get(t)||new Set;e.forEach(r=>{var m;if(n){const{source:l}=r,d=`${t}-${r.id}`,w=this.datasourceTimer.findIndex(D=>D.id===d);if(w!==-1&&(clearInterval(this.datasourceTimer[w].timer),this.datasourceTimer.splice(w,1)),l.isAutoUpdate){const D=setInterval(()=>{var f;(f=this.task(r,s,i,t,p=>{a(p)}))==null||f.then(p=>{u(p)})},l.autoUpdateTime*1e3);this.datasourceTimer.push({id:d,timer:D})}}if(r.source.type!=="ws"){(m=this.task(r,s,i,t,l=>a(l)))==null||m.then(l=>u(l));return}if(I.DataSourceUtils.hasValidWebSocket(this.wsInstances,t,r.id))h.forEach(l=>{l.getId()===r.id&&c.add(l)});else{const l=K.parseWebSocket(r,r.id,i,t,d=>{u(d),a({data:[{data:d.finalUserData.data}]}),this.taskStorage(e,d.rawData.data)});c.add(l)}}),c.size>0&&this.wsInstances.set(t,c)}):(a([]),Promise.resolve([]))}static task(e,a=!1,t=!1,s,i=()=>{}){return e?new Promise((n,u)=>{let o=null;const{source:c}=e,h=this.getParser(c.type);h&&(o=h(e,e.id,t)),o.then(r=>{i(t?r.noMappingData:r.finalKeyData),this.taskStorage(e,r.rawData.data),n(r)})}):(i([]),Promise.resolve([]))}static filterData(e,a){return new Promise((t,s)=>{if(y.isString(e)){try{const i=I.DataSourceUtils.getVariableData();let n=`
1
+ "use strict";var b=Object.defineProperty;var U=(S,e,a)=>e in S?b(S,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):S[e]=a;var P=(S,e,a)=>U(S,typeof e!="symbol"?e+"":e,a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("lodash"),F=require("./sources/static.js"),A=require("./sources/url.js"),j=require("./sources/variable.js"),v=require("./sources/api.js"),K=require("./sources/ws.js"),I=require("./utils/utils.js"),x=require("./sources/storage.js"),g=class g{static addParser(e,a){this.parsers.add({type:e,parser:a})}static getParser(e){const a=Array.from(this.parsers).find(t=>t.type===e);return a==null?void 0:a.parser}static parse({sources:e,callback:a,tId:t,isStore:s=!1,noUseMapping:i=!1,isInterval:n=!0}){return a??(a=()=>{}),e&&y.isArray(e)&&e.length>0&&e[0]?new Promise((u,o)=>{I.DataSourceUtils.cleanupPreviousWebSockets(this.wsInstances,e.map(r=>r.id),t);const c=new Set,h=this.wsInstances.get(t)||new Set;e.forEach(r=>{var m;if(n){const{source:l}=r,d=`${t}-${r.id}`,w=this.datasourceTimer.findIndex(D=>D.id===d);if(w!==-1&&(clearInterval(this.datasourceTimer[w].timer),this.datasourceTimer.splice(w,1)),l.isAutoUpdate){const D=setInterval(()=>{var f;(f=this.task(r,s,i,t,p=>{a(p)}))==null||f.then(p=>{u(p)})},l.autoUpdateTime*1e3);this.datasourceTimer.push({id:d,timer:D})}}if(r.source.type!=="ws"){(m=this.task(r,s,i,t,l=>a(l)))==null||m.then(l=>u(l));return}if(I.DataSourceUtils.hasValidWebSocket(this.wsInstances,t,r.id))h.forEach(l=>{l.getId()===r.id&&c.add(l)});else{const l=K.parseWebSocket(r,r.id,i,t,d=>{u(d),a({data:[{data:d.finalUserData.data}]}),this.taskStorage(e,d.rawData.data)});c.add(l)}}),c.size>0&&this.wsInstances.set(t,c)}):(a([]),Promise.resolve([]))}static task(e,a=!1,t=!1,s,i=()=>{}){return e?new Promise((n,u)=>{let o=null;const{source:c}=e,h=this.getParser(c.type);h&&(o=h(e,e.id,t)),o.then(r=>{i(t?r.noMappingData:r.finalKeyData),this.taskStorage(e,r.rawData.data),n(r)})}):(i([]),Promise.resolve([]))}static filterData(e,a){return new Promise((t,s)=>{if(y.isString(e)){try{const i=I.DataSourceUtils.getVariableData();let n=`
2
2
  ${e}
3
3
 
4
4
  // 在这里调用 filter 函数,并传递 data 参数
@@ -1,9 +1,9 @@
1
- "use strict";var A=Object.defineProperty;var f=(s,e,t)=>e in s?A(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var l=(s,e,t)=>f(s,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("lodash"),h=require("./actions/linkAction.js"),m=require("./actions/moveAction.js"),x=require("./actions/sendApiAction.js"),g=require("./actions/scaleAction.js"),q=require("./actions/rotateAction.js"),E=require("./actions/updatePageAction.js"),S=require("./actions/invokeAction.js"),b=require("./actions/fullScreenAction.js"),M=require("./actions/updateVariableAction.js"),k=require("./actions/updateWidgetAction.js"),w=require("./actions/ueCommonsWebscoketAction.js"),W=require("./actions/ueShjExecMethodAction.js"),v=require("./actions/unityWebglExecMethodAction.js"),P=require("./actions/unityIframeExecMethodAction.js"),C=require("./actions/vrSceneMethodAction.js");class p{static addAction(e,t){const n=Array.from(this.actions).find(r=>r.type===e);n&&this.actions.delete(n),this.actions.add({type:e,parser:t})}static getAction(e){const t=Array.from(this.actions).find(n=>n.type===e);return t==null?void 0:t.parser}static parseEvents(e,t,n){e!=null&&e.length&&e.forEach((r,d)=>{r.eventType===t&&setTimeout(()=>{const u=new CustomEvent("event-params-log",{detail:{eventId:r.id,params:n}});window.dispatchEvent(u);const a=this.filterEvent(r,n);if(!this.conditionLogic(r,a)||!r.actions)return;const i=this.getAction(r.actions);i&&i(r,a)},r.delay+d*10)})}static filterEvent(e,t){let n=y.cloneDeep(t);if(e.filterCode)try{const r=`
1
+ "use strict";var f=Object.defineProperty;var y=(s,e,t)=>e in s?f(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var p=(s,e,t)=>y(s,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("lodash"),m=require("./actions/linkAction.js"),g=require("./actions/moveAction.js"),x=require("./actions/sendApiAction.js"),S=require("./actions/scaleAction.js"),b=require("./actions/rotateAction.js"),q=require("./actions/updatePageAction.js"),E=require("./actions/invokeAction.js"),M=require("./actions/fullScreenAction.js"),U=require("./actions/updateVariableAction.js"),V=require("./actions/updateWidgetAction.js"),v=require("./actions/ueCommonsWebscoketAction.js"),k=require("./actions/ueShjExecMethodAction.js"),w=require("./actions/unityWebglExecMethodAction.js"),D=require("./actions/unityIframeExecMethodAction.js"),W=require("./actions/vrSceneMethodAction.js"),d=require("../datasource/utils/utils.js");class A{static addAction(e,t){const n=Array.from(this.actions).find(r=>r.type===e);n&&this.actions.delete(n),this.actions.add({type:e,parser:t})}static getAction(e){const t=Array.from(this.actions).find(n=>n.type===e);return t==null?void 0:t.parser}static parseEvents(e,t,n){e!=null&&e.length&&e.forEach((r,a)=>{r.eventType===t&&setTimeout(()=>{const u=new CustomEvent("event-params-log",{detail:{eventId:r.id,params:n}});window.dispatchEvent(u);const l=this.filterEvent(r,n);if(!this.conditionLogic(r,l)||!r.actions)return;const o=this.getAction(r.actions);o&&o(r,l)},r.delay+a*10)})}static filterEvent(e,t){let n=h.cloneDeep(t);if(e.filterCode)try{const r=d.DataSourceUtils.getVariableData();let a=`
2
2
  ${e.filterCode}
3
3
 
4
4
  // 在这里调用 filter 函数,并传递 data 参数
5
5
  return filter(data);
6
- `;n=new Function("data",r)(t)}catch{}return n}static conditionLogic(e,t){var u,a;if(!((a=(u=e.condition)==null?void 0:u.list)!=null&&a.length))return!0;const n=i=>{if(i.type==="field"){if(!i.conditionName)return!1;const c=t[i.conditionName];if(c===void 0)return!1;const o=i.conditionValue;switch(i.conditionExpression){case"eq":return c.toString()===(o||"").toString();case"neq":return c!==o;case"lt":return c<Number(o);case"gt":return c>Number(o);case"lte":return c<=Number(o);case"gte":return c>=Number(o);case"includes":return c.includes(o);case"noincludes":return!c.includes(o);default:return!1}}if(i.type==="custom")try{const c=`
7
- ${i.customValue}
6
+ `;a=a.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""),a=d.DataSourceUtils.replaceStringVariables(a,r),n=new Function("data",a)(t)}catch{}return n}static conditionLogic(e,t){var u,l;if(!((l=(u=e.condition)==null?void 0:u.list)!=null&&l.length))return!0;const n=o=>{if(o.type==="field"){if(!o.conditionName)return!1;const c=t[o.conditionName];if(c===void 0)return!1;const i=o.conditionValue;switch(o.conditionExpression){case"eq":return c.toString()===(i||"").toString();case"neq":return c!==i;case"lt":return c<Number(i);case"gt":return c>Number(i);case"lte":return c<=Number(i);case"gte":return c>=Number(i);case"includes":return c.includes(i);case"noincludes":return!c.includes(i);default:return!1}}if(o.type==="custom")try{const c=d.DataSourceUtils.getVariableData();let i=`
7
+ ${o.customValue}
8
8
  return condition(data);
9
- `;return new Function("data",c)(t)}catch{return!1}return!1},r=e.condition.list.map(n);return e.condition.type==="and"?r.every(Boolean):r.some(Boolean)}}l(p,"actions",new Set([{type:"link",parser:h.executeLinkAction},{type:"sendApi",parser:x.executeSendApiAction},{type:"move",parser:m.executeMoveAction},{type:"scale",parser:g.executeScaleAction},{type:"rotate",parser:q.executeRotateAction},{type:"updatePage",parser:E.executeUpdatePageAction},{type:"invoke",parser:S.executeInvokeAction},{type:"fullscreen",parser:b.executeFullScreenAction},{type:"updateVariable",parser:M.executeUpdateVariableAction},{type:"updateWidget",parser:k.executeUpdateWidgetAction},{type:"ueCommonsWebscoket",parser:w.executeUeCommonsWebscoketAction},{type:"ueShjExecMethod",parser:W.executeUeShjExecMethodAction},{type:"unityWebglExecMethod",parser:v.executeUnityWebglExecMethodAction},{type:"unityIframeExecMethod",parser:P.executeUnityIframeExecMethodAction},{type:"vrSceneMethod",parser:C.executeVrSceneMethodAction}]));exports.SHJParseEvent=p;
9
+ `;return i=i.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""),i=d.DataSourceUtils.replaceStringVariables(i,c),new Function("data",i)(t)}catch{return!1}return!1},r=e.condition.list.map(n);return e.condition.type==="and"?r.every(Boolean):r.some(Boolean)}}p(A,"actions",new Set([{type:"link",parser:m.executeLinkAction},{type:"sendApi",parser:x.executeSendApiAction},{type:"move",parser:g.executeMoveAction},{type:"scale",parser:S.executeScaleAction},{type:"rotate",parser:b.executeRotateAction},{type:"updatePage",parser:q.executeUpdatePageAction},{type:"invoke",parser:E.executeInvokeAction},{type:"fullscreen",parser:M.executeFullScreenAction},{type:"updateVariable",parser:U.executeUpdateVariableAction},{type:"updateWidget",parser:V.executeUpdateWidgetAction},{type:"ueCommonsWebscoket",parser:v.executeUeCommonsWebscoketAction},{type:"ueShjExecMethod",parser:k.executeUeShjExecMethodAction},{type:"unityWebglExecMethod",parser:w.executeUnityWebglExecMethodAction},{type:"unityIframeExecMethod",parser:D.executeUnityIframeExecMethodAction},{type:"vrSceneMethod",parser:W.executeVrSceneMethodAction}]));exports.SHJParseEvent=A;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shjjs/visual-ui",
3
- "version": "1.0.28",
3
+ "version": "1.0.29",
4
4
  "description": "国产自研零代码可视化源码工具",
5
5
  "keywords": [
6
6
  "three",