@snack-kit/core 0.1.0

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.
@@ -0,0 +1,1236 @@
1
+ import React from 'react';
2
+
3
+ interface I18nData {
4
+ /**
5
+ * 语言
6
+ */
7
+ [lang: string]: {
8
+ /**
9
+ * 字段键值
10
+ */
11
+ [key: string]: string;
12
+ };
13
+ }
14
+
15
+ /** 设置模块属性模型中单个属性的结构 */
16
+ interface SnackSettingModelItem {
17
+ /** 属性当前值 */
18
+ value: unknown;
19
+ [k: string]: unknown;
20
+ }
21
+ /**
22
+ * Snack 设置模块基类
23
+ *
24
+ * 继承此类的模块通常作为另一个 Snack 模块的配置面板,
25
+ * 通过 `$setData` 方法同步修改主模块(`main`)的 `data`。
26
+ */
27
+ declare class SnackSetting extends Snack {
28
+ /**
29
+ * 关联的主模块 Snack 实例
30
+ */
31
+ main: Snack;
32
+ /**
33
+ * 属性模型,键为数据字段名,值描述该字段的元数据与当前值
34
+ */
35
+ model: Record<string, SnackSettingModelItem>;
36
+ /**
37
+ * 是否将当前设置按照普通模式渲染,为 `true` 则不以弹窗模式渲染
38
+ */
39
+ $normal: boolean;
40
+ $model(): any;
41
+ /**
42
+ * this.data 数据赋值,同时渲染页面
43
+ * @param field 字段名字,支持 . 操作符
44
+ * @param value
45
+ * @param isRefresh
46
+ */
47
+ $setData(field: string, value?: unknown, isRefresh?: boolean): unknown;
48
+ /**
49
+ * 支持 . 操作符设置对象数据
50
+ * @param data
51
+ * @param field
52
+ * @param value
53
+ * @param parseExpr 是否解析表达式
54
+ * @private
55
+ */
56
+ private setFieldValue;
57
+ }
58
+
59
+ interface ImportModules {
60
+ [type: string]: {
61
+ [name: string]: Snack | SnackSetting;
62
+ };
63
+ }
64
+ interface CoreConfig {
65
+ /**
66
+ * 是否 runtime 模式
67
+ */
68
+ runtime?: boolean;
69
+ /**
70
+ * runtime 模块名称映射对象
71
+ */
72
+ runtimeMapping?: {
73
+ [name: string]: string;
74
+ };
75
+ /**
76
+ * snack 服务端地址
77
+ */
78
+ service?: string;
79
+ /**
80
+ * snack模块 加载路径,默认 service + modPath
81
+ */
82
+ modUrl?: string;
83
+ /**
84
+ * snack模块 请求路径
85
+ */
86
+ modPath?: string;
87
+ /**
88
+ * 单独指定 cnd 请求域名地址,默认为 service + cdnPath
89
+ */
90
+ cdnUrl?: string;
91
+ /**
92
+ * cdn 请求路径
93
+ */
94
+ cdnPath?: string;
95
+ /**
96
+ * 设计器页面路径
97
+ */
98
+ pageUrl?: string;
99
+ /**
100
+ * 设计器页面路径
101
+ */
102
+ pagePath?: string;
103
+ /**
104
+ * 静态资源cdn路径
105
+ */
106
+ staticUrl?: string;
107
+ /**
108
+ * 引用包导入
109
+ */
110
+ importMaps?: {
111
+ [name: string]: any;
112
+ };
113
+ /**
114
+ * 导入sanck class,加载时候优先从该列表内查询
115
+ */
116
+ importModules?: ImportModules;
117
+ /**
118
+ * 基础模块分类名称
119
+ */
120
+ basicsType?: string;
121
+ /**
122
+ * FormAttr全局默认值配置,当组件内部缺少参数时,采用该定义数值
123
+ */
124
+ defaultFormAttr?: SnackFormAttribute;
125
+ /**
126
+ * i18n国际化数据复写
127
+ */
128
+ i18n?: I18nData;
129
+ /**
130
+ * 国际化语言Mapping转换关系
131
+ * 例,当国际化语言为zh时,取值时则以zh_CN:
132
+ * { "zh" : "zh_CN" }
133
+ */
134
+ localeMapping?: {
135
+ [locale: string]: string;
136
+ };
137
+ /**
138
+ * 默认国际化语言
139
+ * 当localeMapping或传入语言为找到时,则使用该语言
140
+ */
141
+ localeDefault?: string;
142
+ /**
143
+ * 消息提示对象由外部传入,用于evalJs使用
144
+ */
145
+ message?: {
146
+ [key: string]: any;
147
+ };
148
+ /**
149
+ * argv 环境变量对象,可在表达式中通过 `$.argv` 访问
150
+ */
151
+ argv?: Record<string, string | boolean | number | null | undefined>;
152
+ }
153
+ interface LoadModuleConfig extends CoreConfig {
154
+ /**
155
+ * 所需加载的模块列表,单个加载可以为对象
156
+ */
157
+ module: Array<ModuleConfig> | ModuleConfig;
158
+ /**
159
+ * Require 配置参数
160
+ */
161
+ config?: RequireConfig;
162
+ }
163
+ /**
164
+ * 通过模块名称加载模块方法配置
165
+ */
166
+ interface ModuleConfig {
167
+ /**
168
+ * 模块名称
169
+ */
170
+ name: string;
171
+ /**
172
+ * 模块分类,snack.json type属性
173
+ */
174
+ type?: string;
175
+ /**
176
+ * 是否同时加载setting模块
177
+ */
178
+ setting?: boolean;
179
+ /**
180
+ * 引用包导入
181
+ */
182
+ importMaps?: {
183
+ [name: string]: any;
184
+ };
185
+ /**
186
+ * Require 配置参数
187
+ */
188
+ config?: RequireConfig;
189
+ }
190
+ /**
191
+ * 通过模块URL加载模块方法配置
192
+ */
193
+ interface LoadModuleURLConfig {
194
+ /**
195
+ * snack 模块绝对路径
196
+ */
197
+ urls: string | Array<string>;
198
+ /**
199
+ * 模块cdn库地址
200
+ */
201
+ cdnUrl: string;
202
+ /**
203
+ * 静态资源cdn地址
204
+ */
205
+ staticUrl?: string;
206
+ /**
207
+ * 引用包导入
208
+ */
209
+ importMaps?: {
210
+ [name: string]: any;
211
+ };
212
+ /**
213
+ * Require 配置参数
214
+ */
215
+ config?: RequireConfig;
216
+ }
217
+ /**
218
+ * 放置容器下级对象
219
+ */
220
+ interface DropChildrenItem<P = any, D = any, M = any, S = any> {
221
+ /**
222
+ * 父级模块
223
+ */
224
+ parent?: P;
225
+ /**
226
+ * Drag 容器snack实例
227
+ */
228
+ D: D;
229
+ /**
230
+ * Drag 容器组件实例
231
+ */
232
+ DFC: React.FunctionComponent | null;
233
+ /**
234
+ * 主模块 snack实例
235
+ */
236
+ M: M;
237
+ /**
238
+ * 主模块 组件实例
239
+ */
240
+ MFC: React.FunctionComponent | null;
241
+ /**
242
+ * 设置模块 snack实例
243
+ */
244
+ S?: S;
245
+ /**
246
+ * 设置模块 组件实例
247
+ */
248
+ SFC?: React.FunctionComponent | null;
249
+ }
250
+ interface LoadConfig {
251
+ /**
252
+ * snack 模块请求地址
253
+ */
254
+ url: string;
255
+ /**
256
+ * require 请求配置
257
+ */
258
+ config?: RequireConfig;
259
+ /**
260
+ * 引用包导入
261
+ */
262
+ importMaps?: {
263
+ [name: string]: any;
264
+ };
265
+ }
266
+ interface RequireConfig {
267
+ /**
268
+ * 超时等待时间,默认 50s
269
+ */
270
+ waitSeconds?: string;
271
+ /**
272
+ * cdn 路径,默认'./'
273
+ */
274
+ baseUrl?: string;
275
+ /**
276
+ * 指定snack模块静态资源上下文,默认随snack js文件路径
277
+ */
278
+ staticUrl?: string;
279
+ paths?: {
280
+ [key: string]: any;
281
+ };
282
+ bundles?: {
283
+ [key: string]: any;
284
+ };
285
+ pkgs?: {
286
+ [key: string]: any;
287
+ };
288
+ shim?: {
289
+ [key: string]: any;
290
+ };
291
+ config?: {
292
+ [key: string]: any;
293
+ };
294
+ }
295
+ /**
296
+ * 表单校验规则
297
+ */
298
+ interface SnackFormVerifyRule {
299
+ /**
300
+ * 必须匹配条件,如果为true则整个规则组内无论是否有通过的条件都必定会提示错误,如果为false则整个规则组内有一条规则通过,本条规则则不会提示错误,
301
+ */
302
+ mustMatch: boolean;
303
+ /**
304
+ * 字段校验正则
305
+ */
306
+ regExp?: string;
307
+ /**
308
+ * 校验错误文本
309
+ */
310
+ erorText?: {
311
+ [lang: string]: string;
312
+ };
313
+ }
314
+ /**
315
+ * 表单组件属性
316
+ */
317
+ interface SnackFormAttribute {
318
+ /**
319
+ * 表单字段,默认''
320
+ */
321
+ field?: string;
322
+ /**
323
+ * 是否禁用,D、M都需要设置,默认false
324
+ */
325
+ disabled?: boolean;
326
+ /**
327
+ * 是否必填,校验时需要校验是否为空,默认false
328
+ */
329
+ required?: boolean;
330
+ /**
331
+ * 必填时,校验非空对象性,默认false
332
+ * */
333
+ notEmptyObject?: boolean;
334
+ /**
335
+ * 始终禁止提交该字段,组装json时过滤,默认false
336
+ */
337
+ noSubmit?: boolean;
338
+ /**
339
+ * 当组件被隐藏时则不提交该字段,同时字段校验也将忽略,默认true
340
+ */
341
+ hideNoSubmit?: boolean;
342
+ /**
343
+ * 是否对value进行tirm过滤,默认过滤,false禁止过滤
344
+ */
345
+ trimValue?: boolean;
346
+ /**
347
+ * 校验规则组
348
+ */
349
+ verifyRules?: SnackFormVerifyRule[];
350
+ /**
351
+ * 入参转换脚本
352
+ */
353
+ inFormatJS?: string;
354
+ /**
355
+ * 出参转换脚本
356
+ */
357
+ outFormatJS?: string;
358
+ /**
359
+ * 自定义校验脚本
360
+ */
361
+ verifyJS?: string;
362
+ /**
363
+ * 密码字段标记,为true时则将会在当前表单getData数据组装时候增加 @password: [f...] 字段对当前字段进行描述,默认true
364
+ */
365
+ passwordFlag?: boolean;
366
+ /**
367
+ * 校验触发事件,默认['onChange', 'onBlur']f
368
+ */
369
+ verifyOnEvents?: string[];
370
+ /**
371
+ * 校验防抖时间,默认 300ms
372
+ */
373
+ verifyASTime?: number;
374
+ /** 是否跳过校验规则列表 */
375
+ skipRegx?: boolean;
376
+ }
377
+ /**
378
+ * 页面数据结构
379
+ */
380
+ interface SnackPageData {
381
+ /**
382
+ * 页面唯一id
383
+ */
384
+ id: string;
385
+ /**
386
+ * 页面名称
387
+ */
388
+ name: string;
389
+ /**
390
+ * 页面分类
391
+ */
392
+ type?: string;
393
+ /**
394
+ * 页面描述
395
+ */
396
+ description?: string;
397
+ /**
398
+ * 页面内容 Base64.encode(Object<SnackPageContent>)
399
+ */
400
+ content: string | SnackPageContent;
401
+ [name: string]: any;
402
+ }
403
+ /**
404
+ * 页面内容结构
405
+ */
406
+ interface SnackPageContent {
407
+ /**
408
+ * 模块唯一id D.key
409
+ */
410
+ key?: string;
411
+ /** 是否是容器 */
412
+ isContainer?: boolean;
413
+ /**
414
+ * 模块(M)定义
415
+ */
416
+ module?: SnackPageContentModule;
417
+ /**
418
+ * 下级
419
+ */
420
+ children?: Array<SnackPageContent>;
421
+ }
422
+ interface SnackPageContentModule {
423
+ /**
424
+ * 模块(D.data.module)id、全小写目录名
425
+ */
426
+ id: string;
427
+ /**
428
+ * 是否为页面模版
429
+ */
430
+ template: boolean;
431
+ /**
432
+ * 模块或页面的分类
433
+ */
434
+ type?: string | null;
435
+ /**
436
+ * 模块data数据
437
+ */
438
+ data?: {
439
+ /**
440
+ * Drag容器data数据
441
+ */
442
+ D: {
443
+ [name: string]: any;
444
+ };
445
+ /**
446
+ * 模块(M)data数据
447
+ */
448
+ M: {
449
+ value?: any;
450
+ formAttr?: SnackFormAttribute;
451
+ [name: string]: any;
452
+ };
453
+ };
454
+ }
455
+ interface SnackEvent<S extends Snack = any> {
456
+ /**
457
+ * 事件名称
458
+ */
459
+ name: string;
460
+ /**
461
+ * 事件触发对象
462
+ */
463
+ target: S;
464
+ /**
465
+ * 事件数值
466
+ */
467
+ value?: any;
468
+ }
469
+
470
+ /**
471
+ * @author 刘佳
472
+ * @date 2021/8/2 1:59 下午
473
+ * @description Snack Core
474
+ */
475
+
476
+ type SnackMaps = {
477
+ [name: string]: Snack;
478
+ };
479
+ type SDKEvent = 'onComplete' | string;
480
+ /**
481
+ * 事件监听回调
482
+ * 使用 Function 类型是因为事件总线为动态分发系统,回调函数的参数类型由事件名称决定
483
+ */
484
+ type SDKEventCallback = Function;
485
+ /** 表达式求值上下文 */
486
+ type ExprContext = Record<string, unknown>;
487
+ /** RequireJS require 函数接口 */
488
+ interface SnackRequireFunction {
489
+ (deps: string[], success: (e: Record<string, unknown>) => void, error?: (e: Error) => void): void;
490
+ config: (cfg: Record<string, unknown>) => void;
491
+ }
492
+ /** RequireJS define 函数接口(AMD) */
493
+ type SnackDefineFunction = (name: string, deps: string[], factory: (...args: unknown[]) => unknown) => void;
494
+ declare class Core {
495
+ /** RequireJS require 实例 */
496
+ require: SnackRequireFunction;
497
+ /** RequireJS define 实例 */
498
+ define: SnackDefineFunction;
499
+ runtime: boolean;
500
+ runtimeMapping: {
501
+ [id: string]: string;
502
+ };
503
+ service: string;
504
+ cdnUrl?: string;
505
+ cdnPath: string;
506
+ modUrl?: string;
507
+ modPath: string;
508
+ pageUrl: string;
509
+ pagePath: string;
510
+ staticUrl?: string;
511
+ importMaps: {
512
+ [mod: string]: any;
513
+ };
514
+ basicsType: string;
515
+ moduleMaps: SnackMaps;
516
+ global: {
517
+ [key: string]: any;
518
+ };
519
+ message: {
520
+ [key: string]: any;
521
+ };
522
+ i18n: I18nData;
523
+ defaultFormAttr: SnackFormAttribute;
524
+ importModules: ImportModules;
525
+ localeMapping: {
526
+ [locale: string]: string;
527
+ };
528
+ localeDefault: string;
529
+ argv: CoreConfig['argv'];
530
+ /**
531
+ * Core初始化构造函数
532
+ * @param {CoreConfig}
533
+ * @param importMaps 依赖对象导入
534
+ */
535
+ constructor({ runtime, runtimeMapping, service, cdnUrl, cdnPath, modUrl, modPath, pageUrl, pagePath, staticUrl, importMaps, basicsType, defaultFormAttr, importModules, i18n, localeMapping, localeDefault, message, argv }: CoreConfig);
536
+ /**
537
+ * 事件存储对象
538
+ * @private
539
+ */
540
+ private eventList;
541
+ /**
542
+ * 注册事件
543
+ * @param eventName 事件名称
544
+ * @param cb 事件回调函数
545
+ */
546
+ addEvent(eventName: SDKEvent, cb: SDKEventCallback): boolean;
547
+ /**
548
+ * 移除事件
549
+ * @param eventName 事件名称
550
+ * @param cb 解除绑定的事件回调
551
+ */
552
+ removeEvent(eventName: SDKEvent, cb?: SDKEventCallback): boolean;
553
+ /**
554
+ * 发送事件
555
+ * @param eventName 事件名称
556
+ * @param args 事件方法参数
557
+ */
558
+ sendEvent(eventName: SDKEvent, args?: unknown[]): boolean;
559
+ /**
560
+ * 按模块名称加载模块
561
+ * @param {LoadModuleConfig}
562
+ * @param callback 回调方法,存在该参数则Promises失效
563
+ * @return Snack 模块键值对 {snackName:snackClass}
564
+ */
565
+ module({ module, service, cdnUrl, cdnPath, modUrl, modPath, staticUrl, importMaps, config }: LoadModuleConfig, callback?: (snack: SnackMaps) => void): Promise<void | SnackMaps>;
566
+ /**
567
+ * 按模块地址加载模块
568
+ * @param {LoadModuleURLConfig}
569
+ * @param callback 回调方法,存在该参数则Promises失效
570
+ * @return Snack 模块键值对 {snackName:snackClass}
571
+ */
572
+ moduleURL({ urls, cdnUrl, staticUrl, importMaps, config }: LoadModuleURLConfig, callback?: (snack: SnackMaps) => void): Promise<SnackMaps | null>;
573
+ private addSnack;
574
+ private loadingPromises;
575
+ /**
576
+ * umd模块加载方法
577
+ * @param {LoadConfig} snack模块js地址
578
+ * @return Snack 模块类对象
579
+ */
580
+ load({ url, config, importMaps }: LoadConfig): Promise<{} | Error>;
581
+ /**
582
+ * 移除模块
583
+ * @param id snack模块的 $id
584
+ * @param forceUpdate 是否调用$forceUpdate
585
+ */
586
+ remove(id: string, forceUpdate?: boolean): false | undefined;
587
+ /**
588
+ * 清空挂载在sdk内的所有模块
589
+ * @param forceUpdate 是否调用$forceUpdate
590
+ */
591
+ empty(forceUpdate?: boolean): void;
592
+ /**
593
+ * 全局Snack模块语言切换方法
594
+ * @param l 语言,默认 'zh'
595
+ */
596
+ language: (l?: string) => void;
597
+ /**
598
+ * 国际化数据导入
599
+ * @param data
600
+ */
601
+ setI18n(data: I18nData): void;
602
+ /**
603
+ * 获取国际化文本
604
+ * @param ops
605
+ * @param params
606
+ */
607
+ intl(ops: string | {
608
+ id: string;
609
+ }, params?: Record<string, unknown>): string | React.ReactNode;
610
+ /**
611
+ * 组件数据解析表达式
612
+ * @param data
613
+ */
614
+ exprParseByData(data?: SnackPageContentModule): SnackPageContentModule | undefined;
615
+ private exprRegx;
616
+ private checkHasExpr;
617
+ private evaluateExpression;
618
+ processTemplateString(template: string, context: ExprContext): string;
619
+ recursiveParseJson(obj: SnackData, context: ExprContext, filterPrototype?: boolean): SnackData;
620
+ /**
621
+ * 表达式入参
622
+ */
623
+ getExprArgv(data: unknown): ExprArgv;
624
+ }
625
+ type ExprArgv = {
626
+ /** 全局 argv 环境变量 */
627
+ argv: CoreConfig['argv'];
628
+ /** Core 实例 */
629
+ sdk: Core;
630
+ /** 表达式上下文数据,通常为组件的 data 对象 */
631
+ data: unknown;
632
+ };
633
+
634
+ interface DropOjb<M = any, P = any> {
635
+ data: any;
636
+ $id: string;
637
+ append: (module: M, onComplete?: (c?: DropChildrenItem) => void) => Promise<DropChildrenItem>;
638
+ $forceUpdate: () => void;
639
+ FC: (props: P) => void;
640
+ }
641
+ interface CompleteEvent {
642
+ /**
643
+ * 表单字段键值对
644
+ */
645
+ fields: SnackFormFields;
646
+ /**
647
+ * 所有子元素数组
648
+ */
649
+ children: DropChildrenItem[];
650
+ /**
651
+ * 所有子元素data.key键值对
652
+ */
653
+ childrenMaps: SnackChildMaps;
654
+ }
655
+ /**
656
+ * 表单字段map对象
657
+ */
658
+ type SnackFormFields = {
659
+ [field: string]: DropChildrenItem;
660
+ };
661
+ type SnackChildMaps = {
662
+ [key: string]: DropChildrenItem;
663
+ };
664
+
665
+ /**
666
+ * 是否显示组件,默认显示
667
+ * @param child
668
+ * @param show 是否显示
669
+ */
670
+ declare function $display(child?: DropChildrenItem, show?: boolean): DropChildrenItem<any, any, any, any> | undefined;
671
+ declare const DisplayModule: typeof $display;
672
+ /**
673
+ * 返回代monaco代码提示
674
+ * @param monaco monaco编辑器对象
675
+ * @param event 指定过滤事件的参数,可选,默认全量参数
676
+ * @constructor
677
+ */
678
+ declare const GetParamsDetails: (monaco: any, event?: string, locale?: "en-US" | "zh-CN") => {
679
+ label: string;
680
+ insertText: string;
681
+ detail: string;
682
+ documentation: string | undefined;
683
+ kind: any;
684
+ }[];
685
+ /**
686
+ * 脚本参数描述
687
+ * @param filterEvents string[] 过滤所属事件,默认参数生效与所有脚本
688
+ * @param events string[] 参数所属事件
689
+ * @param label string 参数名
690
+ * @param insertText string 自动补全代码
691
+ * @param detail string 简要描述
692
+ * @param documentation string 详细描述
693
+ * */
694
+ declare const ParamsDetails: ({
695
+ label: string;
696
+ insertText: string;
697
+ detail: string;
698
+ filterEvents?: undefined;
699
+ events?: undefined;
700
+ documentation?: undefined;
701
+ } | {
702
+ filterEvents: string[];
703
+ label: string;
704
+ insertText: string;
705
+ detail: string;
706
+ events?: undefined;
707
+ documentation?: undefined;
708
+ } | {
709
+ events: string[];
710
+ label: string;
711
+ insertText: string;
712
+ detail: string;
713
+ filterEvents?: undefined;
714
+ documentation?: undefined;
715
+ } | {
716
+ label: string;
717
+ insertText: string;
718
+ detail: string;
719
+ documentation: string;
720
+ filterEvents?: undefined;
721
+ events?: undefined;
722
+ } | {
723
+ events: string[];
724
+ label: string;
725
+ insertText: string;
726
+ detail: string;
727
+ documentation: string;
728
+ filterEvents?: undefined;
729
+ })[];
730
+ declare const enParamsDetails: ({
731
+ label: string;
732
+ insertText: string;
733
+ detail: string;
734
+ filterEvents?: undefined;
735
+ events?: undefined;
736
+ documentation?: undefined;
737
+ } | {
738
+ filterEvents: string[];
739
+ label: string;
740
+ insertText: string;
741
+ detail: string;
742
+ events?: undefined;
743
+ documentation?: undefined;
744
+ } | {
745
+ events: string[];
746
+ label: string;
747
+ insertText: string;
748
+ detail: string;
749
+ filterEvents?: undefined;
750
+ documentation?: undefined;
751
+ } | {
752
+ label: string;
753
+ insertText: string;
754
+ detail: string;
755
+ documentation: string;
756
+ filterEvents?: undefined;
757
+ events?: undefined;
758
+ } | {
759
+ events: string[];
760
+ label: string;
761
+ insertText: string;
762
+ detail: string;
763
+ documentation: string;
764
+ filterEvents?: undefined;
765
+ })[];
766
+ /**
767
+ * 动态函数
768
+ * @param args 函数入参
769
+ * @param code 函数内容
770
+ * @param isSync 是否async函数
771
+ */
772
+ declare const evalFunc: (args: string | string[], code: string, isSync?: boolean) => any;
773
+ declare const replaceVars: (data: any, srcData: any) => any;
774
+
775
+ /**
776
+ * @author 刘佳
777
+ * @date 2021/8/31 7:29 下午
778
+ * @description 包含Core内核的额外增强功能SDK类
779
+ */
780
+
781
+ interface SnackPageParams {
782
+ /**
783
+ * 页面id
784
+ */
785
+ id: string;
786
+ /**
787
+ * 页面分类
788
+ */
789
+ type?: string;
790
+ }
791
+ interface RenderPageConfig {
792
+ /**
793
+ * 表单回填数据
794
+ */
795
+ data?: {
796
+ [key: string]: any;
797
+ };
798
+ /**
799
+ * 渲染规则
800
+ */
801
+ rules?: {
802
+ [key: string]: RenderPageRule;
803
+ };
804
+ /**
805
+ * root容器参数
806
+ */
807
+ rootProps?: {};
808
+ /**
809
+ * 页面事件对象
810
+ */
811
+ snackPageEvent?: SnackPageCompleteEvent;
812
+ /**
813
+ * 页面渲染完成事件
814
+ */
815
+ onComplete?: (e: SnackPageCompleteEvent, config?: SnackPageConfig) => void;
816
+ }
817
+ interface RenderPageRule {
818
+ /**
819
+ * 字段名
820
+ */
821
+ key: string;
822
+ /**
823
+ * 字段名称
824
+ */
825
+ label: string;
826
+ /**
827
+ * 是否有隐藏该字段绑定的组件
828
+ */
829
+ hide?: boolean;
830
+ /**
831
+ * 是否禁用该字段绑定的组件
832
+ */
833
+ disabled?: boolean;
834
+ }
835
+ interface SnackPageCompleteEvent extends CompleteEvent {
836
+ /**
837
+ * 清空表单数据填充
838
+ */
839
+ empty?: () => void;
840
+ /**
841
+ * 获取表单数据
842
+ * @param key 指定字段获取表单数据,不传则返回全量json
843
+ */
844
+ getData?: (key?: string) => any;
845
+ /**
846
+ * 设置表单数据
847
+ * @param kv 指定字段赋值或传入对象多个字段赋值
848
+ * @param value kv为对象时该参数将被忽略
849
+ */
850
+ setData?: (kv: string | {
851
+ [key: string]: any;
852
+ }, value?: any) => void;
853
+ /**
854
+ * 表单校验
855
+ * @param key 指定校验字段,不传则校验所有字段
856
+ */
857
+ verify?: (key?: string) => Promise<boolean>;
858
+ /**
859
+ * 页面内部事件回调方法
860
+ * @param e
861
+ */
862
+ snackEventCallback?: (e: SnackEvent) => void;
863
+ /**
864
+ * 页面销毁方法
865
+ */
866
+ destroy?: () => void;
867
+ /**
868
+ * 页面原始渲染数据
869
+ */
870
+ pageData?: SnackPageData | null;
871
+ }
872
+ interface SnackCreateModule {
873
+ main?: typeof Snack;
874
+ name: string;
875
+ type: string;
876
+ setting?: boolean;
877
+ }
878
+ /**
879
+ * form 自定义脚本所需参数
880
+ */
881
+ interface FormDataFormatArgs {
882
+ fields: SnackFormFields;
883
+ childrenMaps: SnackChildMaps;
884
+ rules?: {
885
+ [key: string]: RenderPageRule;
886
+ };
887
+ verify?: (key?: string) => Promise<boolean>;
888
+ defaultData?: {
889
+ [key: string]: any;
890
+ };
891
+ }
892
+ type SnackPageConfig = SnackPageParams | SnackPageParams[] | SnackPageData | SnackPageData[];
893
+ declare class SnackSDK extends Core {
894
+ constructor(config: CoreConfig);
895
+ /**
896
+ * 创建Snack模块实例
897
+ * @param snackClass Snack模块Class
898
+ * @param main 如果创建的是setting模块则需要传入main主模块Snack对象
899
+ * @param data
900
+ */
901
+ createModule<T extends Snack = any>({ main, name, type, setting }: SnackCreateModule, data?: SnackData): Promise<T | null>;
902
+ /**
903
+ * 渲染设计器页面
904
+ * @param params {SnackPageParams | SnackPageData} 页面加载参数 参数非法则创建空容器
905
+ * @param config {RenderPageConfig} 页面渲染参数
906
+ * @param root 根容器
907
+ * @param filter 过滤渲染组件列表
908
+ * @private
909
+ */
910
+ private createPage;
911
+ /** 校验防抖计时器 Map,key 为组件 $id */
912
+ private verifyTimeout;
913
+ /**
914
+ * 渲染多个页面,当页面为表单时会过滤相同字段的表单组件
915
+ * @param params
916
+ * @param config
917
+ */
918
+ renderPage(params: SnackPageConfig, config?: RenderPageConfig): Promise<DropOjb<any, any> | null>;
919
+ /**
920
+ * 卸载页面
921
+ * @private
922
+ */
923
+ destroy(event: SnackPageCompleteEvent | null, root: DropOjb | null): void;
924
+ /**
925
+ * 设置表单字段数据
926
+ * @param formatArag
927
+ * @param kv 所要设置的字段名,当value为空,key为对象则覆盖整个data对象
928
+ * @param value 所要设置的字段值
929
+ * @private
930
+ */
931
+ private formSetData;
932
+ /**
933
+ * 表单入参转换
934
+ * @param M
935
+ * @param verify
936
+ * @param fields
937
+ * @param defaultData
938
+ * @param childrenMaps
939
+ * @private
940
+ */
941
+ private formFormatValue;
942
+ /**
943
+ * 获取表单数据
944
+ * @param verify
945
+ * @param childrenMaps
946
+ * @param fields 表单字段对象
947
+ * @param defaultData
948
+ * @param key 指定获取字段值
949
+ * @private
950
+ */
951
+ private formGetData;
952
+ /**
953
+ * 表单校验
954
+ * @private
955
+ * @param formatArag
956
+ * @param key
957
+ * @param pageData
958
+ */
959
+ private formVerify;
960
+ /**
961
+ * 清空表单填充数据
962
+ * @param children
963
+ * @private
964
+ */
965
+ private formEmpty;
966
+ /**
967
+ * 格式化Form入参数据
968
+ * @param defaultData
969
+ * @param moduleData 组件初始化入参
970
+ * @param fields
971
+ * @private
972
+ */
973
+ private formatData;
974
+ /**
975
+ * 解码页面内容base64
976
+ * @param data
977
+ */
978
+ private pageContentDecode;
979
+ /**
980
+ * 获取页面数据
981
+ */
982
+ getPage(params: SnackPageParams): Promise<SnackPageData | null>;
983
+ /**
984
+ * 渲染设计器页面 - React FC组件
985
+ * @param params {SnackPageConfig}
986
+ * @param config {RenderPageConfig}
987
+ */
988
+ createPageComponent<T>(params: SnackPageConfig, config?: RenderPageConfig): Promise<React.FunctionComponent>;
989
+ /**
990
+ * 渲染页面到dom元素内
991
+ * @param el
992
+ * @param params
993
+ * @param config
994
+ */
995
+ createPageForElement<T extends SnackData = SnackData>(el: HTMLElement, params: SnackPageConfig, config?: RenderPageConfig): Promise<DropOjb | null | undefined>;
996
+ /**
997
+ * 渲染模块 - React FC组件
998
+ * @param args 模块装载参数
999
+ * @param data 模块初始数据
1000
+ */
1001
+ createModuleComponent<T extends SnackData>(args: SnackCreateModule, data?: T): Promise<React.FunctionComponent>;
1002
+ /**
1003
+ * 渲染模块到dom元素内
1004
+ * @param el 所要渲染模块的容器
1005
+ * @param args 模块装载参数
1006
+ * @param data 模块初始数据
1007
+ */
1008
+ createModuleForElement<T extends SnackData, S extends Snack = any>(el: HTMLElement, args: SnackCreateModule, data?: T): Promise<S | null>;
1009
+ /**
1010
+ * 通过模块Class渲染模块
1011
+ * @param SnackClass sanck 模块 Class
1012
+ * @param data snack对象参数
1013
+ * @param main 如果为设置模块,传入主模块对象
1014
+ */
1015
+ createClassModule<T extends SnackData, S extends Snack | SnackSetting>(SnackClass: new (...args: unknown[]) => S, data?: T, main?: Snack): S;
1016
+ /**
1017
+ * 通过模块Class渲染模块
1018
+ * @param SnackClass snack 模块 Class
1019
+ * @param data snack对象参数
1020
+ * @param main 如果为设置模块,传入主模块对象
1021
+ */
1022
+ createClassModuleComponent<T extends SnackData, S extends Snack | SnackSetting>(SnackClass: new (...args: unknown[]) => S, data?: T, main?: Snack): React.FunctionComponent;
1023
+ }
1024
+
1025
+ /**
1026
+ * 设计器事件列表
1027
+ * @param language {boolean} 当前语言*
1028
+ */
1029
+ declare const GetDefaultEvents: (language?: "zh-CN" | "en-US") => ({
1030
+ name: string;
1031
+ label: string;
1032
+ default: boolean;
1033
+ verify: boolean;
1034
+ } | {
1035
+ name: string;
1036
+ label: string;
1037
+ default: boolean;
1038
+ verify?: undefined;
1039
+ } | {
1040
+ name: string;
1041
+ label: string;
1042
+ default?: undefined;
1043
+ verify?: undefined;
1044
+ })[];
1045
+
1046
+ interface SnackMapItem {
1047
+ [name: string]: Snack;
1048
+ }
1049
+ /**
1050
+ * 国际化对象结构
1051
+ */
1052
+ interface I18nMap {
1053
+ [name: string]: {
1054
+ [name: string]: string;
1055
+ };
1056
+ }
1057
+ interface SnackData {
1058
+ $snackSDK?: SnackSDK;
1059
+ $i18n?: I18nMap;
1060
+ style?: React.CSSProperties;
1061
+ eventScripts?: {
1062
+ [eventName: string]: {
1063
+ script: string;
1064
+ };
1065
+ };
1066
+ formAttr?: SnackFormAttribute;
1067
+ /** drag/drop 容器父级 Snack 实例 */
1068
+ parent?: Snack;
1069
+ /** drag 容器渲染内容 */
1070
+ content?: unknown;
1071
+ /** drop 容器子节点列表 */
1072
+ children?: Snack[];
1073
+ [key: string]: any;
1074
+ }
1075
+ declare class Snack<T extends SnackData = any> {
1076
+ data?: T | undefined;
1077
+ /**
1078
+ * 当前模块名称
1079
+ */
1080
+ $name: string;
1081
+ /**
1082
+ * 页面事件对象
1083
+ */
1084
+ $page?: SnackPageCompleteEvent;
1085
+ /**
1086
+ * 当前模块唯一id,每次实例化随机生成
1087
+ */
1088
+ $id: string;
1089
+ /**
1090
+ * 国际化语言map集合
1091
+ */
1092
+ private $i18nMap;
1093
+ /**
1094
+ * 构造函数初始化传入的国际化,当他存在时则优先从此国际化获取数据
1095
+ * @private
1096
+ */
1097
+ private $i18nMapExternal?;
1098
+ /**
1099
+ * react重绘hook,由 FC 方法中的 useState setter 赋值
1100
+ */
1101
+ private $forceUpdateHook;
1102
+ /**
1103
+ * 父级容器Snack对象,通常为M的父级容器Drag
1104
+ */
1105
+ $parent?: Snack;
1106
+ /**
1107
+ * 重绘标识,每次 reload 重绘时更新
1108
+ */
1109
+ private $forceUpdateId;
1110
+ /**
1111
+ * 是否基础模块
1112
+ */
1113
+ isBasic: boolean;
1114
+ /**
1115
+ * 是否容器
1116
+ */
1117
+ isContainer: boolean;
1118
+ /**
1119
+ * 是否放置容器
1120
+ */
1121
+ isDrop: boolean;
1122
+ /**
1123
+ * 是否拖拽容器
1124
+ */
1125
+ isDrag: boolean;
1126
+ /**
1127
+ * 是否页面模版容器
1128
+ */
1129
+ isTemplate: boolean;
1130
+ /**
1131
+ * 是否form组件
1132
+ */
1133
+ isForm: boolean;
1134
+ /**
1135
+ * 设置模式
1136
+ */
1137
+ settingMode: boolean;
1138
+ /**
1139
+ * @para-snack/sdk 实列对象
1140
+ */
1141
+ sdk: SnackSDK | undefined;
1142
+ /**
1143
+ * 优先渲染属性
1144
+ */
1145
+ props?: T;
1146
+ /**
1147
+ *
1148
+ * @param data 统一数据管理对象
1149
+ * @param defData data默认值
1150
+ */
1151
+ constructor(data?: T | undefined, defData?: T);
1152
+ /**
1153
+ * 浅克隆数据对象(JSON可序列化的字段深克隆,不可序列化的字段浅引用)
1154
+ * @param obj 待克隆的数据对象
1155
+ */
1156
+ cloneData<T>(obj: T): T;
1157
+ /**
1158
+ * React组件方法
1159
+ * @param data 统一数据管理对象(解构覆盖构造函数data参数)
1160
+ * @return FunctionComponent
1161
+ */
1162
+ private $lastUpdateId;
1163
+ FC(data: T): React.ReactNode;
1164
+ /**
1165
+ * 模块渲染方法,子类重写此方法实现 UI
1166
+ * @param data 当前数据对象
1167
+ */
1168
+ $component(data?: T): React.ReactNode;
1169
+ /**
1170
+ * 强制渲染JSX内容
1171
+ * @param reload 是否强制重绘
1172
+ */
1173
+ $forceUpdate(reload?: boolean): void;
1174
+ /**
1175
+ * this.style 样式赋值方法,同时渲染页面
1176
+ * @param key
1177
+ * @param value
1178
+ */
1179
+ $style(key?: keyof React.CSSProperties | Record<keyof React.CSSProperties, any>, value?: any): any;
1180
+ /**
1181
+ * 外部复写,统一销毁方法
1182
+ */
1183
+ $destroy(): void;
1184
+ /**
1185
+ * 国际化切换方法
1186
+ * @param lang 语言
1187
+ */
1188
+ $language(lang: string): void;
1189
+ get $lang(): string;
1190
+ set $lang(lang: string);
1191
+ /**
1192
+ * 国际化语言包返回
1193
+ */
1194
+ get $i18n(): I18nMap;
1195
+ /**
1196
+ * 国际化语言包设置
1197
+ * @param map 语言包对象
1198
+ */
1199
+ set $i18n(map: I18nMap);
1200
+ /**
1201
+ * 返回外部导入与默认国际化数据
1202
+ */
1203
+ $getI18n(): {
1204
+ external: I18nMap | null;
1205
+ default: I18nMap;
1206
+ };
1207
+ /**
1208
+ * 国际化语言获取
1209
+ * @param ops 语言变量
1210
+ */
1211
+ $intl(ops: {
1212
+ id: string;
1213
+ } | string, params?: Record<string, unknown>): string | React.JSX.Element;
1214
+ $display(b: boolean): DropChildrenItem<any, any, any, any> | undefined;
1215
+ protected cloneDeep(data: any, re?: any): any;
1216
+ }
1217
+
1218
+ interface Props$1 {
1219
+ content?: string | React.ReactNode;
1220
+ sub?: string | React.ReactNode;
1221
+ info?: string | React.ReactNode;
1222
+ }
1223
+ declare const Error$1: (props: Props$1) => React.JSX.Element;
1224
+
1225
+ interface Props {
1226
+ text?: string | React.ReactNode;
1227
+ className?: string;
1228
+ size?: number;
1229
+ }
1230
+ declare const Loading: (props: Props) => React.JSX.Element;
1231
+
1232
+ declare const _default: {
1233
+ version: string;
1234
+ };
1235
+
1236
+ export { Core, type CoreConfig, DisplayModule, type DropChildrenItem, Error$1 as Error, type ExprArgv, type FormDataFormatArgs, GetDefaultEvents, GetParamsDetails, type I18nMap, type ImportModules, type LoadConfig, type LoadModuleConfig, type LoadModuleURLConfig, Loading, type ModuleConfig, ParamsDetails, type RenderPageConfig, type RenderPageRule, type RequireConfig, Snack, type SnackCreateModule, type SnackData, type SnackDefineFunction, type SnackEvent, type SnackFormAttribute, type SnackFormVerifyRule, type SnackMapItem, type SnackPageCompleteEvent, type SnackPageConfig, type SnackPageContent, type SnackPageContentModule, type SnackPageData, type SnackPageParams, type SnackRequireFunction, SnackSDK, SnackSetting, type SnackSettingModelItem, _default as default, enParamsDetails, evalFunc, replaceVars };