@flexem/fc-gui 3.0.0-alpha.10 → 3.0.0-alpha.100

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 (124) hide show
  1. package/CHANGELOG.md +414 -0
  2. package/bundles/@flexem/fc-gui.umd.js +18548 -17071
  3. package/bundles/@flexem/fc-gui.umd.js.map +1 -1
  4. package/bundles/@flexem/fc-gui.umd.min.js +5 -5
  5. package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
  6. package/communication/variable/variable-communicator.d.ts +1 -0
  7. package/config/alarm/alarm.store.d.ts +6 -0
  8. package/config/alarm/alarm.store.js +0 -0
  9. package/config/alarm/alarm.store.metadata.json +1 -0
  10. package/config/alarm/get-alarms-args.d.ts +9 -0
  11. package/config/alarm/get-alarms-args.js +9 -0
  12. package/config/alarm/get-alarms-args.metadata.json +1 -0
  13. package/config/alarm/index.d.ts +2 -0
  14. package/config/alarm/index.js +1 -0
  15. package/config/alarm/index.metadata.json +1 -0
  16. package/config/config-store.d.ts +2 -0
  17. package/config/index.d.ts +1 -0
  18. package/config/index.js +1 -0
  19. package/config/index.metadata.json +1 -1
  20. package/elements/air-quality/air-quality-element.d.ts +31 -0
  21. package/elements/air-quality/air-quality-element.js +194 -0
  22. package/elements/air-quality/air-quality-element.metadata.json +1 -0
  23. package/elements/alarm/alarm-element.d.ts +44 -0
  24. package/elements/alarm/alarm-element.js +386 -0
  25. package/elements/alarm/alarm-element.metadata.json +1 -0
  26. package/elements/bar-graph-element.d.ts +7 -1
  27. package/elements/bar-graph-element.js +70 -4
  28. package/elements/bar-graph-element.metadata.json +1 -1
  29. package/elements/base/readable-element.d.ts +6 -1
  30. package/elements/base/readable-element.js +31 -2
  31. package/elements/base/readable-element.metadata.json +1 -1
  32. package/elements/historical-curve/historical-curve.element.d.ts +3 -0
  33. package/elements/historical-curve/historical-curve.element.js +200 -18
  34. package/elements/historical-curve/historical-curve.element.metadata.json +1 -1
  35. package/elements/main-element.js +25 -4
  36. package/elements/main-element.metadata.json +1 -1
  37. package/elements/meter-element.d.ts +7 -1
  38. package/elements/meter-element.js +76 -7
  39. package/elements/meter-element.metadata.json +1 -1
  40. package/elements/numerical-display/numerical-display-element.d.ts +8 -2
  41. package/elements/numerical-display/numerical-display-element.js +55 -11
  42. package/elements/numerical-display/numerical-display-element.metadata.json +1 -1
  43. package/elements/per-view-variable-communicator.d.ts +2 -0
  44. package/elements/per-view-variable-communicator.js +8 -0
  45. package/elements/per-view-variable-communicator.metadata.json +1 -1
  46. package/elements/ring-graph/ring-graph-element.d.ts +10 -1
  47. package/elements/ring-graph/ring-graph-element.js +106 -3
  48. package/elements/ring-graph/ring-graph-element.metadata.json +1 -1
  49. package/elements/shared/graph/graph-state-element.js +0 -3
  50. package/elements/shared/text/text-element.js +13 -2
  51. package/elements/shared/text/text-state-element.js +1 -1
  52. package/elements/switch-indicator-light/bit-switch-operator.d.ts +1 -0
  53. package/elements/switch-indicator-light/bit-switch-operator.js +19 -0
  54. package/elements/switch-indicator-light/bit-switch-operator.metadata.json +1 -1
  55. package/elements/switch-indicator-light/switch-indicator-light-element.d.ts +8 -0
  56. package/elements/switch-indicator-light/switch-indicator-light-element.js +93 -23
  57. package/elements/switch-indicator-light/switch-indicator-light-element.metadata.json +1 -1
  58. package/elements/switch-indicator-light/switch-operator.d.ts +1 -0
  59. package/elements/switch-indicator-light/word-switch-operator.d.ts +1 -0
  60. package/elements/switch-indicator-light/word-switch-operator.js +6 -0
  61. package/elements/switch-indicator-light/word-switch-operator.metadata.json +1 -1
  62. package/elements/video/video-element.d.ts +4 -0
  63. package/elements/video/video-element.js +74 -20
  64. package/elements/video/video-element.metadata.json +1 -1
  65. package/elements/view-operation/view-operation.element.js +8 -0
  66. package/elements/weather/weater-element.js +0 -1
  67. package/gui/gui-context.d.ts +2 -1
  68. package/gui/gui-host.d.ts +1 -1
  69. package/gui/gui.component.d.ts +3 -0
  70. package/gui/gui.component.js +15 -2
  71. package/gui/gui.component.metadata.json +1 -1
  72. package/localization/localization.service.d.ts +7 -0
  73. package/localization/localization.service.js +8 -1
  74. package/localization/localization.service.metadata.json +1 -1
  75. package/localization/localization.service.zh_CN.js +8 -1
  76. package/localization/localization.service.zh_CN.metadata.json +1 -1
  77. package/modal/write-value/write-value-modal-args.d.ts +3 -1
  78. package/modal/write-value/write-value-modal-args.js +2 -1
  79. package/modal/write-value/write-value-modal-args.metadata.json +1 -1
  80. package/modal/write-value/write-value-modal.component.d.ts +8 -7
  81. package/modal/write-value/write-value-modal.component.html +9 -4
  82. package/modal/write-value/write-value-modal.component.js +49 -22
  83. package/modal/write-value/write-value-modal.component.metadata.json +1 -1
  84. package/model/air-quality/air-quality-info.d.ts +23 -0
  85. package/model/air-quality/air-quality-info.js +4 -0
  86. package/model/air-quality/air-quality-info.metadata.json +1 -0
  87. package/model/air-quality/air-quality.model.d.ts +7 -0
  88. package/model/air-quality/air-quality.model.js +0 -0
  89. package/model/air-quality/air-quality.model.metadata.json +1 -0
  90. package/model/alarm/alarm.model.d.ts +13 -0
  91. package/model/alarm/alarm.model.js +0 -0
  92. package/model/alarm/alarm.model.metadata.json +1 -0
  93. package/model/bar-graph/bar-graph.d.ts +4 -0
  94. package/model/base/readable-model.d.ts +4 -0
  95. package/model/historical-curve/historical-curve-axis-settings.d.ts +10 -0
  96. package/model/historical-curve/historical-curve-axis-settings.js +5 -0
  97. package/model/historical-curve/historical-curve-axis-settings.metadata.json +1 -1
  98. package/model/historical-curve/historical-curve-chanel.model.d.ts +8 -0
  99. package/model/meter/meter.d.ts +4 -0
  100. package/model/ring-graph/ring-graph.model.d.ts +8 -0
  101. package/model/switch-indicator-light/bit-switch-operation.d.ts +2 -1
  102. package/model/switch-indicator-light/bit-switch-operation.js +1 -0
  103. package/model/switch-indicator-light/bit-switch-operation.metadata.json +1 -1
  104. package/package.json +1 -1
  105. package/remote/communication/variable/remote-variable-communicator.d.ts +4 -0
  106. package/remote/communication/variable/remote-variable-communicator.js +23 -1
  107. package/remote/communication/variable/remote-variable-communicator.metadata.json +1 -1
  108. package/remote/communication/variable/remote-variable-protocol.d.ts +3 -0
  109. package/service/index.d.ts +1 -0
  110. package/service/index.metadata.json +1 -1
  111. package/service/released-variable/index.d.ts +1 -0
  112. package/service/released-variable/index.js +0 -0
  113. package/service/released-variable/index.metadata.json +1 -0
  114. package/service/released-variable/released-variable.service.d.ts +4 -0
  115. package/service/released-variable/released-variable.service.js +0 -0
  116. package/service/released-variable/released-variable.service.metadata.json +1 -0
  117. package/service/weather.service.d.ts +1 -0
  118. package/shared/gui-consts.d.ts +2 -0
  119. package/shared/gui-consts.js +2 -0
  120. package/shared/gui-consts.metadata.json +1 -1
  121. package/utils/data-type/data-type.service.d.ts +3 -3
  122. package/utils/data-type/data-type.service.js +31 -7
  123. package/utils/data-type/fbox-data-type.service.js +40 -0
  124. package/utils/numerical-operation.service.js +2 -2
@@ -10,6 +10,7 @@ import { HistoricalCurveElementStatus } from './historical-curve-element-status'
10
10
  import { LOGGER_SERVICE_TOKEN } from '../../logger';
11
11
  import { GlobalSettings, DisplayMode } from '../../settings';
12
12
  import { CurveType } from '../../model/historical-curve/curve-type';
13
+ import { AxisRangeType } from '../../model/historical-curve/historical-curve-axis-settings';
13
14
  export class HistoricalCurveElement extends ConditionalDisplayElement {
14
15
  constructor(element, injector, permissionChecker, variableCommunicator, variableStore, historyDataStore, signalRAppId) {
15
16
  super(element, permissionChecker, variableCommunicator, variableStore, signalRAppId);
@@ -21,13 +22,14 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
21
22
  marginRight: 20,
22
23
  mobileMinWidth: 450,
23
24
  operationAreaHeight: 32,
24
- operationAreaMarginTop: 10,
25
+ operationAreaMarginTop: 25,
25
26
  operationSelectFontSize: '16px',
26
27
  operationButtonWidth: 24,
27
28
  operationButtonHeight: 24,
28
29
  operationButtonMargin: 4
29
30
  };
30
31
  this.elementStatus = HistoricalCurveElementStatus.Loading;
32
+ this.data = [];
31
33
  this.logger = injector.get(LOGGER_SERVICE_TOKEN);
32
34
  this.localization = injector.get(LOCALIZATION);
33
35
  this.timePeriods = this.getValidTimePeriods();
@@ -38,7 +40,7 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
38
40
  }, this.model.displaySetting.refreshInterval * 1000);
39
41
  this.isMobileMode = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
40
42
  if (this.isMobileMode) {
41
- this.displayOption.operationAreaMarginTop = 20;
43
+ this.displayOption.operationAreaMarginTop = 35;
42
44
  if (this.model.displaySetting.size.width >= this.displayOption.mobileMinWidth) {
43
45
  this.displayOption.operationAreaHeight = 68;
44
46
  this.displayOption.operationSelectFontSize = '24px';
@@ -58,7 +60,9 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
58
60
  }
59
61
  getValidTimePeriods() {
60
62
  const timePeriods = new Array();
63
+ timePeriods.push({ key: 6, name: this.localization.lastThirtyMinutes });
61
64
  timePeriods.push({ key: 1, name: this.localization.lastOneHour });
65
+ timePeriods.push({ key: 7, name: this.localization.lastEightHour });
62
66
  timePeriods.push({ key: 2, name: this.localization.lastTwentyFourHours });
63
67
  timePeriods.push({ key: 3, name: this.localization.lastSevenDays });
64
68
  timePeriods.push({ key: 4, name: this.localization.lastThirtyDays });
@@ -84,6 +88,12 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
84
88
  case 5:
85
89
  this.startTime = moment().subtract(1, 'years');
86
90
  break;
91
+ case 6:
92
+ this.startTime = moment().subtract(30, 'minutes');
93
+ break;
94
+ case 7:
95
+ this.startTime = moment().subtract(8, 'hours');
96
+ break;
87
97
  default:
88
98
  this.startTime = moment().subtract(1, 'days');
89
99
  }
@@ -131,6 +141,7 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
131
141
  each(result, v => values.push({ x: moment(v.time).local().toDate().valueOf(), y: v.values[key] }));
132
142
  data.push({ key: channel.name, area: channel.projectEnabled, values: values });
133
143
  });
144
+ this.data = data;
134
145
  nv.addGraph(() => {
135
146
  if (this.model.displaySetting.curveType === CurveType.BarGroup || this.model.displaySetting.curveType === CurveType.BarStack) {
136
147
  return this.getMultiBarWithFocusChart(chartWidth, chartHeight, data);
@@ -140,10 +151,57 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
140
151
  }
141
152
  });
142
153
  }
154
+ initPoint() {
155
+ try {
156
+ const legendList = this.$element
157
+ .find('.nv-legend')
158
+ .find('.nv-series');
159
+ let hiddenCount = 0;
160
+ for (let i = 0; i < this.data.length; i++) {
161
+ const channel = this.model.dataSetting.channels[i];
162
+ if (legendList.eq(i).children().eq(0).css('fill-opacity') === '1') {
163
+ const pointList = this.$element
164
+ .find('.nv-scatterWrap')
165
+ .find('.nv-series-' + (i - hiddenCount))
166
+ .find('.nv-point');
167
+ if (pointList && pointList.length) {
168
+ for (let j = 0; j < pointList.length; j++) {
169
+ const point = pointList.eq(j);
170
+ const previousPoint = pointList.eq(j - 1);
171
+ if (j && point.attr('transform').split(',')[1] !== previousPoint.attr('transform').split(',')[1]) {
172
+ if (channel.enablePoint && channel.pointColor) {
173
+ const pointStyle = {
174
+ 'stroke-opacity': 1,
175
+ 'stroke-width': '2px',
176
+ 'stroke': channel.pointColor,
177
+ 'fill-opacity': 1,
178
+ 'fill': channel.pointColor
179
+ };
180
+ point.addClass('nv-mark-point');
181
+ point.css(pointStyle);
182
+ previousPoint.addClass('nv-mark-point');
183
+ previousPoint.css(pointStyle);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ else {
190
+ hiddenCount++;
191
+ }
192
+ }
193
+ }
194
+ catch (e) {
195
+ console.log(e);
196
+ }
197
+ }
143
198
  getLineChart(chartWidth, chartHeight, data) {
144
199
  const chart = nv.models.lineChart().showLegend(true)
145
200
  .margin({ top: 0, bottom: 0, left: this.displayOption.marginLeft, right: this.displayOption.marginRight })
146
201
  .noData(this.localization.chartNoData);
202
+ if (this.model.displaySetting.axisSetting.yAxisRangeType === AxisRangeType.Custom) {
203
+ chart.yDomain([this.model.displaySetting.axisSetting.yAxisMin, this.model.displaySetting.axisSetting.yAxisMax]);
204
+ }
147
205
  if (!this.isMobileMode) {
148
206
  chart.focusEnable(true);
149
207
  chart.focus.margin({ top: 10, right: 0, bottom: 0, left: 0 });
@@ -151,11 +209,20 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
151
209
  chart.focus.showXAxis(false);
152
210
  }
153
211
  this.renderCommonProperty(chart, chartWidth, chartHeight, data);
154
- // if in Mobile mode and width is less than the min width, then hide operation area
155
- if (this.isMobileMode && this.model.displaySetting.size.width < this.displayOption.mobileMinWidth) {
156
- return chart;
157
- }
158
212
  this.renderOperationArea(chartWidth, chartHeight);
213
+ this.initPoint();
214
+ chart.legend.dispatch.on('legendClick', () => {
215
+ setTimeout(() => {
216
+ this.$element.find('.nv-mark-point').css({
217
+ 'stroke-opacity': 0,
218
+ 'stroke-width': 0,
219
+ 'stroke': 'unset',
220
+ 'fill-opacity': 0,
221
+ 'fill': 'unset'
222
+ }).removeClass('nv-mark-point');
223
+ this.initPoint();
224
+ }, 1);
225
+ });
159
226
  return chart;
160
227
  }
161
228
  getMultiBarWithFocusChart(chartWidth, chartHeight, data) {
@@ -172,16 +239,15 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
172
239
  chart.multibar.stacked(true);
173
240
  chart.multibar2.stacked(true);
174
241
  }
242
+ if (this.model.displaySetting.axisSetting.yAxisRangeType === AxisRangeType.Custom) {
243
+ chart.yDomain([this.model.displaySetting.axisSetting.yAxisMin, this.model.displaySetting.axisSetting.yAxisMax]);
244
+ }
175
245
  if (!this.isMobileMode) {
176
246
  chart.focusEnable(true);
177
247
  chart.focusShowAxisX(false);
178
248
  }
179
249
  chart.xAxis.tickFormat(d => this.timeFormat(d, '%x %X'));
180
250
  this.renderCommonProperty(chart, chartWidth, chartHeight, data);
181
- // if in Mobile mode and width is less than the min width, then hide operation area
182
- if (this.isMobileMode && this.model.displaySetting.size.width < this.displayOption.mobileMinWidth) {
183
- return chart;
184
- }
185
251
  this.renderOperationArea(chartWidth, chartHeight);
186
252
  const focusContext = this.rootElement.select('.nv-context');
187
253
  focusContext.select('.nv-barsWrap.nvd3-svg').attr('transform', 'translate(0,30)');
@@ -196,9 +262,27 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
196
262
  return chart;
197
263
  }
198
264
  renderCommonProperty(chart, chartWidth, chartHeight, data) {
265
+ var _a, _b;
199
266
  chart.tooltip.headerFormatter(d => this.timeFormat(d, '%x %X'));
200
267
  if (this.model.displaySetting.showAxis) {
201
- chart.xAxis.showMaxMin(true).tickFormat(d => this.timeFormat(d, '%X'));
268
+ chart.xAxis.showMaxMin(true).tickFormat(d => {
269
+ this.$element.find('.nv-mark-point').css({
270
+ 'stroke-opacity': 0,
271
+ 'stroke-width': 0,
272
+ 'stroke': 'unset',
273
+ 'fill-opacity': 0,
274
+ 'fill': 'unset'
275
+ }).removeClass('nv-mark-point');
276
+ clearTimeout(this.timer);
277
+ this.timer = undefined;
278
+ this.timer = setTimeout(() => {
279
+ this.initPoint();
280
+ }, 100);
281
+ if (this.currentTimePeriod === 3 || this.currentTimePeriod === 4 || this.currentTimePeriod === 5) {
282
+ return this.timeFormat(d, '%y-%m-%d');
283
+ }
284
+ return this.timeFormat(Number(d), '%X');
285
+ });
202
286
  if (this.model.displaySetting.axisSetting) {
203
287
  if (this.model.displaySetting.axisSetting.showAxisLabel && this.model.displaySetting.axisSetting.axisLabelFont) {
204
288
  chart.xAxis.fontSize(this.model.displaySetting.axisSetting.axisLabelFont.fontSize);
@@ -223,43 +307,141 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
223
307
  chart.update();
224
308
  this.rootElement.selectAll('.nv-noData').attr('x', chartWidth / 2).attr('y', chartHeight / 2 + this.displayOption.operationAreaHeight);
225
309
  });
310
+ const fontSize = (_b = (_a = this.model.displaySetting.axisSetting) === null || _a === void 0 ? void 0 : _a.axisLabelFont) === null || _b === void 0 ? void 0 : _b.fontSize;
226
311
  this.rootElement.selectAll('.domain').style('stroke-opacity', 1);
227
312
  if (this.model.displaySetting.showAxis && this.model.displaySetting.axisSetting) {
228
313
  const axisColor = this.model.displaySetting.axisSetting.axisColor;
229
314
  this.rootElement.selectAll('.domain').style('stroke', axisColor);
230
- if (this.model.displaySetting.axisSetting.showAxisLabel) {
231
- const fontSize = this.model.displaySetting.axisSetting.axisLabelFont.fontSize;
315
+ if (fontSize && this.model.displaySetting.axisSetting.showAxisLabel) {
232
316
  this.rootElement.selectAll('.nv-axisMaxMin').select('text').style('font-size', fontSize);
233
317
  }
234
318
  }
319
+ let strokeWidth = 0;
320
+ if (this.model.displaySetting.axisSetting.showTick !== false) {
321
+ strokeWidth = 1;
322
+ }
323
+ this.rootElement
324
+ .selectAll('.nv-x')
325
+ .selectAll('.tick')
326
+ .selectAll('line')
327
+ .attr('style', `stroke:${this.model.displaySetting.axisSetting.xAxisTickColor || 'rgb(127, 147, 159)'};stroke-width:${strokeWidth};`);
328
+ this.rootElement
329
+ .selectAll('.nv-y')
330
+ .selectAll('.tick')
331
+ .selectAll('line')
332
+ .attr('style', `stroke:${this.model.displaySetting.axisSetting.yAxisTickColor || 'rgb(127, 147, 159)'};stroke-width:${strokeWidth};`);
333
+ if (fontSize && this.currentTimePeriod === 3 || this.currentTimePeriod === 4 || this.currentTimePeriod === 5) {
334
+ const self = this;
335
+ this.rootElement
336
+ .selectAll('.nv-x')
337
+ .selectAll('.tick')
338
+ .selectAll('text')
339
+ .data(function (d) {
340
+ return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
341
+ })
342
+ .enter()
343
+ .append('text')
344
+ .attr('class', 'full-date')
345
+ .attr('x', 0)
346
+ .attr('y', 0)
347
+ .attr('dy', '2.3em')
348
+ .style('text-anchor', 'middle')
349
+ .style('font-size', fontSize)
350
+ .text((d) => d);
351
+ this.rootElement
352
+ .selectAll('.nv-axisMaxMin-x')
353
+ .selectAll('text')
354
+ .data(function (d) {
355
+ return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
356
+ })
357
+ .enter()
358
+ .append('text')
359
+ .attr('class', 'full-date')
360
+ .attr('x', 0)
361
+ .attr('y', 0)
362
+ .attr('dy', '2.3em')
363
+ .style('text-anchor', 'middle')
364
+ .style('font-size', fontSize)
365
+ .text((d) => d);
366
+ const focusWrap = this.rootElement.selectAll('.nv-focusWrap');
367
+ if (focusWrap.size()) {
368
+ let h = focusWrap.attr('transform');
369
+ if (h && h.length && h.indexOf(',') !== -1) {
370
+ h = h.slice(0, -1).split(',')[1];
371
+ this.rootElement
372
+ .selectAll('.nv-focusWrap')
373
+ .attr('transform', `translate(0,${Number(h) + 15})`);
374
+ }
375
+ }
376
+ const resizeObserver = new window.MutationObserver(() => {
377
+ this.rootElement
378
+ .selectAll('.nv-x')
379
+ .selectAll('.tick')
380
+ .selectAll('.full-date')
381
+ .remove();
382
+ this.rootElement
383
+ .selectAll('.nv-x')
384
+ .selectAll('.tick')
385
+ .selectAll('text')
386
+ .data(function (d) {
387
+ return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
388
+ })
389
+ .enter()
390
+ .append('text')
391
+ .attr('class', 'full-date')
392
+ .attr('x', 0)
393
+ .attr('y', 0)
394
+ .attr('dy', '2.3em')
395
+ .style('text-anchor', 'middle')
396
+ .style('font-size', fontSize)
397
+ .text((d) => d);
398
+ });
399
+ const extent = document.getElementsByClassName('extent');
400
+ if (extent.length) {
401
+ resizeObserver.observe(extent[0], { attributes: true });
402
+ }
403
+ }
404
+ else {
405
+ this.rootElement
406
+ .selectAll('.full-date')
407
+ .remove();
408
+ }
235
409
  }
236
410
  renderOperationArea(chartWidth, chartHeight) {
237
411
  const operationArea = this.rootElement.append('g').attr('transform', `translate(0,${chartHeight + this.displayOption.operationAreaMarginTop})`)
238
412
  .append('foreignObject').attr('width', chartWidth).attr('height', this.displayOption.operationAreaHeight).attr('fill', 'none')
239
413
  .append('xhtml:div').style('height', (this.displayOption.operationAreaHeight - 4) + 'px').style('overflow', 'hidden').style('margin-top', '4px');
240
414
  const selectElement = operationArea.append('select').style('margin-left', this.displayOption.marginLeft + 'px')
415
+ .style('background-color', 'inherit')
241
416
  .style('font-size', this.displayOption.operationSelectFontSize).on('change', () => {
242
417
  const displayTimePeriod = this.rootElement.select('select').property('value');
243
418
  this.updateTimeRange(displayTimePeriod);
244
419
  this.reRenderElement(this.startTime, this.endTime, this.displayOption.dataLimit, HistoricalCurveTimeRange.BeginOpenEndOpen);
245
420
  });
421
+ const rect = this.$element.parent().parent().find('rect');
422
+ const fillColor = rect.attr('fill');
246
423
  const options = selectElement.selectAll('option').data(this.timePeriods).enter().append('option');
247
- options.text(d => d.name).attr('value', d => d.key).property('selected', d => d.key === Number(this.currentTimePeriod));
424
+ options.text(d => d.name).attr('value', d => d.key).property('selected', d => d.key === Number(this.currentTimePeriod))
425
+ .style('background-color', fillColor);
248
426
  const buttonWidth = this.displayOption.operationButtonWidth + 'px', buttonHeight = this.displayOption.operationButtonHeight + 'px';
249
427
  operationArea.append('button').style('width', buttonWidth).style('height', buttonHeight).style('border', 'none')
250
- .style('float', 'right').style('background', 'white').style('background-image', 'url(assets/img/last_page.svg)')
428
+ .style('float', 'right').style('background-image', 'url(assets/img/last_page.svg)')
429
+ .style('background-color', 'inherit')
251
430
  .on('click', () => { this.loadLastPage(); });
252
431
  operationArea.append('button').style('width', buttonWidth).style('height', buttonHeight).style('border', 'none')
253
- .style('float', 'right').style('background', 'white').style('background-image', 'url(assets/img/next_page.svg)')
432
+ .style('float', 'right').style('background-image', 'url(assets/img/next_page.svg)')
254
433
  .style('margin', `0 ${this.displayOption.operationButtonMargin}px 0 0`)
434
+ .style('background-color', 'inherit')
255
435
  .on('click', () => { this.loadNextPage(); });
256
436
  operationArea.append('button').style('width', buttonWidth).style('height', buttonHeight).style('border', 'none')
257
- .style('float', 'right').style('background', 'white').style('background-image', 'url(assets/img/previous_page.svg)')
437
+ .style('float', 'right').style('background-image', 'url(assets/img/previous_page.svg)')
258
438
  .style('margin', `0 ${this.displayOption.operationButtonMargin}px 0 0`)
439
+ .style('background-color', 'inherit')
259
440
  .on('click', () => { this.loadPreviousPage(); });
260
441
  operationArea.append('button').style('width', buttonWidth).style('height', buttonHeight).style('border', 'none')
261
- .style('float', 'right').style('background', 'white').style('background-image', 'url(assets/img/first_page.svg)')
442
+ .style('float', 'right').style('background-image', 'url(assets/img/first_page.svg)')
262
443
  .style('margin', `0 ${this.displayOption.operationButtonMargin}px 0 0`)
444
+ .style('background-color', 'inherit')
263
445
  .on('click', () => { this.loadFirstPage(); });
264
446
  }
265
447
  timeFormat(datetime, specifier) {
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"HistoricalCurveElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":20,"character":44},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":62,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":63,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":64,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":65,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":66,"character":23},{"__symbolic":"reference","module":"../../config","name":"HistoryDataStore","line":67,"character":43},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"getValidTimePeriods":[{"__symbolic":"method"}],"updateTimeRange":[{"__symbolic":"method"}],"updateQueryTimeRange":[{"__symbolic":"method"}],"reRenderElement":[{"__symbolic":"method"}],"renderElement":[{"__symbolic":"method"}],"renderChart":[{"__symbolic":"method"}],"getLineChart":[{"__symbolic":"method"}],"getMultiBarWithFocusChart":[{"__symbolic":"method"}],"renderCommonProperty":[{"__symbolic":"method"}],"renderOperationArea":[{"__symbolic":"method"}],"timeFormat":[{"__symbolic":"method"}],"loadFirstPage":[{"__symbolic":"method"}],"loadNextPage":[{"__symbolic":"method"}],"loadPreviousPage":[{"__symbolic":"method"}],"loadLastPage":[{"__symbolic":"method"}],"initElementStatus":[{"__symbolic":"method"}],"updateElementStatus":[{"__symbolic":"method"}],"setStatusAsUnbound":[{"__symbolic":"method"}],"setStatusAsLoading":[{"__symbolic":"method"}],"setStatusAsLoadFailed":[{"__symbolic":"method"}],"renderStatus":[{"__symbolic":"method"}],"clearStatus":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"HistoricalCurveElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":21,"character":44},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":65,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":66,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":67,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":68,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":69,"character":23},{"__symbolic":"reference","module":"../../config","name":"HistoryDataStore","line":70,"character":43},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"getValidTimePeriods":[{"__symbolic":"method"}],"updateTimeRange":[{"__symbolic":"method"}],"updateQueryTimeRange":[{"__symbolic":"method"}],"reRenderElement":[{"__symbolic":"method"}],"renderElement":[{"__symbolic":"method"}],"renderChart":[{"__symbolic":"method"}],"initPoint":[{"__symbolic":"method"}],"getLineChart":[{"__symbolic":"method"}],"getMultiBarWithFocusChart":[{"__symbolic":"method"}],"renderCommonProperty":[{"__symbolic":"method"}],"renderOperationArea":[{"__symbolic":"method"}],"timeFormat":[{"__symbolic":"method"}],"loadFirstPage":[{"__symbolic":"method"}],"loadNextPage":[{"__symbolic":"method"}],"loadPreviousPage":[{"__symbolic":"method"}],"loadLastPage":[{"__symbolic":"method"}],"initElementStatus":[{"__symbolic":"method"}],"updateElementStatus":[{"__symbolic":"method"}],"setStatusAsUnbound":[{"__symbolic":"method"}],"setStatusAsLoading":[{"__symbolic":"method"}],"setStatusAsLoadFailed":[{"__symbolic":"method"}],"renderStatus":[{"__symbolic":"method"}],"clearStatus":[{"__symbolic":"method"}]}}}}]
@@ -27,6 +27,8 @@ import { PolygonElement } from './vector-graphics/polygon-element';
27
27
  import { HyperlinkElement } from './static-elements/hyperlink-element';
28
28
  import { VideoElement } from './video/video-element';
29
29
  import { WeatherElement } from './weather/weater-element';
30
+ import { AirQualityElement } from './air-quality/air-quality-element';
31
+ import { AlarmElement } from './alarm/alarm-element';
30
32
  export class MainElement {
31
33
  constructor(injector, bsModalService, context, variableCommunicator, popupViewService, signalRAppId) {
32
34
  this.injector = injector;
@@ -58,7 +60,7 @@ export class MainElement {
58
60
  const category = $(element).data('model').category;
59
61
  switch (category) {
60
62
  case GuiConsts.components.numericalDisplayKey:
61
- const numericalDisplayElement = new NumericalDisplayElement(element, this.injector, this.bsModalService, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.graphStore, this.context.operationRecordService, this.context.securityChecker, this.context.configStore.variableStore, this.injector.get(LOCALIZATION), this.signalRAppId);
63
+ const numericalDisplayElement = new NumericalDisplayElement(element, this.injector, this.bsModalService, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.graphStore, this.context.operationRecordService, this.context.releasedVariableService, this.context.securityChecker, this.context.configStore.variableStore, this.injector.get(LOCALIZATION), this.signalRAppId);
62
64
  this.elements.push(numericalDisplayElement);
63
65
  break;
64
66
  case GuiConsts.components.imageKey:
@@ -125,6 +127,12 @@ export class MainElement {
125
127
  case GuiConsts.components.weatherKey:
126
128
  this.elements.push(new WeatherElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.weatherService, this.signalRAppId));
127
129
  break;
130
+ case GuiConsts.components.airQualityKey:
131
+ this.elements.push(new AirQualityElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.weatherService, this.signalRAppId));
132
+ break;
133
+ case GuiConsts.components.alarmKey:
134
+ this.elements.push(new AlarmElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.configStore.alarmsStore, this.signalRAppId));
135
+ break;
128
136
  }
129
137
  });
130
138
  this.initBackground();
@@ -204,7 +212,7 @@ export class MainElement {
204
212
  initElementState() {
205
213
  forEach(this.elements, element => {
206
214
  if (element instanceof ReadableElement) {
207
- element.init(element.readVariableName);
215
+ element.init(element.readVariableName || element.maxVariableName || element.minVariableName);
208
216
  }
209
217
  else if (element instanceof HistoricalCurveElement) {
210
218
  element.initElementStatus();
@@ -215,8 +223,20 @@ export class MainElement {
215
223
  getVariableNames() {
216
224
  const variableNames = new Array();
217
225
  forEach(this.elements, element => {
226
+ var _a, _b;
218
227
  if (element instanceof ReadableElement) {
228
+ const maxVariableName = (_a = element) === null || _a === void 0 ? void 0 : _a.maxVariableName;
229
+ const maxValueType = element.maxValueType;
230
+ const minVariableName = (_b = element) === null || _b === void 0 ? void 0 : _b.minVariableName;
231
+ const minValueType = element.minValueType;
219
232
  const variableName = element.readVariableName;
233
+ // 最大最小值选择变量类型时,其中一个未绑定变量不进行开点操作 - FLEXCLOUD-1817
234
+ if (maxValueType && maxVariableName && !variableNames.find(v => isEqual(maxVariableName, v))) {
235
+ variableNames.push(maxVariableName);
236
+ }
237
+ if (minValueType && minVariableName && !variableNames.find(v => isEqual(minVariableName, v))) {
238
+ variableNames.push(minVariableName);
239
+ }
220
240
  if (variableName && !variableNames.find(v => isEqual(variableName, v))) {
221
241
  variableNames.push(element.readVariableName);
222
242
  }
@@ -242,7 +262,7 @@ export class MainElement {
242
262
  each(values, value => {
243
263
  each(this.elements, e => {
244
264
  if (e instanceof ReadableElement) {
245
- if (e.readVariableName === value.variableName) {
265
+ if (e.readVariableName === value.variableName || e.minVariableName === value.variableName || e.maxVariableName === value.variableName) {
246
266
  e.reportValueChanged(value);
247
267
  }
248
268
  }
@@ -252,7 +272,8 @@ export class MainElement {
252
272
  dispose() {
253
273
  each(this.elements, e => {
254
274
  if (e instanceof HistoricalCurveElement || e instanceof VideoElement
255
- || e instanceof WeatherElement || e instanceof NumericalDisplayElement || e instanceof TextElement) {
275
+ || e instanceof WeatherElement || e instanceof NumericalDisplayElement || e instanceof TextElement
276
+ || e instanceof AirQualityElement) {
256
277
  e.dispose();
257
278
  }
258
279
  });
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"MainElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":53,"character":43},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":54,"character":41},{"__symbolic":"reference","module":"../gui/gui-context","name":"GuiContext","line":55,"character":34},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":56,"character":47},{"__symbolic":"reference","module":"../view/popup-view.service","name":"PopupViewService","line":57,"character":43},null]}],"load":[{"__symbolic":"method"}],"uniformStretch":[{"__symbolic":"method"}],"changeVideoStyle":[{"__symbolic":"method"}],"horizontalStretch":[{"__symbolic":"method"}],"initElementState":[{"__symbolic":"method"}],"getVariableNames":[{"__symbolic":"method"}],"reportVariableStates":[{"__symbolic":"method"}],"reportVariableValues":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"checkIsLoaded":[{"__symbolic":"method"}],"initBackground":[{"__symbolic":"method"}],"getImageEl":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"MainElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":55,"character":43},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":56,"character":41},{"__symbolic":"reference","module":"../gui/gui-context","name":"GuiContext","line":57,"character":34},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":58,"character":47},{"__symbolic":"reference","module":"../view/popup-view.service","name":"PopupViewService","line":59,"character":43},null]}],"load":[{"__symbolic":"method"}],"uniformStretch":[{"__symbolic":"method"}],"changeVideoStyle":[{"__symbolic":"method"}],"horizontalStretch":[{"__symbolic":"method"}],"initElementState":[{"__symbolic":"method"}],"getVariableNames":[{"__symbolic":"method"}],"reportVariableStates":[{"__symbolic":"method"}],"reportVariableValues":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"checkIsLoaded":[{"__symbolic":"method"}],"initBackground":[{"__symbolic":"method"}],"getImageEl":[{"__symbolic":"method"}]}}}}]
@@ -5,16 +5,22 @@ import { ReadableElement } from './base';
5
5
  import { VariableStore } from '../config';
6
6
  import { PermissionChecker } from '../service';
7
7
  export declare class MeterElement extends ReadableElement {
8
+ private static DEFAULT_MIN_VALUE;
9
+ private static DEFAULT_MAX_VALUE;
8
10
  private readonly $handEl;
9
11
  private readonly arcPath$;
10
12
  private cx;
11
13
  private cy;
12
14
  private offsetY;
13
15
  private mainElementTransform;
16
+ private valueObj;
17
+ private isNeedUpdateScale;
14
18
  readonly model: Meter;
15
19
  constructor(element: HTMLElement, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, localization: Localization, signalRAppId: string);
16
- updateVariableValue(value: number): void;
20
+ private updateValueObj;
21
+ updateVariableValue(value: number, variableName: any): void;
17
22
  private initFrameNode;
23
+ private updateScale;
18
24
  private getAngle;
19
25
  private directionPoint;
20
26
  }
@@ -1,10 +1,20 @@
1
1
  import { ReadableElement } from './base';
2
+ import { isNumber } from 'lodash';
3
+ import { VariableValueType } from '../model/shared/condition/variable-value-type';
2
4
  export class MeterElement extends ReadableElement {
3
5
  constructor(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId) {
4
6
  super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
5
7
  this.cx = 0;
6
8
  this.cy = 0;
7
9
  this.offsetY = 0;
10
+ this.valueObj = {};
11
+ this.isNeedUpdateScale = false;
12
+ if ((this.model.minValueType === VariableValueType.Constant && this.model.maxValueType === VariableValueType.Variable)
13
+ || this.model.maxValueType === VariableValueType.Constant && this.model.minValueType === VariableValueType.Variable) {
14
+ this.isNeedUpdateScale = true;
15
+ this.updateScale();
16
+ this.isNeedUpdateScale = false;
17
+ }
8
18
  let mainEl$;
9
19
  if (this.model.version && this.model.version > 3) {
10
20
  mainEl$ = this.$element.find('[data-id="main"]');
@@ -31,18 +41,75 @@ export class MeterElement extends ReadableElement {
31
41
  this.changeStates();
32
42
  });
33
43
  }
34
- updateVariableValue(value) {
35
- const angle = this.getAngle(value);
36
- this.$handEl.attr('transform', this.mainElementTransform + ` translate(0,${this.offsetY}) rotate(${angle}, ${this.cx}, ${this.cy})`);
44
+ updateValueObj(value, variableName) {
45
+ var _a, _b, _c;
46
+ if (((_a = this.model.readVariable) === null || _a === void 0 ? void 0 : _a.name) === variableName) {
47
+ this.isNeedUpdateScale = false;
48
+ this.valueObj.value = value;
49
+ }
50
+ if (((_b = this.model.minVariable) === null || _b === void 0 ? void 0 : _b.name) === variableName) {
51
+ this.isNeedUpdateScale = true;
52
+ this.valueObj.min = value;
53
+ }
54
+ if (((_c = this.model.maxVariable) === null || _c === void 0 ? void 0 : _c.name) === variableName) {
55
+ this.isNeedUpdateScale = true;
56
+ this.valueObj.max = value;
57
+ }
58
+ }
59
+ updateVariableValue(value, variableName) {
60
+ this.updateValueObj(value, variableName);
61
+ this.updateScale();
62
+ const angle = this.getAngle();
63
+ if (isNumber(angle)) {
64
+ this.$handEl.attr('transform', this.mainElementTransform + ` translate(0,${this.offsetY}) rotate(${angle}, ${this.cx}, ${this.cy})`);
65
+ }
37
66
  }
38
67
  initFrameNode() {
39
68
  const b = Snap(this.$element[0]).getBBox();
40
69
  this.rootElement.append('rect').attr('id', 'StateFrame').attr('width', b.width).attr('height', b.height).attr('fill', 'transparent');
41
70
  }
42
- getAngle(value) {
43
- const min = this.model.min;
44
- const max = this.model.max;
45
- value = Math.min(Math.max(value, min), max);
71
+ updateScale() {
72
+ if (!this.isNeedUpdateScale) {
73
+ return;
74
+ }
75
+ let min = this.model.minValueType ? this.valueObj.min : this.model.min;
76
+ let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
77
+ min = Number(min);
78
+ max = Number(max);
79
+ if (isNaN(min) || isNaN(max)) {
80
+ min = MeterElement.DEFAULT_MIN_VALUE;
81
+ max = MeterElement.DEFAULT_MAX_VALUE;
82
+ }
83
+ const avgSacle = ((max - min) / this.model.masterDivisionNumber).toFixed(5);
84
+ const textElements = this.$element.find('g:first > text');
85
+ for (let i = 0; i < textElements.length; i++) {
86
+ const text = textElements[i];
87
+ if (!text.innerHTML) {
88
+ continue;
89
+ }
90
+ let sacleValue = ((Number(avgSacle) * i) + min).toFixed(0);
91
+ // 整数位和小数位格式化;
92
+ if (this.model.fractionDigits > 0) {
93
+ sacleValue = (sacleValue / Math.pow(10, this.model.fractionDigits)).toFixed(this.model.fractionDigits);
94
+ }
95
+ if (!isNaN(sacleValue)) {
96
+ text.innerHTML = sacleValue;
97
+ }
98
+ }
99
+ }
100
+ getAngle() {
101
+ let min = this.model.minValueType ? this.valueObj.min : this.model.min;
102
+ let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
103
+ min = Number(min);
104
+ max = Number(max);
105
+ if (isNaN(min) || isNaN(max)) {
106
+ min = MeterElement.DEFAULT_MIN_VALUE;
107
+ max = MeterElement.DEFAULT_MAX_VALUE;
108
+ }
109
+ if (!this.valueObj.value && isNaN(Number(this.valueObj.value))) {
110
+ return undefined;
111
+ }
112
+ const value = Math.min(Math.max(this.valueObj.value || 0, min), max);
46
113
  const len = (value - min) / (max - min);
47
114
  const arcPath = Snap(this.arcPath$[0]);
48
115
  const b = arcPath.getBBox(true);
@@ -68,3 +135,5 @@ export class MeterElement extends ReadableElement {
68
135
  return c;
69
136
  }
70
137
  }
138
+ MeterElement.DEFAULT_MIN_VALUE = 0;
139
+ MeterElement.DEFAULT_MAX_VALUE = 100;
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"MeterElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./base","name":"ReadableElement","line":7,"character":34},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":18,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../service","name":"PermissionChecker","line":18,"character":57},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":19,"character":30},{"__symbolic":"reference","module":"../config","name":"VariableStore","line":19,"character":67},{"__symbolic":"reference","module":"../localization","name":"Localization","line":19,"character":96},{"__symbolic":"reference","name":"string"}]}],"updateVariableValue":[{"__symbolic":"method"}],"initFrameNode":[{"__symbolic":"method"}],"getAngle":[{"__symbolic":"method"}],"directionPoint":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"MeterElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./base","name":"ReadableElement","line":9,"character":34},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":25,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../service","name":"PermissionChecker","line":25,"character":57},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":26,"character":30},{"__symbolic":"reference","module":"../config","name":"VariableStore","line":26,"character":67},{"__symbolic":"reference","module":"../localization","name":"Localization","line":26,"character":96},{"__symbolic":"reference","name":"string"}]}],"updateValueObj":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"initFrameNode":[{"__symbolic":"method"}],"updateScale":[{"__symbolic":"method"}],"getAngle":[{"__symbolic":"method"}],"directionPoint":[{"__symbolic":"method"}]},"statics":{"DEFAULT_MIN_VALUE":0,"DEFAULT_MAX_VALUE":100}}}}]
@@ -3,7 +3,7 @@ import { BsModalService } from 'ngx-bootstrap/modal';
3
3
  import { GraphStore, VariableStore } from '../../config';
4
4
  import { Localization } from '../../localization';
5
5
  import { NumericalDisplay } from '../../model';
6
- import { PermissionChecker, OperationRecordService } from '../../service';
6
+ import { PermissionChecker, OperationRecordService, ReleasedVariableService } from '../../service';
7
7
  import { VariableCommunicator } from '../../communication';
8
8
  import { ReadableElement } from '../base/readable-element';
9
9
  import { SecurityChecker } from '../../security';
@@ -11,6 +11,7 @@ export declare class NumericalDisplayElement extends ReadableElement {
11
11
  private readonly modalService;
12
12
  private readonly graphStore;
13
13
  private readonly operationRecordService;
14
+ private readonly releasedVariableService;
14
15
  private readonly securityChecker;
15
16
  private readonly dataTypeService;
16
17
  private readonly fractionDigitService;
@@ -21,8 +22,13 @@ export declare class NumericalDisplayElement extends ReadableElement {
21
22
  private readonly logger;
22
23
  private displayForeignObject;
23
24
  private enableDataParsed;
25
+ private writeValueMmodalRef;
26
+ private recordValue;
27
+ private showValue;
28
+ private numericalOperation;
29
+ private restorationTimer;
24
30
  get writeVariableName(): string;
25
- constructor(element: HTMLElement, injector: Injector, modalService: BsModalService, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, graphStore: GraphStore, operationRecordService: OperationRecordService, securityChecker: SecurityChecker, variableStore: VariableStore, localization: Localization, signalRAppId: string);
31
+ constructor(element: HTMLElement, injector: Injector, modalService: BsModalService, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, graphStore: GraphStore, operationRecordService: OperationRecordService, releasedVariableService: ReleasedVariableService, securityChecker: SecurityChecker, variableStore: VariableStore, localization: Localization, signalRAppId: string);
26
32
  dispose(): void;
27
33
  initElement(): any;
28
34
  private checkElementPassword;