clickgo 3.10.0 → 3.10.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.
package/README.md CHANGED
@@ -28,7 +28,7 @@ Load the module loader first, and then load it using the module loader.
28
28
  **index.html**
29
29
 
30
30
  ```html
31
- <script src="https://cdn.jsdelivr.net/npm/@litert/loader@3.5.0/dist/loader.min.js?path=index&npm={'clickgo':'3.10.0'}"></script>
31
+ <script src="https://cdn.jsdelivr.net/npm/@litert/loader@3.5.0/dist/loader.min.js?path=index&npm={'clickgo':'3.10.1'}"></script>
32
32
  ```
33
33
 
34
34
  **index.js**
@@ -117,6 +117,10 @@ This library is published under [Apache-2.0](./LICENSE) license.
117
117
  [Border Radius SVG Vector](https://www.svgrepo.com/svg/446973/border-radius)
118
118
  [Copy SVG Vector](https://www.svgrepo.com/svg/446994/copy)
119
119
 
120
+ #### Select
121
+
122
+ [Close SVG Vector](https://www.svgrepo.com/svg/446990/close)
123
+
120
124
  ### **LICENSE:** MIT License **AUTHOR:** developmentseed
121
125
 
122
126
  #### Map
@@ -157,6 +157,8 @@
157
157
  "/form/method/tool/tool.xml",
158
158
  "/form/method/zip/zip.js",
159
159
  "/form/method/zip/zip.xml",
160
+ "/form/solution/backpanel/backpanel.js",
161
+ "/form/solution/backpanel/backpanel.xml",
160
162
  "/form/main.css",
161
163
  "/form/main.js",
162
164
  "/form/main.xml",
@@ -48,14 +48,14 @@ class default_1 extends clickgo.form.AbstractForm {
48
48
  this.minWidth = 200;
49
49
  this.minHeight = 100;
50
50
  this.resize = true;
51
- this.loading = false;
51
+ this.floading = false;
52
52
  this.border = 'normal';
53
53
  }
54
54
  showLoading() {
55
55
  return __awaiter(this, void 0, void 0, function* () {
56
- this.loading = true;
56
+ this.floading = true;
57
57
  yield clickgo.tool.sleep(1000);
58
- this.loading = false;
58
+ this.floading = false;
59
59
  });
60
60
  }
61
61
  }
@@ -1,4 +1,4 @@
1
- <form v-model:width="width" v-model:height="height" :icon="icon" :title="title" :min="min" :max="max" :close="close" v-model:state-max="stateMax" v-model:state-min="stateMin" :min-width="minWidth" :min-height="minHeight" :resize="resize" :loading="loading" :border="border" direction="v">
1
+ <form v-model:width="width" v-model:height="height" :icon="icon" :title="title" :min="min" :max="max" :close="close" v-model:state-max="stateMax" v-model:state-min="stateMin" :min-width="minWidth" :min-height="minHeight" :resize="resize" :loading="floading" :border="border" direction="v">
2
2
  <flow direction="v">
3
3
  <layout direction="v" gutter="10" style="padding: 10px;">
4
4
  <label>focus: {{formFocus}}, width: {{width}}, height: {{height}}, state-max: {{stateMax}}, state-min: {{stateMin}}.</label>
@@ -37,15 +37,16 @@ class default_1 extends clickgo.form.AbstractForm {
37
37
  constructor() {
38
38
  super(...arguments);
39
39
  this.layer = false;
40
+ this.qs = {};
40
41
  this.name = '';
41
42
  this.isShow = true;
42
- this.loading = false;
43
43
  this.logo = '';
44
+ this.hash = false;
44
45
  }
45
- onSelect(e, o, v) {
46
+ onSelect(e) {
46
47
  return __awaiter(this, void 0, void 0, function* () {
47
48
  e.preventDefault();
48
- yield clickgo.form.dialog('Not nav, o: ' + o + ', v: ' + v);
49
+ yield clickgo.form.dialog('Not nav, selected: ' + e.detail.selected + ', name: ' + e.detail.name);
49
50
  });
50
51
  }
51
52
  onMounted() {
@@ -1,5 +1,5 @@
1
- <form width="600" height="500" title="Nav" :loading="loading">
2
- <nav v-model="name" v-model:show="isShow" :logo="logo" @layer="layer = $event" style="flex: 1; width: 0;">
1
+ <form width="600" height="500" title="Nav">
2
+ <nav v-model="name" default="Action1" v-model:show="isShow" :logo="logo" @layer="layer = $event" @qs="qs = $event" :hash="hash" style="flex: 1; width: 0;">
3
3
  <nav-item label="Title1">
4
4
  <nav-title>group1</nav-title>
5
5
  <nav-item label="Sub1">
@@ -39,9 +39,10 @@
39
39
  <nav-item label="Root2"></nav-item>
40
40
  <nav-item label="Root3" name="root?id=1"></nav-item>
41
41
  <nav-item label="Root4" name="root?id=2"></nav-item>
42
+ <nav-item label="Root5" name="root"></nav-item>
42
43
  <nav-item label="Event" @select="onSelect"></nav-item>
43
- <nav-item label="Root3" icon="/package/res/icon.svg"></nav-item>
44
- <nav-item label="Root4" icon="/package/res/marker.svg"></nav-item>
44
+ <nav-item label="Root6" name="root6" icon="/package/res/icon.svg"></nav-item>
45
+ <nav-item label="Root7" icon="/package/res/marker.svg"></nav-item>
45
46
  <template v-slot:header>
46
47
  <label style="flex: 1; padding-left: 10px;">Test</label>
47
48
  <menu>
@@ -78,10 +79,17 @@
78
79
  <label>Now select: {{name}}</label>
79
80
  <label>Show: {{isShow ? 'true' : 'false'}}</label>
80
81
  <label>Layer: {{layer ? 'true' : 'false'}}</label>
82
+ <label>Qs: {{qs}}</label>
83
+ <label>formHash: {{formHash}}</label>
81
84
  <button v-if="layer" @click="isShow = true">Open</button>
82
85
  <button @click="name = 'Action11'">Select "Action11"</button>
83
86
  <button @click="name = 'hasname'">Select "hasname"</button>
87
+ <button @click="name = 'root6?id=8'">Select "root6?id=8"</button>
84
88
  <button @click="logo = logo ? '' : '/clickgo/icon.png'">{{logo ? 'Remove' : 'Set'}} logo</button>
89
+ <layout gutter="10">
90
+ <button @click="hash = !hash" style="flex: 1;">{{hash ? '' : '!'}}hash</button>
91
+ <button v-if="hash" @click="formHashBack" style="flex: 1;">hashBack</button>
92
+ </layout>
85
93
  </layout>
86
94
  </template>
87
95
  </nav>
@@ -41,8 +41,9 @@ class default_1 extends clickgo.form.AbstractForm {
41
41
  constructor() {
42
42
  super(...arguments);
43
43
  this.selected = ['none'];
44
+ this.panelv = '';
44
45
  this.parentData = 'yeah!';
45
- this.loading = false;
46
+ this.map = null;
46
47
  }
47
48
  go() {
48
49
  return __awaiter(this, void 0, void 0, function* () {
@@ -58,22 +59,41 @@ class default_1 extends clickgo.form.AbstractForm {
58
59
  'type': 'send'
59
60
  });
60
61
  }
62
+ changeMap() {
63
+ this.map = this.map ? null : {
64
+ 'test1': test1_1.default,
65
+ 'test2': './test2'
66
+ };
67
+ }
61
68
  onMounted() {
62
69
  this.watch('selected', () => __awaiter(this, void 0, void 0, function* () {
63
70
  switch (this.selected[0]) {
64
71
  case 'none': {
72
+ if (this.map) {
73
+ this.panelv = '';
74
+ }
65
75
  break;
66
76
  }
67
77
  case './test1': {
68
- this.loading = true;
69
- yield this.refs.panel.go(test1_1.default);
70
- this.loading = false;
78
+ if (this.map) {
79
+ this.panelv = 'test1';
80
+ }
81
+ else {
82
+ this.loading = true;
83
+ yield this.refs.panel.go(test1_1.default);
84
+ this.loading = false;
85
+ }
71
86
  break;
72
87
  }
73
88
  case './test2': {
74
- this.loading = true;
75
- yield this.refs.panel.go('./test2');
76
- this.loading = false;
89
+ if (this.map) {
90
+ this.panelv = 'test2';
91
+ }
92
+ else {
93
+ this.loading = true;
94
+ yield this.refs.panel.go('./test2');
95
+ this.loading = false;
96
+ }
77
97
  break;
78
98
  }
79
99
  }
@@ -1,11 +1,12 @@
1
- <form width="600" height="500" title="Panel" :loading="loading">
1
+ <form width="600" height="500" title="Panel">
2
2
  <layout direction="v" gutter="10" style="padding: 10px; flex: 1;">
3
3
  <label>Form ID: {{formId}}</label>
4
4
  <select v-model="selected" :data="['none', './test1', './test2']"></select>
5
5
  <layout gutter="10">
6
- <button v-if="selected[0] !== './test1'" style="height: 30px; flex: 1;" @click="go">Go test1 with {'type': 'show'}</button>
7
- <button style="height: 30px; flex: 1;" @click="ssend">send {'type': 'send'}</button>
6
+ <button v-if="selected[0] !== './test1'" style="flex: 1;" @click="go">Go test1 with {'type': 'show'}</button>
7
+ <button style="flex: 1;" @click="ssend">send {'type': 'send'}</button>
8
+ <button style="flex: 1;" @click="changeMap">{{map ? '' : '!'}}map</button>
8
9
  </layout>
9
- <panel ref="panel" style="flex: 1;"></panel>
10
+ <panel ref="panel" v-model="panelv" :map="map" @go="loading=true" @went="loading=false" style="flex: 1;"></panel>
10
11
  </layout>
11
12
  </form>
@@ -57,6 +57,12 @@ class default_1 extends clickgo.form.AbstractPanel {
57
57
  yield clickgo.form.dialog('test1 got data.');
58
58
  });
59
59
  }
60
+ onQsChange() {
61
+ clickgo.form.notify({
62
+ 'title': 'Test1 Panel',
63
+ 'content': 'onQsChange: ' + Object.keys(this.qs).length.toString()
64
+ });
65
+ }
60
66
  click() {
61
67
  return __awaiter(this, void 0, void 0, function* () {
62
68
  yield clickgo.form.dialog('Hello panel!');
@@ -3,6 +3,7 @@
3
3
  <label>onShow count: {{scount}}</label>
4
4
  <label>Data: {{data}}</label>
5
5
  <label>Parent data: {{rootForm.parentData}}</label>
6
+ <label>Qs: {{qs}}</label>
6
7
  <button @click="click" style="height: 30px;">Hi</button>
7
8
  <layout>
8
9
  <button style="padding: 15px 30px;" area="split">
@@ -90,6 +90,7 @@ const task_2 = __importDefault(require("./method/task/task"));
90
90
  const theme_1 = __importDefault(require("./method/theme/theme"));
91
91
  const tool_1 = __importDefault(require("./method/tool/tool"));
92
92
  const zip_1 = __importDefault(require("./method/zip/zip"));
93
+ const backpanel_1 = __importDefault(require("./solution/backpanel/backpanel"));
93
94
  class default_1 extends clickgo.form.AbstractForm {
94
95
  constructor() {
95
96
  super(...arguments);
@@ -330,8 +331,12 @@ class default_1 extends clickgo.form.AbstractForm {
330
331
  frm = yield clickgo.form.create(tool_1.default);
331
332
  break;
332
333
  }
333
- default: {
334
+ case 'mzip': {
334
335
  frm = yield clickgo.form.create(zip_1.default);
336
+ break;
337
+ }
338
+ default: {
339
+ frm = yield clickgo.form.create(backpanel_1.default);
335
340
  }
336
341
  }
337
342
  frm.show();
@@ -1,5 +1,5 @@
1
1
  <form width="400" height="550" title="ClickGo demo" icon="/package/res/icon.svg">
2
- <tab v-model="ntab" :tabs="['control', 'method', 'event']" style="margin: 10px; flex: 1;">
2
+ <tab v-model="ntab" :tabs="['control', 'method', 'event', 'solution']" style="margin: 10px; flex: 1;">
3
3
  <flow v-if="ntab === 'control'" class="inner" direction="v">
4
4
  <layout class="buttons" gutter="10" direction="v">
5
5
  <label>App data: {{adata}}</label>
@@ -104,7 +104,7 @@
104
104
  <button @click="openForm('msystem')">System</button>
105
105
  </layout>
106
106
  </flow>
107
- <flow v-else class="inner" direction="v">
107
+ <flow v-else-if="ntab === 'event'" class="inner" direction="v">
108
108
  <layout gutter="10" direction="v">
109
109
  <button @click="openForm('escreen')">About screen</button>
110
110
  <button @click="openForm('eform')">About form</button>
@@ -112,5 +112,10 @@
112
112
  <button @click="openForm('eother')">About other</button>
113
113
  </layout>
114
114
  </flow>
115
+ <flow v-else class="inner" direction="v">
116
+ <layout gutter="10" direction="v">
117
+ <button @click="openForm('sbackpanel')">Backend panel</button>
118
+ </layout>
119
+ </flow>
115
120
  </tab>
116
121
  </form>
@@ -64,6 +64,13 @@ class default_1 extends clickgo.form.AbstractForm {
64
64
  this.dr = yield frm.showDialog();
65
65
  });
66
66
  }
67
+ showLoading() {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ this.loading = true;
70
+ yield clickgo.tool.sleep(1000);
71
+ this.loading = false;
72
+ });
73
+ }
67
74
  onMounted() {
68
75
  this.watch('test', () => __awaiter(this, void 0, void 0, function* () {
69
76
  yield clickgo.form.dialog('test changed.');
@@ -30,6 +30,7 @@
30
30
  <label>{{formHash}}</label>
31
31
  </layout>
32
32
  <button @click="formHashBack">formHashBack()</button>
33
+ <button @click="showLoading">Show loading</button>
33
34
  <layout gutter="10" align-v="center">
34
35
  <label>Form Hash:</label>
35
36
  <text v-model="hash" style="flex: 1; width: 0;"></text>
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ const clickgo = __importStar(require("clickgo"));
39
+ const test1_1 = __importDefault(require("../../control/panel/test1"));
40
+ class default_1 extends clickgo.form.AbstractForm {
41
+ constructor() {
42
+ super(...arguments);
43
+ this.fh = '';
44
+ this.name = '';
45
+ this.map = {
46
+ 'test1': test1_1.default,
47
+ 'test2': '../../control/panel/test2'
48
+ };
49
+ }
50
+ onFormHashChange(taskId, formId, value) {
51
+ if (formId !== this.formId) {
52
+ return;
53
+ }
54
+ this.fh = value;
55
+ }
56
+ onSelect(e) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ e.preventDefault();
59
+ yield clickgo.form.dialog('Show form');
60
+ });
61
+ }
62
+ }
63
+ exports.default = default_1;
@@ -0,0 +1,29 @@
1
+ <form width="800" height="500" title="Backend Panel" padding="10">
2
+ <layout direction="v" gutter="10" style="flex: 1;">
3
+ <layout gutter="10" align-v="center">
4
+ <label>formHash:</label>
5
+ <text v-model="fh" style="flex: 1;" />
6
+ <button @click="formHash = fh">Change</button>
7
+ </layout>
8
+ <nav v-model="name" default="list" hash style="flex: 1;">
9
+ <nav-item label="User">
10
+ <nav-item label="All list" name="list"></nav-item>
11
+ <nav-item label="Available" name="list?avail=1"></nav-item>
12
+ </nav-item>
13
+ <nav-item label="Goods">
14
+ <nav-item label="Available" name="goodslist?avail=1"></nav-item>
15
+ <nav-item label="Unavailable" name="goodslist?avail=0"></nav-item>
16
+ </nav-item>
17
+ <nav-item label="Form" name="form" @select="onSelect"></nav-item>
18
+ <nav-item label="Test1" name="test1"></nav-item>
19
+ <nav-item label="Test1QS" name="test1?a=1&b=2"></nav-item>
20
+ <nav-item label="Test2" name="test2"></nav-item>
21
+ <template v-slot:header>
22
+ <label style="flex: 1; text-align: right; padding-right: var(--g-padding);">Panel</label>
23
+ </template>
24
+ <template v-slot:content>
25
+ <panel :map="map" style="flex: 1;" @go="loading = true" @went="loading = false"></panel>
26
+ </template>
27
+ </nav>
28
+ </layout>
29
+ </form>
package/dist/clickgo.js CHANGED
@@ -24,7 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.zip = exports.tool = exports.theme = exports.task = exports.storage = exports.native = exports.fs = exports.form = exports.dom = exports.core = exports.control = exports.vue = exports.hasFrame = exports.isImmersion = exports.getPlatform = exports.isNative = exports.getVersion = void 0;
27
- const version = '3.10.0';
27
+ const version = '3.10.1';
28
28
  function getVersion() {
29
29
  return version;
30
30
  }
package/dist/clickgo.ts CHANGED
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- const version = '3.10.0';
16
+ const version = '3.10.1';
17
17
  export function getVersion(): string {
18
18
  return version;
19
19
  }
Binary file
Binary file
Binary file
@@ -42,6 +42,7 @@ const form = __importStar(require("./form"));
42
42
  const fs = __importStar(require("./fs"));
43
43
  class AbstractControl {
44
44
  constructor() {
45
+ this._rootForm = null;
45
46
  this.packageFiles = {};
46
47
  this.props = {};
47
48
  this.emits = {};
@@ -59,8 +60,22 @@ class AbstractControl {
59
60
  get formId() {
60
61
  return 0;
61
62
  }
63
+ get rootForm() {
64
+ if (!this._rootForm) {
65
+ this._rootForm = this.parentByName('root');
66
+ if (!this._rootForm) {
67
+ form.notify({
68
+ 'title': 'Error',
69
+ 'content': `The "rootForm" is not ready yet.\nFile: "${this.controlName}".`,
70
+ 'type': 'danger'
71
+ });
72
+ }
73
+ }
74
+ return this._rootForm;
75
+ }
62
76
  get formFocus() {
63
- return this.parentByName('root').formFocus;
77
+ var _a, _b;
78
+ return (_b = (_a = this.rootForm) === null || _a === void 0 ? void 0 : _a.formFocus) !== null && _b !== void 0 ? _b : false;
64
79
  }
65
80
  get path() {
66
81
  return '';
@@ -49,11 +49,29 @@ export abstract class AbstractControl {
49
49
  return 0;
50
50
  }
51
51
 
52
+ /** --- root form --- */
53
+ private _rootForm: form.AbstractForm & Record<string, any> | null = null;
54
+
55
+ /** --- 当前控件所在窗体的窗体对象,系统会在创建时重写本函数 --- */
56
+ public get rootForm(): form.AbstractForm & Record<string, any> {
57
+ if (!this._rootForm) {
58
+ this._rootForm = this.parentByName('root') as any;
59
+ if (!this._rootForm) {
60
+ form.notify({
61
+ 'title': 'Error',
62
+ 'content': `The "rootForm" is not ready yet.\nFile: "${this.controlName}".`,
63
+ 'type': 'danger'
64
+ });
65
+ }
66
+ }
67
+ return this._rootForm!;
68
+ }
69
+
52
70
  /**
53
71
  * --- 当前窗体是否有焦点 ---
54
72
  */
55
73
  public get formFocus(): boolean {
56
- return this.parentByName('root')!.formFocus;
74
+ return this.rootForm?.formFocus ?? false;
57
75
  }
58
76
 
59
77
  /** --- 当前控件所在运行窗体的包内路径不以 / 结尾 --- */
package/dist/lib/form.js CHANGED
@@ -244,12 +244,19 @@ class AbstractCommon {
244
244
  }
245
245
  }
246
246
  class AbstractPanel extends AbstractCommon {
247
+ constructor() {
248
+ super(...arguments);
249
+ this.qs = {};
250
+ }
247
251
  get panelId() {
248
252
  return 0;
249
253
  }
250
254
  get rootForm() {
251
255
  return {};
252
256
  }
257
+ get rootPanel() {
258
+ return {};
259
+ }
253
260
  get formFocus() {
254
261
  var _a;
255
262
  return (_a = this.rootForm.formFocus) !== null && _a !== void 0 ? _a : false;
@@ -266,12 +273,16 @@ class AbstractPanel extends AbstractCommon {
266
273
  onReceive() {
267
274
  return;
268
275
  }
276
+ onQsChange() {
277
+ return;
278
+ }
269
279
  }
270
280
  exports.AbstractPanel = AbstractPanel;
271
281
  class AbstractForm extends AbstractCommon {
272
282
  constructor() {
273
283
  super(...arguments);
274
284
  this.isNativeSync = false;
285
+ this.loading = false;
275
286
  this._inStep = false;
276
287
  this._firstShow = true;
277
288
  this.dialogResult = '';
@@ -1720,30 +1731,62 @@ function getForm(taskId, formId) {
1720
1731
  }
1721
1732
  return form;
1722
1733
  }
1723
- function createPanel(cls, el, formId, taskId) {
1734
+ function createPanel(rootPanel, cls, opt = {}, taskId) {
1735
+ var _a;
1724
1736
  return __awaiter(this, void 0, void 0, function* () {
1725
- if (!taskId) {
1726
- const err = new Error('form.createPanel: -1');
1737
+ if (rootPanel.element.dataset.cgControl !== 'panel') {
1738
+ const err = new Error('form.createPanel: -0');
1727
1739
  core.trigger('error', 0, 0, err, err.message);
1728
1740
  throw err;
1729
1741
  }
1730
- if (el.dataset.cgControl !== 'panel') {
1731
- const err = new Error('form.createPanel: -2');
1742
+ const formWrap = dom.findParentByData(rootPanel.element, 'form-id');
1743
+ if (!formWrap) {
1744
+ const err = new Error('form.createPanel: -0');
1745
+ core.trigger('error', 0, 0, err, err.message);
1746
+ throw err;
1747
+ }
1748
+ const formId = parseInt(formWrap.dataset.formId);
1749
+ if (!taskId) {
1750
+ const err = new Error('form.createPanel: -1');
1732
1751
  core.trigger('error', 0, 0, err, err.message);
1733
1752
  throw err;
1734
1753
  }
1735
1754
  const t = task.list[taskId];
1736
1755
  if (!t) {
1737
- const err = new Error('form.createPanel: -3');
1756
+ const err = new Error('form.createPanel: -2');
1738
1757
  core.trigger('error', 0, 0, err, err.message);
1739
1758
  throw err;
1740
1759
  }
1760
+ let layout = '';
1761
+ if (opt.layout) {
1762
+ layout = opt.layout;
1763
+ }
1764
+ let style = '';
1765
+ let prep = '';
1766
+ if (opt.style) {
1767
+ style = opt.style;
1768
+ }
1741
1769
  let filename = '';
1742
1770
  if (typeof cls === 'string') {
1743
- filename = cls + '.js';
1771
+ filename = tool.urlResolve((_a = opt.path) !== null && _a !== void 0 ? _a : '/', cls);
1772
+ if (!layout) {
1773
+ const l = t.app.files[filename + '.xml'];
1774
+ if (typeof l !== 'string') {
1775
+ const err = new Error('form.createPanel: -3');
1776
+ core.trigger('error', 0, 0, err, err.message);
1777
+ throw err;
1778
+ }
1779
+ layout = l;
1780
+ }
1781
+ if (!style) {
1782
+ const s = t.app.files[filename + '.css'];
1783
+ if (typeof s === 'string') {
1784
+ style = s;
1785
+ }
1786
+ }
1744
1787
  cls = class extends AbstractPanel {
1745
1788
  get filename() {
1746
- return filename;
1789
+ return filename + '.js';
1747
1790
  }
1748
1791
  get taskId() {
1749
1792
  return t.id;
@@ -1757,18 +1800,22 @@ function createPanel(cls, el, formId, taskId) {
1757
1800
  }
1758
1801
  const lio = filename.lastIndexOf('/');
1759
1802
  const path = filename.slice(0, lio);
1760
- const l = t.app.files[filename.slice(0, -2) + 'xml'];
1761
- if (typeof l !== 'string') {
1762
- const err = new Error('form.createPanel: -4');
1763
- core.trigger('error', 0, 0, err, err.message);
1764
- throw err;
1803
+ if (!layout) {
1804
+ const l = t.app.files[filename.slice(0, -2) + 'xml'];
1805
+ if (typeof l !== 'string') {
1806
+ const err = new Error('form.createPanel: -4');
1807
+ core.trigger('error', 0, 0, err, err.message);
1808
+ throw err;
1809
+ }
1810
+ layout = l;
1765
1811
  }
1766
- let layout = l;
1767
- let style = '';
1768
- let prep = '';
1769
- const s = t.app.files[filename.slice(0, -2) + 'css'];
1770
- if (typeof s === 'string') {
1771
- style = s;
1812
+ if (!style) {
1813
+ const s = t.app.files[filename.slice(0, -2) + 'css'];
1814
+ if (typeof s === 'string') {
1815
+ style = s;
1816
+ }
1817
+ }
1818
+ if (style) {
1772
1819
  const r = tool.stylePrepend(style);
1773
1820
  prep = r.prep;
1774
1821
  style = yield tool.styleUrl2DataUrl(path + '/', r.style, t.app.files);
@@ -1866,11 +1913,24 @@ function createPanel(cls, el, formId, taskId) {
1866
1913
  return;
1867
1914
  }
1868
1915
  };
1869
- el.insertAdjacentHTML('beforeend', `<div data-panel-id="${panelId.toString()}"></div>`);
1916
+ computed.rootPanel = {
1917
+ get: function () {
1918
+ return rootPanel;
1919
+ },
1920
+ set: function () {
1921
+ notify({
1922
+ 'title': 'Error',
1923
+ 'content': `The software tries to modify the system variable "rootPanel".\nPath: ${this.filename}`,
1924
+ 'type': 'danger'
1925
+ });
1926
+ return;
1927
+ }
1928
+ };
1929
+ rootPanel.element.insertAdjacentHTML('beforeend', `<div data-panel-id="${panelId.toString()}"></div>`);
1870
1930
  if (style) {
1871
1931
  dom.pushStyle(t.id, style, 'form', formId, panelId);
1872
1932
  }
1873
- const mel = el.children.item(el.children.length - 1);
1933
+ const mel = rootPanel.element.children.item(rootPanel.element.children.length - 1);
1874
1934
  mel.style.position = 'absolute';
1875
1935
  mel.style.pointerEvents = 'none';
1876
1936
  mel.style.opacity = '0';
package/dist/lib/form.ts CHANGED
@@ -340,6 +340,14 @@ export abstract class AbstractPanel extends AbstractCommon {
340
340
  return {} as any;
341
341
  }
342
342
 
343
+ /** --- 当前 panel 所在的 panel control 对象,系统会在创建时重写本函数 --- */
344
+ public get rootPanel(): control.AbstractControl & Record<string, any> {
345
+ return {} as any;
346
+ }
347
+
348
+ /** --- 当前的 nav(若有)传递过来的 qs --- */
349
+ public qs: Record<string, string> = {};
350
+
343
351
  /** --- 当前窗体是否是焦点 --- */
344
352
  public get formFocus(): boolean {
345
353
  return this.rootForm.formFocus ?? false;
@@ -366,6 +374,11 @@ export abstract class AbstractPanel extends AbstractCommon {
366
374
  return;
367
375
  }
368
376
 
377
+ /** --- qs 变动时调用,如果只是用来做 qs 数据处理,建议用此方法 --- */
378
+ public onQsChange(): void | Promise<void> {
379
+ return;
380
+ }
381
+
369
382
  }
370
383
 
371
384
  /** --- 窗体的抽象类 --- */
@@ -447,6 +460,9 @@ export abstract class AbstractForm extends AbstractCommon {
447
460
  core.trigger('formHashChange', this.taskId, this.formId, parent);
448
461
  }
449
462
 
463
+ /** --- 覆盖整个窗体的 loading --- */
464
+ public loading: boolean = false;
465
+
450
466
  // --- step 相关 ---
451
467
 
452
468
  private _inStep: boolean = false;
@@ -2257,39 +2273,78 @@ function getForm(taskId: number, formId: number): types.IForm | null {
2257
2273
  * @param taskId 任务ID,App 模式下无效
2258
2274
  */
2259
2275
  export async function createPanel<T extends AbstractPanel>(
2276
+ rootPanel: control.AbstractControl,
2260
2277
  cls: string | (new () => T),
2261
- el: HTMLElement,
2262
- formId: number,
2278
+ opt: {
2279
+ 'layout'?: string;
2280
+ 'style'?: string;
2281
+ /** --- cls 为 string 时,path 参数才有效,为基准路径,如果不以 / 结尾则以最后一个 / 字符为准 --- */
2282
+ 'path'?: string;
2283
+ } = {},
2263
2284
  taskId?: number
2264
2285
  ): Promise<{
2265
2286
  'id': number;
2266
2287
  'vapp': types.IVApp;
2267
2288
  'vroot': T;
2268
2289
  }> {
2269
- if (!taskId) {
2270
- const err = new Error('form.createPanel: -1');
2290
+ if (rootPanel.element.dataset.cgControl !== 'panel') {
2291
+ const err = new Error('form.createPanel: -0');
2271
2292
  core.trigger('error', 0, 0, err, err.message);
2272
2293
  throw err;
2273
2294
  }
2274
- if (el.dataset.cgControl !== 'panel') {
2275
- const err = new Error('form.createPanel: -2');
2295
+ const formWrap = dom.findParentByData(rootPanel.element, 'form-id');
2296
+ if (!formWrap) {
2297
+ const err = new Error('form.createPanel: -0');
2298
+ core.trigger('error', 0, 0, err, err.message);
2299
+ throw err;
2300
+ }
2301
+ const formId = parseInt(formWrap.dataset.formId!);
2302
+ if (!taskId) {
2303
+ const err = new Error('form.createPanel: -1');
2276
2304
  core.trigger('error', 0, 0, err, err.message);
2277
2305
  throw err;
2278
2306
  }
2279
2307
  /** --- 当前的 task 对象 --- */
2280
2308
  const t = task.list[taskId];
2281
2309
  if (!t) {
2282
- const err = new Error('form.createPanel: -3');
2310
+ const err = new Error('form.createPanel: -2');
2283
2311
  core.trigger('error', 0, 0, err, err.message);
2284
2312
  throw err;
2285
2313
  }
2314
+ /** --- 布局内容 --- */
2315
+ let layout: string = '';
2316
+ if (opt.layout) {
2317
+ layout = opt.layout;
2318
+ }
2319
+ /** --- 样式内容 --- */
2320
+ let style: string = '';
2321
+ /** --- 样式前缀 --- */
2322
+ let prep = '';
2323
+ if (opt.style) {
2324
+ style = opt.style;
2325
+ }
2286
2326
  /** --- 文件在包内的路径,不以 / 结尾 --- */
2287
2327
  let filename = '';
2288
2328
  if (typeof cls === 'string') {
2289
- filename = cls + '.js';
2329
+ filename = tool.urlResolve(opt.path ?? '/', cls);
2330
+ if (!layout) {
2331
+ const l = t.app.files[filename + '.xml'];
2332
+ if (typeof l !== 'string') {
2333
+ const err = new Error('form.createPanel: -3');
2334
+ core.trigger('error', 0, 0, err, err.message);
2335
+ throw err;
2336
+ }
2337
+ layout = l;
2338
+ }
2339
+ if (!style) {
2340
+ const s = t.app.files[filename + '.css'];
2341
+ if (typeof s === 'string') {
2342
+ style = s;
2343
+ }
2344
+ }
2290
2345
  cls = class extends AbstractPanel {
2291
2346
  public get filename(): string {
2292
- return filename;
2347
+ return filename + '.js';
2293
2348
  }
2294
2349
 
2295
2350
  public get taskId(): number {
@@ -2309,22 +2364,24 @@ export async function createPanel<T extends AbstractPanel>(
2309
2364
  const path = filename.slice(0, lio);
2310
2365
 
2311
2366
  // --- 布局 ---
2312
- const l = t.app.files[filename.slice(0, -2) + 'xml'];
2313
- if (typeof l !== 'string') {
2314
- const err = new Error('form.createPanel: -4');
2315
- core.trigger('error', 0, 0, err, err.message);
2316
- throw err;
2367
+ if (!layout) {
2368
+ const l = t.app.files[filename.slice(0, -2) + 'xml'];
2369
+ if (typeof l !== 'string') {
2370
+ const err = new Error('form.createPanel: -4');
2371
+ core.trigger('error', 0, 0, err, err.message);
2372
+ throw err;
2373
+ }
2374
+ layout = l;
2317
2375
  }
2318
- let layout = l;
2319
2376
 
2320
2377
  // --- 样式 ---
2321
- /** --- 样式内容 --- */
2322
- let style: string = '';
2323
- /** --- 样式前缀 --- */
2324
- let prep = '';
2325
- const s = t.app.files[filename.slice(0, -2) + 'css'];
2326
- if (typeof s === 'string') {
2327
- style = s;
2378
+ if (!style) {
2379
+ const s = t.app.files[filename.slice(0, -2) + 'css'];
2380
+ if (typeof s === 'string') {
2381
+ style = s;
2382
+ }
2383
+ }
2384
+ if (style) {
2328
2385
  // --- 将 style 中的 tag 标签转换为 class,如 button 变为 .tag-button,然后将 class 进行标准程序,添加 prep 进行区分隔离 ---
2329
2386
  const r = tool.stylePrepend(style);
2330
2387
  prep = r.prep;
@@ -2439,14 +2496,27 @@ export async function createPanel<T extends AbstractPanel>(
2439
2496
  return;
2440
2497
  }
2441
2498
  };
2499
+ computed.rootPanel = {
2500
+ get: function(): control.AbstractControl & Record<string, any> {
2501
+ return rootPanel;
2502
+ },
2503
+ set: function(this: types.IVue): void {
2504
+ notify({
2505
+ 'title': 'Error',
2506
+ 'content': `The software tries to modify the system variable "rootPanel".\nPath: ${this.filename}`,
2507
+ 'type': 'danger'
2508
+ });
2509
+ return;
2510
+ }
2511
+ };
2442
2512
 
2443
2513
  // --- 插入 dom ---
2444
- el.insertAdjacentHTML('beforeend', `<div data-panel-id="${panelId.toString()}"></div>`);
2514
+ rootPanel.element.insertAdjacentHTML('beforeend', `<div data-panel-id="${panelId.toString()}"></div>`);
2445
2515
  if (style) {
2446
2516
  dom.pushStyle(t.id, style, 'form', formId, panelId);
2447
2517
  }
2448
2518
  /** --- panel wrap element 对象 --- */
2449
- const mel: HTMLElement = el.children.item(el.children.length - 1) as HTMLElement;
2519
+ const mel: HTMLElement = rootPanel.element.children.item(rootPanel.element.children.length - 1) as HTMLElement;
2450
2520
  mel.style.position = 'absolute';
2451
2521
  mel.style.pointerEvents = 'none';
2452
2522
  mel.style.opacity = '0';
package/dist/lib/fs.js CHANGED
@@ -38,7 +38,7 @@ const task = __importStar(require("./task"));
38
38
  const form = __importStar(require("./form"));
39
39
  const core = __importStar(require("./core"));
40
40
  const native = __importStar(require("./native"));
41
- const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout/', '/app/demo/form/control/alayout/alayout.css', '/app/demo/form/control/alayout/alayout.js', '/app/demo/form/control/alayout/alayout.xml', '/app/demo/form/control/arteditor/', '/app/demo/form/control/arteditor/arteditor.js', '/app/demo/form/control/arteditor/arteditor.xml', '/app/demo/form/control/arteditor/img.js', '/app/demo/form/control/arteditor/img.xml', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/box/', '/app/demo/form/control/box/box.js', '/app/demo/form/control/box/box.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.xml', '/app/demo/form/control/desc/', '/app/demo/form/control/desc/desc.js', '/app/demo/form/control/desc/desc.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/flow/', '/app/demo/form/control/flow/flow.css', '/app/demo/form/control/flow/flow.js', '/app/demo/form/control/flow/flow.xml', '/app/demo/form/control/form/', '/app/demo/form/control/form/form.css', '/app/demo/form/control/form/form.js', '/app/demo/form/control/form/form.xml', '/app/demo/form/control/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.xml', '/app/demo/form/control/iconview/', '/app/demo/form/control/iconview/iconview.js', '/app/demo/form/control/iconview/iconview.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.js', '/app/demo/form/control/label/label.xml', '/app/demo/form/control/layout/', '/app/demo/form/control/layout/layout.js', '/app/demo/form/control/layout/layout.xml', '/app/demo/form/control/link/', '/app/demo/form/control/link/link.js', '/app/demo/form/control/link/link.xml', '/app/demo/form/control/list/', '/app/demo/form/control/list/list.css', '/app/demo/form/control/list/list.js', '/app/demo/form/control/list/list.xml', '/app/demo/form/control/loading/', '/app/demo/form/control/loading/loading.xml', '/app/demo/form/control/map/', '/app/demo/form/control/map/map.js', '/app/demo/form/control/map/map.xml', '/app/demo/form/control/marquee/', '/app/demo/form/control/marquee/marquee.js', '/app/demo/form/control/marquee/marquee.xml', '/app/demo/form/control/menu/', '/app/demo/form/control/menu/menu.js', '/app/demo/form/control/menu/menu.xml', '/app/demo/form/control/monaco/', '/app/demo/form/control/monaco/monaco.js', '/app/demo/form/control/monaco/monaco.xml', '/app/demo/form/control/nav/', '/app/demo/form/control/nav/nav.js', '/app/demo/form/control/nav/nav.xml', '/app/demo/form/control/page/', '/app/demo/form/control/page/page.js', '/app/demo/form/control/page/page.xml', '/app/demo/form/control/panel/', '/app/demo/form/control/panel/panel.js', '/app/demo/form/control/panel/panel.xml', '/app/demo/form/control/panel/test1.js', '/app/demo/form/control/panel/test1.xml', '/app/demo/form/control/panel/test2.xml', '/app/demo/form/control/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.xml', '/app/demo/form/control/radio/', '/app/demo/form/control/radio/radio.js', '/app/demo/form/control/radio/radio.xml', '/app/demo/form/control/scroll/', '/app/demo/form/control/scroll/scroll.js', '/app/demo/form/control/scroll/scroll.xml', '/app/demo/form/control/select/', '/app/demo/form/control/select/select.js', '/app/demo/form/control/select/select.xml', '/app/demo/form/control/step/', '/app/demo/form/control/step/step.js', '/app/demo/form/control/step/step.xml', '/app/demo/form/control/svg/', '/app/demo/form/control/svg/svg.js', '/app/demo/form/control/svg/svg.xml', '/app/demo/form/control/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/table/', '/app/demo/form/control/table/table.js', '/app/demo/form/control/table/table.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.xml', '/app/demo/form/control/vflow/', '/app/demo/form/control/vflow/vflow.css', '/app/demo/form/control/vflow/vflow.js', '/app/demo/form/control/vflow/vflow.xml', '/app/demo/form/control/video/', '/app/demo/form/control/video/video.js', '/app/demo/form/control/video/video.xml', '/app/demo/form/control/xterm/', '/app/demo/form/control/xterm/xterm.js', '/app/demo/form/control/xterm/xterm.xml', '/app/demo/form/event/', '/app/demo/form/event/form/', '/app/demo/form/event/form/form.css', '/app/demo/form/event/form/form.js', '/app/demo/form/event/form/form.xml', '/app/demo/form/event/other/', '/app/demo/form/event/other/other.js', '/app/demo/form/event/other/other.xml', '/app/demo/form/event/screen/', '/app/demo/form/event/screen/screen.js', '/app/demo/form/event/screen/screen.xml', '/app/demo/form/event/task/', '/app/demo/form/event/task/task.js', '/app/demo/form/event/task/task.xml', '/app/demo/form/main.css', '/app/demo/form/main.js', '/app/demo/form/main.xml', '/app/demo/form/method/', '/app/demo/form/method/aform/', '/app/demo/form/method/aform/aform.js', '/app/demo/form/method/aform/aform.xml', '/app/demo/form/method/aform/sd.js', '/app/demo/form/method/aform/sd.xml', '/app/demo/form/method/core/', '/app/demo/form/method/core/core.js', '/app/demo/form/method/core/core.xml', '/app/demo/form/method/dom/', '/app/demo/form/method/dom/dom.css', '/app/demo/form/method/dom/dom.js', '/app/demo/form/method/dom/dom.xml', '/app/demo/form/method/form/', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.xml', '/app/demo/form/method/form/test.xml', '/app/demo/form/method/fs/', '/app/demo/form/method/fs/fs.js', '/app/demo/form/method/fs/fs.xml', '/app/demo/form/method/fs/text.js', '/app/demo/form/method/fs/text.xml', '/app/demo/form/method/native/', '/app/demo/form/method/native/native.js', '/app/demo/form/method/native/native.xml', '/app/demo/form/method/storage/', '/app/demo/form/method/storage/storage.js', '/app/demo/form/method/storage/storage.xml', '/app/demo/form/method/system/', '/app/demo/form/method/system/system.js', '/app/demo/form/method/system/system.xml', '/app/demo/form/method/task/', '/app/demo/form/method/task/locale1.json', '/app/demo/form/method/task/locale2.json', '/app/demo/form/method/task/task.js', '/app/demo/form/method/task/task.xml', '/app/demo/form/method/theme/', '/app/demo/form/method/theme/theme.js', '/app/demo/form/method/theme/theme.xml', '/app/demo/form/method/tool/', '/app/demo/form/method/tool/tool.js', '/app/demo/form/method/tool/tool.xml', '/app/demo/form/method/zip/', '/app/demo/form/method/zip/zip.js', '/app/demo/form/method/zip/zip.xml', '/app/demo/global.css', '/app/demo/res/', '/app/demo/res/icon.svg', '/app/demo/res/img.jpg', '/app/demo/res/marker.svg', '/app/demo/res/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/video.mp4', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/app/task/config.json', '/app/task/form/', '/app/task/form/bar/', '/app/task/form/bar/bar.js', '/app/task/form/bar/bar.xml', '/app/task/form/desktop/', '/app/task/form/desktop/desktop.xml', '/app/task/locale/', '/app/task/locale/en.json', '/app/task/locale/ja.json', '/app/task/locale/sc.json', '/app/task/locale/tc.json', '/clickgo.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/html.cgc', '/control/iconview.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/property.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tuieditor.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/byterun.cgt', '/theme/familiar.cgt', '/theme/light.cgt'];
41
+ const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout/', '/app/demo/form/control/alayout/alayout.css', '/app/demo/form/control/alayout/alayout.js', '/app/demo/form/control/alayout/alayout.xml', '/app/demo/form/control/arteditor/', '/app/demo/form/control/arteditor/arteditor.js', '/app/demo/form/control/arteditor/arteditor.xml', '/app/demo/form/control/arteditor/img.js', '/app/demo/form/control/arteditor/img.xml', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/box/', '/app/demo/form/control/box/box.js', '/app/demo/form/control/box/box.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.xml', '/app/demo/form/control/desc/', '/app/demo/form/control/desc/desc.js', '/app/demo/form/control/desc/desc.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/flow/', '/app/demo/form/control/flow/flow.css', '/app/demo/form/control/flow/flow.js', '/app/demo/form/control/flow/flow.xml', '/app/demo/form/control/form/', '/app/demo/form/control/form/form.css', '/app/demo/form/control/form/form.js', '/app/demo/form/control/form/form.xml', '/app/demo/form/control/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.xml', '/app/demo/form/control/iconview/', '/app/demo/form/control/iconview/iconview.js', '/app/demo/form/control/iconview/iconview.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.js', '/app/demo/form/control/label/label.xml', '/app/demo/form/control/layout/', '/app/demo/form/control/layout/layout.js', '/app/demo/form/control/layout/layout.xml', '/app/demo/form/control/link/', '/app/demo/form/control/link/link.js', '/app/demo/form/control/link/link.xml', '/app/demo/form/control/list/', '/app/demo/form/control/list/list.css', '/app/demo/form/control/list/list.js', '/app/demo/form/control/list/list.xml', '/app/demo/form/control/loading/', '/app/demo/form/control/loading/loading.xml', '/app/demo/form/control/map/', '/app/demo/form/control/map/map.js', '/app/demo/form/control/map/map.xml', '/app/demo/form/control/marquee/', '/app/demo/form/control/marquee/marquee.js', '/app/demo/form/control/marquee/marquee.xml', '/app/demo/form/control/menu/', '/app/demo/form/control/menu/menu.js', '/app/demo/form/control/menu/menu.xml', '/app/demo/form/control/monaco/', '/app/demo/form/control/monaco/monaco.js', '/app/demo/form/control/monaco/monaco.xml', '/app/demo/form/control/nav/', '/app/demo/form/control/nav/nav.js', '/app/demo/form/control/nav/nav.xml', '/app/demo/form/control/page/', '/app/demo/form/control/page/page.js', '/app/demo/form/control/page/page.xml', '/app/demo/form/control/panel/', '/app/demo/form/control/panel/panel.js', '/app/demo/form/control/panel/panel.xml', '/app/demo/form/control/panel/test1.js', '/app/demo/form/control/panel/test1.xml', '/app/demo/form/control/panel/test2.xml', '/app/demo/form/control/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.xml', '/app/demo/form/control/radio/', '/app/demo/form/control/radio/radio.js', '/app/demo/form/control/radio/radio.xml', '/app/demo/form/control/scroll/', '/app/demo/form/control/scroll/scroll.js', '/app/demo/form/control/scroll/scroll.xml', '/app/demo/form/control/select/', '/app/demo/form/control/select/select.js', '/app/demo/form/control/select/select.xml', '/app/demo/form/control/step/', '/app/demo/form/control/step/step.js', '/app/demo/form/control/step/step.xml', '/app/demo/form/control/svg/', '/app/demo/form/control/svg/svg.js', '/app/demo/form/control/svg/svg.xml', '/app/demo/form/control/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/table/', '/app/demo/form/control/table/table.js', '/app/demo/form/control/table/table.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.xml', '/app/demo/form/control/vflow/', '/app/demo/form/control/vflow/vflow.css', '/app/demo/form/control/vflow/vflow.js', '/app/demo/form/control/vflow/vflow.xml', '/app/demo/form/control/video/', '/app/demo/form/control/video/video.js', '/app/demo/form/control/video/video.xml', '/app/demo/form/control/xterm/', '/app/demo/form/control/xterm/xterm.js', '/app/demo/form/control/xterm/xterm.xml', '/app/demo/form/event/', '/app/demo/form/event/form/', '/app/demo/form/event/form/form.css', '/app/demo/form/event/form/form.js', '/app/demo/form/event/form/form.xml', '/app/demo/form/event/other/', '/app/demo/form/event/other/other.js', '/app/demo/form/event/other/other.xml', '/app/demo/form/event/screen/', '/app/demo/form/event/screen/screen.js', '/app/demo/form/event/screen/screen.xml', '/app/demo/form/event/task/', '/app/demo/form/event/task/task.js', '/app/demo/form/event/task/task.xml', '/app/demo/form/main.css', '/app/demo/form/main.js', '/app/demo/form/main.xml', '/app/demo/form/method/', '/app/demo/form/method/aform/', '/app/demo/form/method/aform/aform.js', '/app/demo/form/method/aform/aform.xml', '/app/demo/form/method/aform/sd.js', '/app/demo/form/method/aform/sd.xml', '/app/demo/form/method/core/', '/app/demo/form/method/core/core.js', '/app/demo/form/method/core/core.xml', '/app/demo/form/method/dom/', '/app/demo/form/method/dom/dom.css', '/app/demo/form/method/dom/dom.js', '/app/demo/form/method/dom/dom.xml', '/app/demo/form/method/form/', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.xml', '/app/demo/form/method/form/test.xml', '/app/demo/form/method/fs/', '/app/demo/form/method/fs/fs.js', '/app/demo/form/method/fs/fs.xml', '/app/demo/form/method/fs/text.js', '/app/demo/form/method/fs/text.xml', '/app/demo/form/method/native/', '/app/demo/form/method/native/native.js', '/app/demo/form/method/native/native.xml', '/app/demo/form/method/storage/', '/app/demo/form/method/storage/storage.js', '/app/demo/form/method/storage/storage.xml', '/app/demo/form/method/system/', '/app/demo/form/method/system/system.js', '/app/demo/form/method/system/system.xml', '/app/demo/form/method/task/', '/app/demo/form/method/task/locale1.json', '/app/demo/form/method/task/locale2.json', '/app/demo/form/method/task/task.js', '/app/demo/form/method/task/task.xml', '/app/demo/form/method/theme/', '/app/demo/form/method/theme/theme.js', '/app/demo/form/method/theme/theme.xml', '/app/demo/form/method/tool/', '/app/demo/form/method/tool/tool.js', '/app/demo/form/method/tool/tool.xml', '/app/demo/form/method/zip/', '/app/demo/form/method/zip/zip.js', '/app/demo/form/method/zip/zip.xml', '/app/demo/form/solution/', '/app/demo/form/solution/backpanel/', '/app/demo/form/solution/backpanel/backpanel.js', '/app/demo/form/solution/backpanel/backpanel.xml', '/app/demo/global.css', '/app/demo/res/', '/app/demo/res/icon.svg', '/app/demo/res/img.jpg', '/app/demo/res/marker.svg', '/app/demo/res/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/video.mp4', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/app/task/config.json', '/app/task/form/', '/app/task/form/bar/', '/app/task/form/bar/bar.js', '/app/task/form/bar/bar.xml', '/app/task/form/desktop/', '/app/task/form/desktop/desktop.xml', '/app/task/locale/', '/app/task/locale/en.json', '/app/task/locale/ja.json', '/app/task/locale/sc.json', '/app/task/locale/tc.json', '/clickgo.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/html.cgc', '/control/iconview.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/property.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tuieditor.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/byterun.cgt', '/theme/familiar.cgt', '/theme/light.cgt'];
42
42
  const localeData = {
43
43
  'en': {
44
44
  'apply-unmount': 'Are you sure to unmount the "?" mount point?',
package/dist/lib/fs.ts CHANGED
@@ -12,7 +12,7 @@ import * as form from './form';
12
12
  import * as core from './core';
13
13
  import * as native from './native';
14
14
 
15
- const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout/', '/app/demo/form/control/alayout/alayout.css', '/app/demo/form/control/alayout/alayout.js', '/app/demo/form/control/alayout/alayout.xml', '/app/demo/form/control/arteditor/', '/app/demo/form/control/arteditor/arteditor.js', '/app/demo/form/control/arteditor/arteditor.xml', '/app/demo/form/control/arteditor/img.js', '/app/demo/form/control/arteditor/img.xml', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/box/', '/app/demo/form/control/box/box.js', '/app/demo/form/control/box/box.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.xml', '/app/demo/form/control/desc/', '/app/demo/form/control/desc/desc.js', '/app/demo/form/control/desc/desc.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/flow/', '/app/demo/form/control/flow/flow.css', '/app/demo/form/control/flow/flow.js', '/app/demo/form/control/flow/flow.xml', '/app/demo/form/control/form/', '/app/demo/form/control/form/form.css', '/app/demo/form/control/form/form.js', '/app/demo/form/control/form/form.xml', '/app/demo/form/control/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.xml', '/app/demo/form/control/iconview/', '/app/demo/form/control/iconview/iconview.js', '/app/demo/form/control/iconview/iconview.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.js', '/app/demo/form/control/label/label.xml', '/app/demo/form/control/layout/', '/app/demo/form/control/layout/layout.js', '/app/demo/form/control/layout/layout.xml', '/app/demo/form/control/link/', '/app/demo/form/control/link/link.js', '/app/demo/form/control/link/link.xml', '/app/demo/form/control/list/', '/app/demo/form/control/list/list.css', '/app/demo/form/control/list/list.js', '/app/demo/form/control/list/list.xml', '/app/demo/form/control/loading/', '/app/demo/form/control/loading/loading.xml', '/app/demo/form/control/map/', '/app/demo/form/control/map/map.js', '/app/demo/form/control/map/map.xml', '/app/demo/form/control/marquee/', '/app/demo/form/control/marquee/marquee.js', '/app/demo/form/control/marquee/marquee.xml', '/app/demo/form/control/menu/', '/app/demo/form/control/menu/menu.js', '/app/demo/form/control/menu/menu.xml', '/app/demo/form/control/monaco/', '/app/demo/form/control/monaco/monaco.js', '/app/demo/form/control/monaco/monaco.xml', '/app/demo/form/control/nav/', '/app/demo/form/control/nav/nav.js', '/app/demo/form/control/nav/nav.xml', '/app/demo/form/control/page/', '/app/demo/form/control/page/page.js', '/app/demo/form/control/page/page.xml', '/app/demo/form/control/panel/', '/app/demo/form/control/panel/panel.js', '/app/demo/form/control/panel/panel.xml', '/app/demo/form/control/panel/test1.js', '/app/demo/form/control/panel/test1.xml', '/app/demo/form/control/panel/test2.xml', '/app/demo/form/control/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.xml', '/app/demo/form/control/radio/', '/app/demo/form/control/radio/radio.js', '/app/demo/form/control/radio/radio.xml', '/app/demo/form/control/scroll/', '/app/demo/form/control/scroll/scroll.js', '/app/demo/form/control/scroll/scroll.xml', '/app/demo/form/control/select/', '/app/demo/form/control/select/select.js', '/app/demo/form/control/select/select.xml', '/app/demo/form/control/step/', '/app/demo/form/control/step/step.js', '/app/demo/form/control/step/step.xml', '/app/demo/form/control/svg/', '/app/demo/form/control/svg/svg.js', '/app/demo/form/control/svg/svg.xml', '/app/demo/form/control/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/table/', '/app/demo/form/control/table/table.js', '/app/demo/form/control/table/table.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.xml', '/app/demo/form/control/vflow/', '/app/demo/form/control/vflow/vflow.css', '/app/demo/form/control/vflow/vflow.js', '/app/demo/form/control/vflow/vflow.xml', '/app/demo/form/control/video/', '/app/demo/form/control/video/video.js', '/app/demo/form/control/video/video.xml', '/app/demo/form/control/xterm/', '/app/demo/form/control/xterm/xterm.js', '/app/demo/form/control/xterm/xterm.xml', '/app/demo/form/event/', '/app/demo/form/event/form/', '/app/demo/form/event/form/form.css', '/app/demo/form/event/form/form.js', '/app/demo/form/event/form/form.xml', '/app/demo/form/event/other/', '/app/demo/form/event/other/other.js', '/app/demo/form/event/other/other.xml', '/app/demo/form/event/screen/', '/app/demo/form/event/screen/screen.js', '/app/demo/form/event/screen/screen.xml', '/app/demo/form/event/task/', '/app/demo/form/event/task/task.js', '/app/demo/form/event/task/task.xml', '/app/demo/form/main.css', '/app/demo/form/main.js', '/app/demo/form/main.xml', '/app/demo/form/method/', '/app/demo/form/method/aform/', '/app/demo/form/method/aform/aform.js', '/app/demo/form/method/aform/aform.xml', '/app/demo/form/method/aform/sd.js', '/app/demo/form/method/aform/sd.xml', '/app/demo/form/method/core/', '/app/demo/form/method/core/core.js', '/app/demo/form/method/core/core.xml', '/app/demo/form/method/dom/', '/app/demo/form/method/dom/dom.css', '/app/demo/form/method/dom/dom.js', '/app/demo/form/method/dom/dom.xml', '/app/demo/form/method/form/', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.xml', '/app/demo/form/method/form/test.xml', '/app/demo/form/method/fs/', '/app/demo/form/method/fs/fs.js', '/app/demo/form/method/fs/fs.xml', '/app/demo/form/method/fs/text.js', '/app/demo/form/method/fs/text.xml', '/app/demo/form/method/native/', '/app/demo/form/method/native/native.js', '/app/demo/form/method/native/native.xml', '/app/demo/form/method/storage/', '/app/demo/form/method/storage/storage.js', '/app/demo/form/method/storage/storage.xml', '/app/demo/form/method/system/', '/app/demo/form/method/system/system.js', '/app/demo/form/method/system/system.xml', '/app/demo/form/method/task/', '/app/demo/form/method/task/locale1.json', '/app/demo/form/method/task/locale2.json', '/app/demo/form/method/task/task.js', '/app/demo/form/method/task/task.xml', '/app/demo/form/method/theme/', '/app/demo/form/method/theme/theme.js', '/app/demo/form/method/theme/theme.xml', '/app/demo/form/method/tool/', '/app/demo/form/method/tool/tool.js', '/app/demo/form/method/tool/tool.xml', '/app/demo/form/method/zip/', '/app/demo/form/method/zip/zip.js', '/app/demo/form/method/zip/zip.xml', '/app/demo/global.css', '/app/demo/res/', '/app/demo/res/icon.svg', '/app/demo/res/img.jpg', '/app/demo/res/marker.svg', '/app/demo/res/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/video.mp4', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/app/task/config.json', '/app/task/form/', '/app/task/form/bar/', '/app/task/form/bar/bar.js', '/app/task/form/bar/bar.xml', '/app/task/form/desktop/', '/app/task/form/desktop/desktop.xml', '/app/task/locale/', '/app/task/locale/en.json', '/app/task/locale/ja.json', '/app/task/locale/sc.json', '/app/task/locale/tc.json', '/clickgo.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/html.cgc', '/control/iconview.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/property.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tuieditor.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/byterun.cgt', '/theme/familiar.cgt', '/theme/light.cgt'];
15
+ const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout/', '/app/demo/form/control/alayout/alayout.css', '/app/demo/form/control/alayout/alayout.js', '/app/demo/form/control/alayout/alayout.xml', '/app/demo/form/control/arteditor/', '/app/demo/form/control/arteditor/arteditor.js', '/app/demo/form/control/arteditor/arteditor.xml', '/app/demo/form/control/arteditor/img.js', '/app/demo/form/control/arteditor/img.xml', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/box/', '/app/demo/form/control/box/box.js', '/app/demo/form/control/box/box.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.xml', '/app/demo/form/control/desc/', '/app/demo/form/control/desc/desc.js', '/app/demo/form/control/desc/desc.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/flow/', '/app/demo/form/control/flow/flow.css', '/app/demo/form/control/flow/flow.js', '/app/demo/form/control/flow/flow.xml', '/app/demo/form/control/form/', '/app/demo/form/control/form/form.css', '/app/demo/form/control/form/form.js', '/app/demo/form/control/form/form.xml', '/app/demo/form/control/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.xml', '/app/demo/form/control/iconview/', '/app/demo/form/control/iconview/iconview.js', '/app/demo/form/control/iconview/iconview.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.js', '/app/demo/form/control/label/label.xml', '/app/demo/form/control/layout/', '/app/demo/form/control/layout/layout.js', '/app/demo/form/control/layout/layout.xml', '/app/demo/form/control/link/', '/app/demo/form/control/link/link.js', '/app/demo/form/control/link/link.xml', '/app/demo/form/control/list/', '/app/demo/form/control/list/list.css', '/app/demo/form/control/list/list.js', '/app/demo/form/control/list/list.xml', '/app/demo/form/control/loading/', '/app/demo/form/control/loading/loading.xml', '/app/demo/form/control/map/', '/app/demo/form/control/map/map.js', '/app/demo/form/control/map/map.xml', '/app/demo/form/control/marquee/', '/app/demo/form/control/marquee/marquee.js', '/app/demo/form/control/marquee/marquee.xml', '/app/demo/form/control/menu/', '/app/demo/form/control/menu/menu.js', '/app/demo/form/control/menu/menu.xml', '/app/demo/form/control/monaco/', '/app/demo/form/control/monaco/monaco.js', '/app/demo/form/control/monaco/monaco.xml', '/app/demo/form/control/nav/', '/app/demo/form/control/nav/nav.js', '/app/demo/form/control/nav/nav.xml', '/app/demo/form/control/page/', '/app/demo/form/control/page/page.js', '/app/demo/form/control/page/page.xml', '/app/demo/form/control/panel/', '/app/demo/form/control/panel/panel.js', '/app/demo/form/control/panel/panel.xml', '/app/demo/form/control/panel/test1.js', '/app/demo/form/control/panel/test1.xml', '/app/demo/form/control/panel/test2.xml', '/app/demo/form/control/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.xml', '/app/demo/form/control/radio/', '/app/demo/form/control/radio/radio.js', '/app/demo/form/control/radio/radio.xml', '/app/demo/form/control/scroll/', '/app/demo/form/control/scroll/scroll.js', '/app/demo/form/control/scroll/scroll.xml', '/app/demo/form/control/select/', '/app/demo/form/control/select/select.js', '/app/demo/form/control/select/select.xml', '/app/demo/form/control/step/', '/app/demo/form/control/step/step.js', '/app/demo/form/control/step/step.xml', '/app/demo/form/control/svg/', '/app/demo/form/control/svg/svg.js', '/app/demo/form/control/svg/svg.xml', '/app/demo/form/control/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/table/', '/app/demo/form/control/table/table.js', '/app/demo/form/control/table/table.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.xml', '/app/demo/form/control/vflow/', '/app/demo/form/control/vflow/vflow.css', '/app/demo/form/control/vflow/vflow.js', '/app/demo/form/control/vflow/vflow.xml', '/app/demo/form/control/video/', '/app/demo/form/control/video/video.js', '/app/demo/form/control/video/video.xml', '/app/demo/form/control/xterm/', '/app/demo/form/control/xterm/xterm.js', '/app/demo/form/control/xterm/xterm.xml', '/app/demo/form/event/', '/app/demo/form/event/form/', '/app/demo/form/event/form/form.css', '/app/demo/form/event/form/form.js', '/app/demo/form/event/form/form.xml', '/app/demo/form/event/other/', '/app/demo/form/event/other/other.js', '/app/demo/form/event/other/other.xml', '/app/demo/form/event/screen/', '/app/demo/form/event/screen/screen.js', '/app/demo/form/event/screen/screen.xml', '/app/demo/form/event/task/', '/app/demo/form/event/task/task.js', '/app/demo/form/event/task/task.xml', '/app/demo/form/main.css', '/app/demo/form/main.js', '/app/demo/form/main.xml', '/app/demo/form/method/', '/app/demo/form/method/aform/', '/app/demo/form/method/aform/aform.js', '/app/demo/form/method/aform/aform.xml', '/app/demo/form/method/aform/sd.js', '/app/demo/form/method/aform/sd.xml', '/app/demo/form/method/core/', '/app/demo/form/method/core/core.js', '/app/demo/form/method/core/core.xml', '/app/demo/form/method/dom/', '/app/demo/form/method/dom/dom.css', '/app/demo/form/method/dom/dom.js', '/app/demo/form/method/dom/dom.xml', '/app/demo/form/method/form/', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.xml', '/app/demo/form/method/form/test.xml', '/app/demo/form/method/fs/', '/app/demo/form/method/fs/fs.js', '/app/demo/form/method/fs/fs.xml', '/app/demo/form/method/fs/text.js', '/app/demo/form/method/fs/text.xml', '/app/demo/form/method/native/', '/app/demo/form/method/native/native.js', '/app/demo/form/method/native/native.xml', '/app/demo/form/method/storage/', '/app/demo/form/method/storage/storage.js', '/app/demo/form/method/storage/storage.xml', '/app/demo/form/method/system/', '/app/demo/form/method/system/system.js', '/app/demo/form/method/system/system.xml', '/app/demo/form/method/task/', '/app/demo/form/method/task/locale1.json', '/app/demo/form/method/task/locale2.json', '/app/demo/form/method/task/task.js', '/app/demo/form/method/task/task.xml', '/app/demo/form/method/theme/', '/app/demo/form/method/theme/theme.js', '/app/demo/form/method/theme/theme.xml', '/app/demo/form/method/tool/', '/app/demo/form/method/tool/tool.js', '/app/demo/form/method/tool/tool.xml', '/app/demo/form/method/zip/', '/app/demo/form/method/zip/zip.js', '/app/demo/form/method/zip/zip.xml', '/app/demo/form/solution/', '/app/demo/form/solution/backpanel/', '/app/demo/form/solution/backpanel/backpanel.js', '/app/demo/form/solution/backpanel/backpanel.xml', '/app/demo/global.css', '/app/demo/res/', '/app/demo/res/icon.svg', '/app/demo/res/img.jpg', '/app/demo/res/marker.svg', '/app/demo/res/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/video.mp4', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/app/task/config.json', '/app/task/form/', '/app/task/form/bar/', '/app/task/form/bar/bar.js', '/app/task/form/bar/bar.xml', '/app/task/form/desktop/', '/app/task/form/desktop/desktop.xml', '/app/task/locale/', '/app/task/locale/en.json', '/app/task/locale/ja.json', '/app/task/locale/sc.json', '/app/task/locale/tc.json', '/clickgo.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/html.cgc', '/control/iconview.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/property.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tuieditor.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/byterun.cgt', '/theme/familiar.cgt', '/theme/light.cgt'];
16
16
 
17
17
  /** --- fs lib 用到的语言包 --- */
18
18
  const localeData: Record<string, {
package/dist/lib/task.js CHANGED
@@ -675,8 +675,8 @@ function run(url, opt = {}, ntid) {
675
675
  removePanel(id, vapp, el) {
676
676
  return form.removePanel(id, vapp, el);
677
677
  },
678
- createPanel(cls, el, formId) {
679
- return form.createPanel(cls, el, formId, taskId);
678
+ createPanel(rootPanel, cls, opt) {
679
+ return form.createPanel(rootPanel, cls, opt, taskId);
680
680
  },
681
681
  create: function (cls, data, opt) {
682
682
  return form.create(cls, data, opt, taskId);
package/dist/lib/task.ts CHANGED
@@ -767,14 +767,18 @@ export async function run(url: string | types.IApp, opt: types.ITaskRunOptions =
767
767
  return form.removePanel(id, vapp, el);
768
768
  },
769
769
  createPanel<T extends form.AbstractPanel>(
770
- cls: (new () => T),
771
- el: HTMLElement,
772
- formId: number
770
+ rootPanel: control.AbstractControl,
771
+ cls: string | (new () => T),
772
+ opt?: {
773
+ 'layout'?: string;
774
+ 'style'?: string;
775
+ 'path'?: string;
776
+ }
773
777
  ): Promise<{
774
778
  'vapp': types.IVApp;
775
779
  'vroot': T;
776
780
  }> {
777
- return form.createPanel(cls, el, formId, taskId);
781
+ return form.createPanel(rootPanel, cls, opt, taskId);
778
782
  },
779
783
  create: function<T extends form.AbstractForm>(
780
784
  cls: string | (new () => T),
package/dist/lib/tool.js CHANGED
@@ -80,6 +80,9 @@ function clone(obj) {
80
80
  }
81
81
  newObj[i] = fd;
82
82
  }
83
+ else if (obj[i] === null) {
84
+ newObj[i] = null;
85
+ }
83
86
  else if (typeof obj[i] === 'object') {
84
87
  newObj[i] = clone(obj[i]);
85
88
  }
@@ -100,6 +103,9 @@ function clone(obj) {
100
103
  }
101
104
  newObj[key] = fd;
102
105
  }
106
+ else if (obj[key] === null) {
107
+ newObj[key] = null;
108
+ }
103
109
  else if (typeof obj[key] === 'object') {
104
110
  newObj[key] = clone(obj[key]);
105
111
  }
package/dist/lib/tool.ts CHANGED
@@ -109,6 +109,9 @@ export function clone(obj: Record<string, any> | any[]): any[] | any {
109
109
  }
110
110
  newObj[i] = fd;
111
111
  }
112
+ else if (obj[i] === null) {
113
+ newObj[i] = null;
114
+ }
112
115
  else if (typeof obj[i] === 'object') {
113
116
  newObj[i] = clone(obj[i]);
114
117
  }
@@ -129,6 +132,9 @@ export function clone(obj: Record<string, any> | any[]): any[] | any {
129
132
  }
130
133
  newObj[key] = fd;
131
134
  }
135
+ else if (obj[key] === null) {
136
+ newObj[key] = null;
137
+ }
132
138
  else if (typeof obj[key] === 'object') {
133
139
  newObj[key] = clone(obj[key]);
134
140
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clickgo",
3
- "version": "3.10.0",
3
+ "version": "3.10.1",
4
4
  "description": "Background interface, software interface, mobile phone APP interface operation library.",
5
5
  "keywords": [
6
6
  "deskrt",
package/types/index.d.ts CHANGED
@@ -685,6 +685,32 @@ export interface IListItemclickedEvent {
685
685
  };
686
686
  }
687
687
 
688
+ // --- Nav Item ---
689
+
690
+ export interface INavItemSelectEvent extends ICustomEvent {
691
+ 'detail': {
692
+ 'name': string;
693
+ 'selected': string;
694
+ };
695
+ }
696
+
697
+ // --- Panel Item ---
698
+
699
+ export interface IPanelGoEvent extends ICustomEvent {
700
+ 'detail': {
701
+ 'from': string;
702
+ 'to': string;
703
+ };
704
+ }
705
+
706
+ export interface IPanelWentEvent {
707
+ 'detail': {
708
+ 'result': boolean;
709
+ 'from': string;
710
+ 'to': string;
711
+ };
712
+ }
713
+
688
714
  // --- Select Control ---
689
715
 
690
716
  export interface ISelectAddEvent extends ICustomEvent {