clickgo 3.1.1-dev10 → 3.1.3-dev12

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 (106) hide show
  1. package/dist/app/demo/app.js +0 -72
  2. package/dist/app/demo/config.json +109 -0
  3. package/dist/app/demo/form/control/button/button.js +12 -11
  4. package/dist/app/demo/form/control/button/button.xml +6 -6
  5. package/dist/app/demo/form/control/check/check.js +14 -10
  6. package/dist/app/demo/form/control/file/file.js +15 -13
  7. package/dist/app/demo/form/control/{overflow/overflow.css → flow/flow.css} +0 -0
  8. package/dist/app/demo/form/control/flow/flow.js +64 -0
  9. package/dist/app/demo/form/control/{overflow/overflow.scss → flow/flow.scss} +0 -0
  10. package/dist/app/demo/form/control/flow/flow.xml +101 -0
  11. package/dist/app/demo/form/control/form/form.js +1 -1
  12. package/dist/app/demo/form/control/form/form.xml +3 -3
  13. package/dist/app/demo/form/control/img/img.xml +2 -2
  14. package/dist/app/demo/form/control/list/list.js +95 -75
  15. package/dist/app/demo/form/control/list/list.xml +15 -11
  16. package/dist/app/demo/form/control/marquee/marquee.js +12 -10
  17. package/dist/app/demo/form/control/menu/menu.js +10 -6
  18. package/dist/app/demo/form/control/monaco/monaco.js +50 -60
  19. package/dist/app/demo/form/control/monaco/monaco.xml +6 -5
  20. package/dist/app/demo/form/control/property/property.js +131 -127
  21. package/dist/app/demo/form/control/radio/radio.js +9 -5
  22. package/dist/app/demo/form/control/scroll/scroll.js +16 -12
  23. package/dist/app/demo/form/control/scroll/scroll.xml +10 -10
  24. package/dist/app/demo/form/control/select/select.js +132 -71
  25. package/dist/app/demo/form/control/select/select.xml +69 -67
  26. package/dist/app/demo/form/control/tab/tab.js +21 -20
  27. package/dist/app/demo/form/control/tab/tab.xml +2 -2
  28. package/dist/app/demo/form/control/text/text.js +53 -45
  29. package/dist/app/demo/form/control/text/text.xml +3 -3
  30. package/dist/app/demo/form/control/{greatview/greatview.css → vflow/vflow.css} +0 -0
  31. package/dist/app/demo/form/control/vflow/vflow.js +79 -0
  32. package/dist/app/demo/form/control/{greatview/greatview.scss → vflow/vflow.scss} +0 -0
  33. package/dist/app/demo/form/control/{greatview/greatview.xml → vflow/vflow.xml} +25 -25
  34. package/dist/app/demo/form/event/form/form.js +58 -56
  35. package/dist/app/demo/form/event/form/form.xml +3 -3
  36. package/dist/app/demo/form/event/screen/screen.js +30 -28
  37. package/dist/app/demo/form/event/screen/screen.xml +2 -2
  38. package/dist/app/demo/form/event/task/task.js +31 -31
  39. package/dist/app/demo/form/event/task/task.xml +3 -3
  40. package/dist/app/demo/form/main.js +166 -5
  41. package/dist/app/demo/form/main.xml +37 -35
  42. package/dist/app/demo/form/method/aform/aform.js +57 -0
  43. package/dist/app/demo/form/method/aform/aform.xml +35 -0
  44. package/dist/app/demo/form/method/aform/test.xml +6 -0
  45. package/dist/app/demo/form/method/core/core.js +11 -8
  46. package/dist/app/demo/form/method/core/core.xml +2 -1
  47. package/dist/app/demo/form/method/dom/dom.js +91 -99
  48. package/dist/app/demo/form/method/dom/dom.xml +6 -7
  49. package/dist/app/demo/form/method/form/form.js +10 -28
  50. package/dist/app/demo/form/method/form/form.xml +8 -15
  51. package/dist/app/demo/form/method/fs/fs.js +34 -33
  52. package/dist/app/demo/form/method/fs/fs.xml +1 -1
  53. package/dist/app/demo/form/method/fs/text.js +12 -12
  54. package/dist/app/demo/form/method/native/native.js +50 -0
  55. package/dist/app/demo/form/method/native/native.xml +12 -0
  56. package/dist/app/demo/form/method/system/system.js +50 -0
  57. package/dist/app/demo/form/method/system/system.xml +11 -0
  58. package/dist/app/demo/form/method/task/task.js +59 -61
  59. package/dist/app/demo/form/method/task/task.xml +4 -6
  60. package/dist/app/demo/form/method/theme/theme.js +14 -14
  61. package/dist/app/demo/form/method/tool/tool.js +29 -28
  62. package/dist/app/demo/form/method/tool/tool.xml +3 -3
  63. package/dist/app/demo/form/method/zip/zip.js +46 -41
  64. package/dist/app/demo/form/method/zip/zip.xml +1 -1
  65. package/dist/app/task/app.js +0 -25
  66. package/dist/app/task/config.json +29 -0
  67. package/dist/app/task/form/bar/bar.js +2 -2
  68. package/dist/app/task/form/bar/bar.xml +1 -1
  69. package/dist/clickgo.js +17 -5
  70. package/dist/clickgo.ts +22 -3
  71. package/dist/control/common.cgc +0 -0
  72. package/dist/control/form.cgc +0 -0
  73. package/dist/control/monaco.cgc +0 -0
  74. package/dist/control/property.cgc +0 -0
  75. package/dist/control/task.cgc +0 -0
  76. package/dist/global.css +1 -1
  77. package/dist/index.js +28 -8
  78. package/dist/index.ts +33 -7
  79. package/dist/lib/control.js +75 -105
  80. package/dist/lib/control.ts +102 -124
  81. package/dist/lib/core.js +108 -252
  82. package/dist/lib/core.ts +122 -268
  83. package/dist/lib/dom.js +564 -483
  84. package/dist/lib/dom.ts +703 -546
  85. package/dist/lib/form.js +170 -153
  86. package/dist/lib/form.ts +132 -99
  87. package/dist/lib/fs.js +1 -1
  88. package/dist/lib/fs.ts +1 -1
  89. package/dist/lib/native.js +135 -8
  90. package/dist/lib/native.ts +176 -12
  91. package/dist/lib/task.js +301 -175
  92. package/dist/lib/task.ts +330 -207
  93. package/dist/lib/tool.js +48 -1
  94. package/dist/lib/tool.ts +61 -0
  95. package/dist/lib/zip.ts +2 -0
  96. package/dist/theme/familiar.cgt +0 -0
  97. package/package.json +1 -1
  98. package/types/index.d.ts +26 -29
  99. package/dist/app/demo/form/control/greatview/greatview.js +0 -92
  100. package/dist/app/demo/form/control/overflow/overflow.js +0 -70
  101. package/dist/app/demo/form/control/overflow/overflow.xml +0 -98
  102. package/dist/app/demo/form/control/view/view.css +0 -1
  103. package/dist/app/demo/form/control/view/view.js +0 -73
  104. package/dist/app/demo/form/control/view/view.scss +0 -18
  105. package/dist/app/demo/form/control/view/view.xml +0 -94
  106. package/dist/app/demo/form/method/form/test.xml +0 -5
package/dist/lib/form.ts CHANGED
@@ -23,6 +23,9 @@ import * as control from './control';
23
23
  import * as fs from './fs';
24
24
  import * as native from './native';
25
25
 
26
+ /** --- 当前有焦点的窗体 id --- */
27
+ let focusId: number | null = null;
28
+
26
29
  /** --- form 相关信息 --- */
27
30
  const info: {
28
31
  /** --- 最后一个窗体 id --- */
@@ -76,7 +79,7 @@ const info: {
76
79
  };
77
80
 
78
81
  /** --- 窗体的抽象类 --- */
79
- export class AbstractForm {
82
+ export abstract class AbstractForm {
80
83
 
81
84
  /**
82
85
  * --- 创建窗体工厂函数 ---
@@ -84,7 +87,7 @@ export class AbstractForm {
84
87
  * @param layout 是否使用此参数替换 layout 值
85
88
  */
86
89
  public static async create(data?: Record<string, any>, layout?: string): Promise<AbstractForm | number> {
87
- const frm = new this();
90
+ const frm: AbstractForm = new (this as any)();
88
91
  /** --- 要挂载的 vue 参数 --- */
89
92
  const code: types.IFormCreateCode = {
90
93
  'data': {},
@@ -121,6 +124,11 @@ export class AbstractForm {
121
124
  /** --- class 对象类的属性列表 --- */
122
125
  const cdata = Object.entries(frm);
123
126
  for (const item of cdata) {
127
+ if (item[0] === 'access') {
128
+ // --- access 属性不放在 data 当中 ---
129
+
130
+ continue;
131
+ }
124
132
  code.data![item[0]] = item[1];
125
133
  }
126
134
  if (!layout) {
@@ -229,7 +237,7 @@ export class AbstractForm {
229
237
  }
230
238
 
231
239
  /** --- layout 中 :class 的转义 --- */
232
- public classPrepend(): (cla: any) => string {
240
+ public get classPrepend(): (cla: any) => string {
233
241
  return (cla: any): string => {
234
242
  if (typeof cla !== 'string') {
235
243
  return cla;
@@ -239,15 +247,18 @@ export class AbstractForm {
239
247
  };
240
248
  }
241
249
 
250
+ /** --- 当前窗体是否和 native 的实体窗体大小、状态同步 --- */
251
+ public isNativeSync: boolean = false;
252
+
242
253
  /**
243
254
  * --- 监视变动 ---
244
255
  * @param name 监视的属性
245
256
  * @param cb 回调
246
257
  * @param opt 参数
247
258
  */
248
- public watch<T extends this, TK extends keyof T>(
249
- name: TK,
250
- cb: (val: T[TK], old: T[TK]) => void | Promise<void>,
259
+ public watch<T extends this, TK extends keyof T, TR>(
260
+ name: TK | (() => TR),
261
+ cb: (val: T[TK] & TR, old: T[TK] & TR) => void | Promise<void>,
251
262
  opt: {
252
263
  'immediate'?: boolean;
253
264
  'deep'?: boolean;
@@ -352,7 +363,7 @@ export class AbstractForm {
352
363
  public show(): void {
353
364
  // --- 创建成功的窗体,可以直接显示 ---
354
365
  const v = this as any;
355
- v.$refs.form.$data.showData = true;
366
+ v.$refs.form.$data.isShow = true;
356
367
  if (this._firstShow) {
357
368
  this._firstShow = false;
358
369
  // --- 将窗体居中 ---
@@ -365,7 +376,7 @@ export class AbstractForm {
365
376
  v.$refs.form.setPropData('top', (area.height - v.$el.offsetHeight) / 2);
366
377
  }
367
378
  }
368
- v.$refs.form.$data.showData = true;
379
+ v.$refs.form.$data.isShow = true;
369
380
  changeFocus(this.formId);
370
381
  }
371
382
  }
@@ -374,6 +385,7 @@ export class AbstractForm {
374
385
  * --- 显示独占的窗体 ---
375
386
  */
376
387
  public async showDialog(): Promise<string> {
388
+ this.topMost = true;
377
389
  this.show();
378
390
  task.list[this.taskId].runtime.dialogFormIds.push(this.formId);
379
391
  return new Promise((resolve) => {
@@ -388,7 +400,14 @@ export class AbstractForm {
388
400
  */
389
401
  public hide(): void {
390
402
  const v = this as any;
391
- v.$refs.form.$data.showData = false;
403
+ v.$refs.form.$data.isShow = false;
404
+ }
405
+
406
+ /**
407
+ * --- 关闭当前窗体 ---
408
+ */
409
+ public close(): void {
410
+ close(this.formId);
392
411
  }
393
412
 
394
413
  /**
@@ -410,6 +429,7 @@ export class AbstractForm {
410
429
  return;
411
430
  }
412
431
 
432
+ public onMounted(obj: Record<string, any>): void | Promise<void>;
413
433
  public onMounted(): void | Promise<void> {
414
434
  return;
415
435
  }
@@ -546,7 +566,8 @@ const popInfo: {
546
566
 
547
567
  export let simpleSystemTaskRoot: types.IVue;
548
568
  export let launcherRoot: types.IVue;
549
- const elements: {
569
+
570
+ export const elements: {
550
571
  'wrap': HTMLDivElement;
551
572
  'list': HTMLDivElement;
552
573
  'popList': HTMLDivElement;
@@ -575,19 +596,7 @@ const elements: {
575
596
  /** --- clickgo 所有的 div wrap --- */
576
597
  this.wrap.id = 'cg-wrap';
577
598
  document.getElementsByTagName('body')[0].appendChild(this.wrap);
578
- if (clickgo.getNative() && (clickgo.getPlatform() === 'win32')) {
579
- this.wrap.addEventListener('mouseenter', function() {
580
- native.invoke('cg-mouse-ignore', native.getToken(), false);
581
- });
582
- this.wrap.addEventListener('mouseleave', function() {
583
- native.invoke('cg-mouse-ignore', native.getToken(), true);
584
- });
585
- }
586
-
587
- /** --- form list 的 div --- */
588
- this.list.id = 'cg-form-list';
589
- this.wrap.appendChild(this.list);
590
- this.list.addEventListener('touchmove', function(e): void {
599
+ this.wrap.addEventListener('touchmove', function(e): void {
591
600
  // --- 防止拖动时整个网页跟着动 ---
592
601
  if (e.cancelable) {
593
602
  e.preventDefault();
@@ -596,28 +605,32 @@ const elements: {
596
605
  }, {
597
606
  'passive': false
598
607
  });
599
- this.list.addEventListener('wheel', function(e): void {
600
- // --- 防止不小心前进后退,或上下缓动滚动(Mac ---
608
+ this.wrap.addEventListener('wheel', function(e): void {
609
+ // --- 防止不小心前进后退,或上下缓动滚动(Mac、触摸板) ---
601
610
  e.preventDefault();
602
611
  }, {
603
612
  'passive': false
604
613
  });
605
- this.list.addEventListener('contextmenu', function(e): void {
614
+ this.wrap.addEventListener('contextmenu', function(e): void {
606
615
  e.preventDefault();
607
616
  });
617
+ if (clickgo.isImmersion()) {
618
+ // --- 只有沉浸式模式(Windows 下非 frame 的 native)才会绑定这个事件 ---
619
+ this.wrap.addEventListener('mouseenter', function() {
620
+ native.invoke('cg-mouse-ignore', native.getToken(), false);
621
+ });
622
+ this.wrap.addEventListener('mouseleave', function() {
623
+ native.invoke('cg-mouse-ignore', native.getToken(), true);
624
+ });
625
+ }
626
+
627
+ /** --- form list 的 div --- */
628
+ this.list.id = 'cg-form-list';
629
+ this.wrap.appendChild(this.list);
608
630
 
609
631
  /** --- pop list 的 div --- */
610
632
  this.popList.id = 'cg-pop-list';
611
- this.popList.addEventListener('contextmenu', function(e): void {
612
- e.preventDefault();
613
- });
614
633
  this.wrap.appendChild(this.popList);
615
- this.popList.addEventListener('touchmove', function(e): void {
616
- // --- 防止拖动时整个网页跟着动 ---
617
- e.preventDefault();
618
- }, {
619
- 'passive': false
620
- });
621
634
 
622
635
  // --- 从鼠标指针处从小到大缩放然后淡化的圆圈动画特效对象 ---=
623
636
  this.circular.id = 'cg-circular';
@@ -640,29 +653,11 @@ const elements: {
640
653
 
641
654
  // --- 添加 cg-system 的 dom ---
642
655
  this.system.id = 'cg-system';
643
- this.system.addEventListener('contextmenu', function(e): void {
644
- e.preventDefault();
645
- });
646
656
  this.wrap.appendChild(this.system);
647
- this.system.addEventListener('touchmove', function(e): void {
648
- // --- 防止拖动时整个网页跟着动 ---
649
- e.preventDefault();
650
- }, {
651
- 'passive': false
652
- });
653
657
 
654
658
  // --- 添加 cg-simpletask 的 dom ---
655
659
  this.simpleSystemtask.id = 'cg-simpletask';
656
- this.simpleSystemtask.addEventListener('contextmenu', function(e): void {
657
- e.preventDefault();
658
- });
659
660
  this.wrap.appendChild(this.simpleSystemtask);
660
- this.simpleSystemtask.addEventListener('touchmove', function(e): void {
661
- // --- 防止拖动时整个网页跟着动 ---
662
- e.preventDefault();
663
- }, {
664
- 'passive': false
665
- });
666
661
  const simpletaskApp = clickgo.vue.createApp({
667
662
  'template': '<div v-for="(item, formId) of forms" class="cg-simpletask-item" @click="click(parseInt(formId))"><div v-if="item.icon" class="cg-simpletask-icon" :style="{\'background-image\': \'url(\' + item.icon + \')\'}"></div><div>{{item.title}}</div></div>',
668
663
  'data': function() {
@@ -703,23 +698,14 @@ const elements: {
703
698
 
704
699
  // --- cg-launcher ---
705
700
  this.launcher.id = 'cg-launcher';
706
- this.launcher.addEventListener('contextmenu', function(e): void {
707
- e.preventDefault();
708
- });
709
701
  this.wrap.appendChild(this.launcher);
710
- this.launcher.addEventListener('touchmove', function(e): void {
711
- // --- 防止拖动时整个网页跟着动 ---
712
- e.preventDefault();
713
- }, {
714
- 'passive': false
715
- });
716
702
  // --- Vue 挂载在这里 ---
717
703
  const waiting = function(): void {
718
704
  // --- 必须在这里执行,要不然 computed 无法更新,因为 core 还没加载进来 ---
719
705
  if (!core.config) {
720
706
  setTimeout(function() {
721
707
  waiting();
722
- }, 2000);
708
+ }, 150);
723
709
  return;
724
710
  }
725
711
  const launcherApp = clickgo.vue.createApp({
@@ -1040,10 +1026,10 @@ export function get(formId: number): types.IFormInfo | null {
1040
1026
  return {
1041
1027
  'taskId': taskId,
1042
1028
  'title': item.vroot.$refs.form.title,
1043
- 'icon': item.vroot.$refs.form.iconData,
1029
+ 'icon': item.vroot.$refs.form.iconDataUrl,
1044
1030
  'stateMax': item.vroot.$refs.form.stateMaxData,
1045
1031
  'stateMin': item.vroot.$refs.form.stateMinData,
1046
- 'show': item.vroot.$refs.form.showData,
1032
+ 'show': item.vroot.$refs.form.isShow,
1047
1033
  'focus': item.vroot.formFocus
1048
1034
  };
1049
1035
  }
@@ -1076,16 +1062,23 @@ export function getList(taskId: number): Record<string, types.IFormInfo> {
1076
1062
  list[fid] = {
1077
1063
  'taskId': taskId,
1078
1064
  'title': item.vroot.$refs.form.title,
1079
- 'icon': item.vroot.$refs.form.iconData,
1065
+ 'icon': item.vroot.$refs.form.iconDataUrl,
1080
1066
  'stateMax': item.vroot.$refs.form.stateMaxData,
1081
1067
  'stateMin': item.vroot.$refs.form.stateMinData,
1082
- 'show': item.vroot.$refs.form.showData,
1068
+ 'show': item.vroot.$refs.form.isShow,
1083
1069
  'focus': item.vroot.formFocus
1084
1070
  };
1085
1071
  }
1086
1072
  return list;
1087
1073
  }
1088
1074
 
1075
+ /**
1076
+ * --- 获取当前有焦点的窗体 form id ---
1077
+ */
1078
+ export function getFocus(): number | null {
1079
+ return focusId;
1080
+ }
1081
+
1089
1082
  /**
1090
1083
  * --- 改变 form 的焦点 class ---
1091
1084
  * @param formId 变更后的 form id
@@ -1099,31 +1092,25 @@ export function changeFocus(formId: number = 0): void {
1099
1092
  });
1100
1093
  return;
1101
1094
  }
1102
- const focusElement = document.querySelector('#cg-form-list > [data-form-focus]');
1103
- if (focusElement) {
1104
- const dataFormId = focusElement.getAttribute('data-form-id');
1105
- if (dataFormId) {
1106
- const dataFormIdNumber = parseInt(dataFormId);
1107
- if (dataFormIdNumber === formId) {
1108
- return;
1109
- }
1110
- else {
1111
- const taskId = parseInt(focusElement.getAttribute('data-task-id') ?? '0');
1112
- const t = task.list[taskId];
1113
- t.forms[dataFormIdNumber].vapp._container.removeAttribute('data-form-focus');
1114
- t.forms[dataFormIdNumber].vroot._formFocus = false;
1115
- // --- 触发 formBlurred 事件 ---
1116
- core.trigger('formBlurred', taskId, dataFormIdNumber);
1117
- }
1095
+ const dataFormId = getFocus();
1096
+ if (dataFormId) {
1097
+ if (dataFormId === formId) {
1098
+ return;
1118
1099
  }
1119
1100
  else {
1120
- return;
1101
+ const t = task.list[task.getFocus()!];
1102
+ t.forms[dataFormId].vapp._container.removeAttribute('data-form-focus');
1103
+ t.forms[dataFormId].vroot._formFocus = false;
1104
+ // --- 触发 formBlurred 事件 ---
1105
+ core.trigger('formBlurred', t.id, dataFormId);
1121
1106
  }
1122
1107
  }
1108
+ focusId = null;
1109
+ task.setFocus();
1123
1110
  if (formId === 0) {
1124
1111
  return;
1125
1112
  }
1126
- const el = document.querySelector(`#cg-form-list > [data-form-id='${formId}']`);
1113
+ const el = elements.list.querySelector(`.cg-form-wrap[data-form-id='${formId}']`);
1127
1114
  if (!el) {
1128
1115
  return;
1129
1116
  }
@@ -1143,14 +1130,16 @@ export function changeFocus(formId: number = 0): void {
1143
1130
  min(dialogFormId);
1144
1131
  }
1145
1132
  if (t.forms[dialogFormId].vroot._topMost) {
1146
- t.forms[dialogFormId].vroot.$refs.form.$data.zIndexData = ++info.topLastZIndex;
1133
+ t.forms[dialogFormId].vroot.$refs.form.$data.zIndex = ++info.topLastZIndex;
1147
1134
  }
1148
1135
  else {
1149
- t.forms[dialogFormId].vroot.$refs.form.$data.zIndexData = ++info.lastZIndex;
1136
+ t.forms[dialogFormId].vroot.$refs.form.$data.zIndex = ++info.lastZIndex;
1150
1137
  }
1151
1138
  // --- 开启 focus ---
1152
1139
  t.forms[dialogFormId].vapp._container.dataset.formFocus = '';
1153
1140
  t.forms[dialogFormId].vroot._formFocus = true;
1141
+ focusId = dialogFormId;
1142
+ task.setFocus(t.id);
1154
1143
  // --- 触发 formFocused 事件 ---
1155
1144
  core.trigger('formFocused', taskId, dialogFormId);
1156
1145
  // --- 判断点击的窗体是不是就是 dialog mask 窗体本身 ---
@@ -1162,14 +1151,16 @@ export function changeFocus(formId: number = 0): void {
1162
1151
  else {
1163
1152
  // --- 没有 dialog,才修改 zindex ---
1164
1153
  if (t.forms[formId].vroot._topMost) {
1165
- t.forms[formId].vroot.$refs.form.$data.zIndexData = ++info.topLastZIndex;
1154
+ t.forms[formId].vroot.$refs.form.$data.zIndex = ++info.topLastZIndex;
1166
1155
  }
1167
1156
  else {
1168
- t.forms[formId].vroot.$refs.form.$data.zIndexData = ++info.lastZIndex;
1157
+ t.forms[formId].vroot.$refs.form.$data.zIndex = ++info.lastZIndex;
1169
1158
  }
1170
1159
  // --- 正常开启 focus ---
1171
1160
  t.forms[formId].vapp._container.dataset.formFocus = '';
1172
1161
  t.forms[formId].vroot._formFocus = true;
1162
+ focusId = formId;
1163
+ task.setFocus(t.id);
1173
1164
  // --- 触发 formFocused 事件 ---
1174
1165
  core.trigger('formFocused', taskId, formId);
1175
1166
  }
@@ -1824,13 +1815,13 @@ export function remove(formId: number): boolean {
1824
1815
  let icon = '';
1825
1816
  if (task.list[taskId].forms[formId]) {
1826
1817
  title = task.list[taskId].forms[formId].vroot.$refs.form.title;
1827
- icon = task.list[taskId].forms[formId].vroot.$refs.form.iconData;
1818
+ icon = task.list[taskId].forms[formId].vroot.$refs.form.iconDataUrl;
1828
1819
  const io = task.list[taskId].runtime.dialogFormIds.indexOf(formId);
1829
1820
  if (io > -1) {
1830
1821
  // --- 取消 dialog mask 记录 ---
1831
1822
  task.list[taskId].runtime.dialogFormIds.splice(io, 1);
1832
1823
  }
1833
- task.list[taskId].forms[formId].vroot.$refs.form.$data.showData = false;
1824
+ task.list[taskId].forms[formId].vroot.$refs.form.$data.isShow = false;
1834
1825
  setTimeout(function() {
1835
1826
  // --- 获取最大的 z index 窗体,并让他获取焦点 ---
1836
1827
  const fid = getMaxZIndexID({
@@ -1849,6 +1840,7 @@ export function remove(formId: number): boolean {
1849
1840
  }
1850
1841
  task.list[taskId].forms[formId].vapp.unmount();
1851
1842
  task.list[taskId].forms[formId].vapp._container.remove();
1843
+ elements.popList.querySelector('[data-form-id="' + formId.toString() + '"]')?.remove();
1852
1844
  if (io > -1) {
1853
1845
  // --- 如果是 dialog 则要执行回调 ---
1854
1846
  task.list[taskId].forms[formId].vroot.cgDialogCallback();
@@ -1858,6 +1850,9 @@ export function remove(formId: number): boolean {
1858
1850
  dom.removeStyle(taskId, 'form', formId);
1859
1851
  // --- 触发 formRemoved 事件 ---
1860
1852
  core.trigger('formRemoved', taskId, formId, title, icon);
1853
+ dom.clearWatchStyle(formId);
1854
+ dom.clearWatchProperty(formId);
1855
+ native.clear(formId, taskId);
1861
1856
  // --- 检测是否已经没有窗体了,如果没有了的话就要结束任务了 ---
1862
1857
  if (Object.keys(task.list[taskId].forms).length === 0) {
1863
1858
  task.end(taskId);
@@ -1910,6 +1905,7 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
1910
1905
  }
1911
1906
  // --- 准备相关变量 ---
1912
1907
  let data: Record<string, any> = {};
1908
+ let access: Record<string, any> = {};
1913
1909
  let methods: Record<string, any> | undefined = undefined;
1914
1910
  let computed: Record<string, any> = {};
1915
1911
  let beforeCreate: (() => void) | undefined = undefined;
@@ -1922,6 +1918,7 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
1922
1918
  let unmounted: (() => void) | undefined = undefined;
1923
1919
  if (opt.code) {
1924
1920
  data = opt.code.data ?? {};
1921
+ access = opt.code.access ?? {};
1925
1922
  methods = opt.code.methods;
1926
1923
  computed = opt.code.computed ?? {};
1927
1924
  beforeCreate = opt.code.beforeCreate;
@@ -1963,8 +1960,13 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
1963
1960
  layout = layout.replace(/@(touchstart|touchmove|wheel)=/g, '@$1.passive=');
1964
1961
  layout = layout.replace(/@(touchstart|touchmove|wheel)\.not=/g, '@$1=');
1965
1962
  */
1963
+ // --- 给 teleport 做处理 ---
1964
+ if (layout.includes('<teleport')) {
1965
+ layout = tool.teleportGlue(layout, formId);
1966
+ }
1966
1967
  // --- 插入 HTML 到 Element ---
1967
1968
  elements.list.insertAdjacentHTML('beforeend', `<div class="cg-form-wrap" data-form-id="${formId.toString()}" data-task-id="${opt.taskId.toString()}"></div>`);
1969
+ elements.popList.insertAdjacentHTML('beforeend', `<div data-form-id="${formId.toString()}" data-task-id="${opt.taskId.toString()}"></div>`);
1968
1970
  // --- 获取刚才的 form wrap element 对象 ---
1969
1971
  const el: HTMLElement = elements.list.children.item(elements.list.children.length - 1) as HTMLElement;
1970
1972
  // --- 创建窗体对象 ---
@@ -2026,17 +2028,21 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
2026
2028
  changeFocus(form.id);
2027
2029
  }
2028
2030
  else {
2029
- form.vroot.$refs.form.$data.zIndexData = ++info.topLastZIndex;
2031
+ form.vroot.$refs.form.$data.zIndex = ++info.topLastZIndex;
2030
2032
  }
2031
2033
  }
2032
2034
  else {
2033
2035
  // --- 取消置顶 ---
2034
2036
  form.vroot.$data._topMost = false;
2035
- form.vroot.$refs.form.$data.zIndexData = ++info.lastZIndex;
2037
+ form.vroot.$refs.form.$data.zIndex = ++info.lastZIndex;
2036
2038
  }
2037
2039
  return;
2038
2040
  }
2039
2041
  };
2042
+ // --- 判断是否要与 native 实体窗体大小同步 ---
2043
+ if (clickgo.isNative() && (formId === 1) && !clickgo.isImmersion() && !clickgo.hasFrame()) {
2044
+ data.isNativeSync = true;
2045
+ }
2040
2046
  // --- 挂载 style ---
2041
2047
  if (style) {
2042
2048
  // --- 窗体的 style ---
@@ -2056,7 +2062,10 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
2056
2062
  'computed': computed,
2057
2063
 
2058
2064
  'beforeCreate': beforeCreate,
2059
- 'created': created,
2065
+ 'created': function(this: types.IVue) {
2066
+ this.access = tool.clone(access);
2067
+ created?.call(this);
2068
+ },
2060
2069
  'beforeMount': beforeMount,
2061
2070
  'mounted': async function(this: types.IVue) {
2062
2071
  await this.$nextTick();
@@ -2068,7 +2077,7 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
2068
2077
  'current': t.current,
2069
2078
  'files': t.app.files
2070
2079
  });
2071
- this.$refs.form.iconData = (icon instanceof Blob) ? await tool.blob2DataUrl(icon) : '';
2080
+ this.$refs.form.iconDataUrl = (icon instanceof Blob) ? await tool.blob2DataUrl(icon) : '';
2072
2081
  }
2073
2082
  // --- 完成 ---
2074
2083
  resolve({
@@ -2120,17 +2129,41 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
2120
2129
  await mounted.call(rtn.vroot, opt.data);
2121
2130
  }
2122
2131
  catch (err: any) {
2132
+ // --- 窗体创建失败,做垃圾回收 ---
2123
2133
  core.trigger('error', rtn.vroot.taskId, rtn.vroot.formId, err, 'Create form mounted error.');
2124
- t.forms[formId] = undefined as any;
2125
2134
  delete t.forms[formId];
2126
- rtn.vapp.unmount();
2135
+ try {
2136
+ rtn.vapp.unmount();
2137
+ }
2138
+ catch (err: any) {
2139
+ const msg = `Message: ${err.message}\nTask id: ${opt.taskId}\nForm id: ${formId}\nFunction: form.create, unmount.`;
2140
+ notify({
2141
+ 'title': 'Form Unmount Error',
2142
+ 'content': msg,
2143
+ 'type': 'danger'
2144
+ });
2145
+ console.log('Form Unmount Error', msg, err);
2146
+ }
2127
2147
  rtn.vapp._container.remove();
2148
+ elements.popList.querySelector('[data-form-id="' + rtn.vroot.formId + '"]')?.remove();
2149
+ dom.clearWatchStyle(rtn.vroot.formId);
2150
+ dom.clearWatchProperty(rtn.vroot.formId);
2151
+ native.clear(formId, t.id);
2152
+ // --- 移除 style ---
2128
2153
  dom.removeStyle(rtn.vroot.taskId, 'form', rtn.vroot.formId);
2129
2154
  return -8;
2130
2155
  }
2131
2156
  }
2132
2157
  // --- 触发 formCreated 事件 ---
2133
- core.trigger('formCreated', opt.taskId, formId, rtn.vroot.$refs.form.title, rtn.vroot.$refs.form.iconData);
2158
+ core.trigger('formCreated', opt.taskId, formId, rtn.vroot.$refs.form.title, rtn.vroot.$refs.form.iconDataUrl);
2159
+ // --- 同步的窗体先进行同步一下 ---
2160
+ if (rtn.vroot.isNativeSync) {
2161
+ native.invoke('cg-set-size', native.getToken(), rtn.vroot.$refs.form.$el.offsetWidth, rtn.vroot.$refs.form.$el.offsetHeight);
2162
+ window.addEventListener('resize', function(): void {
2163
+ rtn.vroot.$refs.form.setPropData('width', window.innerWidth);
2164
+ rtn.vroot.$refs.form.setPropData('height', window.innerHeight);
2165
+ });
2166
+ }
2134
2167
  return formId;
2135
2168
  }
2136
2169
 
@@ -2181,7 +2214,7 @@ export function dialog(opt: string | types.IFormDialogOptions): Promise<string>
2181
2214
  }
2182
2215
  }
2183
2216
  };
2184
- cls.create(undefined, `<form title="${nopt.title ?? 'dialog'}" min="false" max="false" resize="false" height="0" border="${nopt.title ? 'normal' : 'plain'}" direction="v"><dialog :buttons="buttons" @select="select"${nopt.direction ? ` direction="${nopt.direction}"` : ''}>${nopt.content}</dialog></form>`).then((frm) => {
2217
+ cls.create(undefined, `<form title="${nopt.title ?? 'dialog'}" min="false" max="false" resize="false" height="0" width="0" border="${nopt.title ? 'normal' : 'plain'}" direction="v"><dialog :buttons="buttons" @select="select"${nopt.direction ? ` direction="${nopt.direction}"` : ''}>${nopt.content}</dialog></form>`).then((frm) => {
2185
2218
  if (typeof frm === 'number') {
2186
2219
  resolve('');
2187
2220
  return;
package/dist/lib/fs.js CHANGED
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.copyFile = exports.copyFolder = exports.readDir = exports.rename = exports.chmod = exports.rmdirDeep = exports.rmdir = exports.mkdir = exports.isFile = exports.isDir = exports.stats = exports.unlink = exports.symlink = exports.readLink = exports.putContent = exports.getContent = void 0;
13
13
  const tool = require("./tool");
14
- const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.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/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.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/greatview/', '/app/demo/form/control/greatview/greatview.css', '/app/demo/form/control/greatview/greatview.js', '/app/demo/form/control/greatview/greatview.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.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/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/overflow/', '/app/demo/form/control/overflow/overflow.css', '/app/demo/form/control/overflow/overflow.js', '/app/demo/form/control/overflow/overflow.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/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/view/', '/app/demo/form/control/view/view.css', '/app/demo/form/control/view/view.js', '/app/demo/form/control/view/view.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/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/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.css', '/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/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/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/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/common.cgc', '/control/form.cgc', '/control/monaco.cgc', '/control/property.cgc', '/control/task.cgc', '/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/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/familiar.cgt'];
14
+ const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.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/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.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/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.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/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/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/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.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/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/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/test.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.css', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.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/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/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/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/common.cgc', '/control/form.cgc', '/control/monaco.cgc', '/control/property.cgc', '/control/task.cgc', '/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/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/familiar.cgt'];
15
15
  function getContent(path, options) {
16
16
  return __awaiter(this, void 0, void 0, function* () {
17
17
  path = tool.urlResolve('/', path);
package/dist/lib/fs.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  import * as types from '../../types';
9
9
  import * as tool from './tool';
10
10
 
11
- const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.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/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.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/greatview/', '/app/demo/form/control/greatview/greatview.css', '/app/demo/form/control/greatview/greatview.js', '/app/demo/form/control/greatview/greatview.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.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/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/overflow/', '/app/demo/form/control/overflow/overflow.css', '/app/demo/form/control/overflow/overflow.js', '/app/demo/form/control/overflow/overflow.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/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/view/', '/app/demo/form/control/view/view.css', '/app/demo/form/control/view/view.js', '/app/demo/form/control/view/view.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/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/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.css', '/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/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/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/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/common.cgc', '/control/form.cgc', '/control/monaco.cgc', '/control/property.cgc', '/control/task.cgc', '/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/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/familiar.cgt'];
11
+ const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.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/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.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/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.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/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/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/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.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/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/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/test.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.css', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.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/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/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/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/common.cgc', '/control/form.cgc', '/control/monaco.cgc', '/control/property.cgc', '/control/task.cgc', '/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/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/familiar.cgt'];
12
12
 
13
13
  export async function getContent(path: string, options?: {
14
14
  'start'?: number;