@c8y/ngx-components 1021.22.149 → 1021.22.151
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.
- package/core/forms/reactive-validators.d.ts +1 -0
- package/core/forms/reactive-validators.d.ts.map +1 -1
- package/esm2022/core/forms/reactive-validators.mjs +9 -1
- package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.mjs +3 -3
- package/esm2022/widgets/implementations/kpi/kpi-widget-config/kpi-widget-config.component.mjs +4 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +3 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +8 -0
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +53 -46
- package/locales/es.po +32 -68
- package/locales/fr.po +41 -55
- package/locales/ja_JP.po +16 -68
- package/locales/ko.po +41 -57
- package/locales/nl.po +28 -41
- package/locales/pl.po +30 -44
- package/locales/pt_BR.po +32 -46
- package/locales/zh_CN.po +39 -55
- package/locales/zh_TW.po +47 -57
- package/package.json +1 -1
- package/widgets/implementations/kpi/kpi-widget-config/kpi-widget-config.component.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactive-validators.d.ts","sourceRoot":"","sources":["../../../core/forms/reactive-validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK3F,qBAAa,aAAa;IACxB,MAAM,CAAC,eAAe,IAAI,WAAW;IA8BrC,MAAM,CAAC,oBAAoB,IAAI,WAAW;IAkC1C,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IA2C9C,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,SAAqB,GAAG,WAAW;IA6B3F,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,SAAqB,GAAG,WAAW;IA6B3F,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE;QAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC/B,GAAG,WAAW;IAyCf,OAAO,CAAC,MAAM,CAAC,YAAY;CAkB5B"}
|
|
1
|
+
{"version":3,"file":"reactive-validators.d.ts","sourceRoot":"","sources":["../../../core/forms/reactive-validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK3F,qBAAa,aAAa;IACxB,MAAM,CAAC,gBAAgB,IAAI,WAAW;IAStC,MAAM,CAAC,eAAe,IAAI,WAAW;IA8BrC,MAAM,CAAC,oBAAoB,IAAI,WAAW;IAkC1C,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IA2C9C,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,SAAqB,GAAG,WAAW;IA6B3F,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,SAAqB,GAAG,WAAW;IA6B3F,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE;QAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC/B,GAAG,WAAW;IAyCf,OAAO,CAAC,MAAM,CAAC,YAAY;CAkB5B"}
|
|
@@ -3,6 +3,14 @@ import { DatapointLibraryValidationErrors } from './validation-pattern';
|
|
|
3
3
|
import { get } from 'lodash-es';
|
|
4
4
|
// @dynamic
|
|
5
5
|
export class C8yValidators {
|
|
6
|
+
static integerValidator() {
|
|
7
|
+
return (control) => {
|
|
8
|
+
if (control.value == null || control.value === '') {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return Number.isInteger(control.value) ? null : { integer: true };
|
|
12
|
+
};
|
|
13
|
+
}
|
|
6
14
|
static minMaxValidator() {
|
|
7
15
|
return (control) => {
|
|
8
16
|
const min = control.get(`min`);
|
|
@@ -195,4 +203,4 @@ export class C8yValidators {
|
|
|
195
203
|
return removedError;
|
|
196
204
|
}
|
|
197
205
|
}
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZm9ybXMvcmVhY3RpdmUtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLFNBQVMsRUFBaUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWhDLFdBQVc7QUFDWCxNQUFNLE9BQU8sYUFBYTtJQUN4QixNQUFNLENBQUMsZUFBZTtRQUNwQixPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtZQUMzRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO1lBQ3hFLE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztZQUV4RSx5QkFBeUI7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFFL0UsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxj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QUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxTQUFTLENBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDOUUsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJy4vdmFsaWRhdGlvbi1wYXR0ZXJuJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQzh5VmFsaWRhdG9ycyB7XG4gIHN0YXRpYyBtaW5NYXhWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgbWluID0gY29udHJvbC5nZXQoYG1pbmApO1xuICAgICAgY29uc3QgbWF4ID0gY29udHJvbC5nZXQoYG1heGApO1xuXG4gICAgICBjb25zdCBtaW5EZWZpbmVkID0gbWluICYmIG1pbi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG1pbi52YWx1ZSAhPT0gbnVsbDtcbiAgICAgIGNvbnN0IG1heERlZmluZWQgPSBtYXggJiYgbWF4LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWF4LnZhbHVlICE9PSBudWxsO1xuXG4gICAgICAvLyByZW1vdmUgcHJldmlvdXMgZXJyb3JzXG4gICAgICB0aGlzLnJlbW92ZUVycm9ycyhtaW4sIFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5HUkVBVEVSX1RIQU5fUkFOR0VfTUFYXSk7XG4gICAgICB0aGlzLnJlbW92ZUVycm9ycyhtYXgsIFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5MRVNTX1RIQU5fUkFOR0VfTUlOXSk7XG5cbiAgICAgIGlmICghbWluRGVmaW5lZCB8fCAhbWF4RGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyBlcnJvcnNcbiAgICAgIGlmIChtaW4udmFsdWUgPj0gbWF4LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1pbkVycm9yID0geyBbRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuR1JFQVRFUl9USEFOX1JBTkdFX01BWF06IHRydWUgfTtcbiAgICAgICAgY29uc3QgbWF4RXJyb3IgPSB7IFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5MRVNTX1RIQU5fUkFOR0VfTUlOXTogdHJ1ZSB9O1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBtaW5FcnJvciwgbWF4RXJyb3IpO1xuICAgICAgICBtaW4uc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24obWluRXJyb3IsIG1pbi5lcnJvcnMgfHwge30pKTtcbiAgICAgICAgbWF4LnNldEVycm9ycyhPYmplY3QuYXNzaWduKG1heEVycm9yLCBtYXguZXJyb3JzIHx8IHt9KSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZUJvdGhNaW5BbmRNYXgoKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQXR0cmlidXRlID0gRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuU0hPVUxEX0JFX0RFRklORUQ7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBtaW4gPSBjb250cm9sLmdldChgbWluYCk7XG4gICAgICBjb25zdCBtYXggPSBjb250cm9sLmdldChgbWF4YCk7XG5cbiAgICAgIGNvbnN0IG1pbkRlZmluZWQgPSBtaW4gJiYgbWluLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWluLnZhbHVlICE9PSBudWxsO1xuICAgICAgY29uc3QgbWF4RGVmaW5lZCA9IG1heCAmJiBtYXgudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBtYXgudmFsdWUgIT09IG51bGw7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuICAgICAgaWYgKG1pbkRlZmluZWQgJiYgIW1heERlZmluZWQgJiYgbWF4KSB7XG4gICAgICAgIC8vIHNldHMgZXJyb3JcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IFtlcnJvckF0dHJpYnV0ZV06IHRydWUgfTtcbiAgICAgICAgbWF4LnNldEVycm9ycyhPYmplY3QuYXNzaWduKHt9LCBtYXguZXJyb3JzIHx8IHt9LCBlcnJvcikpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmVtb3ZlIHByZXZpb3VzIGVycm9yXG4gICAgICAgIHRoaXMucmVtb3ZlRXJyb3JzKG1heCwgW2Vycm9yQXR0cmlidXRlXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhEZWZpbmVkICYmICFtaW5EZWZpbmVkICYmIG1pbikge1xuICAgICAgICAvLyBzZXRzIGVycm9yXG4gICAgICAgIGNvbnN0IGVycm9yID0geyBbZXJyb3JBdHRyaWJ1dGVdOiB0cnVlIH07XG4gICAgICAgIG1pbi5zZXRFcnJvcnMoT2JqZWN0LmFzc2lnbih7fSwgbWluLmVycm9ycyB8fCB7fSwgZXJyb3IpKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91cyBlcnJvclxuICAgICAgICB0aGlzLnJlbW92ZUVycm9ycyhtaW4sIFtlcnJvckF0dHJpYnV0ZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPyBlcnJvcnMgOiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgd2l0aGluU2NhbGUoZmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtaW4gPSBjb250cm9sLmdldChgcmFuZ2UubWluYCk7XG4gICAgICBjb25zdCBtYXggPSBjb250cm9sLmdldChgcmFuZ2UubWF4YCk7XG4gICAgICBjb25zdCBmaWVsZENvbnRyb2wgPSBjb250cm9sLmdldChmaWVsZCk7XG5cbiAgICAgIGNvbnN0IG1pbkRlZmluZWQgPSBtaW4gJiYgbWluLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWluLnZhbHVlICE9PSBudWxsO1xuICAgICAgY29uc3QgbWF4RGVmaW5lZCA9IG1heCAmJiBtYXgudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBtYXgudmFsdWUgIT09IG51bGw7XG4gICAgICBjb25zdCBmaWVsZERlZmluZWQgPVxuICAgICAgICBmaWVsZENvbnRyb2wgJiYgZmllbGRDb250cm9sLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmllbGRDb250cm9sLnZhbHVlICE9PSBudWxsO1xuXG4gICAgICAvLyByZW1vdmUgcHJldmlvdXMgZXJyb3JzXG4gICAgICB0aGlzLnJlbW92ZUVycm9ycyhmaWVsZENvbnRyb2wsIFtcbiAgICAgICAgRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuR1JFQVRFUl9USEFOX1NDQUxFX01BWCxcbiAgICAgICAgRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuTEVTU19USEFOX1NDQUxFX01JTlxuICAgICAgXSk7XG5cbiAgICAgIGlmICghbWluRGVmaW5lZCB8fCAhbWF4RGVmaW5lZCB8fCAhZmllbGREZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvcnMgPSB7fTtcblxuICAgICAgLy8gc2V0cyBlcnJvcnNcbiAgICAgIGlmIChmaWVsZENvbnRyb2wudmFsdWUgPCBtaW4udmFsdWUpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5MRVNTX1RIQU5fU0NBTEVfTUlOXTogdHJ1ZSB9O1xuICAgICAgICBmaWVsZENvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkQ29udHJvbC5lcnJvcnMgfHwge30sIGVycm9yKSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZENvbnRyb2wudmFsdWUgPiBtYXgudmFsdWUpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5HUkVBVEVSX1RIQU5fU0NBTEVfTUFYXTogdHJ1ZSB9O1xuICAgICAgICBmaWVsZENvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkQ29udHJvbC5lcnJvcnMgfHwge30sIGVycm9yKSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA/IGVycm9ycyA6IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtYXhBY3RpdmVDb3VudChtYXhBY3RpdmU6IG51bWJlciwgYWN0aXZlQXR0cmlidXRlID0gJ2RldGFpbHMuX19hY3RpdmUnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heEFjdGl2ZSkgfHwgTnVtYmVyLmlzTmFOKG1heEFjdGl2ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbCBhcyBGb3JtQXJyYXk7XG4gICAgICBjb25zdCB2YWx1ZTogYW55W10gPSBmb3JtQXJyYXkudmFsdWU7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZEFjdGl2ZUVudHJpZXMgPSB2YWx1ZS5maWx0ZXIodG1wID0+IHRtcCAmJiAhIWdldCh0bXAsIGFjdGl2ZUF0dHJpYnV0ZSkpO1xuICAgICAgaWYgKGZpbHRlcmVkQWN0aXZlRW50cmllcy5sZW5ndGggPD0gbWF4QWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuTUFYX0FDVElWRV9DT1VOVF06IHtcbiAgICAgICAgICBtYXhBY3RpdmUsXG4gICAgICAgICAgYWN0dWFsTGVuZ3RoOiBmaWx0ZXJlZEFjdGl2ZUVudHJpZXMubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtaW5BY3RpdmVDb3VudChtaW5BY3RpdmU6IG51bWJlciwgYWN0aXZlQXR0cmlidXRlID0gJ2RldGFpbHMuX19hY3RpdmUnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1pbkFjdGl2ZSkgfHwgTnVtYmVyLmlzTmFOKG1pbkFjdGl2ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbCBhcyBGb3JtQXJyYXk7XG4gICAgICBjb25zdCB2YWx1ZTogYW55W10gPSBmb3JtQXJyYXkudmFsdWU7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZEFjdGl2ZUVudHJpZXMgPSB2YWx1ZS5maWx0ZXIodG1wID0+IHRtcCAmJiAhIWdldCh0bXAsIGFjdGl2ZUF0dHJpYnV0ZSkpO1xuICAgICAgaWYgKGZpbHRlcmVkQWN0aXZlRW50cmllcy5sZW5ndGggPj0gbWluQWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuTUlOX0FDVElWRV9DT1VOVF06IHtcbiAgICAgICAgICBtaW5BY3RpdmUsXG4gICAgICAgICAgYWN0dWFsTGVuZ3RoOiBmaWx0ZXJlZEFjdGl2ZUVudHJpZXMubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmaWxlc1ZhbGlkYXRvcihvcHRpb25zOiB7XG4gICAgbWF4aW11bUZpbGVTaXplSW5LYj86IG51bWJlcjtcbiAgICB0eXBlUHJlZml4Pzogc3RyaW5nO1xuICAgIGFsbG93ZWRGaWxlRW5kaW5ncz86IHN0cmluZ1tdO1xuICB9KTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZmlsZXM6IHsgZmlsZTogRmlsZSB9W10gfCBudWxsID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGlmICghZmlsZXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpbGVPYmogb2YgZmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVPYmouZmlsZTtcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZVByZWZpeCAmJiAhZmlsZS50eXBlLnN0YXJ0c1dpdGgob3B0aW9ucy50eXBlUHJlZml4KSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3cm9uZ0ZpbGVUeXBlOiB7XG4gICAgICAgICAgICAgIHdyb25nRmlsZVR5cGU6IGZpbGUudHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkRmlsZUVuZGluZ3M/Lmxlbmd0aCAmJlxuICAgICAgICAgICFvcHRpb25zLmFsbG93ZWRGaWxlRW5kaW5ncy5zb21lKGVuZGluZyA9PiBmaWxlLm5hbWUuZW5kc1dpdGgoZW5kaW5nKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdyb25nRmlsZUVuZGluZzoge1xuICAgICAgICAgICAgICBhbGxvd2VkRmlsZUVuZGluZ3M6IG9wdGlvbnMuYWxsb3dlZEZpbGVFbmRpbmdzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBvcHRpb25zLm1heGltdW1GaWxlU2l6ZUluS2IgKiAxMDI0KSB7XG4gICAgICAgICAgY29uc3QgYWN0dWFsRmlsZVNpemUgPSBmaWxlLnNpemUgLyAxMDI0O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtYXhGaWxlU2l6ZVJlYWNoZWQ6IHtcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IG9wdGlvbnMubWF4aW11bUZpbGVTaXplSW5LYixcbiAgICAgICAgICAgICAgYWN0dWFsRmlsZVNpemU6IGB+JHthY3R1YWxGaWxlU2l6ZS50b0ZpeGVkKDApfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVtb3ZlRXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZXJyb3JzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5lcnJvcnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlbW92ZWRFcnJvciA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICBpZiAoY29udHJvbC5lcnJvcnNbZXJyb3JdKSB7XG4gICAgICAgIHJlbW92ZWRFcnJvciA9IHRydWU7XG4gICAgICAgIGRlbGV0ZSBjb250cm9sLmVycm9yc1tlcnJvcl07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZW1vdmVkRXJyb3IpIHtcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKFxuICAgICAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykubGVuZ3RoID8gT2JqZWN0LmFzc2lnbih7fSwgY29udHJvbC5lcnJvcnMpIDogbnVsbFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbW92ZWRFcnJvcjtcbiAgfVxufVxuIl19
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZm9ybXMvcmVhY3RpdmUtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLFNBQVMsRUFBaUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWhDLFdBQVc7QUFDWCxNQUFNLE9BQU8sYUFBYTtJQUN4QixNQUFNLENBQUMsZ0JBQWdCO1FBQ3JCLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1lBQzNELElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDbEQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNwRSxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWU7UUFDcEIsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7WUFDM0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRS9CLE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztZQUN4RSxNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7WUFFeEUseUJBQXlCO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBRS9FLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsY0FBYztZQUNkLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNyRixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDbEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNyRCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDekQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLGdDQUFnQyxDQUFDLGlCQUFpQixDQUFDO1FBQzFFLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1lBQzNELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUvQixNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7WUFDeEUsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO1lBRXhFLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLFVBQVUsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDckMsYUFBYTtnQkFDYixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ3pDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFFRCxJQUFJLFVBQVUsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDckMsYUFBYTtnQkFDYixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ3pDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1lBQzNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV4QyxNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7WUFDeEUsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO1lBQ3hFLE1BQU0sWUFBWSxHQUNoQixZQUFZLElBQUksWUFBWSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksWUFBWSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7WUFFbEYseUJBQXlCO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFO2dCQUM5QixnQ0FBZ0MsQ0FBQyxzQkFBc0I7Z0JBQ3ZELGdDQUFnQyxDQUFDLG1CQUFtQjthQUNyRCxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2hELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUVsQixjQUFjO1lBQ2QsSUFBSSxZQUFZLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGdDQUFnQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQy9FLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDNUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUVELElBQUksWUFBWSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNsRixZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzVFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFpQixFQUFFLGVBQWUsR0FBRyxrQkFBa0I7UUFDM0UsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7WUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsT0FBb0IsQ0FBQztZQUN2QyxNQUFNLEtBQUssR0FBVSxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLElBQUkscUJBQXFCLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUM5QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxPQUFPO2dCQUNMLENBQUMsZ0NBQWdDLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtvQkFDbkQsU0FBUztvQkFDVCxZQUFZLEVBQUUscUJBQXFCLENBQUMsTUFBTTtpQkFDM0M7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBaUIsRUFBRSxlQUFlLEdBQUcsa0JBQWtCO1FBQzNFLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDNUQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLE9BQW9CLENBQUM7WUFDdkMsTUFBTSxLQUFLLEdBQVUsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLHFCQUFxQixDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDOUMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsT0FBTztnQkFDTCxDQUFDLGdDQUFnQyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7b0JBQ25ELFNBQVM7b0JBQ1QsWUFBWSxFQUFFLHFCQUFxQixDQUFDLE1BQU07aUJBQzNDO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BSXJCO1FBQ0MsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7WUFDM0QsTUFBTSxLQUFLLEdBQTRCLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDckQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUNwRSxPQUFPO3dCQUNMLGFBQWEsRUFBRTs0QkFDYixhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUk7eUJBQ3pCO3FCQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxJQUNFLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxNQUFNO29CQUNsQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUN0RSxDQUFDO29CQUNELE9BQU87d0JBQ0wsZUFBZSxFQUFFOzRCQUNmLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0I7eUJBQy9DO3FCQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLElBQUksRUFBRSxDQUFDO29CQUNuRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDeEMsT0FBTzt3QkFDTCxrQkFBa0IsRUFBRTs0QkFDbEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7NEJBQ3hDLGNBQWMsRUFBRSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7eUJBQ2hEO3FCQUNGLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQXdCLEVBQUUsTUFBZ0I7UUFDcEUsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsU0FBUyxDQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlFLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICcuL3ZhbGlkYXRpb24tcGF0dGVybic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIEM4eVZhbGlkYXRvcnMge1xuICBzdGF0aWMgaW50ZWdlclZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoY29udHJvbC52YWx1ZSA9PSBudWxsIHx8IGNvbnRyb2wudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBpbnRlZ2VyOiB0cnVlIH07XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtaW5NYXhWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgbWluID0gY29udHJvbC5nZXQoYG1pbmApO1xuICAgICAgY29uc3QgbWF4ID0gY29udHJvbC5nZXQoYG1heGApO1xuXG4gICAgICBjb25zdCBtaW5EZWZpbmVkID0gbWluICYmIG1pbi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG1pbi52YWx1ZSAhPT0gbnVsbDtcbiAgICAgIGNvbnN0IG1heERlZmluZWQgPSBtYXggJiYgbWF4LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWF4LnZhbHVlICE9PSBudWxsO1xuXG4gICAgICAvLyByZW1vdmUgcHJldmlvdXMgZXJyb3JzXG4gICAgICB0aGlzLnJlbW92ZUVycm9ycyhtaW4sIFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5HUkVBVEVSX1RIQU5fUkFOR0VfTUFYXSk7XG4gICAgICB0aGlzLnJlbW92ZUVycm9ycyhtYXgsIFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5MRVNTX1RIQU5fUkFOR0VfTUlOXSk7XG5cbiAgICAgIGlmICghbWluRGVmaW5lZCB8fCAhbWF4RGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyBlcnJvcnNcbiAgICAgIGlmIChtaW4udmFsdWUgPj0gbWF4LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG1pbkVycm9yID0geyBbRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuR1JFQVRFUl9USEFOX1JBTkdFX01BWF06IHRydWUgfTtcbiAgICAgICAgY29uc3QgbWF4RXJyb3IgPSB7IFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5MRVNTX1RIQU5fUkFOR0VfTUlOXTogdHJ1ZSB9O1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBtaW5FcnJvciwgbWF4RXJyb3IpO1xuICAgICAgICBtaW4uc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24obWluRXJyb3IsIG1pbi5lcnJvcnMgfHwge30pKTtcbiAgICAgICAgbWF4LnNldEVycm9ycyhPYmplY3QuYXNzaWduKG1heEVycm9yLCBtYXguZXJyb3JzIHx8IHt9KSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZUJvdGhNaW5BbmRNYXgoKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQXR0cmlidXRlID0gRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuU0hPVUxEX0JFX0RFRklORUQ7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBtaW4gPSBjb250cm9sLmdldChgbWluYCk7XG4gICAgICBjb25zdCBtYXggPSBjb250cm9sLmdldChgbWF4YCk7XG5cbiAgICAgIGNvbnN0IG1pbkRlZmluZWQgPSBtaW4gJiYgbWluLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWluLnZhbHVlICE9PSBudWxsO1xuICAgICAgY29uc3QgbWF4RGVmaW5lZCA9IG1heCAmJiBtYXgudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBtYXgudmFsdWUgIT09IG51bGw7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuICAgICAgaWYgKG1pbkRlZmluZWQgJiYgIW1heERlZmluZWQgJiYgbWF4KSB7XG4gICAgICAgIC8vIHNldHMgZXJyb3JcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IFtlcnJvckF0dHJpYnV0ZV06IHRydWUgfTtcbiAgICAgICAgbWF4LnNldEVycm9ycyhPYmplY3QuYXNzaWduKHt9LCBtYXguZXJyb3JzIHx8IHt9LCBlcnJvcikpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmVtb3ZlIHByZXZpb3VzIGVycm9yXG4gICAgICAgIHRoaXMucmVtb3ZlRXJyb3JzKG1heCwgW2Vycm9yQXR0cmlidXRlXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhEZWZpbmVkICYmICFtaW5EZWZpbmVkICYmIG1pbikge1xuICAgICAgICAvLyBzZXRzIGVycm9yXG4gICAgICAgIGNvbnN0IGVycm9yID0geyBbZXJyb3JBdHRyaWJ1dGVdOiB0cnVlIH07XG4gICAgICAgIG1pbi5zZXRFcnJvcnMoT2JqZWN0LmFzc2lnbih7fSwgbWluLmVycm9ycyB8fCB7fSwgZXJyb3IpKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91cyBlcnJvclxuICAgICAgICB0aGlzLnJlbW92ZUVycm9ycyhtaW4sIFtlcnJvckF0dHJpYnV0ZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPyBlcnJvcnMgOiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgd2l0aGluU2NhbGUoZmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtaW4gPSBjb250cm9sLmdldChgcmFuZ2UubWluYCk7XG4gICAgICBjb25zdCBtYXggPSBjb250cm9sLmdldChgcmFuZ2UubWF4YCk7XG4gICAgICBjb25zdCBmaWVsZENvbnRyb2wgPSBjb250cm9sLmdldChmaWVsZCk7XG5cbiAgICAgIGNvbnN0IG1pbkRlZmluZWQgPSBtaW4gJiYgbWluLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgbWluLnZhbHVlICE9PSBudWxsO1xuICAgICAgY29uc3QgbWF4RGVmaW5lZCA9IG1heCAmJiBtYXgudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBtYXgudmFsdWUgIT09IG51bGw7XG4gICAgICBjb25zdCBmaWVsZERlZmluZWQgPVxuICAgICAgICBmaWVsZENvbnRyb2wgJiYgZmllbGRDb250cm9sLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmllbGRDb250cm9sLnZhbHVlICE9PSBudWxsO1xuXG4gICAgICAvLyByZW1vdmUgcHJldmlvdXMgZXJyb3JzXG4gICAgICB0aGlzLnJlbW92ZUVycm9ycyhmaWVsZENvbnRyb2wsIFtcbiAgICAgICAgRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuR1JFQVRFUl9USEFOX1NDQUxFX01BWCxcbiAgICAgICAgRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuTEVTU19USEFOX1NDQUxFX01JTlxuICAgICAgXSk7XG5cbiAgICAgIGlmICghbWluRGVmaW5lZCB8fCAhbWF4RGVmaW5lZCB8fCAhZmllbGREZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvcnMgPSB7fTtcblxuICAgICAgLy8gc2V0cyBlcnJvcnNcbiAgICAgIGlmIChmaWVsZENvbnRyb2wudmFsdWUgPCBtaW4udmFsdWUpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5MRVNTX1RIQU5fU0NBTEVfTUlOXTogdHJ1ZSB9O1xuICAgICAgICBmaWVsZENvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkQ29udHJvbC5lcnJvcnMgfHwge30sIGVycm9yKSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZENvbnRyb2wudmFsdWUgPiBtYXgudmFsdWUpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IFtEYXRhcG9pbnRMaWJyYXJ5VmFsaWRhdGlvbkVycm9ycy5HUkVBVEVSX1RIQU5fU0NBTEVfTUFYXTogdHJ1ZSB9O1xuICAgICAgICBmaWVsZENvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkQ29udHJvbC5lcnJvcnMgfHwge30sIGVycm9yKSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA/IGVycm9ycyA6IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtYXhBY3RpdmVDb3VudChtYXhBY3RpdmU6IG51bWJlciwgYWN0aXZlQXR0cmlidXRlID0gJ2RldGFpbHMuX19hY3RpdmUnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heEFjdGl2ZSkgfHwgTnVtYmVyLmlzTmFOKG1heEFjdGl2ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbCBhcyBGb3JtQXJyYXk7XG4gICAgICBjb25zdCB2YWx1ZTogYW55W10gPSBmb3JtQXJyYXkudmFsdWU7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZEFjdGl2ZUVudHJpZXMgPSB2YWx1ZS5maWx0ZXIodG1wID0+IHRtcCAmJiAhIWdldCh0bXAsIGFjdGl2ZUF0dHJpYnV0ZSkpO1xuICAgICAgaWYgKGZpbHRlcmVkQWN0aXZlRW50cmllcy5sZW5ndGggPD0gbWF4QWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuTUFYX0FDVElWRV9DT1VOVF06IHtcbiAgICAgICAgICBtYXhBY3RpdmUsXG4gICAgICAgICAgYWN0dWFsTGVuZ3RoOiBmaWx0ZXJlZEFjdGl2ZUVudHJpZXMubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtaW5BY3RpdmVDb3VudChtaW5BY3RpdmU6IG51bWJlciwgYWN0aXZlQXR0cmlidXRlID0gJ2RldGFpbHMuX19hY3RpdmUnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1pbkFjdGl2ZSkgfHwgTnVtYmVyLmlzTmFOKG1pbkFjdGl2ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbCBhcyBGb3JtQXJyYXk7XG4gICAgICBjb25zdCB2YWx1ZTogYW55W10gPSBmb3JtQXJyYXkudmFsdWU7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZEFjdGl2ZUVudHJpZXMgPSB2YWx1ZS5maWx0ZXIodG1wID0+IHRtcCAmJiAhIWdldCh0bXAsIGFjdGl2ZUF0dHJpYnV0ZSkpO1xuICAgICAgaWYgKGZpbHRlcmVkQWN0aXZlRW50cmllcy5sZW5ndGggPj0gbWluQWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbRGF0YXBvaW50TGlicmFyeVZhbGlkYXRpb25FcnJvcnMuTUlOX0FDVElWRV9DT1VOVF06IHtcbiAgICAgICAgICBtaW5BY3RpdmUsXG4gICAgICAgICAgYWN0dWFsTGVuZ3RoOiBmaWx0ZXJlZEFjdGl2ZUVudHJpZXMubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmaWxlc1ZhbGlkYXRvcihvcHRpb25zOiB7XG4gICAgbWF4aW11bUZpbGVTaXplSW5LYj86IG51bWJlcjtcbiAgICB0eXBlUHJlZml4Pzogc3RyaW5nO1xuICAgIGFsbG93ZWRGaWxlRW5kaW5ncz86IHN0cmluZ1tdO1xuICB9KTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZmlsZXM6IHsgZmlsZTogRmlsZSB9W10gfCBudWxsID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGlmICghZmlsZXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpbGVPYmogb2YgZmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVPYmouZmlsZTtcbiAgICAgICAgaWYgKG9wdGlvbnMudHlwZVByZWZpeCAmJiAhZmlsZS50eXBlLnN0YXJ0c1dpdGgob3B0aW9ucy50eXBlUHJlZml4KSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3cm9uZ0ZpbGVUeXBlOiB7XG4gICAgICAgICAgICAgIHdyb25nRmlsZVR5cGU6IGZpbGUudHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkRmlsZUVuZGluZ3M/Lmxlbmd0aCAmJlxuICAgICAgICAgICFvcHRpb25zLmFsbG93ZWRGaWxlRW5kaW5ncy5zb21lKGVuZGluZyA9PiBmaWxlLm5hbWUuZW5kc1dpdGgoZW5kaW5nKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdyb25nRmlsZUVuZGluZzoge1xuICAgICAgICAgICAgICBhbGxvd2VkRmlsZUVuZGluZ3M6IG9wdGlvbnMuYWxsb3dlZEZpbGVFbmRpbmdzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBvcHRpb25zLm1heGltdW1GaWxlU2l6ZUluS2IgKiAxMDI0KSB7XG4gICAgICAgICAgY29uc3QgYWN0dWFsRmlsZVNpemUgPSBmaWxlLnNpemUgLyAxMDI0O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtYXhGaWxlU2l6ZVJlYWNoZWQ6IHtcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IG9wdGlvbnMubWF4aW11bUZpbGVTaXplSW5LYixcbiAgICAgICAgICAgICAgYWN0dWFsRmlsZVNpemU6IGB+JHthY3R1YWxGaWxlU2l6ZS50b0ZpeGVkKDApfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVtb3ZlRXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZXJyb3JzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5lcnJvcnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlbW92ZWRFcnJvciA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICBpZiAoY29udHJvbC5lcnJvcnNbZXJyb3JdKSB7XG4gICAgICAgIHJlbW92ZWRFcnJvciA9IHRydWU7XG4gICAgICAgIGRlbGV0ZSBjb250cm9sLmVycm9yc1tlcnJvcl07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZW1vdmVkRXJyb3IpIHtcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKFxuICAgICAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykubGVuZ3RoID8gT2JqZWN0LmFzc2lnbih7fSwgY29udHJvbC5lcnJvcnMpIDogbnVsbFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbW92ZWRFcnJvcjtcbiAgfVxufVxuIl19
|
|
@@ -35,14 +35,14 @@ export class InfoGaugeWidgetViewComponent {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InfoGaugeWidgetViewComponent, deps: [{ token: i1.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InfoGaugeWidgetViewComponent, isStandalone: true, selector: "c8y-info-gauge-widget-view", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [MeasurementRealtimeService], usesOnChanges: true, ngImport: i0, template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <
|
|
38
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InfoGaugeWidgetViewComponent, isStandalone: true, selector: "c8y-info-gauge-widget-view", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [MeasurementRealtimeService], usesOnChanges: true, ngImport: i0, template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: InfoGaugeCurrentMeasurementPipe, name: "infoGaugeCurrentMeasurement" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }] }); }
|
|
39
39
|
}
|
|
40
40
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InfoGaugeWidgetViewComponent, decorators: [{
|
|
41
41
|
type: Component,
|
|
42
|
-
args: [{ selector: 'c8y-info-gauge-widget-view', host: { class: 'd-contents' }, providers: [MeasurementRealtimeService], standalone: true, imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe], template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <
|
|
42
|
+
args: [{ selector: 'c8y-info-gauge-widget-view', host: { class: 'd-contents' }, providers: [MeasurementRealtimeService], standalone: true, imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe], template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n" }]
|
|
43
43
|
}], ctorParameters: () => [{ type: i1.ContextDashboardComponent, decorators: [{
|
|
44
44
|
type: Optional
|
|
45
45
|
}] }], propDecorators: { config: [{
|
|
46
46
|
type: Input
|
|
47
47
|
}] } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbmZvLWdhdWdlL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcvaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbmZvLWdhdWdlL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcvaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQVVsRixNQUFNLE9BQU8sNEJBQTRCO0lBVXZDLFlBQWdDLFNBQW9DO1FBQXBDLGNBQVMsR0FBVCxTQUFTLENBQTJCO1FBSnBFLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUUzQixpQkFBWSxHQUFHLE9BQU8sQ0FBQztJQUVnRCxDQUFDO0lBRXhFLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDNUYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFFTyxpQ0FBaUMsQ0FBQyxTQUFxQjtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFDeEMsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDN0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzs4R0FyQ1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsK0lBSjVCLENBQUMsMEJBQTBCLENBQUMsK0NDWHpDLHc0SEEySEEsNENEOUdZLElBQUksNkZBQUUsS0FBSyxtSEFBRSxPQUFPLHNFQUFFLCtCQUErQiwrREFBRSxTQUFTLHlDQUFFLFdBQVcsMENBQUUsUUFBUTs7MkZBRXRGLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSw0QkFBNEIsUUFFaEMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQ2xCLENBQUMsMEJBQTBCLENBQUMsY0FDM0IsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUM7OzBCQVlyRixRQUFRO3lDQVRaLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25DaGFuZ2VzLCBJbnB1dCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgS1BJRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7IERhdGVQaXBlLCBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBEZWNpbWFsUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5mb0dhdWdlQ3VycmVudE1lYXN1cmVtZW50UGlwZSB9IGZyb20gJy4uL2N1cnJlbnQtbWVhc3VyZW1lbnQucGlwZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1pbmZvLWdhdWdlLXdpZGdldC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb250ZW50cycgfSxcbiAgcHJvdmlkZXJzOiBbTWVhc3VyZW1lbnRSZWFsdGltZVNlcnZpY2VdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZiwgTmdGb3IsIE5nU3R5bGUsIEluZm9HYXVnZUN1cnJlbnRNZWFzdXJlbWVudFBpcGUsIEFzeW5jUGlwZSwgRGVjaW1hbFBpcGUsIERhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJbmZvR2F1Z2VXaWRnZXRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiB7XG4gICAgZGF0YXBvaW50c0xhYmVscz86IEtQSURldGFpbHNbXTtcbiAgICBkYXRhcG9pbnRzR2F1Z2U6IEtQSURldGFpbHNbXTtcbiAgICBmcmFjdGlvblNpemU6IG51bWJlcjtcbiAgfTtcbiAgYWN0aXZlRGF0YXBvaW50TGFiZWxzID0gW107XG4gIGFjdGl2ZURhdGFwb2ludEdhdWdlOiBLUElEZXRhaWxzO1xuICBmcmFjdGlvblNpemUgPSAnMS4xLTEnO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50KSB7fVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0xhYmVscyAmJiBBcnJheS5pc0FycmF5KHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzTGFiZWxzKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c0xhYmVscy5mb3JFYWNoKGRwID0+IHRoaXMuYXNzaWduQ29udGV4dEZyb21Db250ZXh0RGFzaGJvYXJkKGRwKSk7XG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludExhYmVscyA9IHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzTGFiZWxzLmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzR2F1Z2UgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0dhdWdlKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c0dhdWdlLmZvckVhY2goZHAgPT4gdGhpcy5hc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZHApKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0YXBvaW50R2F1Z2UgPSB0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0dhdWdlLmZpbmQoZHAgPT4gZHAuX19hY3RpdmUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuZnJhY3Rpb25TaXplID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzTmFOKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSkpIHtcbiAgICAgIHRoaXMuZnJhY3Rpb25TaXplID0gYDEuJHt0aGlzLmNvbmZpZy5mcmFjdGlvblNpemV9LSR7dGhpcy5jb25maWcuZnJhY3Rpb25TaXplfWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZGF0YXBvaW50OiBLUElEZXRhaWxzKSB7XG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZD8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmRhc2hib2FyZD8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibGFiZWwtdmFsdWUtdW5pdC1nYXVnZVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJnYXVnZS1sZWdlbmRcIlxuICAgICpuZ0lmPVwiYWN0aXZlRGF0YXBvaW50TGFiZWxzPy5sZW5ndGhcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZHAgb2YgYWN0aXZlRGF0YXBvaW50TGFiZWxzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHAgfCBpbmZvR2F1Z2VDdXJyZW50TWVhc3VyZW1lbnQgfCBhc3luYyBhcyBtZWFzdXJlbWVudFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgZHAubGFiZWwgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZHAubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGgzXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICB0aXRsZT1cInt7IG1lYXN1cmVtZW50LnZhbHVlIHwgbnVtYmVyOiBmcmFjdGlvblNpemUgfX0ge3sgZHAudW5pdCB8fCBtZWFzdXJlbWVudC51bml0IH19XCJcbiAgICAgICAgICAqbmdJZj1cIiFtZWFzdXJlbWVudC5ub3RGb3VuZDsgZWxzZSBub3RGb3VuZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19IHt7IGRwLnVuaXQgfHwgbWVhc3VyZW1lbnQudW5pdCB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kPlxuICAgICAgICAgIDxoMz4tLTwvaDM+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtLWItOFwiPlxuICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgIDxlbT57eyBtZWFzdXJlbWVudC5kYXRlIHwgYzh5RGF0ZTogJ3Nob3J0JyB9fTwvZW0+XG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVEYXRhcG9pbnRHYXVnZVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZ2F1Z2Utc3ZnXCJcbiAgICAgICpuZ0lmPVwiYWN0aXZlRGF0YXBvaW50R2F1Z2UgfCBpbmZvR2F1Z2VDdXJyZW50TWVhc3VyZW1lbnQ6IHRydWUgfCBhc3luYyBhcyBtZWFzdXJlbWVudFwiXG4gICAgPlxuICAgICAgPHN2Z1xuICAgICAgICBoZWlnaHQ9XCIyMTRweFwiXG4gICAgICAgIHdpZHRoPVwiMjE0cHhcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDIxNCAyMTRcIlxuICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICA+XG4gICAgICAgIDxkZXNjPnJhZGlhbCBnYXVnZTwvZGVzYz5cbiAgICAgICAgPGdcbiAgICAgICAgICBpZD1cInNjYWxlXCJcbiAgICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjEsNVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBpZD1cIk92YWxcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiI0NBQ0VDRVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI3XCJcbiAgICAgICAgICAgIGN4PVwiMTA3XCJcbiAgICAgICAgICAgIGN5PVwiMTA3XCJcbiAgICAgICAgICAgIHI9XCIxMDNcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgaWQ9XCJtYXNrXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjIxNFwiXG4gICAgICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgICAgd2lkdGg9XCIyMTRcIlxuICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKC00NSAyOTAgMTgyKVwiXG4gICAgICAgICAgPjwvcmVjdD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGNsYXNzPVwidHJhY2tcIlxuICAgICAgICAgIGQ9XCJNIDEwNyAyNyBhIDgwIDgwIDAgMSAwLjEgMCBaXCJcbiAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoLTEzNSAxMDcgMTA3KVwiXG4gICAgICAgID48L3BhdGg+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgY2xhc3M9XCJ0cmFjay12YWx1ZVwiXG4gICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgc3Ryb2tlOiBtZWFzdXJlbWVudC5jb2xvcixcbiAgICAgICAgICAgICdzdHJva2UtZGFzaG9mZnNldCc6IC1tZWFzdXJlbWVudC5zdHJva2VEYXNoT2Zmc2V0XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgZD1cIk0gMTA3IDI3IGEgODAgODAgMCAxIDAuMSAwIFpcIlxuICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSgtMTM1IDEwNyAxMDcpXCJcbiAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPGZvcmVpZ25PYmplY3RcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgcmVxdWlyZWRGZWF0dXJlcz1cImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBkLWNvbCBmaXQtaCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAzcmVtXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBhY3RpdmVEYXRhcG9pbnRHYXVnZS5sYWJlbCB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGFjdGl2ZURhdGFwb2ludEdhdWdlLmxhYmVsIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBjbGFzcz1cImNlbnRlci12YWx1ZSB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWVhc3VyZW1lbnQubm90Rm91bmQ7IGVsc2Ugbm90Rm91bmRTVkdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kU1ZHPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNlbnRlci12YWx1ZVwiPi0tPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiY2VudGVyLXVuaXQgc3Ryb25nXCI+e3sgYWN0aXZlRGF0YXBvaW50R2F1Z2UudW5pdCB8fCBtZWFzdXJlbWVudC51bml0IH19PC9wPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjZW50ZXItZGF0ZS10aW1lXCI+e3sgbWVhc3VyZW1lbnQuZGF0ZSB8IGM4eURhdGU6ICdzaG9ydCcgfX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbmZvLWdhdWdlL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcvaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9pbmZvLWdhdWdlL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcvaW5mby1nYXVnZS13aWRnZXQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQVVsRixNQUFNLE9BQU8sNEJBQTRCO0lBVXZDLFlBQWdDLFNBQW9DO1FBQXBDLGNBQVMsR0FBVCxTQUFTLENBQTJCO1FBSnBFLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUUzQixpQkFBWSxHQUFHLE9BQU8sQ0FBQztJQUVnRCxDQUFDO0lBRXhFLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNsRixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDNUYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFFTyxpQ0FBaUMsQ0FBQyxTQUFxQjtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFDeEMsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDN0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzs4R0FyQ1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsK0lBSjVCLENBQUMsMEJBQTBCLENBQUMsK0NDWHpDLGlrSUE2SEEsNENEaEhZLElBQUksNkZBQUUsS0FBSyxtSEFBRSxPQUFPLHNFQUFFLCtCQUErQiwrREFBRSxTQUFTLHlDQUFFLFdBQVcsMENBQUUsUUFBUTs7MkZBRXRGLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSw0QkFBNEIsUUFFaEMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQ2xCLENBQUMsMEJBQTBCLENBQUMsY0FDM0IsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUM7OzBCQVlyRixRQUFRO3lDQVRaLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25DaGFuZ2VzLCBJbnB1dCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgS1BJRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7IERhdGVQaXBlLCBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBEZWNpbWFsUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5mb0dhdWdlQ3VycmVudE1lYXN1cmVtZW50UGlwZSB9IGZyb20gJy4uL2N1cnJlbnQtbWVhc3VyZW1lbnQucGlwZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9jb250ZXh0LWRhc2hib2FyZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1pbmZvLWdhdWdlLXdpZGdldC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luZm8tZ2F1Z2Utd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb250ZW50cycgfSxcbiAgcHJvdmlkZXJzOiBbTWVhc3VyZW1lbnRSZWFsdGltZVNlcnZpY2VdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZiwgTmdGb3IsIE5nU3R5bGUsIEluZm9HYXVnZUN1cnJlbnRNZWFzdXJlbWVudFBpcGUsIEFzeW5jUGlwZSwgRGVjaW1hbFBpcGUsIERhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJbmZvR2F1Z2VXaWRnZXRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiB7XG4gICAgZGF0YXBvaW50c0xhYmVscz86IEtQSURldGFpbHNbXTtcbiAgICBkYXRhcG9pbnRzR2F1Z2U6IEtQSURldGFpbHNbXTtcbiAgICBmcmFjdGlvblNpemU6IG51bWJlcjtcbiAgfTtcbiAgYWN0aXZlRGF0YXBvaW50TGFiZWxzID0gW107XG4gIGFjdGl2ZURhdGFwb2ludEdhdWdlOiBLUElEZXRhaWxzO1xuICBmcmFjdGlvblNpemUgPSAnMS4xLTEnO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50KSB7fVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0xhYmVscyAmJiBBcnJheS5pc0FycmF5KHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzTGFiZWxzKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c0xhYmVscy5mb3JFYWNoKGRwID0+IHRoaXMuYXNzaWduQ29udGV4dEZyb21Db250ZXh0RGFzaGJvYXJkKGRwKSk7XG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludExhYmVscyA9IHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzTGFiZWxzLmZpbHRlcihkcCA9PiBkcC5fX2FjdGl2ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5kYXRhcG9pbnRzR2F1Z2UgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0dhdWdlKSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c0dhdWdlLmZvckVhY2goZHAgPT4gdGhpcy5hc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZHApKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0YXBvaW50R2F1Z2UgPSB0aGlzLmNvbmZpZz8uZGF0YXBvaW50c0dhdWdlLmZpbmQoZHAgPT4gZHAuX19hY3RpdmUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuZnJhY3Rpb25TaXplID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzTmFOKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSkpIHtcbiAgICAgIHRoaXMuZnJhY3Rpb25TaXplID0gYDEuJHt0aGlzLmNvbmZpZy5mcmFjdGlvblNpemV9LSR7dGhpcy5jb25maWcuZnJhY3Rpb25TaXplfWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZGF0YXBvaW50OiBLUElEZXRhaWxzKSB7XG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZD8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmRhc2hib2FyZD8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibGFiZWwtdmFsdWUtdW5pdC1nYXVnZVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJnYXVnZS1sZWdlbmRcIlxuICAgICpuZ0lmPVwiYWN0aXZlRGF0YXBvaW50TGFiZWxzPy5sZW5ndGhcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZHAgb2YgYWN0aXZlRGF0YXBvaW50TGFiZWxzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHAgfCBpbmZvR2F1Z2VDdXJyZW50TWVhc3VyZW1lbnQgfCBhc3luYyBhcyBtZWFzdXJlbWVudFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgZHAubGFiZWwgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZHAubGFiZWwgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGgzXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICB0aXRsZT1cInt7IG1lYXN1cmVtZW50LnZhbHVlIHwgbnVtYmVyOiBmcmFjdGlvblNpemUgfX0ge3sgZHAudW5pdCB8fCBtZWFzdXJlbWVudC51bml0IH19XCJcbiAgICAgICAgICAqbmdJZj1cIiFtZWFzdXJlbWVudC5ub3RGb3VuZDsgZWxzZSBub3RGb3VuZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19IHt7IGRwLnVuaXQgfHwgbWVhc3VyZW1lbnQudW5pdCB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kPlxuICAgICAgICAgIDxoMz4tLTwvaDM+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtLWItOFwiPlxuICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgIDxkaXY+e3sgbWVhc3VyZW1lbnQuZGF0ZSB8IGM4eURhdGU6ICdtZWRpdW1EYXRlJyB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdj57eyBtZWFzdXJlbWVudC5kYXRlIHwgYzh5RGF0ZTogJ21lZGl1bVRpbWUnIH19PC9kaXY+XG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVEYXRhcG9pbnRHYXVnZVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZ2F1Z2Utc3ZnXCJcbiAgICAgICpuZ0lmPVwiYWN0aXZlRGF0YXBvaW50R2F1Z2UgfCBpbmZvR2F1Z2VDdXJyZW50TWVhc3VyZW1lbnQ6IHRydWUgfCBhc3luYyBhcyBtZWFzdXJlbWVudFwiXG4gICAgPlxuICAgICAgPHN2Z1xuICAgICAgICBoZWlnaHQ9XCIyMTRweFwiXG4gICAgICAgIHdpZHRoPVwiMjE0cHhcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDIxNCAyMTRcIlxuICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICA+XG4gICAgICAgIDxkZXNjPnJhZGlhbCBnYXVnZTwvZGVzYz5cbiAgICAgICAgPGdcbiAgICAgICAgICBpZD1cInNjYWxlXCJcbiAgICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjEsNVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBpZD1cIk92YWxcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiI0NBQ0VDRVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI3XCJcbiAgICAgICAgICAgIGN4PVwiMTA3XCJcbiAgICAgICAgICAgIGN5PVwiMTA3XCJcbiAgICAgICAgICAgIHI9XCIxMDNcIlxuICAgICAgICAgID48L2NpcmNsZT5cbiAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgaWQ9XCJtYXNrXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjIxNFwiXG4gICAgICAgICAgICBzdHJva2U9XCJub25lXCJcbiAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgICAgd2lkdGg9XCIyMTRcIlxuICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKC00NSAyOTAgMTgyKVwiXG4gICAgICAgICAgPjwvcmVjdD5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGNsYXNzPVwidHJhY2tcIlxuICAgICAgICAgIGQ9XCJNIDEwNyAyNyBhIDgwIDgwIDAgMSAwLjEgMCBaXCJcbiAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoLTEzNSAxMDcgMTA3KVwiXG4gICAgICAgID48L3BhdGg+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgY2xhc3M9XCJ0cmFjay12YWx1ZVwiXG4gICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgc3Ryb2tlOiBtZWFzdXJlbWVudC5jb2xvcixcbiAgICAgICAgICAgICdzdHJva2UtZGFzaG9mZnNldCc6IC1tZWFzdXJlbWVudC5zdHJva2VEYXNoT2Zmc2V0XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgZD1cIk0gMTA3IDI3IGEgODAgODAgMCAxIDAuMSAwIFpcIlxuICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSgtMTM1IDEwNyAxMDcpXCJcbiAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPGZvcmVpZ25PYmplY3RcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgcmVxdWlyZWRGZWF0dXJlcz1cImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBkLWNvbCBmaXQtaCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAzcmVtXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBhY3RpdmVEYXRhcG9pbnRHYXVnZS5sYWJlbCB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGFjdGl2ZURhdGFwb2ludEdhdWdlLmxhYmVsIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBjbGFzcz1cImNlbnRlci12YWx1ZSB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWVhc3VyZW1lbnQubm90Rm91bmQ7IGVsc2Ugbm90Rm91bmRTVkdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBtZWFzdXJlbWVudC52YWx1ZSB8IG51bWJlcjogZnJhY3Rpb25TaXplIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kU1ZHPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNlbnRlci12YWx1ZVwiPi0tPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiY2VudGVyLXVuaXQgc3Ryb25nXCI+e3sgYWN0aXZlRGF0YXBvaW50R2F1Z2UudW5pdCB8fCBtZWFzdXJlbWVudC51bml0IH19PC9wPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlci1kYXRlLXRpbWVcIj57eyBtZWFzdXJlbWVudC5kYXRlIHwgYzh5RGF0ZTogJ21lZGl1bURhdGUnIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyLWRhdGUtdGltZVwiPnt7IG1lYXN1cmVtZW50LmRhdGUgfCBjOHlEYXRlOiAnbWVkaXVtVGltZScgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cbjwvZGl2PlxuIl19
|
package/esm2022/widgets/implementations/kpi/kpi-widget-config/kpi-widget-config.component.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
2
|
import { ControlContainer, FormBuilder, NgForm, Validators } from '@angular/forms';
|
|
3
|
-
import { CoreModule } from '@c8y/ngx-components';
|
|
3
|
+
import { C8yValidators, CoreModule } from '@c8y/ngx-components';
|
|
4
4
|
import { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';
|
|
5
5
|
import { DatapointSelectorModule } from '@c8y/ngx-components/datapoint-selector';
|
|
6
6
|
import { IconSelectorModule } from '@c8y/ngx-components/icon-selector';
|
|
@@ -71,7 +71,8 @@ export class KpiWidgetConfigComponent {
|
|
|
71
71
|
[
|
|
72
72
|
Validators.required,
|
|
73
73
|
Validators.min(this.limits.numberOfDecimalPlacesMin),
|
|
74
|
-
Validators.max(this.limits.numberOfDecimalPlacesMax)
|
|
74
|
+
Validators.max(this.limits.numberOfDecimalPlacesMax),
|
|
75
|
+
C8yValidators.integerValidator()
|
|
75
76
|
]
|
|
76
77
|
],
|
|
77
78
|
showTimestamp: [true, []],
|
|
@@ -102,4 +103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
102
103
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i1.NgForm }, { type: i2.WidgetConfigComponent }], propDecorators: { config: [{
|
|
103
104
|
type: Input
|
|
104
105
|
}] } });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXdpZGdldC1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMva3BpL2twaS13aWRnZXQtY29uZmlnL2twaS13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2twaS9rcGktd2lkZ2V0LWNvbmZpZy9rcGktd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxNQUFNLEVBR04sVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBR0wsdUJBQXVCLEVBRXhCLE1BQU0sd0NBQXdDLENBQUM7QUFHaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQUV0RCxNQUFNLFVBQVUsNkJBQTZCO0lBQzNDLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1FBQzNELE1BQU0sVUFBVSxHQUFpQixPQUFPLENBQUMsS0FBSyxDQUFDO1FBRS9DLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENB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QUFFO2dCQUNGO29CQUNFLFVBQVUsQ0FBQyxRQUFRO29CQUNuQixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO29CQUN2QyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2lCQUN4QzthQUNGO1lBQ0QsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxFQUFjLEVBQUU7Z0JBQzVELFVBQVUsQ0FBQyxRQUFRO2dCQUNuQixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsNkJBQTZCLEVBQUU7YUFDaEMsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7OEdBMUVVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLCtHQ2hEckMsbXJIQWlHQSwyQ0RwRFksVUFBVSw2MERBQUUsdUJBQXVCLHFUQUFFLGtCQUFrQixpTkFBRSxhQUFhLG9WQUNqRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MkZBRXhELHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FFckIsSUFBSSxXQUNQLENBQUMsVUFBVSxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxpQkFDbEUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7eUlBRzFELE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sQ29udGFpbmVyLFxuICBGb3JtQnVpbGRlcixcbiAgTmdGb3JtLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb3JlTW9kdWxlLCBPbkJlZm9yZVNhdmUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFdpZGdldENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvY29udGV4dC1kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWcsXG4gIERhdGFwb2ludFNlbGVjdG9yTW9kYWxPcHRpb25zLFxuICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgS1BJRGV0YWlsc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLcGlXaWRnZXRDb25maWcgfSBmcm9tICcuLi9rcGktd2lkZ2V0Lm1vZGVsJztcbmltcG9ydCB7IEljb25TZWxlY3Rvck1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaWNvbi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0bHlBU2luZ2xlRGF0YXBvaW50QWN0aXZlKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgZGF0YXBvaW50czogS1BJRGV0YWlsc1tdID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghZGF0YXBvaW50cyB8fCAhZGF0YXBvaW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZURhdGFwb2ludHMgPSBkYXRhcG9pbnRzLmZpbHRlcihkYXRhcG9pbnQgPT4gZGF0YXBvaW50Ll9fYWN0aXZlKTtcblxuICAgIGlmIChhY3RpdmVEYXRhcG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZXhhY3RseU9uZURhdGFwb2ludE5lZWRzVG9CZUFjdGl2ZTogdHJ1ZSB9O1xuICB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHkta3BpLXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4va3BpLXdpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsIEljb25TZWxlY3Rvck1vZHVsZSwgUG9wb3Zlck1vZHVsZV0sXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgS3BpV2lkZ2V0Q29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkJlZm9yZVNhdmUge1xuICBASW5wdXQoKSBjb25maWc6IEtwaVdpZGdldENvbmZpZztcbiAgZGF0YXBvaW50U2VsZWN0aW9uQ29uZmlnOiBQYXJ0aWFsPERhdGFwb2ludFNlbGVjdG9yTW9kYWxPcHRpb25zPiA9IHt9O1xuICBkZWZhdWx0Rm9ybU9wdGlvbnM6IFBhcnRpYWw8RGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWc+ID0ge1xuICAgIHNob3dSZWRSYW5nZTogdHJ1ZSxcbiAgICBzaG93WWVsbG93UmFuZ2U6IHRydWVcbiAgfTtcbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPEtwaVdpZGdldENvbmZpZ0NvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgYXZhaWxhYmxlSWNvbnM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbGltaXRzID0ge1xuICAgIGZvbnRTaXplTWF4OiA3MixcbiAgICBmb250U2l6ZU1pbjogMTgsXG4gICAgbnVtYmVyT2ZEZWNpbWFsUGxhY2VzTWF4OiAxMCxcbiAgICBudW1iZXJPZkRlY2ltYWxQbGFjZXNNaW46IDBcbiAgfSBhcyBjb25zdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGZvcm06IE5nRm9ybSxcbiAgICBwcml2YXRlIHdpZGdldENvbmZpZzogV2lkZ2V0Q29uZmlnQ29tcG9uZW50XG4gICkge31cblxuICBvbkJlZm9yZVNhdmUoY29uZmlnPzogS3BpV2lkZ2V0Q29uZmlnKTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLmNvbnRleHQ/LmlkKSB7XG4gICAgICB0aGlzLmRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZy5jb250ZXh0QXNzZXQgPSB0aGlzLndpZGdldENvbmZpZz8uY29udGV4dDtcbiAgICB9XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIGlmICh0aGlzLmNvbmZpZz8uZGF0YXBvaW50cykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IGRhdGFwb2ludHM6IHRoaXMuY29uZmlnLmRhdGFwb2ludHMgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIHRoaXMuZm9ybS5mb3JtLmFkZENvbnRyb2woJ2NvbmZpZycsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBudW1iZXJPZkRlY2ltYWxQbGFjZXM6IFtcbiAgICAgICAgMSxcbiAgICAgICAgW1xuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW4odGhpcy5saW1pdHMubnVtYmVyT2ZEZWNpbWFsUGxhY2VzTWluKSxcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLmxpbWl0cy5udW1iZXJPZkRlY2ltYWxQbGFjZXNNYXgpXG4gICAgICAgIF1cbiAgICAgIF0sXG4gICAgICBzaG93VGltZXN0YW1wOiBbdHJ1ZSwgW11dLFxuICAgICAgc2hvd1RyZW5kOiBbdHJ1ZSwgW11dLFxuICAgICAgc2hvd0ljb246IFt0cnVlLCBbXV0sXG4gICAgICBpY29uOiBbJ3dhdGVyJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpXV0sXG4gICAgICBmb250U2l6ZTogW1xuICAgICAgICAzNixcbiAgICAgICAgW1xuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW4odGhpcy5saW1pdHMuZm9udFNpemVNaW4pLFxuICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMubGltaXRzLmZvbnRTaXplTWF4KVxuICAgICAgICBdXG4gICAgICBdLFxuICAgICAgZGF0YXBvaW50czogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG5ldyBBcnJheTxLUElEZXRhaWxzPigpLCBbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxuICAgICAgICBleGFjdGx5QVNpbmdsZURhdGFwb2ludEFjdGl2ZSgpXG4gICAgICBdKVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1sLTI0IHAtci0yNFwiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIGNsYXNzPVwicm93IG5vLWNhcmQtY29udGV4dFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiBiZy1sZXZlbC0wXCI+XG4gICAgICA8Yzh5LWRhdGFwb2ludC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICBbZGVmYXVsdEZvcm1PcHRpb25zXT1cImRlZmF1bHRGb3JtT3B0aW9uc1wiXG4gICAgICAgIFtjb25maWddPVwiZGF0YXBvaW50U2VsZWN0aW9uQ29uZmlnXCJcbiAgICAgICAgW21pbkFjdGl2ZUNvdW50XT1cIjFcIlxuICAgICAgICBbbWF4QWN0aXZlQ291bnRdPVwiMVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRhdGFwb2ludHNcIlxuICAgICAgICBuYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgIGNsYXNzPVwiYmctaW5oZXJpdFwiXG4gICAgICA+PC9jOHktZGF0YXBvaW50LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBoNFwiPnt7ICdMYXlvdXQnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGU+SWNvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgPGM4eS1pY29uLXNlbGVjdG9yLXdyYXBwZXIgbmFtZT1cImljb25cIiBmb3JtQ29udHJvbE5hbWU9XCJpY29uXCI+PC9jOHktaWNvbi1zZWxlY3Rvci13cmFwcGVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiJ051bWJlciBvZiBkZWNpbWFsIHBsYWNlcycgfCB0cmFuc2xhdGVcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgTnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJudW1iZXJPZkRlY2ltYWxQbGFjZXNcIlxuICAgICAgICAgIG5hbWU9XCJudW1iZXJPZkRlY2ltYWxQbGFjZXNcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAxIH1cIlxuICAgICAgICAvPlxuICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgW3Nob3ddPVwiXG4gICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHM/Lm51bWJlck9mRGVjaW1hbFBsYWNlcz8udG91Y2hlZCAmJlxuICAgICAgICAgICAgZm9ybUdyb3VwPy5jb250cm9scz8ubnVtYmVyT2ZEZWNpbWFsUGxhY2VzPy5lcnJvcnNcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsPnt7ICdEaXNwbGF5JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTE2IGZsZXgtd3JhcFwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiJ1Nob3cgdGltZXN0YW1wJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJzaG93VGltZXN0YW1wXCIgbmFtZT1cInNob3dUaW1lc3RhbXBcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IHRpbWVzdGFtcDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiJ1Nob3cgaWNvbicgfCB0cmFuc2xhdGVcIiBjbGFzcz1cImM4eS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZm9ybUNvbnRyb2xOYW1lPVwic2hvd0ljb25cIiBuYW1lPVwic2hvd0ljb25cIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IGljb248L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cIidTaG93IHRyZW5kIGljb24nIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJjOHktY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cInNob3dUcmVuZFwiIG5hbWU9XCJzaG93VHJlbmRcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IHRyZW5kIGljb248L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHBvcG92ZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgJ0luZGljYXRlcyB0aGUgdHJlbmQgYmV0d2VlbiB0aGUgbGFzdCB0d28gbWVhc3VyZW1lbnQgdmFsdWVzLicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cIidGb250IHNpemUgb2YgbWVhc3VyZW1lbnQgdmFsdWUgKHB4KScgfCB0cmFuc2xhdGVcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBGb250IHNpemUgb2YgbWVhc3VyZW1lbnQgdmFsdWUgKHB4KVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb250U2l6ZVwiXG4gICAgICAgICAgICBuYW1lPVwiZm9udFNpemVcIlxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogMzYgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICBbc2hvd109XCJmb3JtR3JvdXAuY29udHJvbHM/LmZvbnRTaXplPy50b3VjaGVkICYmIGZvcm1Hcm91cD8uY29udHJvbHM/LmZvbnRTaXplPy5lcnJvcnNcIlxuICAgICAgICAgID48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXdpZGdldC1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMva3BpL2twaS13aWRnZXQtY29uZmlnL2twaS13aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2twaS9rcGktd2lkZ2V0LWNvbmZpZy9rcGktd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxNQUFNLEVBR04sVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUdMLHVCQUF1QixFQUV4QixNQUFNLHdDQUF3QyxDQUFDO0FBR2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFFdEQsTUFBTSxVQUFVLDZCQUE2QjtJQUMzQyxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxNQUFNLFVBQVUsR0FBaUIsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUUvQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENB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LENBQUMsQ0FBQyxDQUFDO1lBQy9ELFFBQVEsRUFBRTtnQkFDUixFQUFFO2dCQUNGO29CQUNFLFVBQVUsQ0FBQyxRQUFRO29CQUNuQixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO29CQUN2QyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2lCQUN4QzthQUNGO1lBQ0QsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxFQUFjLEVBQUU7Z0JBQzVELFVBQVUsQ0FBQyxRQUFRO2dCQUNuQixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsNkJBQTZCLEVBQUU7YUFDaEMsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7OEdBM0VVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLCtHQ2hEckMsbXJIQWlHQSwyQ0RwRFksVUFBVSw2MERBQUUsdUJBQXVCLHFUQUFFLGtCQUFrQixpTkFBRSxhQUFhLG9WQUNqRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MkZBRXhELHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FFckIsSUFBSSxXQUNQLENBQUMsVUFBVSxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxpQkFDbEUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7eUlBRzFELE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sQ29udGFpbmVyLFxuICBGb3JtQnVpbGRlcixcbiAgTmdGb3JtLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDOHlWYWxpZGF0b3JzLCBDb3JlTW9kdWxlLCBPbkJlZm9yZVNhdmUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFdpZGdldENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvY29udGV4dC1kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWcsXG4gIERhdGFwb2ludFNlbGVjdG9yTW9kYWxPcHRpb25zLFxuICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgS1BJRGV0YWlsc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLcGlXaWRnZXRDb25maWcgfSBmcm9tICcuLi9rcGktd2lkZ2V0Lm1vZGVsJztcbmltcG9ydCB7IEljb25TZWxlY3Rvck1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaWNvbi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0bHlBU2luZ2xlRGF0YXBvaW50QWN0aXZlKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgZGF0YXBvaW50czogS1BJRGV0YWlsc1tdID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghZGF0YXBvaW50cyB8fCAhZGF0YXBvaW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZURhdGFwb2ludHMgPSBkYXRhcG9pbnRzLmZpbHRlcihkYXRhcG9pbnQgPT4gZGF0YXBvaW50Ll9fYWN0aXZlKTtcblxuICAgIGlmIChhY3RpdmVEYXRhcG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZXhhY3RseU9uZURhdGFwb2ludE5lZWRzVG9CZUFjdGl2ZTogdHJ1ZSB9O1xuICB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHkta3BpLXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4va3BpLXdpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsIEljb25TZWxlY3Rvck1vZHVsZSwgUG9wb3Zlck1vZHVsZV0sXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgS3BpV2lkZ2V0Q29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkJlZm9yZVNhdmUge1xuICBASW5wdXQoKSBjb25maWc6IEtwaVdpZGdldENvbmZpZztcbiAgZGF0YXBvaW50U2VsZWN0aW9uQ29uZmlnOiBQYXJ0aWFsPERhdGFwb2ludFNlbGVjdG9yTW9kYWxPcHRpb25zPiA9IHt9O1xuICBkZWZhdWx0Rm9ybU9wdGlvbnM6IFBhcnRpYWw8RGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWc+ID0ge1xuICAgIHNob3dSZWRSYW5nZTogdHJ1ZSxcbiAgICBzaG93WWVsbG93UmFuZ2U6IHRydWVcbiAgfTtcbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPEtwaVdpZGdldENvbmZpZ0NvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgYXZhaWxhYmxlSWNvbnM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbGltaXRzID0ge1xuICAgIGZvbnRTaXplTWF4OiA3MixcbiAgICBmb250U2l6ZU1pbjogMTgsXG4gICAgbnVtYmVyT2ZEZWNpbWFsUGxhY2VzTWF4OiAxMCxcbiAgICBudW1iZXJPZkRlY2ltYWxQbGFjZXNNaW46IDBcbiAgfSBhcyBjb25zdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGZvcm06IE5nRm9ybSxcbiAgICBwcml2YXRlIHdpZGdldENvbmZpZzogV2lkZ2V0Q29uZmlnQ29tcG9uZW50XG4gICkge31cblxuICBvbkJlZm9yZVNhdmUoY29uZmlnPzogS3BpV2lkZ2V0Q29uZmlnKTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLmNvbnRleHQ/LmlkKSB7XG4gICAgICB0aGlzLmRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZy5jb250ZXh0QXNzZXQgPSB0aGlzLndpZGdldENvbmZpZz8uY29udGV4dDtcbiAgICB9XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIGlmICh0aGlzLmNvbmZpZz8uZGF0YXBvaW50cykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IGRhdGFwb2ludHM6IHRoaXMuY29uZmlnLmRhdGFwb2ludHMgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIHRoaXMuZm9ybS5mb3JtLmFkZENvbnRyb2woJ2NvbmZpZycsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBudW1iZXJPZkRlY2ltYWxQbGFjZXM6IFtcbiAgICAgICAgMSxcbiAgICAgICAgW1xuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW4odGhpcy5saW1pdHMubnVtYmVyT2ZEZWNpbWFsUGxhY2VzTWluKSxcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLmxpbWl0cy5udW1iZXJPZkRlY2ltYWxQbGFjZXNNYXgpLFxuICAgICAgICAgIEM4eVZhbGlkYXRvcnMuaW50ZWdlclZhbGlkYXRvcigpXG4gICAgICAgIF1cbiAgICAgIF0sXG4gICAgICBzaG93VGltZXN0YW1wOiBbdHJ1ZSwgW11dLFxuICAgICAgc2hvd1RyZW5kOiBbdHJ1ZSwgW11dLFxuICAgICAgc2hvd0ljb246IFt0cnVlLCBbXV0sXG4gICAgICBpY29uOiBbJ3dhdGVyJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpXV0sXG4gICAgICBmb250U2l6ZTogW1xuICAgICAgICAzNixcbiAgICAgICAgW1xuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW4odGhpcy5saW1pdHMuZm9udFNpemVNaW4pLFxuICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMubGltaXRzLmZvbnRTaXplTWF4KVxuICAgICAgICBdXG4gICAgICBdLFxuICAgICAgZGF0YXBvaW50czogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG5ldyBBcnJheTxLUElEZXRhaWxzPigpLCBbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxuICAgICAgICBleGFjdGx5QVNpbmdsZURhdGFwb2ludEFjdGl2ZSgpXG4gICAgICBdKVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1sLTI0IHAtci0yNFwiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIGNsYXNzPVwicm93IG5vLWNhcmQtY29udGV4dFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiBiZy1sZXZlbC0wXCI+XG4gICAgICA8Yzh5LWRhdGFwb2ludC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICBbZGVmYXVsdEZvcm1PcHRpb25zXT1cImRlZmF1bHRGb3JtT3B0aW9uc1wiXG4gICAgICAgIFtjb25maWddPVwiZGF0YXBvaW50U2VsZWN0aW9uQ29uZmlnXCJcbiAgICAgICAgW21pbkFjdGl2ZUNvdW50XT1cIjFcIlxuICAgICAgICBbbWF4QWN0aXZlQ291bnRdPVwiMVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRhdGFwb2ludHNcIlxuICAgICAgICBuYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgIGNsYXNzPVwiYmctaW5oZXJpdFwiXG4gICAgICA+PC9jOHktZGF0YXBvaW50LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBoNFwiPnt7ICdMYXlvdXQnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGU+SWNvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgPGM4eS1pY29uLXNlbGVjdG9yLXdyYXBwZXIgbmFtZT1cImljb25cIiBmb3JtQ29udHJvbE5hbWU9XCJpY29uXCI+PC9jOHktaWNvbi1zZWxlY3Rvci13cmFwcGVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiJ051bWJlciBvZiBkZWNpbWFsIHBsYWNlcycgfCB0cmFuc2xhdGVcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgTnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJudW1iZXJPZkRlY2ltYWxQbGFjZXNcIlxuICAgICAgICAgIG5hbWU9XCJudW1iZXJPZkRlY2ltYWxQbGFjZXNcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAxIH1cIlxuICAgICAgICAvPlxuICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgW3Nob3ddPVwiXG4gICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHM/Lm51bWJlck9mRGVjaW1hbFBsYWNlcz8udG91Y2hlZCAmJlxuICAgICAgICAgICAgZm9ybUdyb3VwPy5jb250cm9scz8ubnVtYmVyT2ZEZWNpbWFsUGxhY2VzPy5lcnJvcnNcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsPnt7ICdEaXNwbGF5JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTE2IGZsZXgtd3JhcFwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiJ1Nob3cgdGltZXN0YW1wJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJzaG93VGltZXN0YW1wXCIgbmFtZT1cInNob3dUaW1lc3RhbXBcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IHRpbWVzdGFtcDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiJ1Nob3cgaWNvbicgfCB0cmFuc2xhdGVcIiBjbGFzcz1cImM4eS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZm9ybUNvbnRyb2xOYW1lPVwic2hvd0ljb25cIiBuYW1lPVwic2hvd0ljb25cIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IGljb248L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cIidTaG93IHRyZW5kIGljb24nIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJjOHktY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cInNob3dUcmVuZFwiIG5hbWU9XCJzaG93VHJlbmRcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TaG93IHRyZW5kIGljb248L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHBvcG92ZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgJ0luZGljYXRlcyB0aGUgdHJlbmQgYmV0d2VlbiB0aGUgbGFzdCB0d28gbWVhc3VyZW1lbnQgdmFsdWVzLicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cIidGb250IHNpemUgb2YgbWVhc3VyZW1lbnQgdmFsdWUgKHB4KScgfCB0cmFuc2xhdGVcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBGb250IHNpemUgb2YgbWVhc3VyZW1lbnQgdmFsdWUgKHB4KVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb250U2l6ZVwiXG4gICAgICAgICAgICBuYW1lPVwiZm9udFNpemVcIlxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogMzYgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICBbc2hvd109XCJmb3JtR3JvdXAuY29udHJvbHM/LmZvbnRTaXplPy50b3VjaGVkICYmIGZvcm1Hcm91cD8uY29udHJvbHM/LmZvbnRTaXplPy5lcnJvcnNcIlxuICAgICAgICAgID48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -113,11 +113,11 @@ class InfoGaugeWidgetViewComponent {
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InfoGaugeWidgetViewComponent, deps: [{ token: i1.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
116
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InfoGaugeWidgetViewComponent, isStandalone: true, selector: "c8y-info-gauge-widget-view", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [MeasurementRealtimeService], usesOnChanges: true, ngImport: i0, template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <
|
|
116
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InfoGaugeWidgetViewComponent, isStandalone: true, selector: "c8y-info-gauge-widget-view", inputs: { config: "config" }, host: { classAttribute: "d-contents" }, providers: [MeasurementRealtimeService], usesOnChanges: true, ngImport: i0, template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: InfoGaugeCurrentMeasurementPipe, name: "infoGaugeCurrentMeasurement" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }] }); }
|
|
117
117
|
}
|
|
118
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InfoGaugeWidgetViewComponent, decorators: [{
|
|
119
119
|
type: Component,
|
|
120
|
-
args: [{ selector: 'c8y-info-gauge-widget-view', host: { class: 'd-contents' }, providers: [MeasurementRealtimeService], standalone: true, imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe], template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <
|
|
120
|
+
args: [{ selector: 'c8y-info-gauge-widget-view', host: { class: 'd-contents' }, providers: [MeasurementRealtimeService], standalone: true, imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe], template: "<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n" }]
|
|
121
121
|
}], ctorParameters: () => [{ type: i1.ContextDashboardComponent, decorators: [{
|
|
122
122
|
type: Optional
|
|
123
123
|
}] }], propDecorators: { config: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-widgets-implementations-info-gauge.mjs","sources":["../../widgets/implementations/info-gauge/current-measurement.pipe.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.html","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.html","../../widgets/implementations/info-gauge/info-gauge-widget.module.ts","../../widgets/implementations/info-gauge/c8y-ngx-components-widgets-implementations-info-gauge.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { AlertService, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { IMeasurementValue } from '@c8y/client';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nconst INFO_GAUGE_COLORS = {\n GREEN: 'var(--c8y-brand-50)',\n YELLOW: 'var(--c8y-palette-status-warning)',\n RED: 'var(--c8y-palette-status-danger)'\n} as const;\n\n@Pipe({\n name: 'infoGaugeCurrentMeasurement',\n pure: true,\n standalone: true\n})\nexport class InfoGaugeCurrentMeasurementPipe implements PipeTransform {\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n private alert: AlertService\n ) {}\n transform(\n datapoint: KPIDetails,\n calculateGauge?: false\n ): Observable<{ date: string; value: number; unit: string; notFound?: boolean }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: true\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset: number;\n notFound?: boolean;\n }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: boolean\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color?: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset?: number;\n notFound?: boolean;\n }> {\n return this.measurementRealtime\n .latestValueOfSpecificMeasurement$(\n datapoint.fragment,\n datapoint.series,\n datapoint.__target,\n 1,\n true\n )\n .pipe(\n map(m => {\n // in case measurement is not stored in DB when initially requested.\n if (!m) {\n return { value: Number.NaN, date: '', unit: datapoint.unit || '', notFound: true };\n }\n const measurementValue: IMeasurementValue = m[datapoint.fragment][datapoint.series];\n const data = {\n value: measurementValue.value,\n unit: measurementValue.unit || datapoint.unit,\n date: m.time\n };\n if (!calculateGauge) {\n return data;\n }\n const gauge = this.calculateGauge(datapoint, measurementValue.value);\n return { ...data, ...gauge };\n }),\n catchError(e => {\n this.alert.addServerFailure(e);\n\n return of({ value: Number.NaN, date: '', unit: '' });\n })\n );\n }\n\n private calculateGauge(datapoint: KPIDetails, value: number) {\n const val = value;\n const min = Number(datapoint.min || 0);\n const max = Number(datapoint.max || 0);\n const yMin = Number(datapoint.yellowRangeMin);\n const yMax = Number(datapoint.yellowRangeMax);\n const rMin = Number(datapoint.redRangeMin);\n const rMax = Number(datapoint.redRangeMax);\n\n // Previously d3 was used for linear scale: d3.scale.linear().domain([min, max]).range([0, 100]);\n // wanted to avoid importing d3 just for this.\n const scale = (value1: number) => (value1 - min) / ((max - min) / 100);\n\n const strokeDashOffset = 125.75 + (377.25 - (scale(val) / 100) * 377.25);\n let color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS] = INFO_GAUGE_COLORS.GREEN;\n\n if (Number.isFinite(yMin) && Number.isFinite(yMax)) {\n if (val >= yMin && val <= yMax) {\n color = INFO_GAUGE_COLORS.YELLOW;\n }\n }\n\n if (Number.isFinite(rMin) && Number.isFinite(rMax)) {\n if (val >= rMin && val <= rMax) {\n color = INFO_GAUGE_COLORS.RED;\n }\n }\n\n return { color, strokeDashOffset };\n }\n}\n","import { Component, OnChanges, Input, Optional } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatePipe, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { AsyncPipe, DecimalPipe, NgFor, NgIf, NgStyle } from '@angular/common';\nimport { InfoGaugeCurrentMeasurementPipe } from '../current-measurement.pipe';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\n\n@Component({\n selector: 'c8y-info-gauge-widget-view',\n templateUrl: './info-gauge-widget-view.component.html',\n host: { class: 'd-contents' },\n providers: [MeasurementRealtimeService],\n standalone: true,\n imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe]\n})\nexport class InfoGaugeWidgetViewComponent implements OnChanges {\n @Input() config: {\n datapointsLabels?: KPIDetails[];\n datapointsGauge: KPIDetails[];\n fractionSize: number;\n };\n activeDatapointLabels = [];\n activeDatapointGauge: KPIDetails;\n fractionSize = '1.1-1';\n\n constructor(@Optional() private dashboard: ContextDashboardComponent) {}\n\n ngOnChanges(): void {\n if (this.config?.datapointsLabels && Array.isArray(this.config?.datapointsLabels)) {\n this.config.datapointsLabels.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointLabels = this.config?.datapointsLabels.filter(dp => dp.__active);\n }\n\n if (this.config?.datapointsGauge && Array.isArray(this.config?.datapointsGauge)) {\n this.config.datapointsGauge.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointGauge = this.config?.datapointsGauge.find(dp => dp.__active);\n }\n\n if (typeof this.config.fractionSize === 'number' && !Number.isNaN(this.config.fractionSize)) {\n this.fractionSize = `1.${this.config.fractionSize}-${this.config.fractionSize}`;\n }\n }\n\n private assignContextFromContextDashboard(datapoint: KPIDetails) {\n if (!this.dashboard?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.dashboard?.context;\n if (context?.id) {\n const { name, id } = context;\n datapoint.__target = { name, id };\n }\n }\n}\n","<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <em>{{ measurement.date | c8yDate: 'short' }}</em>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <p class=\"center-date-time\">{{ measurement.date | c8yDate: 'short' }}</p>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n","import { Component, OnInit, Input } from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n DatapointSelectorModule,\n type DatapointAttributesFormConfig,\n type DatapointSelectorModalOptions,\n type KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';\nimport { CoreModule, OnBeforeSave } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\n\nfunction ensureAtLeastOneDatapointSelectedAndActive(\n datapointListAttributes: string[]\n): ValidatorFn {\n return (control: AbstractControl) => {\n const formValue = control.value;\n for (const listAttributeName of datapointListAttributes) {\n const valueForList: KPIDetails[] = formValue[listAttributeName];\n if (!valueForList || !Array.isArray(valueForList)) {\n continue;\n }\n\n if (valueForList.find(dp => dp.__active)) {\n return null;\n }\n }\n return { noActiveDatapoint: true };\n };\n}\n\n@Component({\n selector: 'c8y-info-gauge-widget-config',\n templateUrl: './info-gauge-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [CoreModule, ReactiveFormsModule, DatapointSelectorModule]\n})\nexport class InfoGaugeWidgetConfigComponent implements OnInit, OnBeforeSave {\n @Input() config: {\n datapointsLabels?: KPIDetails[];\n datapointsGauge: KPIDetails[];\n fractionSize: number;\n };\n formGroup: ReturnType<InfoGaugeWidgetConfigComponent['createForm']>;\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n defaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRedRange: true,\n showYellowRange: true,\n showRange: true\n };\n private limits = {\n numberOfDecimalPlacesMax: 10,\n numberOfDecimalPlacesMin: 0\n } as const;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm,\n private widgetConfig: WidgetConfigComponent\n ) {}\n\n onBeforeSave(\n config?: InfoGaugeWidgetConfigComponent['config']\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n return true;\n }\n return false;\n }\n\n ngOnInit() {\n if (this.widgetConfig.context?.id) {\n this.datapointSelectionConfig.contextAsset = this.widgetConfig?.context;\n }\n this.initForm();\n if (this.config?.datapointsLabels) {\n this.formGroup.patchValue({ datapointsLabels: this.config.datapointsLabels });\n }\n if (this.config?.datapointsGauge) {\n this.formGroup.patchValue({ datapointsGauge: this.config.datapointsGauge });\n }\n if (typeof this.config?.fractionSize === 'number' && !Number.isNaN(this.config?.fractionSize)) {\n this.formGroup.patchValue({ fractionSize: this.config.fractionSize });\n }\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group(\n {\n fractionSize: [\n 1,\n [\n Validators.required,\n Validators.min(this.limits.numberOfDecimalPlacesMin),\n Validators.max(this.limits.numberOfDecimalPlacesMax)\n ]\n ],\n datapointsLabels: this.formBuilder.control(new Array<KPIDetails>(), []),\n datapointsGauge: this.formBuilder.control(new Array<KPIDetails>(), [])\n },\n {\n validators: [\n ensureAtLeastOneDatapointSelectedAndActive(['datapointsLabels', 'datapointsGauge'])\n ]\n }\n );\n }\n}\n","<div class=\"p-l-24 p-r-24\">\n <form\n class=\"no-card-context\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"p-t-8\">\n <label translate>Decimal places</label>\n <input\n class=\"form-control\"\n name=\"fractionSize\"\n type=\"number\"\n formControlName=\"fractionSize\"\n step=\"1\"\n />\n <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6 p-t-8\">\n <div\n class=\"alert alert-info\"\n role=\"alert\"\n *ngIf=\"formGroup.errors?.noActiveDatapoint\"\n translate\n >\n At least one data point for the labels or the gauge needs to be selected.\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Multiple label and value pairs' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n formControlName=\"datapointsLabels\"\n ></c8y-datapoint-selection-list>\n </div>\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Gauge`display`' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n [maxActiveCount]=\"1\"\n formControlName=\"datapointsGauge\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n </form>\n</div>\n","import { NgModule } from '@angular/core';\nimport { InfoGaugeWidgetViewComponent } from './info-gauge-widget-view/info-gauge-widget-view.component';\nimport { InfoGaugeWidgetConfigComponent } from './info-gauge-widget-config/info-gauge-widget-config.component';\nimport { InfoGaugeCurrentMeasurementPipe } from './current-measurement.pipe';\n\n/**\n * @deprecated\n */\n@NgModule({\n imports: [\n InfoGaugeWidgetViewComponent,\n InfoGaugeWidgetConfigComponent,\n InfoGaugeCurrentMeasurementPipe\n ]\n})\nexport class InfoGaugeWidgetModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-widgets-implementations-info-gauge.mjs","sources":["../../widgets/implementations/info-gauge/current-measurement.pipe.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.html","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.ts","../../widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.html","../../widgets/implementations/info-gauge/info-gauge-widget.module.ts","../../widgets/implementations/info-gauge/c8y-ngx-components-widgets-implementations-info-gauge.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { AlertService, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { IMeasurementValue } from '@c8y/client';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nconst INFO_GAUGE_COLORS = {\n GREEN: 'var(--c8y-brand-50)',\n YELLOW: 'var(--c8y-palette-status-warning)',\n RED: 'var(--c8y-palette-status-danger)'\n} as const;\n\n@Pipe({\n name: 'infoGaugeCurrentMeasurement',\n pure: true,\n standalone: true\n})\nexport class InfoGaugeCurrentMeasurementPipe implements PipeTransform {\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n private alert: AlertService\n ) {}\n transform(\n datapoint: KPIDetails,\n calculateGauge?: false\n ): Observable<{ date: string; value: number; unit: string; notFound?: boolean }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: true\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset: number;\n notFound?: boolean;\n }>;\n transform(\n datapoint: KPIDetails,\n calculateGauge?: boolean\n ): Observable<{\n date: string;\n value: number;\n unit: string;\n color?: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS];\n strokeDashOffset?: number;\n notFound?: boolean;\n }> {\n return this.measurementRealtime\n .latestValueOfSpecificMeasurement$(\n datapoint.fragment,\n datapoint.series,\n datapoint.__target,\n 1,\n true\n )\n .pipe(\n map(m => {\n // in case measurement is not stored in DB when initially requested.\n if (!m) {\n return { value: Number.NaN, date: '', unit: datapoint.unit || '', notFound: true };\n }\n const measurementValue: IMeasurementValue = m[datapoint.fragment][datapoint.series];\n const data = {\n value: measurementValue.value,\n unit: measurementValue.unit || datapoint.unit,\n date: m.time\n };\n if (!calculateGauge) {\n return data;\n }\n const gauge = this.calculateGauge(datapoint, measurementValue.value);\n return { ...data, ...gauge };\n }),\n catchError(e => {\n this.alert.addServerFailure(e);\n\n return of({ value: Number.NaN, date: '', unit: '' });\n })\n );\n }\n\n private calculateGauge(datapoint: KPIDetails, value: number) {\n const val = value;\n const min = Number(datapoint.min || 0);\n const max = Number(datapoint.max || 0);\n const yMin = Number(datapoint.yellowRangeMin);\n const yMax = Number(datapoint.yellowRangeMax);\n const rMin = Number(datapoint.redRangeMin);\n const rMax = Number(datapoint.redRangeMax);\n\n // Previously d3 was used for linear scale: d3.scale.linear().domain([min, max]).range([0, 100]);\n // wanted to avoid importing d3 just for this.\n const scale = (value1: number) => (value1 - min) / ((max - min) / 100);\n\n const strokeDashOffset = 125.75 + (377.25 - (scale(val) / 100) * 377.25);\n let color: (typeof INFO_GAUGE_COLORS)[keyof typeof INFO_GAUGE_COLORS] = INFO_GAUGE_COLORS.GREEN;\n\n if (Number.isFinite(yMin) && Number.isFinite(yMax)) {\n if (val >= yMin && val <= yMax) {\n color = INFO_GAUGE_COLORS.YELLOW;\n }\n }\n\n if (Number.isFinite(rMin) && Number.isFinite(rMax)) {\n if (val >= rMin && val <= rMax) {\n color = INFO_GAUGE_COLORS.RED;\n }\n }\n\n return { color, strokeDashOffset };\n }\n}\n","import { Component, OnChanges, Input, Optional } from '@angular/core';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatePipe, MeasurementRealtimeService } from '@c8y/ngx-components';\nimport { AsyncPipe, DecimalPipe, NgFor, NgIf, NgStyle } from '@angular/common';\nimport { InfoGaugeCurrentMeasurementPipe } from '../current-measurement.pipe';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\n\n@Component({\n selector: 'c8y-info-gauge-widget-view',\n templateUrl: './info-gauge-widget-view.component.html',\n host: { class: 'd-contents' },\n providers: [MeasurementRealtimeService],\n standalone: true,\n imports: [NgIf, NgFor, NgStyle, InfoGaugeCurrentMeasurementPipe, AsyncPipe, DecimalPipe, DatePipe]\n})\nexport class InfoGaugeWidgetViewComponent implements OnChanges {\n @Input() config: {\n datapointsLabels?: KPIDetails[];\n datapointsGauge: KPIDetails[];\n fractionSize: number;\n };\n activeDatapointLabels = [];\n activeDatapointGauge: KPIDetails;\n fractionSize = '1.1-1';\n\n constructor(@Optional() private dashboard: ContextDashboardComponent) {}\n\n ngOnChanges(): void {\n if (this.config?.datapointsLabels && Array.isArray(this.config?.datapointsLabels)) {\n this.config.datapointsLabels.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointLabels = this.config?.datapointsLabels.filter(dp => dp.__active);\n }\n\n if (this.config?.datapointsGauge && Array.isArray(this.config?.datapointsGauge)) {\n this.config.datapointsGauge.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.activeDatapointGauge = this.config?.datapointsGauge.find(dp => dp.__active);\n }\n\n if (typeof this.config.fractionSize === 'number' && !Number.isNaN(this.config.fractionSize)) {\n this.fractionSize = `1.${this.config.fractionSize}-${this.config.fractionSize}`;\n }\n }\n\n private assignContextFromContextDashboard(datapoint: KPIDetails) {\n if (!this.dashboard?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.dashboard?.context;\n if (context?.id) {\n const { name, id } = context;\n datapoint.__target = { name, id };\n }\n }\n}\n","<div class=\"label-value-unit-gauge\">\n <div\n class=\"gauge-legend\"\n *ngIf=\"activeDatapointLabels?.length\"\n >\n <ng-container *ngFor=\"let dp of activeDatapointLabels\">\n <ng-container *ngIf=\"dp | infoGaugeCurrentMeasurement | async as measurement\">\n <label\n class=\"text-truncate\"\n title=\"{{ dp.label }}\"\n >\n {{ dp.label }}\n </label>\n <h3\n class=\"text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\"\n *ngIf=\"!measurement.notFound; else notFound\"\n >\n {{ measurement.value | number: fractionSize }} {{ dp.unit || measurement.unit }}\n </h3>\n <ng-template #notFound>\n <h3>--</h3>\n </ng-template>\n <p class=\"text-muted m-b-8\">\n <small>\n <div>{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div>{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </small>\n </p>\n </ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"activeDatapointGauge\">\n <div\n class=\"gauge-svg\"\n *ngIf=\"activeDatapointGauge | infoGaugeCurrentMeasurement: true | async as measurement\"\n >\n <svg\n height=\"214px\"\n width=\"214px\"\n viewBox=\"0 0 214 214\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n >\n <desc>radial gauge</desc>\n <g\n id=\"scale\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n stroke-dasharray=\"1,5\"\n >\n <circle\n id=\"Oval\"\n stroke=\"#CACECE\"\n stroke-width=\"7\"\n cx=\"107\"\n cy=\"107\"\n r=\"103\"\n ></circle>\n <rect\n id=\"mask\"\n height=\"214\"\n stroke=\"none\"\n fill-rule=\"evenodd\"\n x=\"0\"\n y=\"0\"\n width=\"214\"\n transform=\"rotate(-45 290 182)\"\n ></rect>\n </g>\n <path\n class=\"track\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <path\n class=\"track-value\"\n [ngStyle]=\"{\n stroke: measurement.color,\n 'stroke-dashoffset': -measurement.strokeDashOffset\n }\"\n d=\"M 107 27 a 80 80 0 1 0.1 0 Z\"\n transform=\"rotate(-135 107 107)\"\n ></path>\n <foreignObject\n class=\"d-flex a-i-center j-c-center\"\n height=\"100%\"\n width=\"100%\"\n requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"\n >\n <div\n class=\"d-flex d-col fit-h a-i-center j-c-center\"\n style=\"padding: 3rem\"\n xmlns=\"http://www.w3.org/1999/xhtml\"\n >\n <p\n class=\"text-truncate text-center\"\n title=\"{{ activeDatapointGauge.label }}\"\n >\n {{ activeDatapointGauge.label }}\n </p>\n <p\n class=\"center-value text-truncate\"\n title=\"{{ measurement.value | number: fractionSize }}\"\n *ngIf=\"!measurement.notFound; else notFoundSVG\"\n >\n {{ measurement.value | number: fractionSize }}\n </p>\n <ng-template #notFoundSVG>\n <p class=\"center-value\">--</p>\n </ng-template>\n <p class=\"center-unit strong\">{{ activeDatapointGauge.unit || measurement.unit }}</p>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumDate' }}</div>\n <div class=\"center-date-time\">{{ measurement.date | c8yDate: 'mediumTime' }}</div>\n </div>\n </foreignObject>\n </svg>\n </div>\n </ng-container>\n <div class=\"clearfix\"></div>\n</div>\n","import { Component, OnInit, Input } from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport {\n DatapointSelectorModule,\n type DatapointAttributesFormConfig,\n type DatapointSelectorModalOptions,\n type KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';\nimport { CoreModule, OnBeforeSave } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\n\nfunction ensureAtLeastOneDatapointSelectedAndActive(\n datapointListAttributes: string[]\n): ValidatorFn {\n return (control: AbstractControl) => {\n const formValue = control.value;\n for (const listAttributeName of datapointListAttributes) {\n const valueForList: KPIDetails[] = formValue[listAttributeName];\n if (!valueForList || !Array.isArray(valueForList)) {\n continue;\n }\n\n if (valueForList.find(dp => dp.__active)) {\n return null;\n }\n }\n return { noActiveDatapoint: true };\n };\n}\n\n@Component({\n selector: 'c8y-info-gauge-widget-config',\n templateUrl: './info-gauge-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [CoreModule, ReactiveFormsModule, DatapointSelectorModule]\n})\nexport class InfoGaugeWidgetConfigComponent implements OnInit, OnBeforeSave {\n @Input() config: {\n datapointsLabels?: KPIDetails[];\n datapointsGauge: KPIDetails[];\n fractionSize: number;\n };\n formGroup: ReturnType<InfoGaugeWidgetConfigComponent['createForm']>;\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n defaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRedRange: true,\n showYellowRange: true,\n showRange: true\n };\n private limits = {\n numberOfDecimalPlacesMax: 10,\n numberOfDecimalPlacesMin: 0\n } as const;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm,\n private widgetConfig: WidgetConfigComponent\n ) {}\n\n onBeforeSave(\n config?: InfoGaugeWidgetConfigComponent['config']\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n return true;\n }\n return false;\n }\n\n ngOnInit() {\n if (this.widgetConfig.context?.id) {\n this.datapointSelectionConfig.contextAsset = this.widgetConfig?.context;\n }\n this.initForm();\n if (this.config?.datapointsLabels) {\n this.formGroup.patchValue({ datapointsLabels: this.config.datapointsLabels });\n }\n if (this.config?.datapointsGauge) {\n this.formGroup.patchValue({ datapointsGauge: this.config.datapointsGauge });\n }\n if (typeof this.config?.fractionSize === 'number' && !Number.isNaN(this.config?.fractionSize)) {\n this.formGroup.patchValue({ fractionSize: this.config.fractionSize });\n }\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group(\n {\n fractionSize: [\n 1,\n [\n Validators.required,\n Validators.min(this.limits.numberOfDecimalPlacesMin),\n Validators.max(this.limits.numberOfDecimalPlacesMax)\n ]\n ],\n datapointsLabels: this.formBuilder.control(new Array<KPIDetails>(), []),\n datapointsGauge: this.formBuilder.control(new Array<KPIDetails>(), [])\n },\n {\n validators: [\n ensureAtLeastOneDatapointSelectedAndActive(['datapointsLabels', 'datapointsGauge'])\n ]\n }\n );\n }\n}\n","<div class=\"p-l-24 p-r-24\">\n <form\n class=\"no-card-context\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"p-t-8\">\n <label translate>Decimal places</label>\n <input\n class=\"form-control\"\n name=\"fractionSize\"\n type=\"number\"\n formControlName=\"fractionSize\"\n step=\"1\"\n />\n <c8y-messages [show]=\"formGroup.controls.fractionSize.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6 p-t-8\">\n <div\n class=\"alert alert-info\"\n role=\"alert\"\n *ngIf=\"formGroup.errors?.noActiveDatapoint\"\n translate\n >\n At least one data point for the labels or the gauge needs to be selected.\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Multiple label and value pairs' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n formControlName=\"datapointsLabels\"\n ></c8y-datapoint-selection-list>\n </div>\n <div class=\"col-md-6\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top p-t-16 d-block\"\n name=\"datapoints\"\n listTitle=\"{{ 'Gauge`display`' | translate }}\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"0\"\n [maxActiveCount]=\"1\"\n formControlName=\"datapointsGauge\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n </form>\n</div>\n","import { NgModule } from '@angular/core';\nimport { InfoGaugeWidgetViewComponent } from './info-gauge-widget-view/info-gauge-widget-view.component';\nimport { InfoGaugeWidgetConfigComponent } from './info-gauge-widget-config/info-gauge-widget-config.component';\nimport { InfoGaugeCurrentMeasurementPipe } from './current-measurement.pipe';\n\n/**\n * @deprecated\n */\n@NgModule({\n imports: [\n InfoGaugeWidgetViewComponent,\n InfoGaugeWidgetConfigComponent,\n InfoGaugeCurrentMeasurementPipe\n ]\n})\nexport class InfoGaugeWidgetModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { Component, Input, Optional } from '@angular/core';
|
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
4
|
import { Validators, ControlContainer, NgForm } from '@angular/forms';
|
|
5
5
|
import * as i1$1 from '@c8y/ngx-components';
|
|
6
|
-
import { CoreModule, MeasurementRealtimeService } from '@c8y/ngx-components';
|
|
6
|
+
import { C8yValidators, CoreModule, MeasurementRealtimeService } from '@c8y/ngx-components';
|
|
7
7
|
import * as i2 from '@c8y/ngx-components/context-dashboard';
|
|
8
8
|
import * as i4 from '@c8y/ngx-components/datapoint-selector';
|
|
9
9
|
import { DatapointSelectorModule } from '@c8y/ngx-components/datapoint-selector';
|
|
@@ -74,7 +74,8 @@ class KpiWidgetConfigComponent {
|
|
|
74
74
|
[
|
|
75
75
|
Validators.required,
|
|
76
76
|
Validators.min(this.limits.numberOfDecimalPlacesMin),
|
|
77
|
-
Validators.max(this.limits.numberOfDecimalPlacesMax)
|
|
77
|
+
Validators.max(this.limits.numberOfDecimalPlacesMax),
|
|
78
|
+
C8yValidators.integerValidator()
|
|
78
79
|
]
|
|
79
80
|
],
|
|
80
81
|
showTimestamp: [true, []],
|