@flexem/fc-gui 3.0.0-alpha.136 → 3.0.0-alpha.138

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 (36) hide show
  1. package/bundles/@flexem/fc-gui.umd.js +252 -231
  2. package/bundles/@flexem/fc-gui.umd.js.map +1 -1
  3. package/bundles/@flexem/fc-gui.umd.min.js +3 -3
  4. package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
  5. package/config/history-data/get-history-data-args.d.ts +3 -14
  6. package/config/history-data/get-history-data-args.js +3 -5
  7. package/config/history-data/get-history-data-args.metadata.json +1 -1
  8. package/config/history-data/history-data.model.d.ts +1 -7
  9. package/config/history-data/history-data.model.js +1 -9
  10. package/config/history-data/history-data.model.metadata.json +1 -1
  11. package/config/history-data/index.d.ts +1 -1
  12. package/config/history-data/index.js +1 -1
  13. package/config/history-data/index.metadata.json +1 -1
  14. package/elements/historical-curve/historical-curve.element.d.ts +0 -6
  15. package/elements/historical-curve/historical-curve.element.js +21 -162
  16. package/elements/historical-curve/historical-curve.element.metadata.json +1 -1
  17. package/elements/main-element.js +1 -1
  18. package/elements/scroll-alarm/scroll-alarm-element.js +1 -1
  19. package/elements/shared/graph/graph-state-element.d.ts +1 -0
  20. package/elements/shared/graph/graph-state-element.js +30 -1
  21. package/elements/shared/graph/graph-state-element.metadata.json +1 -1
  22. package/elements/shared/text/text-state-element.d.ts +3 -1
  23. package/elements/shared/text/text-state-element.js +55 -10
  24. package/elements/shared/text/text-state-element.metadata.json +1 -1
  25. package/elements/static-elements/hyperlink-element.js +37 -7
  26. package/elements/static-elements/text-element.d.ts +1 -0
  27. package/elements/static-elements/text-element.js +38 -7
  28. package/elements/switch-indicator-light/switch-indicator-light-element.d.ts +1 -0
  29. package/elements/switch-indicator-light/switch-indicator-light-element.js +15 -2
  30. package/elements/switch-indicator-light/switch-indicator-light-element.metadata.json +1 -1
  31. package/elements/view-operation/view-operation.element.js +34 -7
  32. package/model/base/font-setting-model.d.ts +6 -1
  33. package/model/base/font-setting-model.metadata.json +1 -1
  34. package/model/historical-curve/historical-curve.data-settings.d.ts +1 -18
  35. package/model/historical-curve/historical-curve.data-settings.metadata.json +1 -1
  36. package/package.json +1 -1
@@ -42,10 +42,6 @@ export class HyperlinkElement extends ConditionalDynamicDisplayElement {
42
42
  * 当设备的语种ID改变时,重新渲染文本
43
43
  */
44
44
  subscribeLanguageChange() {
45
- // 只有使用文本库时才需要订阅语种变化
46
- if (!this.model.textLibrary || this.model.textLibrary.labelType !== 'textLibrary') {
47
- return;
48
- }
49
45
  if (this.guiContext && this.guiContext.languageChanged$) {
50
46
  this.languageChangeSubscription = this.guiContext.languageChanged$.subscribe(() => {
51
47
  // 重新渲染文本
@@ -96,7 +92,7 @@ export class HyperlinkElement extends ConditionalDynamicDisplayElement {
96
92
  * 否则返回默认文本
97
93
  */
98
94
  getDisplayText() {
99
- var _a, _b, _c, _d, _e, _f;
95
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
100
96
  // 检查是否使用文本库
101
97
  if (this.model.textLibrary && this.model.textLibrary.labelType === 'textLibrary') {
102
98
  const textLibraryId = this.model.textLibrary.selectedTextLibraryItem;
@@ -140,7 +136,41 @@ export class HyperlinkElement extends ConditionalDynamicDisplayElement {
140
136
  // 文本库配置但未找到数据,返回空字符串
141
137
  return '';
142
138
  }
143
- // 默认返回文本内容
144
- return this.model.text || '';
139
+ // 处理自定义文本(支持多语种)
140
+ if (this.model.text) {
141
+ // 检查是否为多语种格式
142
+ if (typeof this.model.text === 'object' && this.model.text.cultures) {
143
+ // 新格式:多语种对象
144
+ // 获取当前语种ID
145
+ const currentLanguageId = (_j = (_h = (_g = this.guiContext) === null || _g === void 0 ? void 0 : _g.getCurrentLanguageId) === null || _h === void 0 ? void 0 : _h.call(_g)) !== null && _j !== void 0 ? _j : null;
146
+ // 确定要使用的语种代码(culture)
147
+ let targetLanguage;
148
+ const defaultLanguage = ((_k = this.languageService) === null || _k === void 0 ? void 0 : _k.getDefaultLanguage()) || 'zh-CN';
149
+ if (currentLanguageId === null || currentLanguageId === undefined) {
150
+ // 设备未设置当前语种,使用默认语种
151
+ targetLanguage = defaultLanguage;
152
+ }
153
+ else {
154
+ // 设备已设置当前语种,获取对应的语种代码
155
+ const currentLanguage = (_m = (_l = this.guiContext) === null || _l === void 0 ? void 0 : _l.getLanguageCultureById) === null || _m === void 0 ? void 0 : _m.call(_l, currentLanguageId);
156
+ if (currentLanguage) {
157
+ targetLanguage = currentLanguage;
158
+ }
159
+ else {
160
+ targetLanguage = defaultLanguage;
161
+ }
162
+ }
163
+ // 返回对应语种的文本,如果没有则根据当前语言环境显示默认文本
164
+ // 获取当前语言环境
165
+ const language = ((_q = (_p = (_o = window.abp) === null || _o === void 0 ? void 0 : _o.localization) === null || _p === void 0 ? void 0 : _p.currentLanguage) === null || _q === void 0 ? void 0 : _q.name) || 'zh-Hans';
166
+ const isChinese = language === 'zh-Hans' || language === 'zh';
167
+ return this.model.text.cultures[targetLanguage] || (isChinese ? '超链接' : 'Hyperlink');
168
+ }
169
+ else if (typeof this.model.text === 'string') {
170
+ // 旧格式:字符串
171
+ return this.model.text;
172
+ }
173
+ }
174
+ return '';
145
175
  }
146
176
  }
@@ -29,6 +29,7 @@ export declare class TextElement extends ConditionalDynamicDisplayElement {
29
29
  /**
30
30
  * 获取显示文本
31
31
  * 如果配置了文本库,则从文本库中获取对应语种的文本
32
+ * 如果是多语种自定义文本,则根据当前语种ID获取对应语种的文本
32
33
  * 否则返回默认文本
33
34
  */
34
35
  private getDisplayText;
@@ -58,10 +58,6 @@ export class TextElement extends ConditionalDynamicDisplayElement {
58
58
  * 当设备的语种ID改变时,重新渲染文本
59
59
  */
60
60
  subscribeLanguageChange() {
61
- // 只有使用文本库时才需要订阅语种变化
62
- if (!this.model.textLibrary || this.model.textLibrary.labelType !== 'textLibrary') {
63
- return;
64
- }
65
61
  if (this.guiContext && this.guiContext.languageChanged$) {
66
62
  this.languageChangeSubscription = this.guiContext.languageChanged$.subscribe(() => {
67
63
  // 重新渲染文本
@@ -84,10 +80,11 @@ export class TextElement extends ConditionalDynamicDisplayElement {
84
80
  /**
85
81
  * 获取显示文本
86
82
  * 如果配置了文本库,则从文本库中获取对应语种的文本
83
+ * 如果是多语种自定义文本,则根据当前语种ID获取对应语种的文本
87
84
  * 否则返回默认文本
88
85
  */
89
86
  getDisplayText() {
90
- var _a, _b, _c, _d, _e, _f;
87
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
91
88
  // 检查是否使用文本库
92
89
  if (this.model.textLibrary && this.model.textLibrary.labelType === 'textLibrary') {
93
90
  const textLibraryId = this.model.textLibrary.selectedTextLibraryItem;
@@ -131,8 +128,42 @@ export class TextElement extends ConditionalDynamicDisplayElement {
131
128
  // 文本库配置但未找到数据,返回空字符串
132
129
  return '';
133
130
  }
134
- // 默认返回文本内容
135
- return this.model.text || '';
131
+ // 处理自定义文本(支持多语种)
132
+ if (this.model.text) {
133
+ // 检查是否为多语种格式
134
+ if (typeof this.model.text === 'object' && this.model.text.cultures) {
135
+ // 新格式:多语种对象
136
+ // 获取当前语种ID
137
+ const currentLanguageId = (_j = (_h = (_g = this.guiContext) === null || _g === void 0 ? void 0 : _g.getCurrentLanguageId) === null || _h === void 0 ? void 0 : _h.call(_g)) !== null && _j !== void 0 ? _j : null;
138
+ // 确定要使用的语种代码(culture)
139
+ let targetLanguage;
140
+ const defaultLanguage = ((_k = this.languageService) === null || _k === void 0 ? void 0 : _k.getDefaultLanguage()) || 'zh-CN';
141
+ if (currentLanguageId === null || currentLanguageId === undefined) {
142
+ // 设备未设置当前语种,使用默认语种
143
+ targetLanguage = defaultLanguage;
144
+ }
145
+ else {
146
+ // 设备已设置当前语种,获取对应的语种代码
147
+ const currentLanguage = (_m = (_l = this.guiContext) === null || _l === void 0 ? void 0 : _l.getLanguageCultureById) === null || _m === void 0 ? void 0 : _m.call(_l, currentLanguageId);
148
+ if (currentLanguage) {
149
+ targetLanguage = currentLanguage;
150
+ }
151
+ else {
152
+ targetLanguage = defaultLanguage;
153
+ }
154
+ }
155
+ // 返回对应语种的文本,如果没有则根据当前语言环境显示默认文本
156
+ // 获取当前语言环境
157
+ const language = ((_q = (_p = (_o = window.abp) === null || _o === void 0 ? void 0 : _o.localization) === null || _p === void 0 ? void 0 : _p.currentLanguage) === null || _q === void 0 ? void 0 : _q.name) || 'zh-Hans';
158
+ const isChinese = language === 'zh-Hans' || language === 'zh';
159
+ return this.model.text.cultures[targetLanguage] || (isChinese ? '文本' : 'Text');
160
+ }
161
+ else if (typeof this.model.text === 'string') {
162
+ // 旧格式:字符串
163
+ return this.model.text;
164
+ }
165
+ }
166
+ return '';
136
167
  }
137
168
  handleTextValue() {
138
169
  const allText = this.$element.find('text');
@@ -28,6 +28,7 @@ export declare class SwitchIndicatorLightElement extends ConditionalEnableElemen
28
28
  private restorationTimer;
29
29
  private isWriteRestorationDownValue;
30
30
  private onDocMouseUp;
31
+ private indicatorLightSubscription;
31
32
  constructor(element: HTMLElement, injector: Injector, modalService: BsModalService, variableCommunicator: VariableCommunicator, graphStore: GraphStore, permissionChecker: PermissionChecker, operationRecordService: OperationRecordService, securityChecker: SecurityChecker, variableStore: VariableStore, localization: Localization, signalRAppId: string, textLibraryService?: TextLibraryService, languageService?: LanguageService, guiContext?: GuiContext);
32
33
  handleMouseUp(): void;
33
34
  private initOnDocMouseUpEvent;
@@ -211,7 +211,7 @@ export class SwitchIndicatorLightElement extends ConditionalEnableElement {
211
211
  default:
212
212
  throw new Error(`Unknown switchType:${settings.type}`);
213
213
  }
214
- this.indicatorLightOperator.currentStateIdChanged.subscribe(statusIdValue => {
214
+ this.indicatorLightSubscription = this.indicatorLightOperator.currentStateIdChanged.subscribe(statusIdValue => {
215
215
  this.currentStateIdChange(statusIdValue);
216
216
  });
217
217
  this.indicatorLightOperator.requestData(this.signalRAppId);
@@ -241,7 +241,7 @@ export class SwitchIndicatorLightElement extends ConditionalEnableElement {
241
241
  this.graphStateElement = new GraphStateElement(this.model.graphSetting, width, height, this.graphStore, this.logger, this.model.version, this.model.states);
242
242
  this.$element.append(this.graphStateElement.Element);
243
243
  }
244
- this.textStateElement = new TextStateElement(this.model.states, width, height, this.logger, this.model.version, this.model.states, this.model.textLibrary, this.textLibraryService, this.languageService, this.guiContext);
244
+ this.textStateElement = new TextStateElement(this.model.states, width, height, this.logger, this.model.version, this.model.states, this.model.textLibrary, this.textLibraryService, this.languageService, this.guiContext, true);
245
245
  this.$element.append(this.textStateElement.Element);
246
246
  }
247
247
  /**
@@ -265,6 +265,19 @@ export class SwitchIndicatorLightElement extends ConditionalEnableElement {
265
265
  if (this.onDocMouseUp) {
266
266
  document.removeEventListener(this.isMobileMode ? 'touchend' : 'mouseup', this.onDocMouseUp);
267
267
  }
268
+ // 清理 indicatorLightOperator 订阅
269
+ if (this.indicatorLightSubscription) {
270
+ this.indicatorLightSubscription.unsubscribe();
271
+ }
272
+ // 清理图形元素(释放 SVG 内存)
273
+ if (this.graphStateElement) {
274
+ this.graphStateElement.dispose();
275
+ }
276
+ // 清理文本元素
277
+ if (this.textStateElement) {
278
+ // TextStateElement 可能也需要 dispose,暂时先清理引用
279
+ this.textStateElement = null;
280
+ }
268
281
  }
269
282
  checkState() {
270
283
  if (!this.model.states) {
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"SwitchIndicatorLightElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-enable-element","name":"ConditionalEnableElement","line":33,"character":49},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":51,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":52,"character":18},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":53,"character":39},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":54,"character":30},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":55,"character":37},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":56,"character":27},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":57,"character":49},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":58,"character":42},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":59,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":60,"character":22},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"TextLibraryService","line":62,"character":46},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":63,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":64,"character":38}]}],"handleMouseUp":[{"__symbolic":"method"}],"initOnDocMouseUpEvent":[{"__symbolic":"method"}],"checkElementPassword":[{"__symbolic":"method"}],"doSwitchOperator":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"initSwitchOperator":[{"__symbolic":"method"}],"initIndictorLightOperator":[{"__symbolic":"method"}],"currentStateIdChange":[{"__symbolic":"method"}],"switchToState":[{"__symbolic":"method"}],"initGraphAndText":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"checkState":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"SwitchIndicatorLightElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-enable-element","name":"ConditionalEnableElement","line":33,"character":49},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":52,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":53,"character":18},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":54,"character":39},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":55,"character":30},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":56,"character":37},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":57,"character":27},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":58,"character":49},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":59,"character":42},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":60,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":61,"character":22},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"TextLibraryService","line":63,"character":46},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":64,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":65,"character":38}]}],"handleMouseUp":[{"__symbolic":"method"}],"initOnDocMouseUpEvent":[{"__symbolic":"method"}],"checkElementPassword":[{"__symbolic":"method"}],"doSwitchOperator":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"initSwitchOperator":[{"__symbolic":"method"}],"initIndictorLightOperator":[{"__symbolic":"method"}],"currentStateIdChange":[{"__symbolic":"method"}],"switchToState":[{"__symbolic":"method"}],"initGraphAndText":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"checkState":[{"__symbolic":"method"}]}}}}]
@@ -210,10 +210,6 @@ export class ViewOperationElement extends ConditionalEnableElement {
210
210
  * 订阅语种变化事件
211
211
  */
212
212
  subscribeLanguageChange() {
213
- // 只有使用文本库时才需要订阅语种变化
214
- if (!this.model.textLibrary || this.model.textLibrary.labelType !== 'textLibrary') {
215
- return;
216
- }
217
213
  if (this.guiContext && this.guiContext.languageChanged$) {
218
214
  this.languageChangeSubscription = this.guiContext.languageChanged$.subscribe(() => {
219
215
  // 更新文本内容
@@ -233,7 +229,7 @@ export class ViewOperationElement extends ConditionalEnableElement {
233
229
  * 获取显示文本
234
230
  */
235
231
  getDisplayText() {
236
- var _a, _b, _c, _d, _e, _f;
232
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
237
233
  // 检查是否使用文本库
238
234
  if (this.model.textLibrary && this.model.textLibrary.labelType === 'textLibrary') {
239
235
  const textLibraryId = this.model.textLibrary.selectedTextLibraryItem;
@@ -277,8 +273,39 @@ export class ViewOperationElement extends ConditionalEnableElement {
277
273
  // 文本库配置但未找到数据,返回空字符串
278
274
  return '';
279
275
  }
280
- // 默认返回文本内容
281
- return this.model.label.content || '';
276
+ // 处理自定义文本(支持多语种)
277
+ if (this.model.label && this.model.label.content) {
278
+ // 检查是否为多语种格式
279
+ if (typeof this.model.label.content === 'object' && this.model.label.content.cultures) {
280
+ // 新格式:多语种对象
281
+ // 获取当前语种ID
282
+ const currentLanguageId = (_j = (_h = (_g = this.guiContext) === null || _g === void 0 ? void 0 : _g.getCurrentLanguageId) === null || _h === void 0 ? void 0 : _h.call(_g)) !== null && _j !== void 0 ? _j : null;
283
+ // 确定要使用的语种代码(culture)
284
+ let targetLanguage;
285
+ const defaultLanguage = ((_k = this.languageService) === null || _k === void 0 ? void 0 : _k.getDefaultLanguage()) || 'zh-CN';
286
+ if (currentLanguageId === null || currentLanguageId === undefined) {
287
+ // 设备未设置当前语种,使用默认语种
288
+ targetLanguage = defaultLanguage;
289
+ }
290
+ else {
291
+ // 设备已设置当前语种,获取对应的语种代码
292
+ const currentLanguage = (_m = (_l = this.guiContext) === null || _l === void 0 ? void 0 : _l.getLanguageCultureById) === null || _m === void 0 ? void 0 : _m.call(_l, currentLanguageId);
293
+ if (currentLanguage) {
294
+ targetLanguage = currentLanguage;
295
+ }
296
+ else {
297
+ targetLanguage = defaultLanguage;
298
+ }
299
+ }
300
+ // toggle-view 找不到语种内容时默认为空字符串
301
+ return this.model.label.content.cultures[targetLanguage] || '';
302
+ }
303
+ else if (typeof this.model.label.content === 'string') {
304
+ // 旧格式:字符串
305
+ return this.model.label.content;
306
+ }
307
+ }
308
+ return '';
282
309
  }
283
310
  /**
284
311
  * 释放资源
@@ -3,8 +3,13 @@ export interface TextLibrarySetting {
3
3
  readonly selectedTextLibraryItem?: string | number;
4
4
  readonly selectedTextItem?: string | number;
5
5
  }
6
+ export interface TextCultures {
7
+ readonly cultures: {
8
+ [languageCode: string]: string;
9
+ };
10
+ }
6
11
  export interface FontSettingModel {
7
- readonly text: string;
12
+ readonly text: string | TextCultures;
8
13
  readonly stroke: string;
9
14
  readonly font: string;
10
15
  readonly fontSize: string;
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"TextLibrarySetting":{"__symbolic":"interface"},"FontSettingModel":{"__symbolic":"interface"}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"TextLibrarySetting":{"__symbolic":"interface"},"TextCultures":{"__symbolic":"interface"},"FontSettingModel":{"__symbolic":"interface"}}}]
@@ -1,26 +1,9 @@
1
1
  import { HistroicalCurveChannelModel } from './historical-curve-chanel.model';
2
- /**
3
- * 单个历史数据条目的运行时配置
4
- */
5
- export interface HistoricalCurveDataItem {
6
- /** 历史数据条目名称 */
7
- readonly dataName: string;
8
- /** 该条目的通道列表 */
9
- readonly channels: Array<HistroicalCurveChannelModel>;
10
- }
11
2
  export interface HistoricalCurveDataSettings {
12
3
  readonly dataSourceCode: number;
13
4
  /**
14
- * 【旧格式-兼容】历史数据名称,单条目模式
5
+ * 历史数据名称
15
6
  */
16
7
  readonly dataName: string;
17
- /**
18
- * 【旧格式-兼容】通道列表,单条目模式
19
- */
20
8
  readonly channels: Array<HistroicalCurveChannelModel>;
21
- /**
22
- * 【新格式】多个历史数据条目配置
23
- * 如果此字段有值,优先使用此字段
24
- */
25
- readonly dataItems?: Array<HistoricalCurveDataItem>;
26
9
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"HistoricalCurveDataItem":{"__symbolic":"interface"},"HistoricalCurveDataSettings":{"__symbolic":"interface"}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"HistoricalCurveDataSettings":{"__symbolic":"interface"}}}]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "main": "bundles/fc-gui.umd.js",
3
- "version": "3.0.0-alpha.136",
3
+ "version": "3.0.0-alpha.138",
4
4
  "module": "public_api.js",
5
5
  "typings": "public_api.d.ts",
6
6
  "license": "UNLICENSED",