@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
@@ -22260,18 +22260,10 @@ var history_data_store = __webpack_require__(254);
22260
22260
 
22261
22261
  // CONCATENATED MODULE: ./.tmp/config/history-data/history-data.model.ts
22262
22262
  class HistoryDataModel {
22263
- constructor(error, isUnbind, values, historyDataItems // 新增:多条目独立数据
22264
- ) {
22263
+ constructor(error, isUnbind, values) {
22265
22264
  this.error = error;
22266
22265
  this.isUnbind = isUnbind;
22267
22266
  this.values = values;
22268
- this.historyDataItems = historyDataItems;
22269
- }
22270
- }
22271
- class HistoryDataItemModel {
22272
- constructor(itemName, rows) {
22273
- this.itemName = itemName;
22274
- this.rows = rows;
22275
22267
  }
22276
22268
  }
22277
22269
 
@@ -22288,15 +22280,14 @@ class GetHistoryDataArgs {
22288
22280
  /**
22289
22281
  * 获取历史数据参数
22290
22282
  * @param dataSourceCode 数据源编码
22291
- * @param dataItemName 历史数据条目名称(单条目模式,兼容旧版)
22292
- * @param channelNames 通道名称(单条目模式,兼容旧版)
22283
+ * @param dataItemName 历史数据条目名称
22284
+ * @param channelNames 通道名称
22293
22285
  * @param startTime 开始时间
22294
22286
  * @param endTime 结束时间
22295
22287
  * @param limit 获取数据数量,为负数则倒叙
22296
22288
  * @param rangeType 区间类型
22297
- * @param historyDataItems 多条目模式:多个历史数据条目及其通道配置
22298
22289
  */
22299
- constructor(dataSourceCode, dataItemName, channelNames, startTime, endTime, limit, rangeType, historyDataItems) {
22290
+ constructor(dataSourceCode, dataItemName, channelNames, startTime, endTime, limit, rangeType) {
22300
22291
  this.dataSourceCode = dataSourceCode;
22301
22292
  this.dataItemName = dataItemName;
22302
22293
  this.channelNames = channelNames;
@@ -22304,7 +22295,6 @@ class GetHistoryDataArgs {
22304
22295
  this.endTime = endTime;
22305
22296
  this.limit = limit;
22306
22297
  this.rangeType = rangeType;
22307
- this.historyDataItems = historyDataItems;
22308
22298
  }
22309
22299
  }
22310
22300
 
@@ -22358,15 +22348,14 @@ class GetAlarmsArgs {
22358
22348
  /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "g", function() { return GraphResult; });
22359
22349
  /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "i", function() { return GraphType; });
22360
22350
  /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "h", function() { return graph_store["GraphStore"]; });
22361
- /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "q", function() { return view_store["ViewStore"]; });
22362
- /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "p", function() { return view_model["a" /* ViewModel */]; });
22363
- /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "n", function() { return image_store["ImageStore"]; });
22364
- /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "l", function() { return history_data_store["HistoryDataStore"]; });
22365
- /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "k", function() { return HistoryDataModel; });
22366
- /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "j", function() { return HistoryDataItemModel; });
22367
- /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "m", function() { return HistoryDataValue; });
22351
+ /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "p", function() { return view_store["ViewStore"]; });
22352
+ /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "o", function() { return view_model["a" /* ViewModel */]; });
22353
+ /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "m", function() { return image_store["ImageStore"]; });
22354
+ /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "k", function() { return history_data_store["HistoryDataStore"]; });
22355
+ /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "j", function() { return HistoryDataModel; });
22356
+ /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "l", function() { return HistoryDataValue; });
22368
22357
  /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "d", function() { return GetHistoryDataArgs; });
22369
- /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "o", function() { return variable_store["VariableStore"]; });
22358
+ /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "n", function() { return variable_store["VariableStore"]; });
22370
22359
  /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "e", function() { return GetVariableNameArgs; });
22371
22360
  /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "a", function() { return alarm_store["AlarmsStore"]; });
22372
22361
  /* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "c", function() { return GetAlarmsArgs; });
@@ -36261,12 +36250,19 @@ class graph_state_element_GraphStateElement {
36261
36250
  }
36262
36251
  }
36263
36252
  changeGraph(stateId, graphResult) {
36253
+ // 检查元素是否已被销毁
36254
+ if (!this._element) {
36255
+ return;
36256
+ }
36264
36257
  if (!graphResult.failed) {
36265
36258
  const graph = graphResult.graph;
36266
36259
  switch (graph.graphType) {
36267
36260
  case _tmp_config["i" /* GraphType */].Image:
36268
36261
  case _tmp_config["i" /* GraphType */].SVG:
36269
36262
  const imageElement = this.getImageElement();
36263
+ if (!imageElement) {
36264
+ return;
36265
+ }
36270
36266
  imageElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', graph.source);
36271
36267
  this.doFaultFlicker(imageElement, stateId);
36272
36268
  break;
@@ -36282,6 +36278,10 @@ class graph_state_element_GraphStateElement {
36282
36278
  }
36283
36279
  getImageElement() {
36284
36280
  if (!this.imageElement) {
36281
+ // 检查 _element 是否已被销毁
36282
+ if (!this._element) {
36283
+ return null;
36284
+ }
36285
36285
  this.imageElement = document.createElementNS('http://www.w3.org/2000/svg', 'image');
36286
36286
  this.imageElement.setAttribute('width', this.width + '');
36287
36287
  this.imageElement.setAttribute('height', this.height + '');
@@ -36293,7 +36293,7 @@ class graph_state_element_GraphStateElement {
36293
36293
  return this.imageElement;
36294
36294
  }
36295
36295
  removeImageElement() {
36296
- if (this.imageElement) {
36296
+ if (this.imageElement && this._element) {
36297
36297
  this._element.removeChild(this.imageElement);
36298
36298
  delete this.imageElement;
36299
36299
  }
@@ -36326,6 +36326,24 @@ class graph_state_element_GraphStateElement {
36326
36326
  }
36327
36327
  }
36328
36328
  }
36329
+ dispose() {
36330
+ // 清理定时器
36331
+ if (this.faultFlickerInterval) {
36332
+ clearInterval(this.faultFlickerInterval);
36333
+ this.faultFlickerInterval = undefined;
36334
+ }
36335
+ // 移除图片元素
36336
+ this.removeImageElement();
36337
+ // 清理图形缓存
36338
+ if (this.graphs) {
36339
+ this.graphs.clear();
36340
+ }
36341
+ // 清理 SVG 元素
36342
+ if (this._element && this._element.parentNode) {
36343
+ this._element.parentNode.removeChild(this._element);
36344
+ }
36345
+ this._element = null;
36346
+ }
36329
36347
  }
36330
36348
 
36331
36349
  // CONCATENATED MODULE: ./.tmp/elements/datetime-display/time-zone-select-json.ts
@@ -37305,95 +37323,30 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
37305
37323
  if (!this.model.dataSetting) {
37306
37324
  return;
37307
37325
  }
37326
+ const dataItemName = this.model.dataSetting.dataName;
37308
37327
  const dataSourceCode = this.model.dataSetting.dataSourceCode;
37328
+ const channelNames = this.model.dataSetting.channels.map(c => c.name);
37309
37329
  this.updateElementStatus(HistoricalCurveElementStatus.Loading);
37310
- // 【新格式】如果有多条目配置,使用多条目查询
37311
- if (this.model.dataSetting.dataItems && this.model.dataSetting.dataItems.length > 0) {
37312
- const historyDataItems = this.model.dataSetting.dataItems.map(item => ({
37313
- dataItemName: item.dataName,
37314
- channelNames: item.channels.map(c => c.name)
37315
- }));
37316
- // 使用第一个条目的信息作为兼容参数
37317
- const firstItem = this.model.dataSetting.dataItems[0];
37318
- const input = new _tmp_config["d" /* GetHistoryDataArgs */](dataSourceCode, firstItem.dataName, firstItem.channels.map(c => c.name), startTime, endTime, limit, rangeType, historyDataItems // 传递多条目参数
37319
- );
37320
- this.historyDataStore.getHistoryData(input).subscribe(result => {
37321
- this.handleQueryResult(result);
37322
- });
37323
- }
37324
- // 【旧格式】单条目模式
37325
- else {
37326
- const dataItemName = this.model.dataSetting.dataName;
37327
- const channelNames = this.model.dataSetting.channels.map(c => c.name);
37328
- const input = new _tmp_config["d" /* GetHistoryDataArgs */](dataSourceCode, dataItemName, channelNames, startTime, endTime, limit, rangeType);
37329
- this.historyDataStore.getHistoryData(input).subscribe(result => {
37330
- this.handleQueryResult(result);
37331
- });
37332
- }
37333
- }
37334
- handleQueryResult(result) {
37335
- this.timePeriods = this.getValidTimePeriods();
37336
- // 【新格式】多条目模式下的错误处理
37337
- if (result.historyDataItems && result.historyDataItems.length > 0) {
37338
- // 只要有条目正常返回(即使没有数据),就走正常逻辑
37339
- // 这样可以确保即使部分条目失败,只要有条目成功返回,就显示正常状态
37340
- this.clearStatus();
37341
- if (result.isUnbind) {
37342
- this.updateElementStatus(HistoricalCurveElementStatus.Unbound);
37343
- }
37344
- else {
37345
- this.updateElementStatus(HistoricalCurveElementStatus.Normal);
37346
- }
37347
- // 如果有错误信息,在控制台输出警告
37330
+ const input = new _tmp_config["d" /* GetHistoryDataArgs */](dataSourceCode, dataItemName, channelNames, startTime, endTime, limit, rangeType);
37331
+ this.historyDataStore.getHistoryData(input).subscribe(result => {
37348
37332
  if (result.error) {
37349
- this.logger.warn(`[历史曲线] 部分条目查询失败: ${result.error}`);
37350
- }
37351
- // 检查是否有任何条目有数据
37352
- const hasAnyData = result.historyDataItems.some(item => item.rows && item.rows.length > 0);
37353
- if (hasAnyData) {
37354
- // 有数据,计算所有条目的最小和最大时间,确保时间轴覆盖所有数据
37355
- let globalMinTime = null;
37356
- let globalMaxTime = null;
37357
- result.historyDataItems.forEach(item => {
37358
- if (item.rows && item.rows.length > 0) {
37359
- const itemMinTime = moment(Object(lodash["first"])(item.rows).time);
37360
- const itemMaxTime = moment(Object(lodash["last"])(item.rows).time);
37361
- if (!globalMinTime || itemMinTime.isBefore(globalMinTime)) {
37362
- globalMinTime = itemMinTime;
37363
- }
37364
- if (!globalMaxTime || itemMaxTime.isAfter(globalMaxTime)) {
37365
- globalMaxTime = itemMaxTime;
37366
- }
37367
- }
37368
- });
37369
- // 设置全局时间范围
37370
- if (globalMinTime && globalMaxTime) {
37371
- this.currentStartTime = globalMinTime;
37372
- this.currentEndTime = globalMaxTime;
37373
- }
37374
- }
37375
- // 无论是否有数据,都渲染曲线(没有数据会显示空曲线)
37376
- this.chartElement = this.renderChartWithMultiItems(result.historyDataItems);
37377
- }
37378
- // 【旧格式】单条目模式的错误处理
37379
- else if (result.error) {
37380
- this.updateElementStatus(HistoricalCurveElementStatus.LoadFailed, result.error);
37381
- }
37382
- else {
37383
- this.clearStatus();
37384
- if (result.isUnbind) {
37385
- this.updateElementStatus(HistoricalCurveElementStatus.Unbound);
37333
+ this.updateElementStatus(HistoricalCurveElementStatus.LoadFailed, result.error);
37386
37334
  }
37387
37335
  else {
37388
- this.updateElementStatus(HistoricalCurveElementStatus.Normal);
37389
- }
37390
- // 【旧格式】单条目数据,使用原有渲染方式
37391
- if (result.values.length) {
37392
- this.currentStartTime = moment(Object(lodash["first"])(result.values).time);
37393
- this.currentEndTime = moment(Object(lodash["last"])(result.values).time);
37336
+ this.clearStatus();
37337
+ if (result.isUnbind) {
37338
+ this.updateElementStatus(HistoricalCurveElementStatus.Unbound);
37339
+ }
37340
+ else {
37341
+ this.updateElementStatus(HistoricalCurveElementStatus.Normal);
37342
+ }
37343
+ if (result.values.length) {
37344
+ this.currentStartTime = moment(Object(lodash["first"])(result.values).time);
37345
+ this.currentEndTime = moment(Object(lodash["last"])(result.values).time);
37346
+ }
37347
+ this.chartElement = this.renderChart(result.values);
37394
37348
  }
37395
- this.chartElement = this.renderChart(result.values);
37396
- }
37349
+ });
37397
37350
  }
37398
37351
  setupTooltipAutoHide(chart) {
37399
37352
  const chartContainer = this.rootElement.select('.nv-focus').node();
@@ -37421,58 +37374,10 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
37421
37374
  const chartWidth = this.model.displaySetting.size.width;
37422
37375
  const chartHeight = this.model.displaySetting.size.height - this.displayOption.operationAreaHeight - this.displayOption.operationAreaMarginTop;
37423
37376
  const data = new Array();
37424
- // 【旧格式】单条目模式:只显示通道名
37425
37377
  Object(lodash["each"])(this.model.dataSetting.channels, (channel, key) => {
37426
37378
  const values = new Array();
37427
37379
  Object(lodash["each"])(result, v => values.push({ x: moment(v.time).local().toDate().valueOf(), y: v.values[key] }));
37428
- const displayName = channel.name;
37429
- data.push({ key: displayName, area: channel.projectEnabled, values: values });
37430
- });
37431
- this.data = data;
37432
- let chart;
37433
- if (this.model.displaySetting.curveType === CurveType.BarGroup || this.model.displaySetting.curveType === CurveType.BarStack) {
37434
- chart = this.getMultiBarWithFocusChart(chartWidth, chartHeight, data);
37435
- }
37436
- else {
37437
- chart = this.getLineChart(chartWidth, chartHeight, data);
37438
- }
37439
- // 设置 tooltip 自动隐藏逻辑
37440
- this.setupTooltipAutoHide(chart);
37441
- return chart;
37442
- }
37443
- /**
37444
- * 【新格式】多条目独立数据的曲线渲染
37445
- * 每个条目独立保持自己的时间戳,不会出现时间戳混乱的问题
37446
- */
37447
- renderChartWithMultiItems(historyDataItems) {
37448
- const chartWidth = this.model.displaySetting.size.width;
37449
- const chartHeight = this.model.displaySetting.size.height - this.displayOption.operationAreaHeight - this.displayOption.operationAreaMarginTop;
37450
- const data = new Array();
37451
- // 创建一个 Map 用于快速查找条目数据
37452
- const itemDataMap = new Map();
37453
- Object(lodash["each"])(historyDataItems, item => {
37454
- if (item && item.itemName) {
37455
- itemDataMap.set(item.itemName, item.rows || []);
37456
- }
37457
- });
37458
- // 判断是否只有一个条目
37459
- const isSingleItem = this.model.dataSetting.dataItems && this.model.dataSetting.dataItems.length === 1;
37460
- // 为每个条目的每个通道创建独立的曲线
37461
- Object(lodash["each"])(this.model.dataSetting.dataItems, (dataItem) => {
37462
- const itemName = dataItem.dataName;
37463
- // 通过 itemName 匹配数据,而不是通过索引
37464
- const itemRows = itemDataMap.get(itemName) || [];
37465
- Object(lodash["each"])(dataItem.channels, (channel, channelIdx) => {
37466
- const values = new Array();
37467
- // 每个条目使用自己的时间戳和数据
37468
- Object(lodash["each"])(itemRows, row => {
37469
- const value = row.values && row.values[channelIdx] !== undefined ? row.values[channelIdx] : null;
37470
- values.push({ x: moment(row.time).local().toDate().valueOf(), y: value });
37471
- });
37472
- // 只有多个条目时才使用"条目名-通道名"格式,单条目时只显示通道名
37473
- const displayName = isSingleItem ? channel.name : `${itemName}-${channel.name}`;
37474
- data.push({ key: displayName, area: channel.projectEnabled, values: values });
37475
- });
37380
+ data.push({ key: channel.name, area: channel.projectEnabled, values: values });
37476
37381
  });
37477
37382
  this.data = data;
37478
37383
  let chart;
@@ -37492,22 +37397,8 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
37492
37397
  .find('.nv-legend')
37493
37398
  .find('.nv-series');
37494
37399
  let hiddenCount = 0;
37495
- // 获取所有通道(支持多条目和单条目模式)
37496
- const allChannels = [];
37497
- if (this.model.dataSetting.dataItems && this.model.dataSetting.dataItems.length > 0) {
37498
- // 【新格式】多条目模式:收集所有条目的所有通道
37499
- Object(lodash["each"])(this.model.dataSetting.dataItems, dataItem => {
37500
- Object(lodash["each"])(dataItem.channels, channel => {
37501
- allChannels.push(channel);
37502
- });
37503
- });
37504
- }
37505
- else {
37506
- // 【旧格式】单条目模式
37507
- allChannels.push(...this.model.dataSetting.channels);
37508
- }
37509
37400
  for (let i = 0; i < this.data.length; i++) {
37510
- const channel = allChannels[i];
37401
+ const channel = this.model.dataSetting.channels[i];
37511
37402
  if (legendList.eq(i).children().eq(0).css('fill-opacity') === '1') {
37512
37403
  const pointList = this.$element
37513
37404
  .find('.nv-scatterWrap')
@@ -37649,21 +37540,7 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
37649
37540
  }
37650
37541
  chart.width(chartWidth);
37651
37542
  chart.height(chartHeight);
37652
- // 获取所有通道的颜色(支持多条目和单条目模式)
37653
- let channelColors = [];
37654
- if (this.model.dataSetting.dataItems && this.model.dataSetting.dataItems.length > 0) {
37655
- // 【新格式】多条目模式:收集所有条目的所有通道颜色
37656
- Object(lodash["each"])(this.model.dataSetting.dataItems, dataItem => {
37657
- Object(lodash["each"])(dataItem.channels, channel => {
37658
- channelColors.push(channel.connectorColor);
37659
- });
37660
- });
37661
- }
37662
- else {
37663
- // 【旧格式】单条目模式
37664
- channelColors = this.model.dataSetting.channels.map(c => c.connectorColor);
37665
- }
37666
- chart.color(channelColors);
37543
+ chart.color(this.model.dataSetting.channels.map(c => c.connectorColor));
37667
37544
  this.rootElement.append('g').datum(data).call(chart);
37668
37545
  this.rootElement.selectAll('.nv-noData').attr('x', chartWidth / 2).attr('y', chartHeight / 2 + this.displayOption.operationAreaHeight);
37669
37546
  this.resizeEventListener = nv_d3["utils"].windowResize(() => {
@@ -39253,10 +39130,6 @@ class text_element_TextElement extends conditional_dynamic_display_element_Condi
39253
39130
  * 当设备的语种ID改变时,重新渲染文本
39254
39131
  */
39255
39132
  subscribeLanguageChange() {
39256
- // 只有使用文本库时才需要订阅语种变化
39257
- if (!this.model.textLibrary || this.model.textLibrary.labelType !== 'textLibrary') {
39258
- return;
39259
- }
39260
39133
  if (this.guiContext && this.guiContext.languageChanged$) {
39261
39134
  this.languageChangeSubscription = this.guiContext.languageChanged$.subscribe(() => {
39262
39135
  // 重新渲染文本
@@ -39279,10 +39152,11 @@ class text_element_TextElement extends conditional_dynamic_display_element_Condi
39279
39152
  /**
39280
39153
  * 获取显示文本
39281
39154
  * 如果配置了文本库,则从文本库中获取对应语种的文本
39155
+ * 如果是多语种自定义文本,则根据当前语种ID获取对应语种的文本
39282
39156
  * 否则返回默认文本
39283
39157
  */
39284
39158
  getDisplayText() {
39285
- var _a, _b, _c, _d, _e, _f;
39159
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
39286
39160
  // 检查是否使用文本库
39287
39161
  if (this.model.textLibrary && this.model.textLibrary.labelType === 'textLibrary') {
39288
39162
  const textLibraryId = this.model.textLibrary.selectedTextLibraryItem;
@@ -39326,8 +39200,42 @@ class text_element_TextElement extends conditional_dynamic_display_element_Condi
39326
39200
  // 文本库配置但未找到数据,返回空字符串
39327
39201
  return '';
39328
39202
  }
39329
- // 默认返回文本内容
39330
- return this.model.text || '';
39203
+ // 处理自定义文本(支持多语种)
39204
+ if (this.model.text) {
39205
+ // 检查是否为多语种格式
39206
+ if (typeof this.model.text === 'object' && this.model.text.cultures) {
39207
+ // 新格式:多语种对象
39208
+ // 获取当前语种ID
39209
+ 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;
39210
+ // 确定要使用的语种代码(culture)
39211
+ let targetLanguage;
39212
+ const defaultLanguage = ((_k = this.languageService) === null || _k === void 0 ? void 0 : _k.getDefaultLanguage()) || 'zh-CN';
39213
+ if (currentLanguageId === null || currentLanguageId === undefined) {
39214
+ // 设备未设置当前语种,使用默认语种
39215
+ targetLanguage = defaultLanguage;
39216
+ }
39217
+ else {
39218
+ // 设备已设置当前语种,获取对应的语种代码
39219
+ const currentLanguage = (_m = (_l = this.guiContext) === null || _l === void 0 ? void 0 : _l.getLanguageCultureById) === null || _m === void 0 ? void 0 : _m.call(_l, currentLanguageId);
39220
+ if (currentLanguage) {
39221
+ targetLanguage = currentLanguage;
39222
+ }
39223
+ else {
39224
+ targetLanguage = defaultLanguage;
39225
+ }
39226
+ }
39227
+ // 返回对应语种的文本,如果没有则根据当前语言环境显示默认文本
39228
+ // 获取当前语言环境
39229
+ 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';
39230
+ const isChinese = language === 'zh-Hans' || language === 'zh';
39231
+ return this.model.text.cultures[targetLanguage] || (isChinese ? '文本' : 'Text');
39232
+ }
39233
+ else if (typeof this.model.text === 'string') {
39234
+ // 旧格式:字符串
39235
+ return this.model.text;
39236
+ }
39237
+ }
39238
+ return '';
39331
39239
  }
39332
39240
  handleTextValue() {
39333
39241
  const allText = this.$element.find('text');
@@ -39345,7 +39253,7 @@ class text_element_TextElement extends conditional_dynamic_display_element_Condi
39345
39253
  // CONCATENATED MODULE: ./.tmp/elements/shared/text/text-state-element.ts
39346
39254
 
39347
39255
  class text_state_element_TextStateElement {
39348
- constructor(textStates, width, height, logger, version, faultFlickers, textLibrarySetting, textLibraryService, languageService, guiContext) {
39256
+ constructor(textStates, width, height, logger, version, faultFlickers, textLibrarySetting, textLibraryService, languageService, guiContext, allowEmpty = false) {
39349
39257
  this.textStates = textStates;
39350
39258
  this.width = width;
39351
39259
  this.height = height;
@@ -39356,6 +39264,7 @@ class text_state_element_TextStateElement {
39356
39264
  this.textLibraryService = textLibraryService;
39357
39265
  this.languageService = languageService;
39358
39266
  this.guiContext = guiContext;
39267
+ this.allowEmpty = allowEmpty;
39359
39268
  this.faultFlickerStatus = false;
39360
39269
  this.faultFlickerInterval = undefined;
39361
39270
  this._element = document.createElementNS('http://www.w3.org/2000/svg', 'g');
@@ -39424,10 +39333,6 @@ class text_state_element_TextStateElement {
39424
39333
  * 当设备的语种ID改变时,重新渲染当前状态的文本
39425
39334
  */
39426
39335
  subscribeLanguageChange() {
39427
- // 只有使用文本库时才需要订阅语种变化
39428
- if (!this.textLibrarySetting || this.textLibrarySetting.labelType !== 'textLibrary') {
39429
- return;
39430
- }
39431
39336
  if (this.guiContext && this.guiContext.languageChanged$) {
39432
39337
  this.languageChangeSubscription = this.guiContext.languageChanged$.subscribe(() => {
39433
39338
  // 如果当前有状态,重新渲染
@@ -39501,10 +39406,11 @@ class text_state_element_TextStateElement {
39501
39406
  /**
39502
39407
  * 获取显示文本
39503
39408
  * 如果配置了文本库,则根据状态ID和当前语种ID从文本库中获取对应语种的文本
39409
+ * 如果是多语种自定义文本,则根据当前语种ID获取对应语种的文本
39504
39410
  * 否则返回默认文本
39505
39411
  */
39506
39412
  getDisplayText(stateId, defaultContent) {
39507
- var _a, _b, _c, _d, _e, _f;
39413
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
39508
39414
  // 检查是否使用文本库
39509
39415
  if (this.textLibrarySetting && this.textLibrarySetting.labelType === 'textLibrary') {
39510
39416
  const textLibraryId = this.textLibrarySetting.selectedTextLibraryItem;
@@ -39545,13 +39451,60 @@ class text_state_element_TextStateElement {
39545
39451
  return '';
39546
39452
  }
39547
39453
  }
39454
+ // 文本库中未找到对应的状态ID(可能是"其他"状态)
39455
+ // 继续检查 defaultContent 中是否有多语种数据
39548
39456
  }
39549
39457
  }
39550
- // 文本库配置但未找到数据,返回空字符串
39551
- return '';
39458
+ // 文本库模式下,如果文本库中没有找到数据,继续尝试从 defaultContent 获取
39459
+ // 这样可以支持"其他"状态的多语种显示
39460
+ }
39461
+ // 处理自定义文本(支持多语种)
39462
+ if (defaultContent) {
39463
+ // 检查是否为多语种格式
39464
+ if (typeof defaultContent === 'object' && defaultContent.cultures) {
39465
+ // 新格式:多语种对象
39466
+ // 获取当前语种ID
39467
+ 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;
39468
+ // 确定要使用的语种代码(culture)
39469
+ let targetLanguage;
39470
+ const defaultLanguage = ((_k = this.languageService) === null || _k === void 0 ? void 0 : _k.getDefaultLanguage()) || 'zh-CN';
39471
+ if (currentLanguageId === null || currentLanguageId === undefined) {
39472
+ // 设备未设置当前语种,使用默认语种
39473
+ targetLanguage = defaultLanguage;
39474
+ }
39475
+ else {
39476
+ // 设备已设置当前语种,获取对应的语种代码
39477
+ const currentLanguage = (_m = (_l = this.guiContext) === null || _l === void 0 ? void 0 : _l.getLanguageCultureById) === null || _m === void 0 ? void 0 : _m.call(_l, currentLanguageId);
39478
+ if (currentLanguage) {
39479
+ targetLanguage = currentLanguage;
39480
+ }
39481
+ else {
39482
+ targetLanguage = defaultLanguage;
39483
+ }
39484
+ }
39485
+ // 返回对应语种的文本
39486
+ // 如果没有对应语种的内容:
39487
+ // - allowEmpty=true(开关指示灯):返回空字符串
39488
+ // - allowEmpty=false(文本元件):返回默认文本
39489
+ if (defaultContent.cultures[targetLanguage]) {
39490
+ return defaultContent.cultures[targetLanguage];
39491
+ }
39492
+ else if (this.allowEmpty) {
39493
+ return '';
39494
+ }
39495
+ else {
39496
+ // 获取当前语言环境,显示默认文本
39497
+ 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';
39498
+ const isChinese = language === 'zh-Hans' || language === 'zh';
39499
+ return isChinese ? '文本' : 'Text';
39500
+ }
39501
+ }
39502
+ else if (typeof defaultContent === 'string') {
39503
+ // 旧格式:字符串
39504
+ return defaultContent;
39505
+ }
39552
39506
  }
39553
- // 默认返回文本内容
39554
- return defaultContent || '';
39507
+ return '';
39555
39508
  }
39556
39509
  }
39557
39510
 
@@ -40115,7 +40068,7 @@ class switch_indicator_light_element_SwitchIndicatorLightElement extends conditi
40115
40068
  default:
40116
40069
  throw new Error(`Unknown switchType:${settings.type}`);
40117
40070
  }
40118
- this.indicatorLightOperator.currentStateIdChanged.subscribe(statusIdValue => {
40071
+ this.indicatorLightSubscription = this.indicatorLightOperator.currentStateIdChanged.subscribe(statusIdValue => {
40119
40072
  this.currentStateIdChange(statusIdValue);
40120
40073
  });
40121
40074
  this.indicatorLightOperator.requestData(this.signalRAppId);
@@ -40145,7 +40098,7 @@ class switch_indicator_light_element_SwitchIndicatorLightElement extends conditi
40145
40098
  this.graphStateElement = new graph_state_element_GraphStateElement(this.model.graphSetting, width, height, this.graphStore, this.logger, this.model.version, this.model.states);
40146
40099
  this.$element.append(this.graphStateElement.Element);
40147
40100
  }
40148
- this.textStateElement = new text_state_element_TextStateElement(this.model.states, width, height, this.logger, this.model.version, this.model.states, this.model.textLibrary, this.textLibraryService, this.languageService, this.guiContext);
40101
+ this.textStateElement = new text_state_element_TextStateElement(this.model.states, width, height, this.logger, this.model.version, this.model.states, this.model.textLibrary, this.textLibraryService, this.languageService, this.guiContext, true);
40149
40102
  this.$element.append(this.textStateElement.Element);
40150
40103
  }
40151
40104
  /**
@@ -40169,6 +40122,19 @@ class switch_indicator_light_element_SwitchIndicatorLightElement extends conditi
40169
40122
  if (this.onDocMouseUp) {
40170
40123
  document.removeEventListener(this.isMobileMode ? 'touchend' : 'mouseup', this.onDocMouseUp);
40171
40124
  }
40125
+ // 清理 indicatorLightOperator 订阅
40126
+ if (this.indicatorLightSubscription) {
40127
+ this.indicatorLightSubscription.unsubscribe();
40128
+ }
40129
+ // 清理图形元素(释放 SVG 内存)
40130
+ if (this.graphStateElement) {
40131
+ this.graphStateElement.dispose();
40132
+ }
40133
+ // 清理文本元素
40134
+ if (this.textStateElement) {
40135
+ // TextStateElement 可能也需要 dispose,暂时先清理引用
40136
+ this.textStateElement = null;
40137
+ }
40172
40138
  }
40173
40139
  checkState() {
40174
40140
  if (!this.model.states) {
@@ -40750,10 +40716,6 @@ class view_operation_element_ViewOperationElement extends conditional_enable_ele
40750
40716
  * 订阅语种变化事件
40751
40717
  */
40752
40718
  subscribeLanguageChange() {
40753
- // 只有使用文本库时才需要订阅语种变化
40754
- if (!this.model.textLibrary || this.model.textLibrary.labelType !== 'textLibrary') {
40755
- return;
40756
- }
40757
40719
  if (this.guiContext && this.guiContext.languageChanged$) {
40758
40720
  this.languageChangeSubscription = this.guiContext.languageChanged$.subscribe(() => {
40759
40721
  // 更新文本内容
@@ -40773,7 +40735,7 @@ class view_operation_element_ViewOperationElement extends conditional_enable_ele
40773
40735
  * 获取显示文本
40774
40736
  */
40775
40737
  getDisplayText() {
40776
- var _a, _b, _c, _d, _e, _f;
40738
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
40777
40739
  // 检查是否使用文本库
40778
40740
  if (this.model.textLibrary && this.model.textLibrary.labelType === 'textLibrary') {
40779
40741
  const textLibraryId = this.model.textLibrary.selectedTextLibraryItem;
@@ -40817,8 +40779,39 @@ class view_operation_element_ViewOperationElement extends conditional_enable_ele
40817
40779
  // 文本库配置但未找到数据,返回空字符串
40818
40780
  return '';
40819
40781
  }
40820
- // 默认返回文本内容
40821
- return this.model.label.content || '';
40782
+ // 处理自定义文本(支持多语种)
40783
+ if (this.model.label && this.model.label.content) {
40784
+ // 检查是否为多语种格式
40785
+ if (typeof this.model.label.content === 'object' && this.model.label.content.cultures) {
40786
+ // 新格式:多语种对象
40787
+ // 获取当前语种ID
40788
+ 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;
40789
+ // 确定要使用的语种代码(culture)
40790
+ let targetLanguage;
40791
+ const defaultLanguage = ((_k = this.languageService) === null || _k === void 0 ? void 0 : _k.getDefaultLanguage()) || 'zh-CN';
40792
+ if (currentLanguageId === null || currentLanguageId === undefined) {
40793
+ // 设备未设置当前语种,使用默认语种
40794
+ targetLanguage = defaultLanguage;
40795
+ }
40796
+ else {
40797
+ // 设备已设置当前语种,获取对应的语种代码
40798
+ const currentLanguage = (_m = (_l = this.guiContext) === null || _l === void 0 ? void 0 : _l.getLanguageCultureById) === null || _m === void 0 ? void 0 : _m.call(_l, currentLanguageId);
40799
+ if (currentLanguage) {
40800
+ targetLanguage = currentLanguage;
40801
+ }
40802
+ else {
40803
+ targetLanguage = defaultLanguage;
40804
+ }
40805
+ }
40806
+ // toggle-view 找不到语种内容时默认为空字符串
40807
+ return this.model.label.content.cultures[targetLanguage] || '';
40808
+ }
40809
+ else if (typeof this.model.label.content === 'string') {
40810
+ // 旧格式:字符串
40811
+ return this.model.label.content;
40812
+ }
40813
+ }
40814
+ return '';
40822
40815
  }
40823
40816
  /**
40824
40817
  * 释放资源
@@ -40943,10 +40936,6 @@ class hyperlink_element_HyperlinkElement extends conditional_dynamic_display_ele
40943
40936
  * 当设备的语种ID改变时,重新渲染文本
40944
40937
  */
40945
40938
  subscribeLanguageChange() {
40946
- // 只有使用文本库时才需要订阅语种变化
40947
- if (!this.model.textLibrary || this.model.textLibrary.labelType !== 'textLibrary') {
40948
- return;
40949
- }
40950
40939
  if (this.guiContext && this.guiContext.languageChanged$) {
40951
40940
  this.languageChangeSubscription = this.guiContext.languageChanged$.subscribe(() => {
40952
40941
  // 重新渲染文本
@@ -40997,7 +40986,7 @@ class hyperlink_element_HyperlinkElement extends conditional_dynamic_display_ele
40997
40986
  * 否则返回默认文本
40998
40987
  */
40999
40988
  getDisplayText() {
41000
- var _a, _b, _c, _d, _e, _f;
40989
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
41001
40990
  // 检查是否使用文本库
41002
40991
  if (this.model.textLibrary && this.model.textLibrary.labelType === 'textLibrary') {
41003
40992
  const textLibraryId = this.model.textLibrary.selectedTextLibraryItem;
@@ -41041,8 +41030,42 @@ class hyperlink_element_HyperlinkElement extends conditional_dynamic_display_ele
41041
41030
  // 文本库配置但未找到数据,返回空字符串
41042
41031
  return '';
41043
41032
  }
41044
- // 默认返回文本内容
41045
- return this.model.text || '';
41033
+ // 处理自定义文本(支持多语种)
41034
+ if (this.model.text) {
41035
+ // 检查是否为多语种格式
41036
+ if (typeof this.model.text === 'object' && this.model.text.cultures) {
41037
+ // 新格式:多语种对象
41038
+ // 获取当前语种ID
41039
+ 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;
41040
+ // 确定要使用的语种代码(culture)
41041
+ let targetLanguage;
41042
+ const defaultLanguage = ((_k = this.languageService) === null || _k === void 0 ? void 0 : _k.getDefaultLanguage()) || 'zh-CN';
41043
+ if (currentLanguageId === null || currentLanguageId === undefined) {
41044
+ // 设备未设置当前语种,使用默认语种
41045
+ targetLanguage = defaultLanguage;
41046
+ }
41047
+ else {
41048
+ // 设备已设置当前语种,获取对应的语种代码
41049
+ const currentLanguage = (_m = (_l = this.guiContext) === null || _l === void 0 ? void 0 : _l.getLanguageCultureById) === null || _m === void 0 ? void 0 : _m.call(_l, currentLanguageId);
41050
+ if (currentLanguage) {
41051
+ targetLanguage = currentLanguage;
41052
+ }
41053
+ else {
41054
+ targetLanguage = defaultLanguage;
41055
+ }
41056
+ }
41057
+ // 返回对应语种的文本,如果没有则根据当前语言环境显示默认文本
41058
+ // 获取当前语言环境
41059
+ 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';
41060
+ const isChinese = language === 'zh-Hans' || language === 'zh';
41061
+ return this.model.text.cultures[targetLanguage] || (isChinese ? '超链接' : 'Hyperlink');
41062
+ }
41063
+ else if (typeof this.model.text === 'string') {
41064
+ // 旧格式:字符串
41065
+ return this.model.text;
41066
+ }
41067
+ }
41068
+ return '';
41046
41069
  }
41047
41070
  }
41048
41071
 
@@ -42588,7 +42611,7 @@ class scroll_alarm_element_ScrollAlarmElement extends conditional_dynamic_displa
42588
42611
  if (this.displayedItems.length <= 0)
42589
42612
  return;
42590
42613
  // 每次滚动的距离
42591
- const scrollStep = 6; // 减小滚动步长,使滚动更平滑
42614
+ const scrollStep = 2; // 减小滚动步长,使滚动更平滑
42592
42615
  // 更新位置 - 从右往左滚动
42593
42616
  this.currentLeft -= scrollStep;
42594
42617
  // 检查是否需要加载下一页(只有在自动循环模式下才需要预加载)
@@ -43311,7 +43334,7 @@ class main_element_MainElement {
43311
43334
  Object(lodash["each"])(this.elements, e => {
43312
43335
  if (e instanceof historical_curve_element_HistoricalCurveElement || e instanceof video_element_VideoElement
43313
43336
  || e instanceof weater_element_WeatherElement || e instanceof numerical_display_element_NumericalDisplayElement || e instanceof text_element_TextElement
43314
- || e instanceof air_quality_element_AirQualityElement || e instanceof scroll_alarm_element_ScrollAlarmElement) {
43337
+ || e instanceof air_quality_element_AirQualityElement || e instanceof switch_indicator_light_element_SwitchIndicatorLightElement || e instanceof scroll_alarm_element_ScrollAlarmElement) {
43315
43338
  e.dispose();
43316
43339
  }
43317
43340
  });
@@ -86613,23 +86636,21 @@ __webpack_require__.r(__webpack_exports__);
86613
86636
 
86614
86637
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GraphStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["h"]; });
86615
86638
 
86616
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["q"]; });
86617
-
86618
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewModel", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["p"]; });
86639
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["p"]; });
86619
86640
 
86620
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ImageStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["n"]; });
86641
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewModel", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["o"]; });
86621
86642
 
86622
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HistoryDataStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["l"]; });
86643
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ImageStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["m"]; });
86623
86644
 
86624
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HistoryDataModel", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["k"]; });
86645
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HistoryDataStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["k"]; });
86625
86646
 
86626
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HistoryDataItemModel", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["j"]; });
86647
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HistoryDataModel", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["j"]; });
86627
86648
 
86628
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HistoryDataValue", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["m"]; });
86649
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HistoryDataValue", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["l"]; });
86629
86650
 
86630
86651
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GetHistoryDataArgs", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["d"]; });
86631
86652
 
86632
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VariableStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["o"]; });
86653
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VariableStore", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["n"]; });
86633
86654
 
86634
86655
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GetVariableNameArgs", function() { return _config__WEBPACK_IMPORTED_MODULE_4__["e"]; });
86635
86656
 
@@ -86649,7 +86670,7 @@ __webpack_require__.r(__webpack_exports__);
86649
86670
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VariableStateEnum", function() { return _communication__WEBPACK_IMPORTED_MODULE_5__["d"]; });
86650
86671
 
86651
86672
  /* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3);
86652
- /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _model__WEBPACK_IMPORTED_MODULE_6__) if(["GuiComponent","GuiView","GuiContext","GuiModule","LOGGER_SERVICE_TOKEN","LoggerService","ConsoleLoggerService","StringifyingMap","ConfigStore","Graph","GraphResult","GraphType","GraphStore","ViewStore","ViewModel","ImageStore","HistoryDataStore","HistoryDataModel","HistoryDataItemModel","HistoryDataValue","GetHistoryDataArgs","VariableStore","GetVariableNameArgs","AlarmsStore","GetAlarmsArgs","VariableCommunicator","VariableValue","VariableState","VariableDefinition","VariableStateEnum","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _model__WEBPACK_IMPORTED_MODULE_6__[key]; }) }(__WEBPACK_IMPORT_KEY__));
86673
+ /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _model__WEBPACK_IMPORTED_MODULE_6__) if(["GuiComponent","GuiView","GuiContext","GuiModule","LOGGER_SERVICE_TOKEN","LoggerService","ConsoleLoggerService","StringifyingMap","ConfigStore","Graph","GraphResult","GraphType","GraphStore","ViewStore","ViewModel","ImageStore","HistoryDataStore","HistoryDataModel","HistoryDataValue","GetHistoryDataArgs","VariableStore","GetVariableNameArgs","AlarmsStore","GetAlarmsArgs","VariableCommunicator","VariableValue","VariableState","VariableDefinition","VariableStateEnum","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _model__WEBPACK_IMPORTED_MODULE_6__[key]; }) }(__WEBPACK_IMPORT_KEY__));
86653
86674
  /* harmony import */ var _localization__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9);
86654
86675
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Localization", function() { return _localization__WEBPACK_IMPORTED_MODULE_7__["c"]; });
86655
86676
 
@@ -86706,7 +86727,7 @@ __webpack_require__.r(__webpack_exports__);
86706
86727
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RemoteVariableProtocol", function() { return _remote__WEBPACK_IMPORTED_MODULE_11__["k"]; });
86707
86728
 
86708
86729
  /* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(14);
86709
- /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _service__WEBPACK_IMPORTED_MODULE_12__) if(["GuiComponent","GuiView","GuiContext","GuiModule","LOGGER_SERVICE_TOKEN","LoggerService","ConsoleLoggerService","StringifyingMap","ConfigStore","Graph","GraphResult","GraphType","GraphStore","ViewStore","ViewModel","ImageStore","HistoryDataStore","HistoryDataModel","HistoryDataItemModel","HistoryDataValue","GetHistoryDataArgs","VariableStore","GetVariableNameArgs","AlarmsStore","GetAlarmsArgs","VariableCommunicator","VariableValue","VariableState","VariableDefinition","VariableStateEnum","Localization","LOCALIZATION","DefaultLocalization","Localization_zh_CN","SecurityChecker","Disposable","ConfigIsEmptyError","OperationHelper","GuiConsts","GraphExtendedStyle","GetReleasedGraphStateResult","GraphStateResult","GetReleasedGraphStates","GraphStateKey","GraphState","RemoteGraphProtocol","RemoteGraphStore","RemoteViewProtocol","RemoteViewStore","ViewResult","RemoteImageProtocol","RemoteImageStore","RemoteVariableCommunicator","RemoteVariableProtocol","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _service__WEBPACK_IMPORTED_MODULE_12__[key]; }) }(__WEBPACK_IMPORT_KEY__));
86730
+ /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _service__WEBPACK_IMPORTED_MODULE_12__) if(["GuiComponent","GuiView","GuiContext","GuiModule","LOGGER_SERVICE_TOKEN","LoggerService","ConsoleLoggerService","StringifyingMap","ConfigStore","Graph","GraphResult","GraphType","GraphStore","ViewStore","ViewModel","ImageStore","HistoryDataStore","HistoryDataModel","HistoryDataValue","GetHistoryDataArgs","VariableStore","GetVariableNameArgs","AlarmsStore","GetAlarmsArgs","VariableCommunicator","VariableValue","VariableState","VariableDefinition","VariableStateEnum","Localization","LOCALIZATION","DefaultLocalization","Localization_zh_CN","SecurityChecker","Disposable","ConfigIsEmptyError","OperationHelper","GuiConsts","GraphExtendedStyle","GetReleasedGraphStateResult","GraphStateResult","GetReleasedGraphStates","GraphStateKey","GraphState","RemoteGraphProtocol","RemoteGraphStore","RemoteViewProtocol","RemoteViewStore","ViewResult","RemoteImageProtocol","RemoteImageStore","RemoteVariableCommunicator","RemoteVariableProtocol","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _service__WEBPACK_IMPORTED_MODULE_12__[key]; }) }(__WEBPACK_IMPORT_KEY__));
86710
86731
  /* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(7);
86711
86732
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LOGGER_SERVICE_TOKEN", function() { return _logger__WEBPACK_IMPORTED_MODULE_13__["b"]; });
86712
86733