clickgo 3.11.2 → 3.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +1 -1
  2. package/dist/app/demo/config.json +1 -0
  3. package/dist/app/demo/form/control/form/form.js +6 -0
  4. package/dist/app/demo/form/control/form/form.xml +2 -1
  5. package/dist/app/demo/form/control/panel/panel.xml +1 -0
  6. package/dist/app/demo/form/control/panel/test1.js +8 -2
  7. package/dist/app/demo/form/control/panel/test1.xml +3 -1
  8. package/dist/app/demo/form/control/svg/svg.xml +11 -11
  9. package/dist/app/demo/form/control/tip/tip.xml +13 -0
  10. package/dist/app/demo/form/main.js +4 -0
  11. package/dist/app/demo/form/main.xml +3 -0
  12. package/dist/app/demo/form/method/tool/tool.js +17 -0
  13. package/dist/app/demo/form/method/tool/tool.xml +12 -3
  14. package/dist/app/demo/form/solution/backpanel/backpanel.xml +1 -0
  15. package/dist/clickgo.js +1 -1
  16. package/dist/clickgo.ts +1 -1
  17. package/dist/control/arteditor.cgc +0 -0
  18. package/dist/control/box.cgc +0 -0
  19. package/dist/control/common.cgc +0 -0
  20. package/dist/control/desc.cgc +0 -0
  21. package/dist/control/echarts.cgc +0 -0
  22. package/dist/control/form.cgc +0 -0
  23. package/dist/control/html.cgc +0 -0
  24. package/dist/control/iconview.cgc +0 -0
  25. package/dist/control/map.cgc +0 -0
  26. package/dist/control/monaco.cgc +0 -0
  27. package/dist/control/nav.cgc +0 -0
  28. package/dist/control/page.cgc +0 -0
  29. package/dist/control/property.cgc +0 -0
  30. package/dist/control/table.cgc +0 -0
  31. package/dist/control/task.cgc +0 -0
  32. package/dist/control/tuieditor.cgc +0 -0
  33. package/dist/control/xterm.cgc +0 -0
  34. package/dist/lib/control.ts +4 -4
  35. package/dist/lib/form.js +57 -4
  36. package/dist/lib/form.ts +84 -9
  37. package/dist/lib/fs.js +1 -1
  38. package/dist/lib/fs.ts +1 -1
  39. package/dist/lib/task.js +6 -0
  40. package/dist/lib/task.ts +6 -0
  41. package/dist/lib/tool.js +34 -1
  42. package/dist/lib/tool.ts +44 -0
  43. package/dist/theme/byterun.cgt +0 -0
  44. package/dist/theme/familiar.cgt +0 -0
  45. package/dist/theme/light.cgt +0 -0
  46. package/package.json +1 -1
  47. package/types/index.d.ts +56 -0
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.1/dist/loader.min.js?path=index&npm={'clickgo':'3.11.2'}"></script>
31
+ <script src="https://cdn.jsdelivr.net/npm/@litert/loader@3.5.1/dist/loader.min.js?path=index&npm={'clickgo':'3.11.4'}"></script>
32
32
  ```
33
33
 
34
34
  **index.js**
@@ -108,6 +108,7 @@
108
108
  "/form/control/tag/tag.xml",
109
109
  "/form/control/text/text.js",
110
110
  "/form/control/text/text.xml",
111
+ "/form/control/tip/tip.xml",
111
112
  "/form/control/tuieditor/tuieditor.js",
112
113
  "/form/control/tuieditor/tuieditor.xml",
113
114
  "/form/control/vflow/vflow.css",
@@ -50,6 +50,7 @@ class default_1 extends clickgo.form.AbstractForm {
50
50
  this.resize = true;
51
51
  this.floading = false;
52
52
  this.border = 'normal';
53
+ this.banClose = false;
53
54
  }
54
55
  showLoading() {
55
56
  return __awaiter(this, void 0, void 0, function* () {
@@ -58,5 +59,10 @@ class default_1 extends clickgo.form.AbstractForm {
58
59
  this.floading = false;
59
60
  });
60
61
  }
62
+ onClose(e) {
63
+ if (this.banClose) {
64
+ e.preventDefault();
65
+ }
66
+ }
61
67
  }
62
68
  exports.default = default_1;
@@ -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="floading" :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" @close="onClose">
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>
@@ -17,6 +17,7 @@
17
17
  <button @click="height = 0">Set height auto</button>
18
18
  <button @click="resize = resize ? false : true">{{resize ? 'Disabled' : 'Enabled'}} resize</button>
19
19
  <button @click="showLoading">Show loading</button>
20
+ <button @click="banClose = !banClose">{{banClose ? '' : '!'}}banClose</button>
20
21
  <layout class="bottom" gutter="10">
21
22
  <button @click="border = 'normal'">Normal</button>
22
23
  <button @click="border = 'thin'">Thin</button>
@@ -5,6 +5,7 @@
5
5
  <layout gutter="10">
6
6
  <button v-if="selected[0] !== './test1'" style="flex: 1;" @click="go">Go test1 with {'type': 'show'}</button>
7
7
  <button style="flex: 1;" @click="ssend">send {'type': 'send'}</button>
8
+ <button style="flex: 1;" @click="sendToPanel(refs.panel, {'type': 's2p'})">sendToPanel {'type': 's2p'}</button>
8
9
  </layout>
9
10
  <layout gutter="10">
10
11
  <button style="flex: 1;" @click="plain = !plain">{{plain ? '' : '!'}}plain</button>
@@ -40,11 +40,11 @@ class default_1 extends clickgo.form.AbstractPanel {
40
40
  this.data = {};
41
41
  this.rootMountData = 'none';
42
42
  }
43
- onShow(d) {
43
+ onShow(e) {
44
44
  return __awaiter(this, void 0, void 0, function* () {
45
45
  yield clickgo.tool.sleep(1000);
46
46
  ++this.scount;
47
- this.data = d;
47
+ this.data = e;
48
48
  });
49
49
  }
50
50
  onHide() {
@@ -69,6 +69,12 @@ class default_1 extends clickgo.form.AbstractPanel {
69
69
  yield clickgo.form.dialog('Hello panel!');
70
70
  });
71
71
  }
72
+ clearQss() {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ this.clearQs();
75
+ yield clickgo.form.dialog('cleard.');
76
+ });
77
+ }
72
78
  onMounted() {
73
79
  this.rootMountData = this.rootForm.mountData;
74
80
  }
@@ -5,7 +5,9 @@
5
5
  <label>Parent data: {{rootForm.parentData}}</label>
6
6
  <label>Qs: {{qs}}</label>
7
7
  <label>rootMountData: {{rootMountData}}</label>
8
- <button @click="click" style="height: 30px;">Hi</button>
8
+ <button @click="click">Hi</button>
9
+ <button @click="sendToRootPanel({'a':1})" style="height: 30px;">sendToRootPanel({'a':1})</button>
10
+ <button @click="clearQss">clearQs()</button>
9
11
  <layout>
10
12
  <button style="padding: 15px 30px;" area="split">
11
13
  Padding 10px 20px with pop
@@ -5,20 +5,20 @@
5
5
  <svg :layout="layout" :src="file" style="width: 64px; height: 64px;" />
6
6
  </layout>
7
7
  <layout gutter="10" style="margin-top: 10px;">
8
- <button @click="color = undefined" style="padding: 0 10px; flex: 1; width: 0;">Default</button>
9
- <button @click="color = 'green'" style="padding: 0 10px; flex: 1; width: 0;">Green</button>
10
- <button @click="color = 'red'" style="padding: 0 10px; flex: 1; width: 0;">Red</button>
8
+ <button @click="color = undefined" style="flex: 1; width: 0;">Default</button>
9
+ <button @click="color = 'green'" style="flex: 1; width: 0;">Green</button>
10
+ <button @click="color = 'red'" style="flex: 1; width: 0;">Red</button>
11
11
  </layout>
12
12
  <layout gutter="10" style="margin-top: 10px;">
13
- <button @click="i = 0" style="padding: 0 10px; flex: 1; width: 0;">Shape 0</button>
14
- <button @click="i = 1" style="padding: 0 10px; flex: 1; width: 0;">1</button>
15
- <button @click="i = 2" style="padding: 0 10px; flex: 1; width: 0;">2</button>
16
- <button @click="i = 3" style="padding: 0 10px; flex: 1; width: 0;">None</button>
13
+ <button @click="i = 0" style="flex: 1; width: 0;">Shape 0</button>
14
+ <button @click="i = 1" style="flex: 1; width: 0;">1</button>
15
+ <button @click="i = 2" style="flex: 1; width: 0;">2</button>
16
+ <button @click="i = 3" style="flex: 1; width: 0;">None</button>
17
17
  </layout>
18
18
  <layout gutter="10" style="margin-top: 10px;">
19
- <button @click="f = 0" style="padding: 0 10px; flex: 1; width: 0;">File 0</button>
20
- <button @click="f = 1" style="padding: 0 10px; flex: 1; width: 0;">1</button>
21
- <button @click="f = 2" style="padding: 0 10px; flex: 1; width: 0;">2</button>
22
- <button @click="f = 3" style="padding: 0 10px; flex: 1; width: 0;">None</button>
19
+ <button @click="f = 0" style="flex: 1; width: 0;">File 0</button>
20
+ <button @click="f = 1" style="flex: 1; width: 0;">1</button>
21
+ <button @click="f = 2" style="flex: 1; width: 0;">2</button>
22
+ <button @click="f = 3" style="flex: 1; width: 0;">None</button>
23
23
  </layout>
24
24
  </form>
@@ -0,0 +1,13 @@
1
+ <form width="300" height="500" title="Tip">
2
+ <layout direction="v" gutter="10" style="flex: 1; padding: 10px;">
3
+ <tip label="ok">
4
+ <button>123</button>
5
+ </tip>
6
+ <tip label="Click me">
7
+ <button>456</button>
8
+ </tip>
9
+ <tip label="This is a select">
10
+ <select :data="[1,2,3,4]"></select>
11
+ </tip>
12
+ </layout>
13
+ </form>
@@ -172,6 +172,10 @@ class default_1 extends clickgo.form.AbstractForm {
172
172
  frm = yield clickgo.form.create('/form/control/tag/tag');
173
173
  break;
174
174
  }
175
+ case 'ctip': {
176
+ frm = yield clickgo.form.create('/form/control/tip/tip');
177
+ break;
178
+ }
175
179
  case 'cxterm': {
176
180
  frm = yield clickgo.form.create(xterm_1.default);
177
181
  break;
@@ -75,6 +75,9 @@
75
75
  <button @click="openForm('cstep')">Step</button>
76
76
  <button @click="openForm('ctag')">Tag</button>
77
77
  </layout>
78
+ <layout gutter="10">
79
+ <button @click="openForm('ctip')">Tip</button>
80
+ </layout>
78
81
  <layout gutter="10">
79
82
  <button @click="openForm('cmonaco')">Monaco</button>
80
83
  <button @click="openForm('cxterm')">Xterm</button>
@@ -66,6 +66,8 @@ class default_1 extends clickgo.form.AbstractForm {
66
66
  this.url = 'HtTp://uSer:pAss@sUBDom.TopdOm23.CoM:29819/Admxw2Ksiz/dszas?Mdi=KdiMs1&a=JDd#hehHe';
67
67
  this.url1 = '/abc/def/hehe';
68
68
  this.url2 = '../bb.index';
69
+ this.second = '4531';
70
+ this.qs = 'a=1&b=2&c=3';
69
71
  }
70
72
  sleep() {
71
73
  return __awaiter(this, void 0, void 0, function* () {
@@ -98,5 +100,20 @@ class default_1 extends clickgo.form.AbstractForm {
98
100
  urlResolve() {
99
101
  clickgo.form.dialog(clickgo.tool.urlResolve(this.url1, this.url2)).catch((e) => { throw e; });
100
102
  }
103
+ formatSecond() {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ yield clickgo.form.dialog(clickgo.tool.formatSecond(parseInt(this.second) || 0));
106
+ });
107
+ }
108
+ queryParse() {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ yield clickgo.form.dialog(JSON.stringify(clickgo.tool.queryParse(this.qs)));
111
+ });
112
+ }
113
+ queryStringify() {
114
+ return __awaiter(this, void 0, void 0, function* () {
115
+ yield clickgo.form.dialog(clickgo.tool.queryStringify({ 'a': 1, 'b': 'c' }));
116
+ });
117
+ }
101
118
  }
102
119
  exports.default = default_1;
@@ -1,4 +1,4 @@
1
- <form width="350" height="400" title="Library tool">
1
+ <form width="350" height="500" title="Library tool">
2
2
  <flow direction="v" style="flex: 1; padding: 10px;">
3
3
  <layout direction="v" gutter="10">
4
4
  <button @click="sleep">{{sleeping ? 'Waiting...' : 'sleep(1000)'}}</button>
@@ -7,12 +7,12 @@
7
7
  <layout gutter="10">
8
8
  <text v-model="min" style="flex: 1;"></text>
9
9
  <text v-model="max" style="flex: 1;"></text>
10
- <button @click="rand" style="padding: 0 10px;">rand({{min}}, {{max}})</button>
10
+ <button @click="rand">rand({{min}}, {{max}})</button>
11
11
  </layout>
12
12
  <layout gutter="10">
13
13
  <text v-model="length" style="width: 30px;"></text>
14
14
  <text v-model="block" style="flex: 1;"></text>
15
- <button @click="random" style="padding: 0 10px;">random({{length}}, RANDOM_LN, '{{block}}')</button>
15
+ <button @click="random">random({{length}}, RANDOM_LN, '{{block}}')</button>
16
16
  </layout>
17
17
  <button @click="escapeHTML">escapeHTML('{{purifyTxt.slice(0, 5).replace("'", "\\'")}}...')</button>
18
18
  <button @click="rgb2hsl">rgb2hsl('9,105,218')</button>
@@ -22,6 +22,15 @@
22
22
  <text v-model="url1"></text>
23
23
  <text v-model="url2"></text>
24
24
  <button @click="urlResolve">urlResolve('{{url1.slice(0, 5)}}...', '{{url2.slice(0, 5)}}...')</button>
25
+ <layout gutter="10">
26
+ <text v-model="second" style="flex: 1;"></text>
27
+ <button @click="formatSecond">formatSecond({{second}})</button>
28
+ </layout>
29
+ <layout gutter="10">
30
+ <text v-model="qs" style="flex: 1;"></text>
31
+ <button @click="queryParse">queryParse('{{qs.slice(0, 5)}}...')</button>
32
+ </layout>
33
+ <button @click="queryStringify">queryStringify({'a':1,'b':'c'})</button>
25
34
  </layout>
26
35
  </flow>
27
36
  </form>
@@ -4,6 +4,7 @@
4
4
  <label>formHash:</label>
5
5
  <text v-model="fh" style="flex: 1;" />
6
6
  <button @click="formHash = fh">Change</button>
7
+ <button @click="formHashBack">Back</button>
7
8
  </layout>
8
9
  <nav v-model="name" default="list" hash style="flex: 1;">
9
10
  <nav-item label="User">
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.11.2';
27
+ const version = '3.11.4';
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.11.2';
16
+ const version = '3.11.4';
17
17
  export function getVersion(): string {
18
18
  return version;
19
19
  }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -128,9 +128,9 @@ export abstract class AbstractControl {
128
128
  * @param cb 回调
129
129
  * @param opt 参数
130
130
  */
131
- public watch<T extends this & this['props'], TK extends keyof T>(
132
- name: TK,
133
- cb: (val: T[TK], old: T[TK]) => void | Promise<void>,
131
+ public watch<T extends this & this['props'], TK extends keyof T, TR>(
132
+ name: TK | (() => TR),
133
+ cb: (val: T[TK] & TR, old: T[TK] & TR) => void | Promise<void>,
134
134
  opt: {
135
135
  'immediate'?: boolean;
136
136
  'deep'?: boolean;
@@ -186,7 +186,7 @@ export abstract class AbstractControl {
186
186
  public readonly emits: Record<string, null | ((payload: any) => boolean)> = {};
187
187
 
188
188
  /** --- 组件的子插槽 --- */
189
- public readonly slots: Record<string, any> = {};
189
+ public readonly slots: Record<string, () => any[]> = {};
190
190
 
191
191
  /** --- 获取某插槽所有子类 --- */
192
192
  public get slotsAll() {
package/dist/lib/form.js CHANGED
@@ -269,6 +269,20 @@ class AbstractPanel extends AbstractCommon {
269
269
  get rootPanel() {
270
270
  return {};
271
271
  }
272
+ get formHash() {
273
+ return this.rootForm.formHash;
274
+ }
275
+ set formHash(fh) {
276
+ this.rootForm.formHash = fh;
277
+ }
278
+ formHashBack() {
279
+ return __awaiter(this, void 0, void 0, function* () {
280
+ yield this.rootForm.formHashBack();
281
+ });
282
+ }
283
+ sendToRootPanel(data) {
284
+ this.rootPanel.send(data);
285
+ }
272
286
  enterStep(list) {
273
287
  return __awaiter(this, void 0, void 0, function* () {
274
288
  return this.rootForm.enterStep(list);
@@ -279,6 +293,9 @@ class AbstractPanel extends AbstractCommon {
279
293
  yield this.rootForm.doneStep();
280
294
  });
281
295
  }
296
+ clearQs() {
297
+ this.qs = {};
298
+ }
282
299
  get formFocus() {
283
300
  var _a;
284
301
  return (_a = this.rootForm.formFocus) !== null && _a !== void 0 ? _a : false;
@@ -286,6 +303,9 @@ class AbstractPanel extends AbstractCommon {
286
303
  onShow() {
287
304
  return;
288
305
  }
306
+ onShowed() {
307
+ return;
308
+ }
289
309
  onHide() {
290
310
  return;
291
311
  }
@@ -384,6 +404,9 @@ class AbstractForm extends AbstractCommon {
384
404
  core.trigger('formHashChange', this.taskId, this.formId, parent);
385
405
  });
386
406
  }
407
+ sendToPanel(panel, data) {
408
+ panel.send(data);
409
+ }
387
410
  get inStep() {
388
411
  return this._inStep;
389
412
  }
@@ -1502,25 +1525,38 @@ function refreshPopPosition(el, pop, direction, size = {}) {
1502
1525
  left = bcr.left;
1503
1526
  top = bcr.top + bcr.height;
1504
1527
  }
1505
- else {
1528
+ else if (direction === 'h') {
1506
1529
  left = bcr.left + bcr.width - 2;
1507
1530
  top = bcr.top - 2;
1508
1531
  }
1532
+ else {
1533
+ pop.removeAttribute('data-pop-t-bottom');
1534
+ left = bcr.left + bcr.width / 2 - width / 2;
1535
+ top = bcr.top - height - 10;
1536
+ }
1509
1537
  if (width + left > window.innerWidth) {
1510
1538
  if (direction === 'v') {
1511
1539
  left = bcr.left + bcr.width - width;
1512
1540
  }
1513
- else {
1541
+ else if (direction === 'h') {
1514
1542
  left = bcr.left - width + 2;
1515
1543
  }
1544
+ else {
1545
+ }
1516
1546
  }
1517
1547
  if (height + top > window.innerHeight) {
1518
1548
  if (direction === 'v') {
1519
1549
  top = bcr.top - height;
1520
1550
  }
1521
- else {
1551
+ else if (direction === 'h') {
1522
1552
  top = bcr.top + bcr.height - height + 2;
1523
1553
  }
1554
+ else {
1555
+ }
1556
+ }
1557
+ else if (top < 0 && direction === 't') {
1558
+ top = bcr.top + bcr.height + 10;
1559
+ pop.dataset.popTBottom = '';
1524
1560
  }
1525
1561
  }
1526
1562
  else {
@@ -1565,6 +1601,17 @@ function refreshPopPosition(el, pop, direction, size = {}) {
1565
1601
  }
1566
1602
  let lastShowPopTime = 0;
1567
1603
  function showPop(el, pop, direction, opt = {}) {
1604
+ if (pop && direction === 't') {
1605
+ refreshPopPosition(el, pop, 't', opt.size);
1606
+ if (opt.autoPosition) {
1607
+ clickgo.dom.watchSize(pop, () => {
1608
+ refreshPopPosition(el, pop, 't', opt.size);
1609
+ });
1610
+ }
1611
+ pop.dataset.cgOpen = '';
1612
+ pop.dataset.cgT = '';
1613
+ return;
1614
+ }
1568
1615
  if (opt.null === undefined) {
1569
1616
  opt.null = false;
1570
1617
  }
@@ -1605,7 +1652,7 @@ function showPop(el, pop, direction, opt = {}) {
1605
1652
  return;
1606
1653
  }
1607
1654
  refreshPopPosition(el, pop, direction, opt.size);
1608
- if (opt.autoPosition && typeof direction === 'string' && ['h', 'v'].includes(direction)) {
1655
+ if (opt.autoPosition && typeof direction === 'string') {
1609
1656
  clickgo.dom.watchSize(pop, () => {
1610
1657
  refreshPopPosition(el, pop, direction, opt.size);
1611
1658
  });
@@ -1626,6 +1673,12 @@ function hidePop(pop) {
1626
1673
  hidePop(popInfo.elList[0]);
1627
1674
  return;
1628
1675
  }
1676
+ if (pop.dataset.cgT !== undefined) {
1677
+ pop.removeAttribute('data-cg-t');
1678
+ pop.removeAttribute('data-cg-open');
1679
+ clickgo.dom.unwatchSize(pop);
1680
+ return;
1681
+ }
1629
1682
  let isPop = false;
1630
1683
  if (pop.dataset.cgPopOpen !== undefined) {
1631
1684
  }
package/dist/lib/form.ts CHANGED
@@ -358,6 +358,26 @@ export abstract class AbstractPanel extends AbstractCommon {
358
358
  return {} as any;
359
359
  }
360
360
 
361
+ /** --- 获取母窗体的 formHash --- */
362
+ public get formHash(): string {
363
+ return this.rootForm.formHash;
364
+ }
365
+
366
+ /** --- 设置母窗体的 formHash --- */
367
+ public set formHash(fh: string) {
368
+ this.rootForm.formHash = fh;
369
+ }
370
+
371
+ /** --- 将母窗体的 form hash 回退 --- */
372
+ public async formHashBack(): Promise<void> {
373
+ await this.rootForm.formHashBack();
374
+ }
375
+
376
+ /** --- 发送一段数据到自己这个 panel 控件,本质上也是调用的 panel 控件的 send 方法,主要用来实现发送给跳转后的 panel --- */
377
+ public sendToRootPanel(data: Record<string, any>): void {
378
+ this.rootPanel.send(data);
379
+ }
380
+
361
381
  /** --- 母窗体进入 form hash 为源的步进条 --- */
362
382
  public async enterStep(list: Array<{
363
383
  /** --- 步骤 hash,第一个必须为当前 hash --- */
@@ -377,16 +397,27 @@ export abstract class AbstractPanel extends AbstractCommon {
377
397
  /** --- 当前的 nav(若有)传递过来的 qs --- */
378
398
  public qs: Record<string, string> = {};
379
399
 
400
+ /** --- 确定不再使用 qs 时可调用此方法清空,这样再次通过相同 qs 进入本 panel 依然会响应 qschange 事件 --- */
401
+ public clearQs() {
402
+ this.qs = {};
403
+ }
404
+
380
405
  /** --- 当前窗体是否是焦点 --- */
381
406
  public get formFocus(): boolean {
382
407
  return this.rootForm.formFocus ?? false;
383
408
  }
384
409
 
385
- public onShow(data: Record<string, any>): void | Promise<void>;
410
+ public onShow(e: types.IAbstractPanelShowEvent): void | Promise<void>;
386
411
  public onShow(): void {
387
412
  return;
388
413
  }
389
414
 
415
+ public onShowed(): void | Promise<void>;
416
+ /** --- panel 已经完全显示后所要执行的 --- */
417
+ public onShowed() {
418
+ return;
419
+ }
420
+
390
421
  public onHide(): void | Promise<void>;
391
422
  public onHide(): void {
392
423
  return;
@@ -523,6 +554,11 @@ export abstract class AbstractForm extends AbstractCommon {
523
554
  core.trigger('formHashChange', this.taskId, this.formId, parent);
524
555
  }
525
556
 
557
+ /** --- 发送一段数据到 panel 控件,本质上也是调用的 panel 控件的 send 方法 --- */
558
+ public sendToPanel(panel: control.AbstractControl & Record<string, any>, data: Record<string, any>): void {
559
+ panel.send(data);
560
+ }
561
+
526
562
  /** --- 覆盖整个窗体的 loading --- */
527
563
  public loading: boolean = false;
528
564
 
@@ -1965,43 +2001,61 @@ export function removeFromPop(el: HTMLElement): void {
1965
2001
  }
1966
2002
 
1967
2003
  /** --- 重新调整 pop 的位置 --- */
1968
- function refreshPopPosition(el: HTMLElement, pop: HTMLElement, direction: 'h' | 'v' | MouseEvent | TouchEvent | { x: number; y: number; }, size: { width?: number; height?: number; } = {}): void {
2004
+ function refreshPopPosition(el: HTMLElement, pop: HTMLElement, direction: 'h' | 'v' | 't' | MouseEvent | TouchEvent | { x: number; y: number; }, size: { width?: number; height?: number; } = {}): void {
1969
2005
  // --- 最终 pop 的大小 ---
1970
2006
  const width = size.width ?? pop.offsetWidth;
1971
2007
  const height = size.height ?? pop.offsetHeight;
1972
2008
  // --- 最终显示位置 ---
1973
2009
  let left: number, top: number;
1974
2010
  if (typeof direction === 'string') {
2011
+ /** --- 母对象的位置 --- */
1975
2012
  const bcr = el.getBoundingClientRect();
1976
2013
  if (direction === 'v') {
1977
2014
  // --- 垂直弹出 ---
1978
2015
  left = bcr.left;
1979
2016
  top = bcr.top + bcr.height;
1980
2017
  }
1981
- else {
2018
+ else if (direction === 'h') {
1982
2019
  // --- 水平弹出 ---
1983
2020
  left = bcr.left + bcr.width - 2;
1984
2021
  top = bcr.top - 2;
1985
2022
  }
2023
+ else {
2024
+ // --- 垂直水平居中 ---
2025
+ pop.removeAttribute('data-pop-t-bottom');
2026
+ left = bcr.left + bcr.width / 2 - width / 2;
2027
+ top = bcr.top - height - 10;
2028
+ }
1986
2029
  // --- 检查水平是否出框 ---
1987
2030
  if (width + left > window.innerWidth) {
1988
2031
  if (direction === 'v') {
1989
2032
  // --- 垂直弹出 ---
1990
2033
  left = bcr.left + bcr.width - width;
1991
2034
  }
1992
- else {
2035
+ else if (direction === 'h') {
1993
2036
  // --- 水平弹出,右边位置不够弹到左边 ---
1994
2037
  left = bcr.left - width + 2;
1995
2038
  }
2039
+ else {
2040
+ // --- 垂直水平居中,水平超出不管 ---
2041
+ }
1996
2042
  }
1997
- // --- 检测垂直是否出框 ---
2043
+ // --- 检测垂直是否下侧出框 ---
1998
2044
  if (height + top > window.innerHeight) {
1999
2045
  if (direction === 'v') {
2000
2046
  top = bcr.top - height;
2001
2047
  }
2002
- else {
2048
+ else if (direction === 'h') {
2003
2049
  top = bcr.top + bcr.height - height + 2;
2004
2050
  }
2051
+ else {
2052
+ // --- 垂直水平居中,下侧出框不管 ---
2053
+ }
2054
+ }
2055
+ else if (top < 0 && direction === 't') {
2056
+ // --- 垂直水平居中,上侧出框 ---
2057
+ top = bcr.top + bcr.height + 10;
2058
+ pop.dataset.popTBottom = '';
2005
2059
  }
2006
2060
  }
2007
2061
  else {
@@ -2053,10 +2107,25 @@ let lastShowPopTime: number = 0;
2053
2107
  * --- 获取 pop 显示出来的坐标并报系统全局记录 ---
2054
2108
  * @param el 响应的元素
2055
2109
  * @param pop 要显示 pop 元素
2056
- * @param direction 要显示方向(以 $el 为准的 h 水平和 v 垂直)或坐标
2110
+ * @param direction 要显示方向(以 $el 为准的 h 水平 v 垂直 t 垂直水平居中)或坐标
2057
2111
  * @param opt width / height 显示的 pop 定义自定义宽/高度,可省略;null,true 代表为空也会显示,默认为 false; autoPosition, 自动更新 pop 位置,默认 false,true 为原元素位置变更,pop 位置也会变更,pop 大小变更,位置也会变更
2058
2112
  */
2059
- export function showPop(el: HTMLElement, pop: HTMLElement | undefined, direction: 'h' | 'v' | MouseEvent | TouchEvent | { x: number; y: number; }, opt: { 'size'?: { width?: number; height?: number; }; 'null'?: boolean; 'autoPosition'?: boolean; } = {}): void {
2113
+ export function showPop(el: HTMLElement, pop: HTMLElement | undefined, direction: 'h' | 'v' | 't' | MouseEvent | TouchEvent | { x: number; y: number; }, opt: {
2114
+ 'size'?: { width?: number; height?: number; };
2115
+ 'null'?: boolean;
2116
+ 'autoPosition'?: boolean;
2117
+ } = {}): void {
2118
+ if (pop && direction === 't') {
2119
+ refreshPopPosition(el, pop, 't', opt.size);
2120
+ if (opt.autoPosition) {
2121
+ clickgo.dom.watchSize(pop, () => {
2122
+ refreshPopPosition(el, pop, 't', opt.size);
2123
+ });
2124
+ }
2125
+ pop.dataset.cgOpen = '';
2126
+ pop.dataset.cgT = '';
2127
+ return;
2128
+ }
2060
2129
  // --- opt.null 为 true 代表可为空,为空也会被显示,默认为 false ---
2061
2130
  if (opt.null === undefined) {
2062
2131
  opt.null = false;
@@ -2105,7 +2174,7 @@ export function showPop(el: HTMLElement, pop: HTMLElement | undefined, direction
2105
2174
  }
2106
2175
  // --- 设定 pop 位置 ---
2107
2176
  refreshPopPosition(el, pop, direction, opt.size);
2108
- if (opt.autoPosition && typeof direction === 'string' && ['h', 'v'].includes(direction)) {
2177
+ if (opt.autoPosition && typeof direction === 'string') {
2109
2178
  // --- 可能要重置 pop 位置 ---
2110
2179
  clickgo.dom.watchSize(pop, () => {
2111
2180
  refreshPopPosition(el, pop, direction, opt.size);
@@ -2130,6 +2199,12 @@ export function hidePop(pop?: HTMLElement): void {
2130
2199
  hidePop(popInfo.elList[0]);
2131
2200
  return;
2132
2201
  }
2202
+ if (pop.dataset.cgT !== undefined) {
2203
+ pop.removeAttribute('data-cg-t');
2204
+ pop.removeAttribute('data-cg-open');
2205
+ clickgo.dom.unwatchSize(pop);
2206
+ return;
2207
+ }
2133
2208
  let isPop: boolean = false;
2134
2209
  if (pop.dataset.cgPopOpen !== undefined) {
2135
2210
  // --- el ---
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/tag/', '/app/demo/form/control/tag/tag.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'];
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/tag/', '/app/demo/form/control/tag/tag.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tip/', '/app/demo/form/control/tip/tip.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/tag/', '/app/demo/form/control/tag/tag.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'];
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/tag/', '/app/demo/form/control/tag/tag.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tip/', '/app/demo/form/control/tip/tip.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
@@ -1057,6 +1057,12 @@ function run(url, opt = {}, ntid) {
1057
1057
  },
1058
1058
  formatSecond: function (second) {
1059
1059
  return tool.formatSecond(second);
1060
+ },
1061
+ queryStringify: function (query) {
1062
+ return tool.queryStringify(query);
1063
+ },
1064
+ queryParse: function (query) {
1065
+ return tool.queryParse(query);
1060
1066
  }
1061
1067
  },
1062
1068
  'zip': {
package/dist/lib/task.ts CHANGED
@@ -1187,6 +1187,12 @@ export async function run(url: string | types.IApp, opt: types.ITaskRunOptions =
1187
1187
  },
1188
1188
  formatSecond: function(second: number): string {
1189
1189
  return tool.formatSecond(second);
1190
+ },
1191
+ queryStringify: function(query: Record<string, any>): string {
1192
+ return tool.queryStringify(query);
1193
+ },
1194
+ queryParse: function(query: string): Record<string, string | string[]> {
1195
+ return tool.queryParse(query);
1190
1196
  }
1191
1197
  },
1192
1198
  'zip': {
package/dist/lib/tool.js CHANGED
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.formatSecond = exports.compar = exports.execCommand = exports.blob2DataUrl = exports.blob2Text = exports.urlAtom = exports.urlResolve = exports.parseUrl = exports.post = exports.fetch = exports.request = exports.rgb2hsl = exports.escapeHTML = exports.getArray = exports.getNumber = exports.getBoolean = exports.random = exports.RANDOM_LUNS = exports.RANDOM_V = exports.RANDOM_LUN = exports.RANDOM_LU = exports.RANDOM_LN = exports.RANDOM_UN = exports.RANDOM_L = exports.RANDOM_U = exports.RANDOM_N = exports.rand = exports.getMimeByPath = exports.stylePrepend = exports.teleportGlue = exports.eventsAttrWrap = exports.layoutClassPrepend = exports.layoutInsertAttr = exports.layoutAddTagClassAndReTagName = exports.styleUrl2DataUrl = exports.match = exports.purify = exports.sleepFrame = exports.nextFrame = exports.sleep = exports.clone = exports.blob2ArrayBuffer = exports.getClassPrototype = void 0;
12
+ exports.queryParse = exports.queryStringify = exports.formatSecond = exports.compar = exports.execCommand = exports.blob2DataUrl = exports.blob2Text = exports.urlAtom = exports.urlResolve = exports.parseUrl = exports.post = exports.fetch = exports.request = exports.rgb2hsl = exports.escapeHTML = exports.getArray = exports.getNumber = exports.getBoolean = exports.random = exports.RANDOM_LUNS = exports.RANDOM_V = exports.RANDOM_LUN = exports.RANDOM_LU = exports.RANDOM_LN = exports.RANDOM_UN = exports.RANDOM_L = exports.RANDOM_U = exports.RANDOM_N = exports.rand = exports.getMimeByPath = exports.stylePrepend = exports.teleportGlue = exports.eventsAttrWrap = exports.layoutClassPrepend = exports.layoutInsertAttr = exports.layoutAddTagClassAndReTagName = exports.styleUrl2DataUrl = exports.match = exports.purify = exports.sleepFrame = exports.nextFrame = exports.sleep = exports.clone = exports.blob2ArrayBuffer = exports.getClassPrototype = void 0;
13
13
  function getClassPrototype(obj, over = [], level = 0) {
14
14
  if (level === 0) {
15
15
  return getClassPrototype(Object.getPrototypeOf(obj), over, level + 1);
@@ -692,3 +692,36 @@ function formatSecond(second) {
692
692
  return (h ? h.toString().padStart(2, '0') + ':' : '') + m.toString().padStart(2, '0') + ':' + s.toString().padStart(2, '0');
693
693
  }
694
694
  exports.formatSecond = formatSecond;
695
+ function queryStringify(query) {
696
+ return Object.entries(query).map(([k, v]) => {
697
+ if (Array.isArray(v)) {
698
+ return v.map((i) => `${encodeURIComponent(k)}=${encodeURIComponent(`${i}`)}`).join('&');
699
+ }
700
+ return `${encodeURIComponent(k)}=${encodeURIComponent(`${v}`)}`;
701
+ }).join('&');
702
+ }
703
+ exports.queryStringify = queryStringify;
704
+ function queryParse(query) {
705
+ const ret = {};
706
+ const arrayKeys = {};
707
+ for (const i of query.split('&')) {
708
+ if (!i.length) {
709
+ continue;
710
+ }
711
+ const pos = i.indexOf('=');
712
+ const key = decodeURIComponent(pos === -1 ? i : i.slice(0, pos));
713
+ const value = pos === -1 ? '' : decodeURIComponent(i.slice(pos + 1));
714
+ if (arrayKeys[key]) {
715
+ ret[key].push(value);
716
+ }
717
+ else if (undefined === ret[key]) {
718
+ ret[key] = value;
719
+ }
720
+ else {
721
+ ret[key] = [ret[key], value];
722
+ arrayKeys[key] = true;
723
+ }
724
+ }
725
+ return ret;
726
+ }
727
+ exports.queryParse = queryParse;
package/dist/lib/tool.ts CHANGED
@@ -867,3 +867,47 @@ export function formatSecond(second: number): string {
867
867
  const s = Math.floor(second - m * 60);
868
868
  return (h ? h.toString().padStart(2, '0') + ':' : '') + m.toString().padStart(2, '0') + ':' + s.toString().padStart(2, '0');
869
869
  }
870
+
871
+ /**
872
+ * --- 将对象转换为 query string ---
873
+ * @param query 要转换的对象
874
+ */
875
+ export function queryStringify(query: Record<string, any>): string {
876
+ return Object.entries(query).map(([k, v]) => {
877
+ if (Array.isArray(v)) {
878
+ return v.map((i) => `${encodeURIComponent(k)}=${encodeURIComponent(`${i}`)}`).join('&');
879
+ }
880
+ return `${encodeURIComponent(k)}=${encodeURIComponent(`${v}`)}`;
881
+ }).join('&');
882
+ }
883
+
884
+ /**
885
+ * --- 将 query string 转换为对象 ---
886
+ * @param query 要转换的字符串
887
+ */
888
+ export function queryParse(query: string): Record<string, string | string[]> {
889
+ const ret: Record<string, string | string[]> = {};
890
+ const arrayKeys: Record<string, boolean> = {};
891
+ for (const i of query.split('&')) {
892
+ if (!i.length) {
893
+ continue;
894
+ }
895
+
896
+ const pos = i.indexOf('=');
897
+
898
+ const key = decodeURIComponent(pos === -1 ? i : i.slice(0, pos));
899
+ const value = pos === -1 ? '' : decodeURIComponent(i.slice(pos + 1));
900
+
901
+ if (arrayKeys[key]) {
902
+ (ret[key] as string[]).push(value);
903
+ }
904
+ else if (undefined === ret[key]) {
905
+ ret[key] = value;
906
+ }
907
+ else {
908
+ ret[key] = [ret[key] as string, value];
909
+ arrayKeys[key] = true;
910
+ }
911
+ }
912
+ return ret;
913
+ }
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clickgo",
3
- "version": "3.11.2",
3
+ "version": "3.11.4",
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
@@ -623,6 +623,62 @@ interface ICustomEvent {
623
623
  preventDefault: () => void;
624
624
  }
625
625
 
626
+ // --- AbstractPanel ---
627
+
628
+ export interface IAbstractPanelShowEvent {
629
+ 'detail': {
630
+ 'data': Record<string, any>;
631
+ /** --- 是否是 nav 模式 --- */
632
+ 'nav': boolean;
633
+ /** --- 仅 nav 联动时有效,代表是前进还是回退 --- */
634
+ 'action': 'forword' | 'back';
635
+ /** --- 仅 nav 联动时有效,代表上一个的 formHash 的值 --- */
636
+ 'previous': string;
637
+ /** --- 仅 nav 联动时有效,代表本次 show 的时候 qs 是否发生了变化 --- */
638
+ 'qsChange': boolean;
639
+ }
640
+ }
641
+
642
+ // --- Form Control ---
643
+
644
+ export interface IFormCloseEvent extends ICustomEvent {
645
+ 'detail': {
646
+ 'event': MouseEvent;
647
+ }
648
+ }
649
+
650
+ export interface IFormMaxEvent {
651
+ 'detail': {
652
+ 'event': MouseEvent | TouchEvent | null;
653
+ 'action': 'click' | 'move';
654
+ /** --- 当前是否时最大化状态 --- */
655
+ 'max': boolean;
656
+ /** --- 最大化之前的窗体位置 --- */
657
+ 'history': {
658
+ 'width': number;
659
+ 'height': number;
660
+ 'left': number;
661
+ 'top': number;
662
+ } | null
663
+ }
664
+ }
665
+
666
+ export interface IFormMinEvent {
667
+ 'detail': {
668
+ 'event': MouseEvent | TouchEvent | null;
669
+ 'action': 'click' | 'method';
670
+ /** --- 当前是否时最小化状态 --- */
671
+ 'min': boolean;
672
+ /** --- 最小化之前的窗体位置 --- */
673
+ 'history': {
674
+ 'width': number;
675
+ 'height': number;
676
+ 'left': number;
677
+ 'top': number;
678
+ } | null
679
+ }
680
+ }
681
+
626
682
  // --- Greatlist Control ---
627
683
 
628
684
  export interface IGreatlistRemoveEvent extends ICustomEvent {