clickgo 3.0.0-dev

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 (145) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +75 -0
  3. package/dist/app/demo/config.json +106 -0
  4. package/dist/app/demo/form/control/block/block.css +1 -0
  5. package/dist/app/demo/form/control/block/block.scss +17 -0
  6. package/dist/app/demo/form/control/block/block.xml +7 -0
  7. package/dist/app/demo/form/control/button/button.css +1 -0
  8. package/dist/app/demo/form/control/button/button.js +27 -0
  9. package/dist/app/demo/form/control/button/button.scss +18 -0
  10. package/dist/app/demo/form/control/button/button.xml +126 -0
  11. package/dist/app/demo/form/control/check/check.js +12 -0
  12. package/dist/app/demo/form/control/check/check.xml +13 -0
  13. package/dist/app/demo/form/control/dialog/dialog.js +8 -0
  14. package/dist/app/demo/form/control/dialog/dialog.xml +26 -0
  15. package/dist/app/demo/form/control/file/file.js +23 -0
  16. package/dist/app/demo/form/control/file/file.xml +25 -0
  17. package/dist/app/demo/form/control/form/form.css +1 -0
  18. package/dist/app/demo/form/control/form/form.js +38 -0
  19. package/dist/app/demo/form/control/form/form.scss +9 -0
  20. package/dist/app/demo/form/control/form/form.xml +28 -0
  21. package/dist/app/demo/form/control/greatview/greatview.css +1 -0
  22. package/dist/app/demo/form/control/greatview/greatview.js +92 -0
  23. package/dist/app/demo/form/control/greatview/greatview.scss +22 -0
  24. package/dist/app/demo/form/control/greatview/greatview.xml +89 -0
  25. package/dist/app/demo/form/control/img/img.xml +16 -0
  26. package/dist/app/demo/form/control/label/label.xml +11 -0
  27. package/dist/app/demo/form/control/list/list.css +1 -0
  28. package/dist/app/demo/form/control/list/list.js +194 -0
  29. package/dist/app/demo/form/control/list/list.scss +7 -0
  30. package/dist/app/demo/form/control/list/list.xml +91 -0
  31. package/dist/app/demo/form/control/loading/loading.xml +8 -0
  32. package/dist/app/demo/form/control/marquee/marquee.js +30 -0
  33. package/dist/app/demo/form/control/marquee/marquee.xml +36 -0
  34. package/dist/app/demo/form/control/menu/menu.js +8 -0
  35. package/dist/app/demo/form/control/menu/menu.xml +122 -0
  36. package/dist/app/demo/form/control/monaco/monaco.js +113 -0
  37. package/dist/app/demo/form/control/monaco/monaco.xml +27 -0
  38. package/dist/app/demo/form/control/overflow/overflow.css +1 -0
  39. package/dist/app/demo/form/control/overflow/overflow.js +70 -0
  40. package/dist/app/demo/form/control/overflow/overflow.scss +18 -0
  41. package/dist/app/demo/form/control/overflow/overflow.xml +98 -0
  42. package/dist/app/demo/form/control/property/property.js +129 -0
  43. package/dist/app/demo/form/control/property/property.xml +6 -0
  44. package/dist/app/demo/form/control/radio/radio.js +7 -0
  45. package/dist/app/demo/form/control/radio/radio.xml +12 -0
  46. package/dist/app/demo/form/control/scroll/scroll.js +14 -0
  47. package/dist/app/demo/form/control/scroll/scroll.xml +35 -0
  48. package/dist/app/demo/form/control/select/select.js +91 -0
  49. package/dist/app/demo/form/control/select/select.xml +74 -0
  50. package/dist/app/demo/form/control/tab/tab.js +75 -0
  51. package/dist/app/demo/form/control/tab/tab.xml +22 -0
  52. package/dist/app/demo/form/control/text/text.js +53 -0
  53. package/dist/app/demo/form/control/text/text.xml +37 -0
  54. package/dist/app/demo/form/control/view/view.css +1 -0
  55. package/dist/app/demo/form/control/view/view.js +73 -0
  56. package/dist/app/demo/form/control/view/view.scss +18 -0
  57. package/dist/app/demo/form/control/view/view.xml +94 -0
  58. package/dist/app/demo/form/event/form/form.css +1 -0
  59. package/dist/app/demo/form/event/form/form.js +129 -0
  60. package/dist/app/demo/form/event/form/form.scss +24 -0
  61. package/dist/app/demo/form/event/form/form.xml +16 -0
  62. package/dist/app/demo/form/event/screen/screen.js +51 -0
  63. package/dist/app/demo/form/event/screen/screen.xml +9 -0
  64. package/dist/app/demo/form/event/task/task.js +78 -0
  65. package/dist/app/demo/form/event/task/task.xml +20 -0
  66. package/dist/app/demo/form/main.css +1 -0
  67. package/dist/app/demo/form/main.js +25 -0
  68. package/dist/app/demo/form/main.scss +9 -0
  69. package/dist/app/demo/form/main.xml +49 -0
  70. package/dist/app/demo/form/method/core/core.js +25 -0
  71. package/dist/app/demo/form/method/core/core.xml +7 -0
  72. package/dist/app/demo/form/method/dom/dom.css +1 -0
  73. package/dist/app/demo/form/method/dom/dom.js +163 -0
  74. package/dist/app/demo/form/method/dom/dom.scss +10 -0
  75. package/dist/app/demo/form/method/dom/dom.xml +55 -0
  76. package/dist/app/demo/form/method/form/form.css +1 -0
  77. package/dist/app/demo/form/method/form/form.js +217 -0
  78. package/dist/app/demo/form/method/form/form.scss +3 -0
  79. package/dist/app/demo/form/method/form/form.xml +56 -0
  80. package/dist/app/demo/form/method/form/test.xml +5 -0
  81. package/dist/app/demo/form/method/fs/fs.js +88 -0
  82. package/dist/app/demo/form/method/fs/fs.xml +8 -0
  83. package/dist/app/demo/form/method/fs/text.js +15 -0
  84. package/dist/app/demo/form/method/fs/text.xml +3 -0
  85. package/dist/app/demo/form/method/task/locale1.json +3 -0
  86. package/dist/app/demo/form/method/task/locale2.json +3 -0
  87. package/dist/app/demo/form/method/task/task.js +153 -0
  88. package/dist/app/demo/form/method/task/task.xml +57 -0
  89. package/dist/app/demo/form/method/theme/theme.js +74 -0
  90. package/dist/app/demo/form/method/theme/theme.xml +9 -0
  91. package/dist/app/demo/form/method/tool/tool.js +64 -0
  92. package/dist/app/demo/form/method/tool/tool.xml +26 -0
  93. package/dist/app/demo/form/method/zip/zip.js +99 -0
  94. package/dist/app/demo/form/method/zip/zip.xml +12 -0
  95. package/dist/app/demo/global.css +3 -0
  96. package/dist/app/demo/res/icon.svg +1 -0
  97. package/dist/app/demo/res/img.jpg +0 -0
  98. package/dist/app/demo/res/r-1.svg +1 -0
  99. package/dist/app/demo/res/r-2.svg +1 -0
  100. package/dist/app/demo/res/sql.svg +1 -0
  101. package/dist/app/demo/res/txt.svg +1 -0
  102. package/dist/app/demo/res/zip.svg +1 -0
  103. package/dist/app/task/config.json +29 -0
  104. package/dist/app/task/form/bar/bar.js +299 -0
  105. package/dist/app/task/form/bar/bar.xml +47 -0
  106. package/dist/app/task/form/desktop/desktop.xml +1 -0
  107. package/dist/app/task/locale/en.json +11 -0
  108. package/dist/app/task/locale/ja.json +11 -0
  109. package/dist/app/task/locale/sc.json +11 -0
  110. package/dist/app/task/locale/tc.json +11 -0
  111. package/dist/clickgo.js +41 -0
  112. package/dist/clickgo.ts +51 -0
  113. package/dist/control/common.cgc +0 -0
  114. package/dist/control/form.cgc +0 -0
  115. package/dist/control/monaco.cgc +0 -0
  116. package/dist/control/property.cgc +0 -0
  117. package/dist/control/task.cgc +0 -0
  118. package/dist/global.css +1 -0
  119. package/dist/icon.png +0 -0
  120. package/dist/index.js +88 -0
  121. package/dist/index.ts +92 -0
  122. package/dist/lib/control.js +365 -0
  123. package/dist/lib/control.ts +428 -0
  124. package/dist/lib/core.js +668 -0
  125. package/dist/lib/core.ts +732 -0
  126. package/dist/lib/dom.js +1471 -0
  127. package/dist/lib/dom.ts +1785 -0
  128. package/dist/lib/form.js +2101 -0
  129. package/dist/lib/form.ts +2496 -0
  130. package/dist/lib/fs.js +849 -0
  131. package/dist/lib/fs.ts +995 -0
  132. package/dist/lib/native.js +138 -0
  133. package/dist/lib/native.ts +219 -0
  134. package/dist/lib/task.js +686 -0
  135. package/dist/lib/task.ts +842 -0
  136. package/dist/lib/theme.js +159 -0
  137. package/dist/lib/theme.ts +196 -0
  138. package/dist/lib/tool.js +501 -0
  139. package/dist/lib/tool.ts +620 -0
  140. package/dist/lib/zip.js +352 -0
  141. package/dist/lib/zip.ts +434 -0
  142. package/dist/theme/familiar.cgt +0 -0
  143. package/package.json +27 -0
  144. package/types/dev.d.ts +30 -0
  145. package/types/index.d.ts +673 -0
@@ -0,0 +1,673 @@
1
+ export let control: typeof import('../dist/lib/control');
2
+ export let core: typeof import('../dist/lib/core');
3
+ export let dom: typeof import('../dist/lib/dom');
4
+ export let form: typeof import('../dist/lib/form');
5
+ export let fs: typeof import('../dist/lib/fs');
6
+ export let native: typeof import('../dist/lib/native');
7
+ export let task: typeof import('../dist/lib/task');
8
+ export let theme: typeof import('../dist/lib/theme');
9
+ export let tool: typeof import('../dist/lib/tool');
10
+ export let zip: typeof import('../dist/lib/zip');
11
+
12
+ export function getVersion(): string;
13
+ export function getNative(): boolean;
14
+ export function setSafe(val: boolean): void;
15
+ export function getSafe(): boolean;
16
+ export function setCdn(val: string): void;
17
+ export function getCdn(): string;
18
+
19
+ export function init(cdn?: string): Promise<void>;
20
+
21
+ // --- core 核心 ---
22
+
23
+ /** --- 屏幕可用区域 --- */
24
+ export interface IAvailArea {
25
+ 'left': number;
26
+ 'top': number;
27
+ 'width': number;
28
+ 'height': number;
29
+ }
30
+
31
+ /** --- 全局事件 --- */
32
+ export interface IGlobalEvents {
33
+ /** --- 配置捕获 Vue 错误 --- */
34
+ errorHandler: null | ((taskId: number, formId: number, error: Error, info: string) => void | Promise<void>);
35
+ /** --- 当屏幕大小改变时触发的事件 --- */
36
+ screenResizeHandler: null | (() => void | Promise<void>);
37
+ /** --- 系统配置被更改时触发 --- */
38
+ configChangedHandler: null | (
39
+ (n: TConfigName, v: string | boolean | Record<string, any> | null) => void | Promise<void>
40
+ );
41
+ /** --- 窗体被创建后触发 --- */
42
+ formCreatedHandler: null | ((taskId: number, formId: number, title: string, icon: string) => void | Promise<void>);
43
+ /** --- 窗体被移除后触发 --- */
44
+ formRemovedHandler: null | ((taskId: number, formId: number, title: string, icon: string) => void | Promise<void>);
45
+ /** --- 窗体标题被改变后触发 --- */
46
+ formTitleChangedHandler: null | ((taskId: number, formId: number, title: string) => void | Promise<void>);
47
+ /** --- 窗体图标被改变后触发 --- */
48
+ formIconChangedHandler: null | ((taskId: number, formId: number, icon: string) => void | Promise<void>);
49
+ /** --- 窗体最小化状态改变后触发 --- */
50
+ formStateMinChangedHandler: null | ((taskId: number, formId: number, state: boolean) => void | Promise<void>);
51
+ /** --- 窗体最大化状态改变后触发 --- */
52
+ formStateMaxChangedHandler: null | ((taskId: number, formId: number, state: boolean) => void | Promise<void>);
53
+ /** --- 窗体显示状态改变后触发 */
54
+ formShowChangedHandler: null | ((taskId: number, formId: number, state: boolean) => void | Promise<void>);
55
+ /** --- 窗体获得焦点后触发 --- */
56
+ formFocusedHandler: null | ((taskId: number, formId: number) => void | Promise<void>);
57
+ /** --- 窗体丢失焦点后触发 --- */
58
+ formBlurredHandler: null | ((taskId: number, formId: number) => void | Promise<void>);
59
+ /** --- 窗体闪烁时触发 --- */
60
+ formFlashHandler: null | ((taskId: number, formId: number) => void | Promise<void>);
61
+ /** --- 任务开始后触发 --- */
62
+ taskStartedHandler: null | ((taskId: number) => void | Promise<void>);
63
+ /** --- 任务结束后触发 --- */
64
+ taskEndedHandler: null | ((taskId: number) => void | Promise<void>);
65
+ }
66
+
67
+ /** --- Core Config 属性列表 --- */
68
+ export type TConfigName = 'locale' | 'task.position' | 'task.pin' | 'desktop.icon.storage' | 'desktop.icon.recycler' | 'desktop.wallpaper' | 'desktop.path';
69
+
70
+ /** --- Config 对象 --- */
71
+ export interface IConfig {
72
+ 'locale': string;
73
+ ['task.position']: 'left' | 'right' | 'top' | 'bottom';
74
+ ['task.pin']: Record<string, { 'name': string; 'icon': string; }>;
75
+ ['desktop.icon.storage']: boolean;
76
+ ['desktop.icon.recycler']: boolean;
77
+ ['desktop.wallpaper']: string | null;
78
+ ['desktop.path']: string | null;
79
+ }
80
+
81
+ /** --- 全局事件类型 --- */
82
+ export type TGlobalEvent = 'error' | 'screenResize' | 'configChanged' | 'formCreated' | 'formRemoved' | 'formTitleChanged' | 'formIconChanged' | 'formStateMinChanged' | 'formStateMaxChanged' | 'formShowChanged' | 'formFocused' | 'formBlurred' | 'formFlash' | 'taskStarted' | 'taskEnded';
83
+
84
+ export interface ICoreFetchAppOptions {
85
+ 'notifyId'?: number;
86
+ 'current'?: string;
87
+ }
88
+
89
+ /** --- 应用文件包 --- */
90
+ export interface IApp {
91
+ 'type': 'app';
92
+ /** --- 应用图标 --- */
93
+ 'icon': string;
94
+ /** --- 应用对象配置文件 --- */
95
+ 'config': IAppConfig;
96
+ /** --- 所有已加载的文件内容 --- */
97
+ 'files': Record<string, Blob | string>;
98
+ }
99
+
100
+ /** --- 应用文件包 config --- */
101
+ export interface IAppConfig {
102
+ 'name': string;
103
+ 'ver': number;
104
+ 'version': string;
105
+ 'author': string;
106
+
107
+ /** --- 将要加载的控件 --- */
108
+ 'controls': string[];
109
+ /** --- 将自动加载的主题 --- */
110
+ 'themes'?: string[];
111
+ /** --- 将自动申请的权限 --- */
112
+ 'permissions'?: Record<string, any>;
113
+ /** --- 将自动加载的语言包,path: lang --- */
114
+ 'locales'?: Record<string, string>;
115
+ /** --- 不带扩展名,系统会在末尾添加 .css --- */
116
+ 'style'?: string;
117
+ /** --- 不带扩展名,系统会在末尾添加 .xml --- */
118
+ 'main': string;
119
+ /** --- 图标路径,需包含扩张名 --- */
120
+ 'icon': string;
121
+
122
+ /** --- 将要加载的文件列表 --- */
123
+ 'files': string[];
124
+ }
125
+
126
+ // --- dom ---
127
+
128
+ /** --- Element 的大小 --- */
129
+ export interface IDomSize {
130
+ 'top': number;
131
+ 'right': number;
132
+ 'bottom': number;
133
+ 'left': number;
134
+ 'width': number;
135
+ 'height': number;
136
+ 'padding': {
137
+ 'top': number;
138
+ 'right': number;
139
+ 'bottom': number;
140
+ 'left': number;
141
+ };
142
+ 'border': {
143
+ 'top': number;
144
+ 'right': number;
145
+ 'bottom': number;
146
+ 'left': number;
147
+ };
148
+ 'clientHeight': number;
149
+ 'clientWidth': number;
150
+ 'innerWidth': number;
151
+ 'innerHeight': number;
152
+ 'scrollWidth': number;
153
+ 'scrollHeight': number;
154
+ }
155
+
156
+ /** --- 绑定鼠标事件选项 --- */
157
+ export interface IBindDownOptions {
158
+ 'down'?: (e: MouseEvent | TouchEvent) => void;
159
+ 'start'?: (e: MouseEvent | TouchEvent) => any;
160
+ 'move'?: (
161
+ e: MouseEvent | TouchEvent,
162
+ dir: 'top' | 'right' | 'bottom' | 'left'
163
+ ) => any;
164
+ 'up'?: (e: MouseEvent | TouchEvent) => void;
165
+ 'end'?: (e: MouseEvent | TouchEvent) => void;
166
+ }
167
+
168
+ /** --- 绑定上下左右拉选项 --- */
169
+ export interface IBindGestureOptions {
170
+ 'el'?: HTMLElement;
171
+ 'rect'?: DOMRect;
172
+ 'dirs'?: Array<('top' | 'right' | 'bottom' | 'left')>;
173
+ handler: (dir: 'top' | 'right' | 'bottom' | 'left') => void;
174
+ }
175
+
176
+ /** --- 绑定拖动选项 --- */
177
+ export interface IBindMoveOptions {
178
+ 'areaObject'?: HTMLElement | IVue;
179
+ 'left'?: number;
180
+ 'top'?: number;
181
+ 'right'?: number;
182
+ 'bottom'?: number;
183
+ 'offsetLeft'?: number;
184
+ 'offsetTop'?: number;
185
+ 'offsetRight'?: number;
186
+ 'offsetBottom'?: number;
187
+ 'objectLeft'?: number;
188
+ 'objectTop'?: number;
189
+ 'objectWidth'?: number;
190
+ 'objectHeight'?: number;
191
+ 'object'?: HTMLElement | IVue;
192
+ 'showRect'?: boolean;
193
+ 'start'?: (x: number, y: number) => any;
194
+ 'move'?: (ox: number, oy: number, x: number, y: number, border: TBorder, dir: 'top' | 'right' | 'bottom' | 'left', e: MouseEvent | TouchEvent) => void;
195
+ 'up'?: (moveTimes: Array<{ 'time': number; 'ox': number; 'oy': number; }>, e: MouseEvent | TouchEvent) => void;
196
+ 'end'?: (moveTimes: Array<{ 'time': number; 'ox': number; 'oy': number; }>, e: MouseEvent | TouchEvent) => void;
197
+ 'borderIn'?: (x: number, y: number, border: TBorder, e: MouseEvent | TouchEvent) => void;
198
+ 'borderOut'?: () => void;
199
+ }
200
+
201
+ /** --- 绑定拖动返回值 --- */
202
+ export interface IBindMoveResult {
203
+ 'left': number;
204
+ 'top': number;
205
+ 'right': number;
206
+ 'bottom': number;
207
+ }
208
+
209
+ /** --- 监视大小中的元素 --- */
210
+ export interface IWatchSizeItem {
211
+ 'el': HTMLElement;
212
+ 'ro': any;
213
+ 'taskId'?: number;
214
+ }
215
+
216
+ /** --- 监视变化中的元素 --- */
217
+ export interface IWatchItem {
218
+ 'el': HTMLElement;
219
+ 'mo': MutationObserver;
220
+ 'taskId'?: number;
221
+ }
222
+
223
+ /** --- 绑定改变大小选项 --- */
224
+ export interface IBindResizeOptions {
225
+ 'objectLeft'?: number;
226
+ 'objectTop'?: number;
227
+ 'objectWidth'?: number;
228
+ 'objectHeight'?: number;
229
+ 'object'?: HTMLElement | IVue;
230
+ 'minWidth'?: number;
231
+ 'minHeight'?: number;
232
+ 'maxWidth'?: number;
233
+ 'maxHeight'?: number;
234
+ 'border': TBorder;
235
+ 'start'?: (x: number, y: number) => any;
236
+ 'move'?: (left: number, top: number, width: number, height: number, x: number, y: number, border: TBorder) => void;
237
+ 'end'?: () => void;
238
+ }
239
+
240
+ // --- 工具包 --- tool ---
241
+
242
+ export interface IRequestOptions {
243
+ 'method'?: 'GET' | 'POST';
244
+ 'body'?: FormData;
245
+ 'timeout'?: number;
246
+ 'responseType'?: XMLHttpRequestResponseType;
247
+ 'headers'?: HeadersInit;
248
+
249
+ 'uploadStart'?: (total: number) => void | Promise<void>;
250
+ 'uploadProgress'?: (loaded: number, total: number) => void | Promise<void>;
251
+ 'uploadEnd'?: () => void | Promise<void>;
252
+ 'start'?: (total: number) => void | Promise<void>;
253
+ 'end'?: () => void | Promise<void>;
254
+ 'progress'?: (loaded: number, total: number) => void | Promise<void>;
255
+ 'load'?: (res: any) => void | Promise<void>;
256
+ 'error'?: () => void | Promise<void>;
257
+ }
258
+
259
+ // --- 文件系统 --- fs ---
260
+
261
+ /** --- 文件/文件夹信息对象 --- */
262
+ export interface IStats {
263
+ isFile(): boolean;
264
+ isDirectory(): boolean;
265
+ isSymbolicLink(): boolean;
266
+ size: number;
267
+ blksize: number;
268
+ atimeMs: number;
269
+ mtimeMs: number;
270
+ ctimeMs: number;
271
+ birthtimeMs: number;
272
+ atime: Date;
273
+ mtime: Date;
274
+ ctime: Date;
275
+ birthtime: Date;
276
+ }
277
+
278
+ /** --- 目录下项目 --- */
279
+ export interface IDirent {
280
+ isFile(): boolean;
281
+ isDirectory(): boolean;
282
+ isSymbolicLink(): boolean;
283
+ name: string;
284
+ }
285
+
286
+ // --- zip ---
287
+
288
+ export type TZip = import('../dist/lib/zip').Zip;
289
+
290
+ export interface IZipItem {
291
+ 'name': string;
292
+ 'date': Date;
293
+ 'isFile': boolean;
294
+ 'isDirectory': boolean;
295
+ 'path': string;
296
+ }
297
+
298
+ export interface IZipStats {
299
+ 'date': Date;
300
+ 'isFile': boolean;
301
+ 'isDirectory': boolean;
302
+ }
303
+
304
+ export interface IZipOutputByType {
305
+ 'base64': string;
306
+ 'string': string;
307
+ 'array': number[];
308
+ 'uint8array': Uint8Array;
309
+ 'arraybuffer': ArrayBuffer;
310
+ 'blob': Blob;
311
+ }
312
+
313
+ export type TZipOutputType = keyof IZipOutputByType;
314
+
315
+ export interface IZipInputByType {
316
+ 'base64': string;
317
+ 'string': string;
318
+ 'array': number[];
319
+ 'uint8array': Uint8Array;
320
+ 'arraybuffer': ArrayBuffer;
321
+ 'blob': Blob;
322
+ }
323
+
324
+ export type TZipInputType = keyof IZipInputByType;
325
+
326
+ export type TZipInputFileFormat = IZipInputByType[keyof IZipInputByType];
327
+
328
+ export interface IZipMetadata {
329
+ percent: number;
330
+ currentFile: string | null;
331
+ }
332
+
333
+ // --- task ---
334
+
335
+ /** --- 系统任务信息 --- */
336
+ export interface ISystemTaskInfo {
337
+ 'taskId': number;
338
+ 'formId': number;
339
+ 'length': number;
340
+ }
341
+
342
+ export interface ITaskRunOptions {
343
+ 'icon'?: string;
344
+ 'progress'?: boolean;
345
+ 'taskId'?: number;
346
+ }
347
+
348
+ export interface ICreateTimerOptions {
349
+ 'taskId'?: number;
350
+ 'formId'?: number;
351
+
352
+ 'immediate'?: boolean;
353
+ 'scope'?: 'form' | 'task';
354
+ 'count'?: number;
355
+ }
356
+
357
+ /** --- 运行中的任务对象 --- */
358
+ export interface ITask {
359
+ 'id': number;
360
+ 'app': IApp;
361
+ 'customTheme': boolean;
362
+ 'locale': {
363
+ 'lang': string;
364
+ 'data': Record<string, Record<string, string>>;
365
+ };
366
+ 'icon': string;
367
+ /** --- 当前 app 运行路径,末尾包含 / --- */
368
+ 'path': string;
369
+ 'files': Record<string, Blob | string>;
370
+
371
+ /** --- 已申请的权限列表 --- */
372
+ 'permissions': Record<string, any>;
373
+ 'forms': Record<number, IForm>;
374
+ 'objectURLs': string[];
375
+ /** --- 已解析的控件 path 映射控件对象 --- */
376
+ 'controls': {
377
+ 'loaded': Record<string, TControl | undefined>;
378
+ 'layout': Record<string, string>;
379
+ 'prep': Record<string, string>;
380
+ };
381
+ /** --- 任务重的 timer 列表 --- */
382
+ 'timers': Record<string, number>;
383
+ }
384
+
385
+ /** --- Task 的简略情况,通常在 list 当中 --- */
386
+ export interface ITaskInfo {
387
+ 'name': string;
388
+ 'locale': string;
389
+ 'customTheme': boolean;
390
+ 'formCount': number;
391
+ 'icon': string;
392
+ 'path': string;
393
+ }
394
+
395
+ // --- theme ---
396
+
397
+ /** --- 主题对象 --- */
398
+ export interface ITheme {
399
+ 'type': 'theme';
400
+ /** --- 主题对象配置文件 --- */
401
+ 'config': IThemeConfig;
402
+ /** --- 所有已加载的文件内容 --- */
403
+ 'files': Record<string, Blob | string>;
404
+ }
405
+
406
+ /** --- 主题文件包的 config --- */
407
+ export interface IThemeConfig {
408
+ 'name': string;
409
+ 'ver': number;
410
+ 'version': string;
411
+ 'author': string;
412
+
413
+ /** --- 不带扩展名,系统会在末尾添加 .css --- */
414
+ 'style': string;
415
+
416
+ /** --- 将要加载的文件 --- */
417
+ 'files': string[];
418
+ }
419
+
420
+ // --- form ---
421
+
422
+ /** --- 窗体对象 --- */
423
+ export interface IForm {
424
+ 'id': number;
425
+ 'vapp': IVueApp;
426
+ 'vroot': IVForm;
427
+ 'events': Record<string, (...any: any) => void | Promise<void>>;
428
+ }
429
+
430
+ /** --- 窗体创建选项 --- */
431
+ export interface IFormCreateOptions {
432
+ /** --- 当前 taskId,App 模式下无效 --- */
433
+ 'taskId'?: number;
434
+ /** --- 当前的 formId,App 模式下无效 --- */
435
+ 'formId'?: number;
436
+
437
+ 'file'?: string;
438
+
439
+ /** --- 相当于 base dir,有 file 以 file 的路径为准,没有则以 path 为准,用于定义当前 form 中文件所在的基准路径,以 / 结尾 --- */
440
+ 'path'?: string;
441
+ 'code'?: Record<string, any>;
442
+ 'layout'?: string;
443
+ 'style'?: string;
444
+
445
+ /** --- 置顶 --- */
446
+ 'topMost'?: boolean;
447
+ /** --- 遮罩 --- */
448
+ 'mask'?: boolean;
449
+ /** --- 传输的数据 --- */
450
+ 'data'?: Record<string, any>;
451
+ }
452
+
453
+ /** --- Dialog 选项 --- */
454
+ export interface IFormDialogOptions {
455
+ /** --- 当前的 formId,App 模式下无效 --- */
456
+ 'formId'?: number;
457
+
458
+ 'title'?: string;
459
+ 'content': string;
460
+ 'buttons'?: string[];
461
+ 'direction'?: 'h' | 'v';
462
+
463
+ 'select'?: (e: Event, button: string) => void;
464
+ }
465
+
466
+ /** --- Confirm 选项 --- */
467
+ export interface IFormConfirmOptions {
468
+ /** --- 当前的 formId,App 模式下无效 --- */
469
+ 'formId'?: number;
470
+
471
+ 'content': string;
472
+ 'cancel'?: boolean;
473
+ }
474
+
475
+ export interface IFormSetTopMostOptions {
476
+ /** --- 当前 taskId,App 模式下无效 --- */
477
+ 'taskId'?: number;
478
+ /** --- 当前的 formId,App 模式下留空为当前窗体 --- */
479
+ 'formId'?: number;
480
+ }
481
+
482
+ /** --- Form 的简略情况,通常在 list 当中 --- */
483
+ export interface IFormInfo {
484
+ 'taskId': number;
485
+ 'title': string;
486
+ 'icon': string;
487
+ 'stateMax': boolean;
488
+ 'stateMin': boolean;
489
+ 'show': boolean;
490
+ 'focus': boolean;
491
+ }
492
+
493
+ /** --- 移动 drag 到新位置函数的选项 --- */
494
+ export interface IMoveDragOptions {
495
+ 'top'?: number;
496
+ 'left'?: number;
497
+ 'width'?: number;
498
+ 'height'?: number;
499
+ 'icon'?: boolean;
500
+ }
501
+
502
+ export interface INotifyOptions {
503
+ 'title': string;
504
+ 'content': string;
505
+ 'icon'?: string | null;
506
+ 'timeout'?: number;
507
+ 'type'?: 'primary' | 'info' | 'warning' | 'danger' | 'progress';
508
+ 'progress'?: boolean;
509
+ }
510
+
511
+ /** --- 方向类型,从左上开始 --- */
512
+ export type TBorder = 'lt' | 't' | 'tr' | 'r' | 'rb' | 'b' | 'bl' | 'l' | '' | { 'left': number; 'top'?: number; 'width': number; 'height'?: number; };
513
+
514
+ export interface IVForm extends IVue {
515
+ /** --- 当前任务 id --- */
516
+ 'taskId': number;
517
+ /** --- 当前窗体 id --- */
518
+ 'formId': number;
519
+ /** --- 控件名 --- */
520
+ 'controlName': 'root';
521
+ /** --- 当前窗体是否有焦点 --- */
522
+ 'cgFocus': boolean;
523
+ /** --- 当前窗体的路径 --- */
524
+ 'cgPath': string;
525
+ /** --- 前导 --- */
526
+ 'cgPrep': string;
527
+ /** --- 是否 form 自定义的 zindex --- */
528
+ 'cgCustomZIndex': boolean;
529
+ /** --- 是否在顶层 --- */
530
+ 'cgTopMost': boolean;
531
+ /** --- 当前的 locale name --- */
532
+ 'cgLocale': string;
533
+ /** --- 获取语言内容 --- */
534
+ 'l': (key: string) => string;
535
+ /**
536
+ * --- layout 中 :class 的转义 ---
537
+ * @param cla class 内容对象
538
+ */
539
+ cgClassPrepend(cla: any): string;
540
+ /**
541
+ * --- 检测事件是否可被执行 ---
542
+ * @param e 事件
543
+ */
544
+ cgAllowEvent(e: MouseEvent | TouchEvent | KeyboardEvent): boolean;
545
+ }
546
+
547
+ // --- 控件 --- control ---
548
+
549
+ /** --- 控件文件包 --- */
550
+ export type TControl = Record<string, IControlItem>;
551
+
552
+ /** --- 控件对象 --- */
553
+ export interface IControlItem {
554
+ 'type': 'control';
555
+ /** --- 控件对象配置文件 --- */
556
+ 'config': IControlConfig;
557
+ /** --- 所有已加载的文件内容 --- */
558
+ 'files': Record<string, Blob | string>;
559
+ }
560
+
561
+ /** --- 控件文件包的 config --- */
562
+ export interface IControlConfig {
563
+ 'name': string;
564
+ 'ver': number;
565
+ 'version': string;
566
+ 'author': string;
567
+
568
+ /** --- 不带扩展名,系统会在末尾添加 .js --- */
569
+ 'code': string;
570
+ /** --- 不带扩展名,系统会在末尾添加 .html --- */
571
+ 'layout': string;
572
+ /** --- 不带扩展名,系统会在末尾添加 .css --- */
573
+ 'style': string;
574
+
575
+ /** --- 将要加载的文件 --- */
576
+ 'files': string[];
577
+ }
578
+
579
+ export interface IVControl extends IVue {
580
+ '$parent': IVControl | null;
581
+
582
+ /** --- 当前窗体是否有焦点 --- */
583
+ 'cgFocus': boolean;
584
+ /** --- 当前任务 id --- */
585
+ 'taskId': number;
586
+ /** --- 当前窗体 id --- */
587
+ 'formId': number;
588
+ /** --- 控件名 --- */
589
+ 'controlName': string;
590
+ /** --- 窗体基目录 --- */
591
+ 'cgPath': string;
592
+ /** --- 控件前导 --- */
593
+ 'cgPrep': string;
594
+ /** --- 获取目前现存的子 slots --- */
595
+ 'cgSlots': (name?: string) => IVueVNode[];
596
+ /** --- 当前 task 的 locale 值 --- */
597
+ 'cgLocale': string;
598
+ /** --- 获取语言内容 --- */
599
+ 'l': (key: string, data?: Record<string, Record<string, string>>) => string;
600
+ /** --- 根据 control name 来寻找上级 --- */
601
+ 'cgParentByName': (controlName: string) => IVControl | null;
602
+ /**
603
+ * --- layout 中 :class 的转义 ---
604
+ * @param cla class 内容对象
605
+ */
606
+ cgClassPrepend(cla: any): string;
607
+ /**
608
+ * --- 检测事件是否可被执行 ---
609
+ * @param e 事件
610
+ */
611
+ cgAllowEvent(e: MouseEvent | TouchEvent | KeyboardEvent): boolean;
612
+
613
+ }
614
+
615
+ // --- vue ---
616
+
617
+ export type IVueOptionMergeFunction = (to: unknown, from: unknown, instance: IVue) => any;
618
+
619
+ export interface IVueConfig {
620
+ errorHandler?(err: unknown, instance: IVue | null, info: string): void;
621
+ 'globalProperties': Record<string, any>;
622
+ isCustomElement(tag: string): boolean;
623
+ 'optionMergeStrategies': Record<string, IVueOptionMergeFunction>;
624
+ 'performance': boolean;
625
+ warnHandler?(msg: string, instance: IVue | null, trace: string): void;
626
+ }
627
+
628
+ export interface IVueApp {
629
+ component(name: string): any | undefined;
630
+ component(name: string, config: any): this;
631
+ 'config': IVueConfig;
632
+ directive(name: string): any | undefined;
633
+ directive(name: string, config: any): this;
634
+ mixin(mixin: any): this;
635
+ mount(rootContainer: HTMLElement | string): IVue;
636
+ provide<T>(key: string, value: T): this;
637
+ unmount(): void;
638
+ 'version': string;
639
+
640
+ ['_container']: HTMLElement;
641
+ }
642
+
643
+ export interface IVue {
644
+ '$attrs': Record<string, string>;
645
+ '$data': Record<string, any>;
646
+ '$el': HTMLElement;
647
+ $emit(name: string, ...arg: any): void;
648
+ $forceUpdate(): void;
649
+ $nextTick(): Promise<void>;
650
+ '$options': Record<string, any>;
651
+ '$parent': IVue | null;
652
+ '$props': Record<string, any>;
653
+ '$refs': Record<string, HTMLElement & IVue>;
654
+ '$root': IVue;
655
+ '$slots': {
656
+ 'default': undefined | ((o?: any) => IVueVNode[]);
657
+ [key: string]: undefined | ((o?: any) => IVueVNode[]);
658
+ };
659
+ '$watch': (o: any, cb: (n: any, o: any) => void) => void;
660
+
661
+ [key: string]: any;
662
+ }
663
+
664
+ export interface IVueVNode {
665
+ 'children': {
666
+ 'default': undefined | (() => IVueVNode[]);
667
+ [key: string]: undefined | (() => IVueVNode[]);
668
+ } & IVueVNode[];
669
+ 'props': Record<string, any>;
670
+ 'type': symbol | Record<string, any>;
671
+
672
+ [key: string]: any;
673
+ }