@c8y/ngx-components 1021.25.1 → 1021.26.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"branding-version.service.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/branding-version.service.ts"],"names":[],"mappings":";AAEA;;GAEG;AACH,qBAGa,sBAAsB;IACjC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,OAAO;IAEhD;;;;OAIG;IACH,4BAA4B,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC;IAItD;;;;;;OAMG;IACH,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAuBvF;;;;;;OAMG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM;yCAjD1B,sBAAsB;6CAAtB,sBAAsB;CAqDlC"}
1
+ {"version":3,"file":"branding-version.service.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/branding-version.service.ts"],"names":[],"mappings":";AAEA;;GAEG;AACH,qBAGa,sBAAsB;IACjC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,OAAO;IAEhD;;;;OAIG;IACH,4BAA4B,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC;IAItD;;;;;;OAMG;IACH,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAgCvF;;;;;;OAMG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM;yCA1D1B,sBAAsB;6CAAtB,sBAAsB;CA8DlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"stepper-buttons.component.d.ts","sourceRoot":"","sources":["../../../core/stepper/stepper-buttons.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAa,YAAY,EAAS,SAAS,EAAU,MAAM,eAAe,CAAC;AAEpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,qBAIa,iBAAkB,YAAW,gBAAgB,EAAE,SAAS;IAuDjE,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,gBAAgB;IAxD1B;;;OAGG;IACM,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF;;;;OAIG;IACM,OAAO,CAAC,EAAE,OAAO,CAAS;IAEnC;;OAEG;IACM,QAAQ,CAAC,EAAE,OAAO,CAAS;IAEpC;;OAEG;IACO,QAAQ,oBAAsB;IACxC;;OAEG;IACO,MAAM;iBAA+B,UAAU;cAAQ,OAAO;OAAM;IAE9E;;OAEG;IACO,MAAM;iBAA+B,UAAU;cAAQ,OAAO;OAAM;IAE9E;;OAEG;IACO,QAAQ,oBAAsB;IAExC;;;;OAIG;IACH,QAAQ,EAAE,wBAAwB,CAKhC;IACF;;OAEG;IACH,aAAa,UAAS;IAEtB,OAAO,CAAC,wBAAwB,CAAe;gBAErC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,OAAO,EACb,gBAAgB,EAAE,gBAAgB;IAG5C;;;;;;;;;;;;OAYG;IACH,IAAa,WAAW,CAAC,IAAI,EAAE,wBAAwB,EAKtD;IAED;;OAEG;IACH,kBAAkB;IAoBlB,WAAW;IAMX;;;OAGG;IACH,MAAM;IAKN;;;;OAIG;IACH,IAAI;IASJ;;;;OAIG;IACH,IAAI;IAUJ;;;OAGG;IACH,MAAM;IAKN,OAAO,CAAC,YAAY;yCA5JT,iBAAiB;2CAAjB,iBAAiB;CAqK7B"}
1
+ {"version":3,"file":"stepper-buttons.component.d.ts","sourceRoot":"","sources":["../../../core/stepper/stepper-buttons.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAa,YAAY,EAAS,SAAS,EAAU,MAAM,eAAe,CAAC;AAEpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,qBAIa,iBAAkB,YAAW,gBAAgB,EAAE,SAAS;IAuDjE,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,gBAAgB;IAxD1B;;;OAGG;IACM,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF;;;;OAIG;IACM,OAAO,CAAC,EAAE,OAAO,CAAS;IAEnC;;OAEG;IACM,QAAQ,CAAC,EAAE,OAAO,CAAS;IAEpC;;OAEG;IACO,QAAQ,oBAAsB;IACxC;;OAEG;IACO,MAAM;iBAA+B,UAAU;cAAQ,OAAO;OAAM;IAE9E;;OAEG;IACO,MAAM;iBAA+B,UAAU;cAAQ,OAAO;OAAM;IAE9E;;OAEG;IACO,QAAQ,oBAAsB;IAExC;;;;OAIG;IACH,QAAQ,EAAE,wBAAwB,CAKhC;IACF;;OAEG;IACH,aAAa,UAAS;IAEtB,OAAO,CAAC,wBAAwB,CAAe;gBAErC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,OAAO,EACb,gBAAgB,EAAE,gBAAgB;IAG5C;;;;;;;;;;;;OAYG;IACH,IAAa,WAAW,CAAC,IAAI,EAAE,wBAAwB,EAKtD;IAED;;OAEG;IACH,kBAAkB;IAoBlB,WAAW;IAMX;;;OAGG;IACH,MAAM;IAKN;;;;OAIG;IACH,IAAI;IAUJ;;;;OAIG;IACH,IAAI;IAUJ;;;OAGG;IACH,MAAM;IAKN,OAAO,CAAC,YAAY;yCA7JT,iBAAiB;2CAAjB,iBAAiB;CAsK7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"application-plugins.guard.d.ts","sourceRoot":"","sources":["../../../ecosystem/application-plugins/application-plugins.guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;;AAExE,qBACa,uBAAuB;IACtB,OAAO,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAEtD,WAAW,CAAC,KAAK,EAAE,sBAAsB;yCAH9B,uBAAuB;6CAAvB,uBAAuB;CAcnC"}
1
+ {"version":3,"file":"application-plugins.guard.d.ts","sourceRoot":"","sources":["../../../ecosystem/application-plugins/application-plugins.guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;;AAExE,qBACa,uBAAuB;IACtB,OAAO,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAEtD,WAAW,CAAC,KAAK,EAAE,sBAAsB;yCAH9B,uBAAuB;6CAAvB,uBAAuB;CAoBnC"}
@@ -22,14 +22,18 @@ export class BrandingVersionService {
22
22
  */
23
23
  splitBrandingIntoNameAndIteration(version) {
24
24
  const splitted = version.split(BrandingVersionService.nameAndIterationSeparator);
25
- if (splitted.length != 2) {
26
- throw Error(`A valid version should be splitted by exactly one '${BrandingVersionService.nameAndIterationSeparator}', this is not the case for '${version}'`);
25
+ if (splitted.length < 2) {
26
+ throw Error(`A valid version should at least conatin one '${BrandingVersionService.nameAndIterationSeparator}', this is not the case for '${version}'`);
27
27
  }
28
- const iteration = Number.parseInt(splitted[1]);
28
+ const lastValueOfSplittedArray = splitted[splitted.length - 1];
29
+ if (lastValueOfSplittedArray === '' || !/[0-9]+/.test(lastValueOfSplittedArray)) {
30
+ throw Error(`The second part of the version should be a positive integer, this is not the case for '${lastValueOfSplittedArray}' from '${version}'`);
31
+ }
32
+ const iteration = Number.parseInt(lastValueOfSplittedArray);
29
33
  if (Number.isNaN(iteration) && iteration <= 0) {
30
34
  throw Error(`The second part of the version should be a positive integer, this is not the case for '${iteration}' from '${version}'`);
31
35
  }
32
- const name = splitted[0];
36
+ const name = splitted.slice(0, -1).join(BrandingVersionService.nameAndIterationSeparator);
33
37
  if (!name) {
34
38
  throw Error(`The first part of the version should not be empty, this is the case for '${name}' from '${version}'`);
35
39
  }
@@ -55,4 +59,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
55
59
  providedIn: 'root'
56
60
  }]
57
61
  }] });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmctdmVyc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2RhdGEvYnJhbmRpbmctdmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOztHQUVHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjthQUNqQiw4QkFBeUIsR0FBRyxHQUFHLEFBQU4sQ0FBTztJQUVoRDs7OztPQUlHO0lBQ0gsNEJBQTRCLENBQW1CLElBQU87UUFDcEQsT0FBTyxHQUFHLElBQUksR0FBRyxzQkFBc0IsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEVBQVcsQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUNBQWlDLENBQUMsT0FBZTtRQUMvQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDakYsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sS0FBSyxDQUNULHNEQUFzRCxzQkFBc0IsQ0FBQyx5QkFBeUIsZ0NBQWdDLE9BQU8sR0FBRyxDQUNqSixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLEtBQUssQ0FDVCwwRkFBMEYsU0FBUyxXQUFXLE9BQU8sR0FBRyxDQUN6SCxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLEtBQUssQ0FDVCw0RUFBNEUsSUFBSSxXQUFXLE9BQU8sR0FBRyxDQUN0RyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFCQUFxQixDQUFDLE9BQWU7UUFDbkMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUUsT0FBTyxHQUFHLElBQUksR0FBRyxzQkFBc0IsQ0FBQyx5QkFBeUIsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFXLENBQUM7SUFDL0YsQ0FBQzs4R0FwRFUsc0JBQXNCO2tIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIGJyYW5kaW5nIHZlcnNpb25zLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlIHtcbiAgc3RhdGljIHJlYWRvbmx5IG5hbWVBbmRJdGVyYXRpb25TZXBhcmF0b3IgPSAnLSc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGluaXRpYWwgYnJhbmRpbmcgdmVyc2lvbiBmb3IgYSBnaXZlbiBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgYnJhbmRpbmcuXG4gICAqIEByZXR1cm5zIFRoZSBpbml0aWFsIGJyYW5kaW5nIHZlcnNpb24uXG4gICAqL1xuICBjcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uPFQgZXh0ZW5kcyBzdHJpbmc+KG5hbWU6IFQpIHtcbiAgICByZXR1cm4gYCR7bmFtZX0ke0JyYW5kaW5nVmVyc2lvblNlcnZpY2UubmFtZUFuZEl0ZXJhdGlvblNlcGFyYXRvcn0kezF9YCBhcyBjb25zdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdHMgYSBicmFuZGluZyB2ZXJzaW9uIGludG8gaXRzIG5hbWUgYW5kIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIGJyYW5kaW5nIHZlcnNpb24gdG8gc3BsaXQuXG4gICAqIEByZXR1cm5zIFRoZSBuYW1lIGFuZCBpdGVyYXRpb24gb2YgdGhlIGJyYW5kaW5nIHZlcnNpb24uXG4gICAqXG4gICAqIEVycm9ycyBhcmUgdGhyb3duIGlmIHRoZSB2ZXJzaW9uIGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0LlxuICAgKi9cbiAgc3BsaXRCcmFuZGluZ0ludG9OYW1lQW5kSXRlcmF0aW9uKHZlcnNpb246IHN0cmluZyk6IHsgbmFtZTogc3RyaW5nOyBpdGVyYXRpb246IG51bWJlciB9IHtcbiAgICBjb25zdCBzcGxpdHRlZCA9IHZlcnNpb24uc3BsaXQoQnJhbmRpbmdWZXJzaW9uU2VydmljZS5uYW1lQW5kSXRlcmF0aW9uU2VwYXJhdG9yKTtcbiAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQSB2YWxpZCB2ZXJzaW9uIHNob3VsZCBiZSBzcGxpdHRlZCBieSBleGFjdGx5IG9uZSAnJHtCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLm5hbWVBbmRJdGVyYXRpb25TZXBhcmF0b3J9JywgdGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yICcke3ZlcnNpb259J2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlcmF0aW9uID0gTnVtYmVyLnBhcnNlSW50KHNwbGl0dGVkWzFdKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKGl0ZXJhdGlvbikgJiYgaXRlcmF0aW9uIDw9IDApIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSB2ZXJzaW9uIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIHRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciAnJHtpdGVyYXRpb259JyBmcm9tICcke3ZlcnNpb259J2BcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBzcGxpdHRlZFswXTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgVGhlIGZpcnN0IHBhcnQgb2YgdGhlIHZlcnNpb24gc2hvdWxkIG5vdCBiZSBlbXB0eSwgdGhpcyBpcyB0aGUgY2FzZSBmb3IgJyR7bmFtZX0nIGZyb20gJyR7dmVyc2lvbn0nYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaXRlcmF0aW9uLCBuYW1lIH07XG4gIH1cblxuICAvKipcbiAgICogQnVtcHMgdGhlIGl0ZXJhdGlvbiBvZiBhIGJyYW5kaW5nIHZlcnNpb24uXG4gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBicmFuZGluZyB2ZXJzaW9uIHRvIGJ1bXAuXG4gICAqIEByZXR1cm5zIFRoZSBidW1wZWQgYnJhbmRpbmcgdmVyc2lvbi5cbiAgICpcbiAgICogRXJyb3JzIGFyZSB0aHJvd24gaWYgdGhlIHZlcnNpb24gaXMgbm90IGluIHRoZSBleHBlY3RlZCBmb3JtYXQuXG4gICAqL1xuICBidW1wQnJhbmRpbmdJdGVyYXRpb24odmVyc2lvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgeyBuYW1lLCBpdGVyYXRpb24gfSA9IHRoaXMuc3BsaXRCcmFuZGluZ0ludG9OYW1lQW5kSXRlcmF0aW9uKHZlcnNpb24pO1xuICAgIHJldHVybiBgJHtuYW1lfSR7QnJhbmRpbmdWZXJzaW9uU2VydmljZS5uYW1lQW5kSXRlcmF0aW9uU2VwYXJhdG9yfSR7aXRlcmF0aW9uICsgMX1gIGFzIGNvbnN0O1xuICB9XG59XG4iXX0=
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmctdmVyc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2RhdGEvYnJhbmRpbmctdmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOztHQUVHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjthQUNqQiw4QkFBeUIsR0FBRyxHQUFHLEFBQU4sQ0FBTztJQUVoRDs7OztPQUlHO0lBQ0gsNEJBQTRCLENBQW1CLElBQU87UUFDcEQsT0FBTyxHQUFHLElBQUksR0FBRyxzQkFBc0IsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEVBQVcsQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUNBQWlDLENBQUMsT0FBZTtRQUMvQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDakYsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sS0FBSyxDQUNULGdEQUFnRCxzQkFBc0IsQ0FBQyx5QkFBeUIsZ0NBQWdDLE9BQU8sR0FBRyxDQUMzSSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSx3QkFBd0IsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztZQUNoRixNQUFNLEtBQUssQ0FDVCwwRkFBMEYsd0JBQXdCLFdBQVcsT0FBTyxHQUFHLENBQ3hJLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzVELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUMsTUFBTSxLQUFLLENBQ1QsMEZBQTBGLFNBQVMsV0FBVyxPQUFPLEdBQUcsQ0FDekgsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sS0FBSyxDQUNULDRFQUE0RSxJQUFJLFdBQVcsT0FBTyxHQUFHLENBQ3RHLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gscUJBQXFCLENBQUMsT0FBZTtRQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RSxPQUFPLEdBQUcsSUFBSSxHQUFHLHNCQUFzQixDQUFDLHlCQUF5QixHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQVcsQ0FBQztJQUMvRixDQUFDOzhHQTdEVSxzQkFBc0I7a0hBQXRCLHNCQUFzQixjQUZyQixNQUFNOzsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgYnJhbmRpbmcgdmVyc2lvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJyYW5kaW5nVmVyc2lvblNlcnZpY2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgbmFtZUFuZEl0ZXJhdGlvblNlcGFyYXRvciA9ICctJztcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgaW5pdGlhbCBicmFuZGluZyB2ZXJzaW9uIGZvciBhIGdpdmVuIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBicmFuZGluZy5cbiAgICogQHJldHVybnMgVGhlIGluaXRpYWwgYnJhbmRpbmcgdmVyc2lvbi5cbiAgICovXG4gIGNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb248VCBleHRlbmRzIHN0cmluZz4obmFtZTogVCkge1xuICAgIHJldHVybiBgJHtuYW1lfSR7QnJhbmRpbmdWZXJzaW9uU2VydmljZS5uYW1lQW5kSXRlcmF0aW9uU2VwYXJhdG9yfSR7MX1gIGFzIGNvbnN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhIGJyYW5kaW5nIHZlcnNpb24gaW50byBpdHMgbmFtZSBhbmQgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgYnJhbmRpbmcgdmVyc2lvbiB0byBzcGxpdC5cbiAgICogQHJldHVybnMgVGhlIG5hbWUgYW5kIGl0ZXJhdGlvbiBvZiB0aGUgYnJhbmRpbmcgdmVyc2lvbi5cbiAgICpcbiAgICogRXJyb3JzIGFyZSB0aHJvd24gaWYgdGhlIHZlcnNpb24gaXMgbm90IGluIHRoZSBleHBlY3RlZCBmb3JtYXQuXG4gICAqL1xuICBzcGxpdEJyYW5kaW5nSW50b05hbWVBbmRJdGVyYXRpb24odmVyc2lvbjogc3RyaW5nKTogeyBuYW1lOiBzdHJpbmc7IGl0ZXJhdGlvbjogbnVtYmVyIH0ge1xuICAgIGNvbnN0IHNwbGl0dGVkID0gdmVyc2lvbi5zcGxpdChCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLm5hbWVBbmRJdGVyYXRpb25TZXBhcmF0b3IpO1xuICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEEgdmFsaWQgdmVyc2lvbiBzaG91bGQgYXQgbGVhc3QgY29uYXRpbiBvbmUgJyR7QnJhbmRpbmdWZXJzaW9uU2VydmljZS5uYW1lQW5kSXRlcmF0aW9uU2VwYXJhdG9yfScsIHRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciAnJHt2ZXJzaW9ufSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RWYWx1ZU9mU3BsaXR0ZWRBcnJheSA9IHNwbGl0dGVkW3NwbGl0dGVkLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0VmFsdWVPZlNwbGl0dGVkQXJyYXkgPT09ICcnIHx8ICEvWzAtOV0rLy50ZXN0KGxhc3RWYWx1ZU9mU3BsaXR0ZWRBcnJheSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSB2ZXJzaW9uIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIHRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciAnJHtsYXN0VmFsdWVPZlNwbGl0dGVkQXJyYXl9JyBmcm9tICcke3ZlcnNpb259J2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlcmF0aW9uID0gTnVtYmVyLnBhcnNlSW50KGxhc3RWYWx1ZU9mU3BsaXR0ZWRBcnJheSk7XG4gICAgaWYgKE51bWJlci5pc05hTihpdGVyYXRpb24pICYmIGl0ZXJhdGlvbiA8PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYFRoZSBzZWNvbmQgcGFydCBvZiB0aGUgdmVyc2lvbiBzaG91bGQgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCB0aGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgJyR7aXRlcmF0aW9ufScgZnJvbSAnJHt2ZXJzaW9ufSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBzcGxpdHRlZC5zbGljZSgwLCAtMSkuam9pbihCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLm5hbWVBbmRJdGVyYXRpb25TZXBhcmF0b3IpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBUaGUgZmlyc3QgcGFydCBvZiB0aGUgdmVyc2lvbiBzaG91bGQgbm90IGJlIGVtcHR5LCB0aGlzIGlzIHRoZSBjYXNlIGZvciAnJHtuYW1lfScgZnJvbSAnJHt2ZXJzaW9ufSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7IGl0ZXJhdGlvbiwgbmFtZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bXBzIHRoZSBpdGVyYXRpb24gb2YgYSBicmFuZGluZyB2ZXJzaW9uLlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgYnJhbmRpbmcgdmVyc2lvbiB0byBidW1wLlxuICAgKiBAcmV0dXJucyBUaGUgYnVtcGVkIGJyYW5kaW5nIHZlcnNpb24uXG4gICAqXG4gICAqIEVycm9ycyBhcmUgdGhyb3duIGlmIHRoZSB2ZXJzaW9uIGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0LlxuICAgKi9cbiAgYnVtcEJyYW5kaW5nSXRlcmF0aW9uKHZlcnNpb246IHN0cmluZykge1xuICAgIGNvbnN0IHsgbmFtZSwgaXRlcmF0aW9uIH0gPSB0aGlzLnNwbGl0QnJhbmRpbmdJbnRvTmFtZUFuZEl0ZXJhdGlvbih2ZXJzaW9uKTtcbiAgICByZXR1cm4gYCR7bmFtZX0ke0JyYW5kaW5nVmVyc2lvblNlcnZpY2UubmFtZUFuZEl0ZXJhdGlvblNlcGFyYXRvcn0ke2l0ZXJhdGlvbiArIDF9YCBhcyBjb25zdDtcbiAgfVxufVxuIl19
@@ -164,6 +164,7 @@ export class C8yStepperButtons {
164
164
  * Otherwise it will call stepper.next() as default.
165
165
  */
166
166
  next() {
167
+ this.stepper.selected.completed = true;
167
168
  if (this.onNext.observers.length > 0) {
168
169
  this.onNext.emit({ stepper: this.stepper, step: this.step });
169
170
  }
@@ -227,4 +228,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
227
228
  }], showButtons: [{
228
229
  type: Input
229
230
  }] } });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci1idXR0b25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3RlcHBlci9zdGVwcGVyLWJ1dHRvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9zdGVwcGVyL3N0ZXBwZXItYnV0dG9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFvQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQUdqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFLSCxNQUFNLE9BQU8saUJBQWlCO0lBc0Q1QixZQUNVLE9BQW1CLEVBQ25CLElBQWEsRUFDYixnQkFBa0M7UUFGbEMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ2IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQW5ENUM7Ozs7V0FJRztRQUNNLFlBQU8sR0FBYSxLQUFLLENBQUM7UUFFbkM7O1dBRUc7UUFDTSxhQUFRLEdBQWEsS0FBSyxDQUFDO1FBRXBDOztXQUVHO1FBQ08sYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEM7O1dBRUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQTBDLENBQUM7UUFFOUU7O1dBRUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQTBDLENBQUM7UUFFOUU7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LENBQUMsQ0FBQztJQUMzRCxDQUFDOzhHQXBLVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiw0UEMvRDlCLDYyRUFvRkE7OzJGRHJCYSxpQkFBaUI7a0JBSjdCLFNBQVM7K0JBQ0UscUJBQXFCO29JQVF0QixNQUFNO3NCQUFkLEtBQUs7Z0JBTUcsT0FBTztzQkFBZixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0ksUUFBUTtzQkFBakIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBS0csTUFBTTtzQkFBZixNQUFNO2dCQUtHLFFBQVE7c0JBQWpCLE1BQU07Z0JBc0NNLFdBQVc7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtTdGVwIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHYWluc2lnaHRTZXJ2aWNlIH0gZnJvbSAnLi4vcHJvZHVjdC1leHBlcmllbmNlL2dhaW5zaWdodC5zZXJ2aWNlJztcbmltcG9ydCB7IEFDVElPTlNfU1RFUFBFUiB9IGZyb20gJy4vc3RlcHBlci1weC5jb25zdGFudHMnO1xuaW1wb3J0IHsgQzh5U3RlcHBlciB9IGZyb20gJy4vc3RlcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RlcHBlckJ1dHRvbnNWaXNpYmlsaXR5IH0gZnJvbSAnLi9zdGVwcGVyLm1vZGVsJztcblxuLyoqXG4gKiBgQzh5U3RlcHBlckJ1dHRvbnNgIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgdG8gaGF2ZSwgYWNjb3JkaW5nIHRvXG4gKiB0aGUgYEM4eVN0ZXBwZXJgIGFuZCBlYWNoIGBjZGstc3RlcGAsIGJ1dHRvbnMgdG8gbmF2aWdhdGUgYmV0d2VlbiBzdGVwcyBvciB0byBjYW5jZWwgdGhlIHdob2xlXG4gKiBzdGVwLXByb2Nlc3MuIEJ1dHRvbnMgcmVuZGVyZWQgd2l0aCB0aGUgaGVscCBvZiB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSB0aGUgYnJhbmRpbmcgY3NzLlxuICpcbiAqIEJ5IGRlZmF1bHQgYWxsIHN0ZXBzIHdpdGggdGhpcyBjb21wb25lbnQgaW4gdXNlIHdpbGwgcmVuZGVyIGEgbmV4dCBidXR0b24sIGV4cGVjdCB0aGUgbGFzdCBzdGVwLlxuICogVGhlIG90aGVyIHdheSBhcm91bmQsIGV2ZXJ5IHN0ZXAgdXNpbmcgdGhpcyBjb21wb25lbnQgd2lsbCByZW5kZXIgYSBiYWNrIGJ1dHRvbiwgZXhwZWN0IHRoZSBmaXJzdCBzdGVwLlxuICogVG8gZ2V0IGEgY2FuY2VsIGJ1dHRvbiByZW5kZXJlZCB5b3UgbmVlZCB0byBoYW5kbGUgdGhlIG9uQ2FuY2VsIGV2ZW50LlxuICogRm9yIG5leHQgYW5kIGJhY2sgYnV0dG9uIHlvdSBkb24ndCBuZWVkIHRvIGhhbmRsZSB0aGUgYXZhaWxhYmxlIGV2ZW50cyBgb25OZXh0YCBhbmQgYG9uQmFja2AgYmVjYXVzZSBkZWZhdWx0IGJlaGF2aW9yXG4gKiBpcyBpbXBsZW1lbnRlZC4gVGhlIGRlZmF1bHQgd2lsbCBqdXN0IGNhbGwsIGFjY29yZGluZyB0byB0aGUgYnV0dG9uLCB0aGUgYHN0ZXBwZXIubmV4dCgpYCBvciBgc3RlcHBlci5wcmV2aW91cygpYFxuICogbWV0aG9kcyBhbmQgbW92ZXMgdGhlIHN0ZXBwZXIgZm9ydGggb3IgYmFjay4gVXNpbmcgdGhlIGBFdmVudEVtaXR0ZXJgIGBvbk5leHRgIGFuZCBgb25CYWNrYCB3aWxsIGVtaXQgZm9yIHlvdSB0aGUgZm9sbG93aW5nXG4gKiBvYmplY3Q6IGB7c3RlcHBlcjogQzh5U3RlcHBlciwgc3RlcDogQ2RrU3RlcH1gLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGxvZ2ljIGJlZm9yZSBtb3ZpbmdcbiAqIHRvIHRoZSBuZXh0IHN0ZXAgb3Igc2VuZGluZyBkYXRhIHRvIGEgYmFja2VuZC4gSW4gdGhpcyBjYXNlIHlvdSBuZWVkIHRvIHRlbGwgdGhlIHN0ZXBwZXIgdG8gbW92ZSBmb3J3YXJkIG9yIGJhY2tcbiAqIG9uIHlvdXIgb3duLlxuICpcbiAqIFdpdGggdGhlIGNvbXBvbmVudCBpbnB1dCBgW2xhYmVsc11gIHlvdSBjYW4gY2hhbmdlIHRoZSBsYWJlbCBvZiBlYWNoIGJ1dHRvbiBpbiBlYWNoIHN0ZXAuIEl0IHRha2VzIGFuIG9iamVjdCBsaWtlIHRoaXM6XG4gKiBge25leHQ/OiBzdHJpbmcsIGJhY2s/OiBzdHJpbmcsIGNhbmNlbD86IHN0cmluZ31gXG4gKlxuICogVGhlIGBbcGVuZGluZ11gIGlucHV0IGlzIG9mIHR5cGUgYm9vbGVhbiBhbmQgd2lsbCBlbmFibGUgY3NzIGFuaW1hdGlvbiBmb3IgdGhlIG5leHQgYnV0dG9uIHdoZW4gdHJ1ZS5cbiAqXG4gKiBJZiB0aGUgYGNkay1zdGVwYCBwcm92aWRlcyBhIGBzdGVwQ29udHJvbGAgdGhlIGNvbXBvbmVudCB3aWxsIHNldCB0aGUgbmV4dCBidXR0b24gZGlzYWJsZWQgd2hlbiB0aGUgZm9ybUdyb3VwXG4gKiBiZWhpbmQgaXQgaXMgaW52YWxpZC4gQXMgbG9uZyBhcyB0aGUgYFtwZW5kaW5nXWAgaW5wdXQgaXMgdHJ1ZSB0aGUgYmFjayBhbmQgbmV4dCBidXR0b24gaXMgYWxzbyBkaXNhYmxlZC5cbiAqIFRoaXMgd2lsbCBwcmV2ZW50IG11bHRpcGxlIGNsaWNrcyB3aGlsZSBydW5uaW5nIGEgcmVxdWVzdCBvciBzdGVwcGluZyBiYWNrIHdoaWxlIGEgcmVxdWVzdCBpcyBvbmdvaW5nLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxjOHktc3RlcHBlcj5cbiAqICA8Y2RrLXN0ZXA+XG4gKiAgICA8IS0tXG4gKiAgICAgIHlvdXIgaHRtbCBjb2RlXG4gKiAgICAgICAgICAuLi5cbiAqICAgICAgICAgIC4uLiAgICAtLT5cbiAqICAgIDxjOHktc3RlcHBlci1idXR0b25zXG4gKiAgICAgKG9uTmV4dCk9XCJzYXZlKClcIlxuICogICAgIFtsYWJlbHNdPVwieyBuZXh0OiAnU2F2ZScgfVwiXG4gKiAgICAgW3BlbmRpbmddPVwicGVuZGluZ1N0YXR1c1wiXG4gKiAgICAgPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAqICA8L2Nkay1zdGVwPlxuICogPC9jOHktc3RlcHBlcj5cbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBpbiB5b3VyIGNvbXBvbmVudDpcbiAqIGFzeW5jIHNhdmUoKSB7XG4gKiAgIHRoaXMucGVuZGluZ1N0YXR1cyA9IHRydWU7XG4gKiAgIC8vIHlvdXIgYXN5bmMgcmVxdWVzdCBnb2VzIGhlcmUgLi4uXG4gKiAgIC8vIGF3YWl0IHNvbWV0aGluZygpO1xuICogICB0aGlzLnBlbmRpbmdTdGF0dXMgPSBmYWxzZTtcbiAqICAgdGhpcy5zdGVwcGVyLm5leHQoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktc3RlcHBlci1idXR0b25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXBwZXItYnV0dG9ucy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQzh5U3RlcHBlckJ1dHRvbnMgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogT3B0aW9uYWxcbiAgICogU3BlY2lmeSBjdXN0b20gbGFiZWxzIGZvciBlYWNoIGJ1dHRvbiAoY2FuY2VsLCBiYWNrIG9yIG5leHQpXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbHM/OiB7IGNhbmNlbD86IHN0cmluZzsgYmFjaz86IHN0cmluZzsgbmV4dD86IHN0cmluZzsgY3VzdG9tPzogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBPcHRpb25hbFxuICAgKiBJbmRpY2F0ZXMgaWYgYSByZXF1ZXN0IGlzIHBlbmRpbmcgYW5kIHNldHMgdGhlIG5leHQgYnV0dG9uXG4gICAqIHRvIGRpc2FibGVkIHdoZW4gdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgcGVuZGluZz86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzYWJsZWQgc3RhdGUgb2YgYSBidXR0b25cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFdmVudEVtaXR0ZXIgd2hpY2ggZW1pdHMgd2hlbiBjYW5jZWwgYnV0dG9uIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIEV2ZW50RW1pdHRlciB3aGljaCBlbWl0cyB7c3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcH0gd2hlbiBuZXh0IGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwIH0+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50RW1pdHRlciB3aGljaCBlbWl0cyB7c3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcH0gd2hlbiBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uQmFjayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwIH0+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50RW1pdHRlciB3aGljaCBlbWl0cyB3aGVuIHRoZSBvcHRpb25hbCBjdXN0b20gYnV0dG9uIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBvbkN1c3RvbSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogSW5kaWNhdG9yIHdoaWNoIGJ1dHRvbiBzaG91bGQgYmUgc2hvd24uXG4gICAqIEJhc2VkIG9uIHRoZSBjZGstc3RlcHMgd2l0aGluIHRoZSBjOHktc3RlcHBlclxuICAgKiBuZXh0IGFuZCBiYWNrIGJ1dHRvbnMgYXJlIHJlbmRlcmVkLlxuICAgKi9cbiAgc2hvd0J0bnM6IFN0ZXBwZXJCdXR0b25zVmlzaWJpbGl0eSA9IHtcbiAgICBjYW5jZWw6IGZhbHNlLFxuICAgIGJhY2s6IGZhbHNlLFxuICAgIG5leHQ6IGZhbHNlLFxuICAgIGN1c3RvbTogZmFsc2VcbiAgfTtcbiAgLyoqXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBkZWZpbmVkIGluIHRoZSBzaG93QnRucyBoYXZlIGJlZW4gb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBmb3JjZVNob3dCdG5zID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdGVwcGVyOiBDOHlTdGVwcGVyLFxuICAgIHByaXZhdGUgc3RlcDogQ2RrU3RlcCxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBmb3JjZXMgdGhlIGRpc3BsYXkgb2YgdGhlIGJ1dHRvbnMgcGFzc2VkIGJ5IHRoZSBpbnB1dC5cbiAgICogSXQgd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHN0YW5kYXJkIHNldHRpbmdzLlxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxjOHktc3RlcHBlci1idXR0b25zXG4gICAqICAgW2xhYmVsc109XCJ7IGN1c3RvbTogJ0N1c3RvbSBidG4nLCBjYW5jZWw6ICdDYW5jZWwgYnRuJyB9XCJcbiAgICogICBbc2hvd0J1dHRvbnNdPVwieyBjdXN0b206IHRydWUsIGNhbmNlbDogdHJ1ZSB9XCJcbiAgICogPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBidG5zIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIG9wdGlvbnMgZm9yIGRpc3BsYXlpbmcgYnV0dG9ucy5cbiAgICovXG4gIEBJbnB1dCgpIHNldCBzaG93QnV0dG9ucyhidG5zOiBTdGVwcGVyQnV0dG9uc1Zpc2liaWxpdHkpIHtcbiAgICBpZiAoYnRucykge1xuICAgICAgdGhpcy5zaG93QnRucyA9IGJ0bnM7XG4gICAgICB0aGlzLmZvcmNlU2hvd0J0bnMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmZvcmNlU2hvd0J0bnMpIHtcbiAgICAgIHRoaXMuc2hvd0J0bnMuY2FuY2VsID0gdGhpcy5vbkNhbmNlbC5vYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgICAgIHRoaXMuc2hvd0J0bnMuY3VzdG9tID0gdGhpcy5vbkN1c3RvbS5vYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGVwcGVyICYmIHRoaXMuc3RlcHBlci5fc3RlcHMgJiYgdGhpcy5zdGVwICYmICF0aGlzLmZvcmNlU2hvd0J0bnMpIHtcbiAgICAgIHRoaXMuc2hvd0J0bnMuYmFjayA9IHRoaXMuc3RlcHBlci5fc3RlcHMuZmlyc3QgIT09IHRoaXMuc3RlcDtcbiAgICAgIHRoaXMuc2hvd0J0bnMubmV4dCA9IHRoaXMuc3RlcHBlci5fc3RlcHMubGFzdCAhPT0gdGhpcy5zdGVwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0ZXAgJiYgdGhpcy5zdGVwLnN0ZXBDb250cm9sKSB7XG4gICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5zdGVwLnN0ZXBDb250cm9sLmludmFsaWQ7XG5cbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5zdGVwLnN0ZXBDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuc3RlcC5zdGVwQ29udHJvbC5pbnZhbGlkO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uICYmICF0aGlzLnN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIHdoZW4gY2FuY2VsIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBJdCB3aWxsIGVtaXQgaW1tZWRpYXRlLlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICAgIHRoaXMudHJpZ2dlckV2ZW50KEFDVElPTlNfU1RFUFBFUi5DTElDS19TVEVQUEVSX0NBTkNFTF9CVE4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIHdoZW4gbmV4dCBidXR0b24gaXMgY2xpY2tlZC4gV2hlbiBvbk5leHQgRXZlbnRFbWl0dGVyIGhhcyBhbiBvYnNlcnZlciByZWdpc3RlcmVkXG4gICAqIGl0IHdpbGwgZW1pdCB0aGUgZm9sbG93aW5nIG9iamVjdCB7c3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcH0uXG4gICAqIE90aGVyd2lzZSBpdCB3aWxsIGNhbGwgc3RlcHBlci5uZXh0KCkgYXMgZGVmYXVsdC5cbiAgICovXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMub25OZXh0Lm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9uTmV4dC5lbWl0KHsgc3RlcHBlcjogdGhpcy5zdGVwcGVyLCBzdGVwOiB0aGlzLnN0ZXAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RlcHBlci5uZXh0KCk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckV2ZW50KEFDVElPTlNfU1RFUFBFUi5DTElDS19TVEVQUEVSX05FWFRfQlROKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCB3aGVuIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQuIFdoZW4gb25CYWNrIEV2ZW50RW1pdHRlciBoYXMgYW4gb2JzZXJ2ZXIgcmVnaXN0ZXJlZFxuICAgKiBpdCB3aWxsIGVtaXQgdGhlIGZvbGxvd2luZyBvYmplY3Qge3N0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXB9LlxuICAgKiBPdGhlcndpc2UgaXQgd2lsbCBjYWxsIHN0ZXBwZXIucHJldmlvdXMoKSBhcyBkZWZhdWx0LlxuICAgKi9cbiAgYmFjaygpIHtcbiAgICB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWQuY29tcGxldGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub25CYWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9uQmFjay5lbWl0KHsgc3RlcHBlcjogdGhpcy5zdGVwcGVyLCBzdGVwOiB0aGlzLnN0ZXAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RlcHBlci5wcmV2aW91cygpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJFdmVudChBQ1RJT05TX1NURVBQRVIuQ0xJQ0tfU1RFUFBFUl9CQUNLX0JUTik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgd2hlbiB0aGUgY3VzdG9tIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBJdCB3aWxsIGVtaXQgaW1tZWRpYXRlbHkuXG4gICAqL1xuICBjdXN0b20oKSB7XG4gICAgdGhpcy5vbkN1c3RvbS5lbWl0KCk7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoQUNUSU9OU19TVEVQUEVSLkNMSUNLX1NURVBQRVJfQ1VTVE9NX0JUTik7XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJFdmVudChhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50RGF0YSA9IHtcbiAgICAgIC4uLnRoaXMuc3RlcHBlci5wcm9kdWN0RXhwZXJpZW5jZUV2ZW50Py5kYXRhLFxuICAgICAgYWN0aW9uLFxuICAgICAgc3RlcDogdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyYW5zbGF0ZVRvRW5nbGlzaCh0aGlzLnN0ZXAubGFiZWwpXG4gICAgfTtcbiAgICBjb25zdCBldmVudE5hbWUgPSB0aGlzLnN0ZXBwZXIucHJvZHVjdEV4cGVyaWVuY2VFdmVudD8uZXZlbnROYW1lIHx8ICdjOHlTdGVwcGVyJztcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KGV2ZW50TmFtZSwgZXZlbnREYXRhKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgdGl0bGU9XCJ7eyBsYWJlbHM/LmNhbmNlbCB8fCAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgZGF0YS1jeT1cImNhbmNlbFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKm5nSWY9XCJzaG93QnRucy5jYW5jZWxcIlxuICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gID5cbiAgICA8c3BhblxuICAgICAgdGl0bGU9XCJ7eyBsYWJlbHM/LmNhbmNlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAqbmdJZj1cImxhYmVscz8uY2FuY2VsOyBlbHNlIGNhbmNlbExhYmVsXCJcbiAgICA+XG4gICAgICB7eyBsYWJlbHM/LmNhbmNlbCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI2NhbmNlbExhYmVsPlxuICAgICAgPHNwYW4gdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiPnt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgIHRpdGxlPVwie3sgbGFiZWxzPy5iYWNrIHx8ICdCYWNrJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKm5nSWY9XCJzaG93QnRucy5iYWNrXCJcbiAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICBbZGlzYWJsZWRdPVwicGVuZGluZ1wiXG4gICAgZGF0YS1jeT1cImJhY2tcIlxuICA+XG4gICAgPHNwYW5cbiAgICAgIHRpdGxlPVwie3sgbGFiZWxzPy5iYWNrIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICpuZ0lmPVwibGFiZWxzPy5iYWNrOyBlbHNlIGJhY2tMYWJlbFwiXG4gICAgPlxuICAgICAge3sgbGFiZWxzPy5iYWNrIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICAgIDxuZy10ZW1wbGF0ZSAjYmFja0xhYmVsPlxuICAgICAgPHNwYW4gdGl0bGU9XCJ7eyAnQmFjaycgfCB0cmFuc2xhdGUgfX1cIj57eyAnQmFjaycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0blwiXG4gICAgdGl0bGU9XCJ7eyBsYWJlbHM/LmN1c3RvbSB8fCAnQ29tcGxldGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAqbmdJZj1cInNob3dCdG5zLmN1c3RvbVwiXG4gICAgKGNsaWNrKT1cImN1c3RvbSgpXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnYnRuLWRlZmF1bHQnOiBzaG93QnRucy5uZXh0LFxuICAgICAgJ2J0bi1wcmltYXJ5JzogIXNob3dCdG5zLm5leHQsXG4gICAgICAnYnRuLXBlbmRpbmcnOiBwZW5kaW5nXG4gICAgfVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBkYXRhLWN5PVwiY3VzdG9tXCJcbiAgPlxuICAgIDxzcGFuXG4gICAgICB0aXRsZT1cInt7IGxhYmVscz8uY3VzdG9tIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICpuZ0lmPVwibGFiZWxzPy5jdXN0b207IGVsc2UgY3VzdG9tTGFiZWxcIlxuICAgID5cbiAgICAgIHt7IGxhYmVscz8uY3VzdG9tIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tTGFiZWw+XG4gICAgICA8c3BhbiB0aXRsZT1cInt7ICdDb21wbGV0ZScgfCB0cmFuc2xhdGUgfX1cIj57eyAnQ29tcGxldGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgIHRpdGxlPVwie3sgbGFiZWxzPy5uZXh0IHx8ICdOZXh0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgKm5nSWY9XCJzaG93QnRucy5uZXh0XCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IHBlbmRpbmcgfVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBkYXRhLWN5PVwibmV4dFwiXG4gID5cbiAgICA8c3BhblxuICAgICAgdGl0bGU9XCJ7eyBsYWJlbHM/Lm5leHQgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKm5nSWY9XCJsYWJlbHM/Lm5leHQ7IGVsc2UgbmV4dExhYmVsXCJcbiAgICA+XG4gICAgICB7eyBsYWJlbHM/Lm5leHQgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNuZXh0TGFiZWw+XG4gICAgICA8c3BhbiB0aXRsZT1cInt7ICdOZXh0JyB8IHRyYW5zbGF0ZSB9fVwiPnt7ICdOZXh0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2J1dHRvbj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci1idXR0b25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3RlcHBlci9zdGVwcGVyLWJ1dHRvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9zdGVwcGVyL3N0ZXBwZXItYnV0dG9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFvQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQUdqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFLSCxNQUFNLE9BQU8saUJBQWlCO0lBc0Q1QixZQUNVLE9BQW1CLEVBQ25CLElBQWEsRUFDYixnQkFBa0M7UUFGbEMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ2IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQW5ENUM7Ozs7V0FJRztRQUNNLFlBQU8sR0FBYSxLQUFLLENBQUM7UUFFbkM7O1dBRUc7UUFDTSxhQUFRLEdBQWEsS0FBSyxDQUFDO1FBRXBDOztXQUVHO1FBQ08sYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEM7O1dBRUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQTBDLENBQUM7UUFFOUU7O1dBRUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQTBDLENBQUM7UUFFOUU7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QUFDO1FBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7OEdBcktVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDRQQy9EOUIsNjJFQW9GQTs7MkZEckJhLGlCQUFpQjtrQkFKN0IsU0FBUzsrQkFDRSxxQkFBcUI7b0lBUXRCLE1BQU07c0JBQWQsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLSSxRQUFRO3NCQUFqQixNQUFNO2dCQUlHLE1BQU07c0JBQWYsTUFBTTtnQkFLRyxNQUFNO3NCQUFmLE1BQU07Z0JBS0csUUFBUTtzQkFBakIsTUFBTTtnQkFzQ00sV0FBVztzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1N0ZXAgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICcuLi9wcm9kdWN0LWV4cGVyaWVuY2UvZ2FpbnNpZ2h0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQUNUSU9OU19TVEVQUEVSIH0gZnJvbSAnLi9zdGVwcGVyLXB4LmNvbnN0YW50cyc7XG5pbXBvcnQgeyBDOHlTdGVwcGVyIH0gZnJvbSAnLi9zdGVwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdGVwcGVyQnV0dG9uc1Zpc2liaWxpdHkgfSBmcm9tICcuL3N0ZXBwZXIubW9kZWwnO1xuXG4vKipcbiAqIGBDOHlTdGVwcGVyQnV0dG9uc2AgcHJvdmlkZXMgYSBjb252ZW5pZW50IHdheSB0byBoYXZlLCBhY2NvcmRpbmcgdG9cbiAqIHRoZSBgQzh5U3RlcHBlcmAgYW5kIGVhY2ggYGNkay1zdGVwYCwgYnV0dG9ucyB0byBuYXZpZ2F0ZSBiZXR3ZWVuIHN0ZXBzIG9yIHRvIGNhbmNlbCB0aGUgd2hvbGVcbiAqIHN0ZXAtcHJvY2Vzcy4gQnV0dG9ucyByZW5kZXJlZCB3aXRoIHRoZSBoZWxwIG9mIHRoaXMgY29tcG9uZW50IHdpbGwgdXNlIHRoZSBicmFuZGluZyBjc3MuXG4gKlxuICogQnkgZGVmYXVsdCBhbGwgc3RlcHMgd2l0aCB0aGlzIGNvbXBvbmVudCBpbiB1c2Ugd2lsbCByZW5kZXIgYSBuZXh0IGJ1dHRvbiwgZXhwZWN0IHRoZSBsYXN0IHN0ZXAuXG4gKiBUaGUgb3RoZXIgd2F5IGFyb3VuZCwgZXZlcnkgc3RlcCB1c2luZyB0aGlzIGNvbXBvbmVudCB3aWxsIHJlbmRlciBhIGJhY2sgYnV0dG9uLCBleHBlY3QgdGhlIGZpcnN0IHN0ZXAuXG4gKiBUbyBnZXQgYSBjYW5jZWwgYnV0dG9uIHJlbmRlcmVkIHlvdSBuZWVkIHRvIGhhbmRsZSB0aGUgb25DYW5jZWwgZXZlbnQuXG4gKiBGb3IgbmV4dCBhbmQgYmFjayBidXR0b24geW91IGRvbid0IG5lZWQgdG8gaGFuZGxlIHRoZSBhdmFpbGFibGUgZXZlbnRzIGBvbk5leHRgIGFuZCBgb25CYWNrYCBiZWNhdXNlIGRlZmF1bHQgYmVoYXZpb3JcbiAqIGlzIGltcGxlbWVudGVkLiBUaGUgZGVmYXVsdCB3aWxsIGp1c3QgY2FsbCwgYWNjb3JkaW5nIHRvIHRoZSBidXR0b24sIHRoZSBgc3RlcHBlci5uZXh0KClgIG9yIGBzdGVwcGVyLnByZXZpb3VzKClgXG4gKiBtZXRob2RzIGFuZCBtb3ZlcyB0aGUgc3RlcHBlciBmb3J0aCBvciBiYWNrLiBVc2luZyB0aGUgYEV2ZW50RW1pdHRlcmAgYG9uTmV4dGAgYW5kIGBvbkJhY2tgIHdpbGwgZW1pdCBmb3IgeW91IHRoZSBmb2xsb3dpbmdcbiAqIG9iamVjdDogYHtzdGVwcGVyOiBDOHlTdGVwcGVyLCBzdGVwOiBDZGtTdGVwfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkIHRvIGltcGxlbWVudCBjdXN0b20gbG9naWMgYmVmb3JlIG1vdmluZ1xuICogdG8gdGhlIG5leHQgc3RlcCBvciBzZW5kaW5nIGRhdGEgdG8gYSBiYWNrZW5kLiBJbiB0aGlzIGNhc2UgeW91IG5lZWQgdG8gdGVsbCB0aGUgc3RlcHBlciB0byBtb3ZlIGZvcndhcmQgb3IgYmFja1xuICogb24geW91ciBvd24uXG4gKlxuICogV2l0aCB0aGUgY29tcG9uZW50IGlucHV0IGBbbGFiZWxzXWAgeW91IGNhbiBjaGFuZ2UgdGhlIGxhYmVsIG9mIGVhY2ggYnV0dG9uIGluIGVhY2ggc3RlcC4gSXQgdGFrZXMgYW4gb2JqZWN0IGxpa2UgdGhpczpcbiAqIGB7bmV4dD86IHN0cmluZywgYmFjaz86IHN0cmluZywgY2FuY2VsPzogc3RyaW5nfWBcbiAqXG4gKiBUaGUgYFtwZW5kaW5nXWAgaW5wdXQgaXMgb2YgdHlwZSBib29sZWFuIGFuZCB3aWxsIGVuYWJsZSBjc3MgYW5pbWF0aW9uIGZvciB0aGUgbmV4dCBidXR0b24gd2hlbiB0cnVlLlxuICpcbiAqIElmIHRoZSBgY2RrLXN0ZXBgIHByb3ZpZGVzIGEgYHN0ZXBDb250cm9sYCB0aGUgY29tcG9uZW50IHdpbGwgc2V0IHRoZSBuZXh0IGJ1dHRvbiBkaXNhYmxlZCB3aGVuIHRoZSBmb3JtR3JvdXBcbiAqIGJlaGluZCBpdCBpcyBpbnZhbGlkLiBBcyBsb25nIGFzIHRoZSBgW3BlbmRpbmddYCBpbnB1dCBpcyB0cnVlIHRoZSBiYWNrIGFuZCBuZXh0IGJ1dHRvbiBpcyBhbHNvIGRpc2FibGVkLlxuICogVGhpcyB3aWxsIHByZXZlbnQgbXVsdGlwbGUgY2xpY2tzIHdoaWxlIHJ1bm5pbmcgYSByZXF1ZXN0IG9yIHN0ZXBwaW5nIGJhY2sgd2hpbGUgYSByZXF1ZXN0IGlzIG9uZ29pbmcuXG4gKlxuICogYGBgaHRtbFxuICogPGM4eS1zdGVwcGVyPlxuICogIDxjZGstc3RlcD5cbiAqICAgIDwhLS1cbiAqICAgICAgeW91ciBodG1sIGNvZGVcbiAqICAgICAgICAgIC4uLlxuICogICAgICAgICAgLi4uICAgIC0tPlxuICogICAgPGM4eS1zdGVwcGVyLWJ1dHRvbnNcbiAqICAgICAob25OZXh0KT1cInNhdmUoKVwiXG4gKiAgICAgW2xhYmVsc109XCJ7IG5leHQ6ICdTYXZlJyB9XCJcbiAqICAgICBbcGVuZGluZ109XCJwZW5kaW5nU3RhdHVzXCJcbiAqICAgICA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICogIDwvY2RrLXN0ZXA+XG4gKiA8L2M4eS1zdGVwcGVyPlxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIGluIHlvdXIgY29tcG9uZW50OlxuICogYXN5bmMgc2F2ZSgpIHtcbiAqICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gdHJ1ZTtcbiAqICAgLy8geW91ciBhc3luYyByZXF1ZXN0IGdvZXMgaGVyZSAuLi5cbiAqICAgLy8gYXdhaXQgc29tZXRoaW5nKCk7XG4gKiAgIHRoaXMucGVuZGluZ1N0YXR1cyA9IGZhbHNlO1xuICogICB0aGlzLnN0ZXBwZXIubmV4dCgpO1xuICogfVxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zdGVwcGVyLWJ1dHRvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcHBlci1idXR0b25zLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDOHlTdGVwcGVyQnV0dG9ucyBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBPcHRpb25hbFxuICAgKiBTcGVjaWZ5IGN1c3RvbSBsYWJlbHMgZm9yIGVhY2ggYnV0dG9uIChjYW5jZWwsIGJhY2sgb3IgbmV4dClcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVscz86IHsgY2FuY2VsPzogc3RyaW5nOyBiYWNrPzogc3RyaW5nOyBuZXh0Pzogc3RyaW5nOyBjdXN0b20/OiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsXG4gICAqIEluZGljYXRlcyBpZiBhIHJlcXVlc3QgaXMgcGVuZGluZyBhbmQgc2V0cyB0aGUgbmV4dCBidXR0b25cbiAgICogdG8gZGlzYWJsZWQgd2hlbiB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBwZW5kaW5nPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlZCBzdGF0ZSBvZiBhIGJ1dHRvblxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2ZW50RW1pdHRlciB3aGljaCBlbWl0cyB3aGVuIGNhbmNlbCBidXR0b24gaXMgY2xpY2tlZFxuICAgKi9cbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKipcbiAgICogRXZlbnRFbWl0dGVyIHdoaWNoIGVtaXRzIHtzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwfSB3aGVuIG5leHQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25OZXh0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfT4oKTtcblxuICAvKipcbiAgICogRXZlbnRFbWl0dGVyIHdoaWNoIGVtaXRzIHtzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwfSB3aGVuIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25CYWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfT4oKTtcblxuICAvKipcbiAgICogRXZlbnRFbWl0dGVyIHdoaWNoIGVtaXRzIHdoZW4gdGhlIG9wdGlvbmFsIGN1c3RvbSBidXR0b24gaXMgY2xpY2tlZFxuICAgKi9cbiAgQE91dHB1dCgpIG9uQ3VzdG9tID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0b3Igd2hpY2ggYnV0dG9uIHNob3VsZCBiZSBzaG93bi5cbiAgICogQmFzZWQgb24gdGhlIGNkay1zdGVwcyB3aXRoaW4gdGhlIGM4eS1zdGVwcGVyXG4gICAqIG5leHQgYW5kIGJhY2sgYnV0dG9ucyBhcmUgcmVuZGVyZWQuXG4gICAqL1xuICBzaG93QnRuczogU3RlcHBlckJ1dHRvbnNWaXNpYmlsaXR5ID0ge1xuICAgIGNhbmNlbDogZmFsc2UsXG4gICAgYmFjazogZmFsc2UsXG4gICAgbmV4dDogZmFsc2UsXG4gICAgY3VzdG9tOiBmYWxzZVxuICB9O1xuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGRlZmluZWQgaW4gdGhlIHNob3dCdG5zIGhhdmUgYmVlbiBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGZvcmNlU2hvd0J0bnMgPSBmYWxzZTtcblxuICBwcml2YXRlIHN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0ZXBwZXI6IEM4eVN0ZXBwZXIsXG4gICAgcHJpdmF0ZSBzdGVwOiBDZGtTdGVwLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFRoaXMgb3B0aW9uIGZvcmNlcyB0aGUgZGlzcGxheSBvZiB0aGUgYnV0dG9ucyBwYXNzZWQgYnkgdGhlIGlucHV0LlxuICAgKiBJdCB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGFuZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgc3RhbmRhcmQgc2V0dGluZ3MuXG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPGM4eS1zdGVwcGVyLWJ1dHRvbnNcbiAgICogICBbbGFiZWxzXT1cInsgY3VzdG9tOiAnQ3VzdG9tIGJ0bicsIGNhbmNlbDogJ0NhbmNlbCBidG4nIH1cIlxuICAgKiAgIFtzaG93QnV0dG9uc109XCJ7IGN1c3RvbTogdHJ1ZSwgY2FuY2VsOiB0cnVlIH1cIlxuICAgKiA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGJ0bnMgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBidXR0b25zLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IHNob3dCdXR0b25zKGJ0bnM6IFN0ZXBwZXJCdXR0b25zVmlzaWJpbGl0eSkge1xuICAgIGlmIChidG5zKSB7XG4gICAgICB0aGlzLnNob3dCdG5zID0gYnRucztcbiAgICAgIHRoaXMuZm9yY2VTaG93QnRucyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuZm9yY2VTaG93QnRucykge1xuICAgICAgdGhpcy5zaG93QnRucy5jYW5jZWwgPSB0aGlzLm9uQ2FuY2VsLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICAgICAgdGhpcy5zaG93QnRucy5jdXN0b20gPSB0aGlzLm9uQ3VzdG9tLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0ZXBwZXIgJiYgdGhpcy5zdGVwcGVyLl9zdGVwcyAmJiB0aGlzLnN0ZXAgJiYgIXRoaXMuZm9yY2VTaG93QnRucykge1xuICAgICAgdGhpcy5zaG93QnRucy5iYWNrID0gdGhpcy5zdGVwcGVyLl9zdGVwcy5maXJzdCAhPT0gdGhpcy5zdGVwO1xuICAgICAgdGhpcy5zaG93QnRucy5uZXh0ID0gdGhpcy5zdGVwcGVyLl9zdGVwcy5sYXN0ICE9PSB0aGlzLnN0ZXA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RlcCAmJiB0aGlzLnN0ZXAuc3RlcENvbnRyb2wpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLnN0ZXAuc3RlcENvbnRyb2wuaW52YWxpZDtcblxuICAgICAgdGhpcy5zdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnN0ZXAuc3RlcENvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5zdGVwLnN0ZXBDb250cm9sLmludmFsaWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24gJiYgIXRoaXMuc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy5zdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgd2hlbiBjYW5jZWwgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIEl0IHdpbGwgZW1pdCBpbW1lZGlhdGUuXG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoQUNUSU9OU19TVEVQUEVSLkNMSUNLX1NURVBQRVJfQ0FOQ0VMX0JUTik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgd2hlbiBuZXh0IGJ1dHRvbiBpcyBjbGlja2VkLiBXaGVuIG9uTmV4dCBFdmVudEVtaXR0ZXIgaGFzIGFuIG9ic2VydmVyIHJlZ2lzdGVyZWRcbiAgICogaXQgd2lsbCBlbWl0IHRoZSBmb2xsb3dpbmcgb2JqZWN0IHtzdGVwcGVyOiBDOHlTdGVwcGVyOyBzdGVwOiBDZGtTdGVwfS5cbiAgICogT3RoZXJ3aXNlIGl0IHdpbGwgY2FsbCBzdGVwcGVyLm5leHQoKSBhcyBkZWZhdWx0LlxuICAgKi9cbiAgbmV4dCgpIHtcbiAgICB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWQuY29tcGxldGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5vbk5leHQub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub25OZXh0LmVtaXQoeyBzdGVwcGVyOiB0aGlzLnN0ZXBwZXIsIHN0ZXA6IHRoaXMuc3RlcCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGVwcGVyLm5leHQoKTtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoQUNUSU9OU19TVEVQUEVSLkNMSUNLX1NURVBQRVJfTkVYVF9CVE4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIHdoZW4gYmFjayBidXR0b24gaXMgY2xpY2tlZC4gV2hlbiBvbkJhY2sgRXZlbnRFbWl0dGVyIGhhcyBhbiBvYnNlcnZlciByZWdpc3RlcmVkXG4gICAqIGl0IHdpbGwgZW1pdCB0aGUgZm9sbG93aW5nIG9iamVjdCB7c3RlcHBlcjogQzh5U3RlcHBlcjsgc3RlcDogQ2RrU3RlcH0uXG4gICAqIE90aGVyd2lzZSBpdCB3aWxsIGNhbGwgc3RlcHBlci5wcmV2aW91cygpIGFzIGRlZmF1bHQuXG4gICAqL1xuICBiYWNrKCkge1xuICAgIHRoaXMuc3RlcHBlci5zZWxlY3RlZC5jb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vbkJhY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub25CYWNrLmVtaXQoeyBzdGVwcGVyOiB0aGlzLnN0ZXBwZXIsIHN0ZXA6IHRoaXMuc3RlcCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGVwcGVyLnByZXZpb3VzKCk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckV2ZW50KEFDVElPTlNfU1RFUFBFUi5DTElDS19TVEVQUEVSX0JBQ0tfQlROKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCB3aGVuIHRoZSBjdXN0b20gYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIEl0IHdpbGwgZW1pdCBpbW1lZGlhdGVseS5cbiAgICovXG4gIGN1c3RvbSgpIHtcbiAgICB0aGlzLm9uQ3VzdG9tLmVtaXQoKTtcbiAgICB0aGlzLnRyaWdnZXJFdmVudChBQ1RJT05TX1NURVBQRVIuQ0xJQ0tfU1RFUFBFUl9DVVNUT01fQlROKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlckV2ZW50KGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgLi4udGhpcy5zdGVwcGVyLnByb2R1Y3RFeHBlcmllbmNlRXZlbnQ/LmRhdGEsXG4gICAgICBhY3Rpb24sXG4gICAgICBzdGVwOiB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJhbnNsYXRlVG9FbmdsaXNoKHRoaXMuc3RlcC5sYWJlbClcbiAgICB9O1xuICAgIGNvbnN0IGV2ZW50TmFtZSA9IHRoaXMuc3RlcHBlci5wcm9kdWN0RXhwZXJpZW5jZUV2ZW50Py5ldmVudE5hbWUgfHwgJ2M4eVN0ZXBwZXInO1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoZXZlbnROYW1lLCBldmVudERhdGEpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICB0aXRsZT1cInt7IGxhYmVscz8uY2FuY2VsIHx8ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBkYXRhLWN5PVwiY2FuY2VsXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAqbmdJZj1cInNob3dCdG5zLmNhbmNlbFwiXG4gICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgPlxuICAgIDxzcGFuXG4gICAgICB0aXRsZT1cInt7IGxhYmVscz8uY2FuY2VsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICpuZ0lmPVwibGFiZWxzPy5jYW5jZWw7IGVsc2UgY2FuY2VsTGFiZWxcIlxuICAgID5cbiAgICAgIHt7IGxhYmVscz8uY2FuY2VsIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICAgIDxuZy10ZW1wbGF0ZSAjY2FuY2VsTGFiZWw+XG4gICAgICA8c3BhbiB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCI+e3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgdGl0bGU9XCJ7eyBsYWJlbHM/LmJhY2sgfHwgJ0JhY2snIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAqbmdJZj1cInNob3dCdG5zLmJhY2tcIlxuICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgIFtkaXNhYmxlZF09XCJwZW5kaW5nXCJcbiAgICBkYXRhLWN5PVwiYmFja1wiXG4gID5cbiAgICA8c3BhblxuICAgICAgdGl0bGU9XCJ7eyBsYWJlbHM/LmJhY2sgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKm5nSWY9XCJsYWJlbHM/LmJhY2s7IGVsc2UgYmFja0xhYmVsXCJcbiAgICA+XG4gICAgICB7eyBsYWJlbHM/LmJhY2sgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNiYWNrTGFiZWw+XG4gICAgICA8c3BhbiB0aXRsZT1cInt7ICdCYWNrJyB8IHRyYW5zbGF0ZSB9fVwiPnt7ICdCYWNrJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuXCJcbiAgICB0aXRsZT1cInt7IGxhYmVscz8uY3VzdG9tIHx8ICdDb21wbGV0ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgICpuZ0lmPVwic2hvd0J0bnMuY3VzdG9tXCJcbiAgICAoY2xpY2spPVwiY3VzdG9tKClcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdidG4tZGVmYXVsdCc6IHNob3dCdG5zLm5leHQsXG4gICAgICAnYnRuLXByaW1hcnknOiAhc2hvd0J0bnMubmV4dCxcbiAgICAgICdidG4tcGVuZGluZyc6IHBlbmRpbmdcbiAgICB9XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIGRhdGEtY3k9XCJjdXN0b21cIlxuICA+XG4gICAgPHNwYW5cbiAgICAgIHRpdGxlPVwie3sgbGFiZWxzPy5jdXN0b20gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKm5nSWY9XCJsYWJlbHM/LmN1c3RvbTsgZWxzZSBjdXN0b21MYWJlbFwiXG4gICAgPlxuICAgICAge3sgbGFiZWxzPy5jdXN0b20gfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNjdXN0b21MYWJlbD5cbiAgICAgIDxzcGFuIHRpdGxlPVwie3sgJ0NvbXBsZXRlJyB8IHRyYW5zbGF0ZSB9fVwiPnt7ICdDb21wbGV0ZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgdGl0bGU9XCJ7eyBsYWJlbHM/Lm5leHQgfHwgJ05leHQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwibmV4dCgpXCJcbiAgICAqbmdJZj1cInNob3dCdG5zLm5leHRcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogcGVuZGluZyB9XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIGRhdGEtY3k9XCJuZXh0XCJcbiAgPlxuICAgIDxzcGFuXG4gICAgICB0aXRsZT1cInt7IGxhYmVscz8ubmV4dCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAqbmdJZj1cImxhYmVscz8ubmV4dDsgZWxzZSBuZXh0TGFiZWxcIlxuICAgID5cbiAgICAgIHt7IGxhYmVscz8ubmV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI25leHRMYWJlbD5cbiAgICAgIDxzcGFuIHRpdGxlPVwie3sgJ05leHQnIHwgdHJhbnNsYXRlIH19XCI+e3sgJ05leHQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvYnV0dG9uPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJidXR0b25cIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
@@ -12,9 +12,15 @@ export class ApplicationPluginsGuard {
12
12
  if (!app) {
13
13
  return false;
14
14
  }
15
+ const manifest = app.manifest;
16
+ if (!manifest) {
17
+ return false;
18
+ }
15
19
  return (app.type === ApplicationType.HOSTED &&
16
20
  this.ecosystemService.isOwner(app) &&
17
- !this.ecosystemService.isPackage(app));
21
+ !this.ecosystemService.isPackage(app) &&
22
+ // apps like e.g. the public-options should not have the plugins tab
23
+ !manifest.noAppSwitcher);
18
24
  }
19
25
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationPluginsGuard, deps: [{ token: i1.EcosystemService }], target: i0.ɵɵFactoryTarget.Injectable }); }
20
26
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationPluginsGuard }); }
@@ -22,4 +28,4 @@ export class ApplicationPluginsGuard {
22
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationPluginsGuard, decorators: [{
23
29
  type: Injectable
24
30
  }], ctorParameters: () => [{ type: i1.EcosystemService }] });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL2FwcGxpY2F0aW9uLXBsdWdpbnMuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7QUFHeEUsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUFHLENBQUM7SUFFMUQsV0FBVyxDQUFDLEtBQTZCO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNwRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLENBQ0wsR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTTtZQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNsQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQ3RDLENBQUM7SUFDSixDQUFDOzhHQWJVLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblR5cGUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uUGx1Z2luc0d1YXJkIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlKSB7fVxuXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XG4gICAgY29uc3QgYXBwID0gcm91dGUuZGF0YS5jb250ZXh0RGF0YSB8fCByb3V0ZS5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YTtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQgJiZcbiAgICAgIHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc093bmVyKGFwcCkgJiZcbiAgICAgICF0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNQYWNrYWdlKGFwcClcbiAgICApO1xuICB9XG59XG4iXX0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL2FwcGxpY2F0aW9uLXBsdWdpbnMuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7O0FBR3hFLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRTFELFdBQVcsQ0FBQyxLQUE2QjtRQUN2QyxNQUFNLEdBQUcsR0FBaUIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxDQUNMLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU07WUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDbEMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUNyQyxvRUFBb0U7WUFDcEUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUN4QixDQUFDO0lBQ0osQ0FBQzs4R0FuQlUsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVHlwZSwgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvblBsdWdpbnNHdWFyZCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSkge31cblxuICBjYW5BY3RpdmF0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xuICAgIGNvbnN0IGFwcDogSUFwcGxpY2F0aW9uID0gcm91dGUuZGF0YS5jb250ZXh0RGF0YSB8fCByb3V0ZS5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YTtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtYW5pZmVzdCA9IGFwcC5tYW5pZmVzdDtcbiAgICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBhcHAudHlwZSA9PT0gQXBwbGljYXRpb25UeXBlLkhPU1RFRCAmJlxuICAgICAgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzT3duZXIoYXBwKSAmJlxuICAgICAgIXRoaXMuZWNvc3lzdGVtU2VydmljZS5pc1BhY2thZ2UoYXBwKSAmJlxuICAgICAgLy8gYXBwcyBsaWtlIGUuZy4gdGhlIHB1YmxpYy1vcHRpb25zIHNob3VsZCBub3QgaGF2ZSB0aGUgcGx1Z2lucyB0YWJcbiAgICAgICFtYW5pZmVzdC5ub0FwcFN3aXRjaGVyXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -153,14 +153,18 @@ class BrandingVersionService {
153
153
  */
154
154
  splitBrandingIntoNameAndIteration(version) {
155
155
  const splitted = version.split(BrandingVersionService.nameAndIterationSeparator);
156
- if (splitted.length != 2) {
157
- throw Error(`A valid version should be splitted by exactly one '${BrandingVersionService.nameAndIterationSeparator}', this is not the case for '${version}'`);
156
+ if (splitted.length < 2) {
157
+ throw Error(`A valid version should at least conatin one '${BrandingVersionService.nameAndIterationSeparator}', this is not the case for '${version}'`);
158
158
  }
159
- const iteration = Number.parseInt(splitted[1]);
159
+ const lastValueOfSplittedArray = splitted[splitted.length - 1];
160
+ if (lastValueOfSplittedArray === '' || !/[0-9]+/.test(lastValueOfSplittedArray)) {
161
+ throw Error(`The second part of the version should be a positive integer, this is not the case for '${lastValueOfSplittedArray}' from '${version}'`);
162
+ }
163
+ const iteration = Number.parseInt(lastValueOfSplittedArray);
160
164
  if (Number.isNaN(iteration) && iteration <= 0) {
161
165
  throw Error(`The second part of the version should be a positive integer, this is not the case for '${iteration}' from '${version}'`);
162
166
  }
163
- const name = splitted[0];
167
+ const name = splitted.slice(0, -1).join(BrandingVersionService.nameAndIterationSeparator);
164
168
  if (!name) {
165
169
  throw Error(`The first part of the version should not be empty, this is the case for '${name}' from '${version}'`);
166
170
  }
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-branding-shared-data.mjs","sources":["../../branding/shared/data/apply-branding-locally.service.ts","../../branding/shared/data/branding-shades.service.ts","../../branding/shared/data/branding-version.service.ts","../../branding/shared/data/branding.type.ts","../../branding/shared/data/store-branding.service.ts","../../branding/shared/data/c8y-ngx-components-branding-shared-data.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { OptionsService } from '@c8y/ngx-components';\nimport { BrandingOptionsJson } from './branding.type';\nimport { applyBrandingOptions, getOptionsToMerge, mergeOptions } from '@c8y/bootstrap';\n\n@Injectable({ providedIn: 'root' })\nexport class ApplyBrandingLocallyService {\n private keysToRemove: Array<string> | null;\n\n constructor(private options: OptionsService) {}\n\n applyBranding(optionsJson?: BrandingOptionsJson) {\n if (!this.keysToRemove) {\n this.keysToRemove = Object.keys(this.combineOptions());\n }\n const combinedOptions = this.combineOptions(optionsJson);\n const newKeysToRemove = Object.keys(combinedOptions);\n\n // avoid to remove keys that would actually be set again afterwards\n const keysToActuallyRemove = this.keysToRemove.filter(key => !newKeysToRemove.includes(key));\n this.removeKeysFromOptions(keysToActuallyRemove);\n\n this.keysToRemove = newKeysToRemove;\n\n applyBrandingOptions(combinedOptions);\n this.applyApplicationOptions(combinedOptions);\n }\n\n resetBranding() {\n this.applyBranding();\n }\n\n private applyApplicationOptions(optionsJson: any) {\n Object.entries(optionsJson).forEach(([key, value]) => {\n this.options.set(key, value);\n });\n }\n\n private removeKeysFromOptions(keys: string[]) {\n for (const key of keys) {\n this.options.delete(key);\n }\n }\n\n private combineOptions(optionsJson?: BrandingOptionsJson) {\n const optionsToMerge = getOptionsToMerge();\n if (!optionsToMerge) {\n // should never happen as the options should be set quite early in bootstrapping process.\n throw Error(`Failed to retrieve options for merging`);\n }\n if (optionsJson) {\n optionsToMerge.dynamicOptions = optionsJson;\n }\n return mergeOptions(optionsToMerge);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { default as chroma } from 'chroma-js';\n\n@Injectable({ providedIn: 'root' })\nexport class BrandingShadesService {\n getShadeColorBrandingCssVars(newBrandPrimary: string) {\n const shades = this.generateShades(newBrandPrimary);\n return this.shadesToObject(shades);\n }\n\n isValidShadeColor(color: string): boolean {\n try {\n return chroma.valid(color);\n } catch {\n return false;\n }\n }\n\n hasCustomShadesSet(\n previousBrandPrimary: string,\n otherVars: Record<string, string | number>\n ): boolean {\n if (previousBrandPrimary && otherVars) {\n const oldShades = this.generateShades(previousBrandPrimary);\n const oldShadesObj = this.shadesToObject(oldShades);\n for (const shadeKey of Object.keys(oldShadesObj)) {\n const fromVars = otherVars[shadeKey];\n const generated = oldShadesObj[shadeKey];\n if (fromVars === null || fromVars === undefined) {\n continue;\n }\n if (fromVars !== generated) {\n return true;\n }\n }\n }\n return false;\n }\n\n private shadesToObject(shades: string[]) {\n const brandingCssVars: Record<`c8y-brand-${number}0`, string> = {};\n let i = 1;\n for (const shade of shades) {\n const key = `c8y-brand-${i}0` as const;\n brandingCssVars[key] = shade;\n i++;\n }\n\n return brandingCssVars;\n }\n\n private generateShades(inputColor: string) {\n const referenceShades = [\n '#134158',\n '#1C5569',\n '#058192', // primary color\n '#22A6AA',\n '#3CC1B7',\n '#8ADBD5',\n '#C5EDEA',\n '#EBF9F8'\n ];\n // Calculate the luminance of the reference shades\n const referenceLuminances = referenceShades.map(color => chroma(color).luminance());\n const inputColorAsHex = chroma(inputColor);\n // Generate shades of the input color with the same luminance as the reference shades\n const generatedShades = referenceLuminances.map(luminance =>\n chroma(inputColor).luminance(luminance).hex('rgb')\n );\n // Calculate the distance between the input color and each color in the generatedShades array\n const distances = generatedShades.map(color => chroma.deltaE(inputColorAsHex, color));\n // Find the index of the color with the smallest distance\n const index = distances.indexOf(Math.min(...distances));\n generatedShades[index] = inputColorAsHex.hex('rgb');\n return generatedShades;\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Service for creating and manipulating branding versions.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BrandingVersionService {\n static readonly nameAndIterationSeparator = '-';\n\n /**\n * Creates the initial branding version for a given name.\n * @param name The name of the branding.\n * @returns The initial branding version.\n */\n createInitialBrandingVersion<T extends string>(name: T) {\n return `${name}${BrandingVersionService.nameAndIterationSeparator}${1}` as const;\n }\n\n /**\n * Splits a branding version into its name and iteration.\n * @param version The branding version to split.\n * @returns The name and iteration of the branding version.\n *\n * Errors are thrown if the version is not in the expected format.\n */\n splitBrandingIntoNameAndIteration(version: string): { name: string; iteration: number } {\n const splitted = version.split(BrandingVersionService.nameAndIterationSeparator);\n if (splitted.length != 2) {\n throw Error(\n `A valid version should be splitted by exactly one '${BrandingVersionService.nameAndIterationSeparator}', this is not the case for '${version}'`\n );\n }\n\n const iteration = Number.parseInt(splitted[1]);\n if (Number.isNaN(iteration) && iteration <= 0) {\n throw Error(\n `The second part of the version should be a positive integer, this is not the case for '${iteration}' from '${version}'`\n );\n }\n const name = splitted[0];\n if (!name) {\n throw Error(\n `The first part of the version should not be empty, this is the case for '${name}' from '${version}'`\n );\n }\n return { iteration, name };\n }\n\n /**\n * Bumps the iteration of a branding version.\n * @param version The branding version to bump.\n * @returns The bumped branding version.\n *\n * Errors are thrown if the version is not in the expected format.\n */\n bumpBrandingIteration(version: string) {\n const { name, iteration } = this.splitBrandingIntoNameAndIteration(version);\n return `${name}${BrandingVersionService.nameAndIterationSeparator}${iteration + 1}` as const;\n }\n}\n","import type { FormBuilder, FormControl } from '@angular/forms';\nimport { Alert, colorValidator } from '@c8y/ngx-components';\nimport type { ApplicationOptions } from '@c8y/options';\n\ntype ParamIntersection<T> = {\n [K in keyof T]: (x: T[K]) => void;\n}[keyof T] extends (x: infer I) => void\n ? I\n : never;\n\nexport type BrandingFormValue = ReturnType<typeof createGenericBrandingForm>['value'];\nexport type BrandingFormKeys = keyof BrandingFormValue;\nexport type BrandingFormTopLevelKeys = (typeof brandingFormGroupTopLevelEntries)[number];\nexport type BrandingFormTopLevelKeysToUnpack =\n (typeof brandingFormGroupTopLevelEntriesToUnpack)[number];\n\nexport type TopLevelFormKeysNotToUnpack = Exclude<\n BrandingFormTopLevelKeys,\n BrandingFormTopLevelKeysToUnpack\n>;\nexport type UnpackedTopLevelFormKeys = ParamIntersection<\n Pick<BrandingFormValue, BrandingFormTopLevelKeysToUnpack>\n>;\nexport type NotUnpackedTopLevelFormKeys = Pick<BrandingFormValue, TopLevelFormKeysNotToUnpack>;\nexport type TopLevelForm = NotUnpackedTopLevelFormKeys & UnpackedTopLevelFormKeys;\nexport type TopLevelValues = TopLevelForm;\n\nexport type BrandingCSSVarsForm = Omit<BrandingFormValue, BrandingFormTopLevelKeys>;\n\nexport type BrandingCSSVarsValues = ParamIntersection<BrandingCSSVarsForm> &\n ReturnType<typeof createBrandingForm>['value'];\n\nexport type BrandingOptionsJson = TopLevelValues & {\n brandingCssVars?: BrandingCSSVarsValues;\n} & Partial<ApplicationOptions>;\n\nexport const brandingFormGroupTopLevelEntries = [\n 'cookieBanner',\n 'genericApplicationOptions',\n 'darkThemeAvailable',\n 'messageBanner'\n] as const satisfies ReadonlyArray<BrandingFormKeys>;\nexport const brandingFormGroupTopLevelEntriesToUnpack = [\n 'genericApplicationOptions'\n] as const satisfies ReadonlyArray<(typeof brandingFormGroupTopLevelEntries)[number]>;\n\nexport const numberBrandingVars = ['brand-logo-img-height', 'btn-border-radius-base'] as const;\nexport const colorBrandingVars = [\n 'brand-dark',\n 'brand-light',\n 'brand-primary',\n 'c8y-brand-10',\n 'c8y-brand-20',\n 'c8y-brand-30',\n 'c8y-brand-40',\n 'c8y-brand-50',\n 'c8y-brand-60',\n 'c8y-brand-70',\n 'c8y-brand-80',\n 'palette-status-info',\n 'palette-status-warning',\n 'palette-status-success',\n 'palette-status-danger',\n 'palette-status-info-light',\n 'palette-status-warning-light',\n 'palette-status-success-light',\n 'palette-status-danger-light',\n 'palette-status-info-dark',\n 'palette-status-warning-dark',\n 'palette-status-success-dark',\n 'palette-status-danger-dark',\n 'body-background-color',\n 'text-color',\n 'text-muted',\n 'link-color',\n 'link-hover-color',\n 'action-bar-background-default',\n 'action-bar-color-actions-hover',\n 'action-bar-color-actions',\n 'action-bar-color-default',\n 'action-bar-icon-color',\n 'header-color',\n 'header-text-color',\n 'header-hover-color',\n 'navigator-bg-color',\n 'navigator-active-bg',\n 'navigator-border-active',\n 'navigator-header-bg',\n 'navigator-title-color',\n 'navigator-separator-color',\n 'navigator-text-color',\n 'navigator-color-active',\n 'right-drawer-background-default',\n 'right-drawer-text-color-default',\n 'right-drawer-separator-color',\n 'right-drawer-link-color',\n 'right-drawer-link-color-hover',\n 'right-drawer-text-muted'\n] as const;\nexport const stringBrandingVars = ['brand-logo-img', 'navigator-platform-logo'] as const;\n\nexport const stringOrNumberBrandingVars = ['navigator-platform-logo-height'] as const;\n\nexport const allBrandingCSSVars = [\n ...numberBrandingVars,\n ...stringBrandingVars,\n ...colorBrandingVars\n] as const;\n\nexport function createGenericBrandingForm(formBuilder: FormBuilder) {\n const form = formBuilder.group({\n darkThemeAvailable: formBuilder.control<boolean>(false),\n cookieBanner: formBuilder.group({\n cookieBannerTitle: formBuilder.control<string>(undefined),\n cookieBannerText: formBuilder.control<string>(undefined),\n cookieBannerDisabled: formBuilder.control(false),\n policyUrl: formBuilder.control<string>(undefined),\n policyVersion: formBuilder.control<string>(undefined)\n }),\n messageBanner: formBuilder.group({\n messageBannerEnabled: formBuilder.control(false),\n messageBannerContent: formBuilder.control<string>(''),\n messageBannerType: formBuilder.control<Alert['type']>('info')\n }),\n baseTypography: formBuilder.group({\n 'font-url': formBuilder.control<string>(undefined),\n 'font-family-base': formBuilder.control<string>(undefined)\n }),\n headingsAndNavigatorTypography: formBuilder.group({\n 'font-family-headings': formBuilder.control<string>(undefined),\n 'navigator-font-family': formBuilder.control<string>('var(--font-family-base)')\n }),\n genericApplicationOptions: formBuilder.group({\n globalTitle: formBuilder.control<string>(undefined),\n faviconUrl: formBuilder.control<string>(undefined)\n })\n });\n return form;\n}\n\nexport function createBrandingForm(formBuilder: FormBuilder) {\n const colorControls = colorBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<string>(undefined, { asyncValidators: [colorValidator()] });\n return acc;\n },\n {} as { [key in (typeof colorBrandingVars)[number]]: FormControl<string> }\n );\n const stringControls = stringBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<string>(undefined);\n return acc;\n },\n {} as { [key in (typeof stringBrandingVars)[number]]: FormControl<string> }\n );\n const numberControls = numberBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<number>(undefined);\n return acc;\n },\n {} as { [key in (typeof numberBrandingVars)[number]]: FormControl<number> }\n );\n const stringOrNumberControls = stringOrNumberBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<number>(undefined);\n return acc;\n },\n {} as {\n [key in (typeof stringOrNumberBrandingVars)[number]]: FormControl<string | number>;\n }\n );\n const form = formBuilder.group({\n ...colorControls,\n ...stringControls,\n ...numberControls,\n ...stringOrNumberControls\n });\n\n return form;\n}\n","import { Injectable } from '@angular/core';\nimport {\n ApplicationAvailability,\n ApplicationType,\n FetchClient,\n IApplication,\n IApplicationBinary,\n IManagedObject,\n InventoryBinaryService,\n InventoryService\n} from '@c8y/client';\nimport { ApplicationService } from '@c8y/client';\nimport { AppStateService, ThemeSwitcherService, ZipService } from '@c8y/ngx-components';\nimport { defer, BehaviorSubject, Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { cloneDeep, uniq } from 'lodash-es';\nimport { BrandingVersionService } from './branding-version.service';\nimport { BrandingOptionsJson, allBrandingCSSVars, numberBrandingVars } from './branding.type';\nimport { StaticAsset, StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\n\nexport interface BrandVersion {\n name: string;\n id: string;\n revision: number;\n version: string;\n tags: string[];\n owner?: string;\n lastUpdated?: string;\n publicOptionsApp?: IApplication;\n}\n\nexport interface BrandingFileDetails {\n fileName: string;\n blob: Blob;\n jsonContent?: any;\n}\n\nexport interface BrandingFileDetailsLegacy {\n path: string;\n value: string;\n blob?: Blob;\n fileName: string;\n urlWrapped: boolean;\n}\n\n/**\n * Service to load and store the branding of the tenant.\n */\n@Injectable({ providedIn: 'root' })\nexport class StoreBrandingService {\n readonly fileNames = {\n options: 'options.json',\n manifest: 'cumulocity.json',\n exportZipName: 'public-options.zip'\n } as const;\n readonly manifestValues = {\n name: 'public-options',\n contextPath: 'public-options',\n key: 'public-options-key',\n description: 'Application containing static assets used by e.g. branding.',\n noAppSwitcher: true,\n type: ApplicationType.HOSTED,\n availability: ApplicationAvailability.SHARED\n } as const satisfies IApplication;\n refreshTriggerBrandingVariants = new BehaviorSubject<void>(null);\n constructor(\n private applicationService: ApplicationService,\n private inventory: InventoryService,\n private binary: InventoryBinaryService,\n private zip: ZipService,\n private fetch: FetchClient,\n private brandingVersionService: BrandingVersionService,\n private appState: AppStateService,\n private staticAssets: StaticAssetsService,\n private themeSwitcher: ThemeSwitcherService\n ) {}\n\n /**\n * Sets the `latest` tag on the provided branding version. Making it the global active branding.\n */\n async markAsActive(brandingVersion: BrandVersion, app?: IApplication): Promise<void> {\n const publicOptions = app || (await this.getPublicOptionsApp());\n const tags = brandingVersion.tags || [];\n const version = brandingVersion.version;\n await this.applicationService.setPackageVersionTag(publicOptions, version, [...tags, 'latest']);\n }\n\n /**\n * Returns the brandings of the tenant.\n * If no public options app is found, publicOptions will be undefined and variants an empty array.\n * For old brandings (created without versioning) a default version is returned.\n */\n async loadBrandingVariants(\n app?: IApplication\n ): Promise<{ publicOptions: IApplication | undefined; variants: BrandVersion[] }> {\n const publicOptions = app || (await this.getPublicOptionsApp());\n if (!publicOptions) {\n return { publicOptions: undefined, variants: [] };\n }\n const { data: versions } = await this.applicationService.listVersions(publicOptions);\n let mappedVersions: BrandVersion[] =\n versions\n ?.map(tmp => {\n try {\n const { name, iteration } =\n this.brandingVersionService.splitBrandingIntoNameAndIteration(tmp.version);\n return {\n revision: iteration,\n name: name,\n id: tmp.binaryId,\n version: tmp.version,\n tags: tmp.tags || [],\n publicOptionsApp: publicOptions\n };\n } catch (e) {\n console.warn('Failed to parse version', tmp, e);\n return undefined;\n }\n })\n ?.filter(Boolean) || [];\n if (!versions && publicOptions.activeVersionId) {\n mappedVersions = [\n {\n name: 'default',\n id: publicOptions.activeVersionId,\n version: 'default-1',\n revision: 1,\n tags: ['latest', 'default'],\n publicOptionsApp: publicOptions\n }\n ];\n }\n\n const variants = await this.getMetadataOfBrandingBinaries(mappedVersions);\n return { publicOptions, variants };\n }\n\n /**\n * As the branding is not immediately available after creation, this method will wait for the branding to be present.\n * @param version The version of the branding to be retrieved.\n */\n async waitForBrandingToBePresent(version: string): Promise<void> {\n const numberOfAttempts = 120;\n const sleepDurationInSeconds = 1;\n for (let i = 0; i < numberOfAttempts; i++) {\n try {\n // do not sleep before the first attempt\n if (i !== 0) {\n await new Promise(resolve => setTimeout(resolve, sleepDurationInSeconds * 1_000));\n }\n await this.getBrandingOptionsForVersion(version);\n console.info(`Branding \"${version}\" available now.`);\n return;\n } catch (e) {\n console.warn(\n `Branding \"${version}\" not yet present, retrying in ${sleepDurationInSeconds} seconds...`,\n e\n );\n }\n }\n throw new Error(\n `Branding \"${version}\" not available after ${numberOfAttempts * sleepDurationInSeconds} seconds, giving up.`\n );\n }\n\n /**\n * Will create a the initial branding based on the currently applied CSS variables.\n */\n async getStartedUsingBranding(): Promise<void> {\n const allVariables: Record<string, string> = {};\n const themeToRetrieveVars = ['light', 'dark'] as const;\n const unretrievableVars = new Array<string>();\n for (const theme of themeToRetrieveVars) {\n this.themeSwitcher.temporaryChangeTheme(theme);\n const styles = getComputedStyle(document.body);\n const variablesToSkip = [\n 'navigator-platform-logo',\n 'brand-logo-img'\n ] satisfies (typeof allBrandingCSSVars)[number][];\n const values = allBrandingCSSVars\n .filter(cssVar => !variablesToSkip.includes(cssVar as any))\n .reduce((prev, key) => {\n const directValue = styles.getPropertyValue(`--${key}`);\n const c8yPrefixedValue = styles.getPropertyValue(`--c8y-${key}`);\n const newKey = theme === 'light' ? key : `dark-${key}`;\n if (!directValue && !c8yPrefixedValue) {\n unretrievableVars.push(newKey);\n return prev;\n }\n let value: string | number = directValue || c8yPrefixedValue;\n if (numberBrandingVars.includes(key as any)) {\n try {\n value = Number.parseFloat(value.replace(/[A-Za-z]/g, '').trim());\n } catch (e) {\n console.warn(\n `Failed to parse number for \"${key}\" value that failed to parse: \"${value}\"`,\n e\n );\n return prev;\n }\n }\n return Object.assign(prev, { [newKey]: value });\n }, {});\n Object.assign(allVariables, values);\n }\n this.themeSwitcher.resetTemporaryTheme();\n\n try {\n await this.createPublicOptionsAppFromInheritedOptions(allVariables);\n } catch (e) {\n console.warn(e);\n }\n }\n\n getZipForBinary(\n binaryId: string,\n fileName: string = this.fileNames.exportZipName\n ): Observable<File> {\n return defer(() => this.binary.download(binaryId)).pipe(\n switchMap(response => response.blob()),\n map(blob => new File([blob], fileName))\n );\n }\n\n /**\n * Deletes the public options app and therefore all brandings.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async deleteAllBrandings(publicOptions?: IApplication): Promise<void> {\n publicOptions = publicOptions || (await this.getPublicOptionsApp());\n await this.applicationService.delete(publicOptions);\n }\n\n /**\n * Enhances the provided branding versions with metadata from the linked binaries.\n * It will add the owner and lastUpdated fields to the versions.\n * The provided array is altered.\n */\n async getMetadataOfBrandingBinaries(versions: BrandVersion[]): Promise<BrandVersion[]> {\n const binaryIds = uniq(versions.map(tmp => tmp.id));\n if (!binaryIds.length) {\n return versions;\n }\n const { data: metadata } = await this.inventory.list({\n ids: binaryIds.join(','),\n pageSize: 2000\n });\n return versions.map(version => {\n const metadataForVersion =\n metadata.find(tmp => tmp.id === version.id) || ({} as IManagedObject);\n const { owner, lastUpdated } = metadataForVersion;\n return Object.assign(version, { owner, lastUpdated });\n });\n }\n\n /**\n * Saves the provided branding as a new version for the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async saveBranding(\n blob: Blob | File,\n version: string,\n tags: string[] = [],\n publicOptionsApp?: IApplication\n ): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n const file = blob instanceof File ? blob : new File([blob], `public-options-${version}.zip`);\n const publicOptions = publicOptionsApp || (await this.getPublicOptionsApp());\n\n const { data: binary } = await this.applicationService\n .binary(publicOptions)\n .uploadApplicationVersion(file, version, tags);\n if (!publicOptions.activeVersionId || tags.includes('latest')) {\n await this.applicationService.update({\n id: publicOptions.id,\n activeVersionId: `${binary.binaryId}`\n });\n }\n this.refreshTriggerBrandingVariants.next();\n return { version, binary, tags };\n }\n\n /**\n * Removes a branding version from the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async deleteBrandingVersion(version: string, publicOptions?: IApplication): Promise<void> {\n publicOptions = publicOptions || (await this.getPublicOptionsApp());\n await this.applicationService.deleteVersionPackage(publicOptions, { version });\n this.refreshTriggerBrandingVariants.next();\n }\n\n /**\n * Returns the blob of a zip file containing the provided branding options (options.json) and the manifest (cumulocity.json).\n */\n async getBrandingZip(content: Record<string, any> = {}): Promise<Blob> {\n content.lastUpdated = new Date().toISOString();\n const contentAsString = JSON.stringify(content);\n const zip = await this.zip.createZip([\n { fileName: this.fileNames.options, blob: new Blob([contentAsString]) },\n { fileName: this.fileNames.manifest, blob: new Blob([JSON.stringify(this.manifestValues)]) }\n ]);\n return zip;\n }\n\n /**\n * Adds a new branding version to the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async addBranding(\n version: string,\n content: BrandingOptionsJson = {},\n tags: string[] = [],\n publicOptionsApp?: IApplication\n ): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n const zip = await this.getBrandingZip(content);\n\n return await this.saveBranding(zip, version, tags, publicOptionsApp);\n }\n\n /**\n * Returns the branding options for the provided version.\n * If no branding was found (e.g. status 404), an error is thrown.\n */\n async getBrandingOptionsForVersion(version?: string): Promise<BrandingOptionsJson> {\n const url = `/apps/public/public-options${version ? `@${version}` : ''}/${this.fileNames.options}?nocache=${new Date().getTime()}`;\n const response = await this.fetch.fetch(url);\n if (response.status !== 200) {\n throw Error(`Unexpected status code: ${response.status}`);\n }\n\n const content = await response.json();\n return content as BrandingOptionsJson;\n }\n\n /**\n * Saves a new iteration of an already existing branding.\n */\n async saveExistingBranding(\n branding: Record<string, any>,\n currentVersion: string,\n tagsOfCurrentVersion: string[] = [],\n newVersion?: string\n ): Promise<string> {\n const publicOptions = await this.getPublicOptionsApp();\n const versionToBeSet = newVersion\n ? this.brandingVersionService.createInitialBrandingVersion(newVersion)\n : this.brandingVersionService.bumpBrandingIteration(currentVersion);\n\n const finalTags = tagsOfCurrentVersion;\n // only apply latest tag directly\n // there seems to be some special handling for the latest tag in the backend, that allows to directly move it while uploading the new version.\n // for all other tags this results in a 409 conflict. We therefore need to first delete the old version, before setting the other tags on the new version.\n if (!newVersion) {\n tagsOfCurrentVersion = tagsOfCurrentVersion.filter(tag => tag === 'latest');\n }\n await this.addBranding(versionToBeSet, branding, tagsOfCurrentVersion, publicOptions);\n if (!newVersion) {\n try {\n await this.deleteBrandingVersion(currentVersion, publicOptions);\n } catch (e) {\n if (e.res.status !== 404) {\n throw e;\n }\n }\n await this.applicationService.setPackageVersionTag(publicOptions, versionToBeSet, finalTags);\n }\n\n return versionToBeSet;\n }\n\n /**\n * Combines current branding options with the provided branding variables and creates a new public options app.\n * Any assets in the branding will be cloned.\n */\n async createPublicOptionsAppFromInheritedOptions(brandingVars?: Record<string, string>): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n let currentlyAppliedBranding: BrandingOptionsJson;\n let fallBackBranding: BrandingOptionsJson = {};\n try {\n currentlyAppliedBranding = await this.getBrandingOptionsForVersion();\n fallBackBranding = cloneDeep(currentlyAppliedBranding);\n } catch (e) {\n console.warn('Failed to get currently applied branding, proceeding with empty branding.', e);\n }\n\n if (brandingVars) {\n currentlyAppliedBranding = currentlyAppliedBranding || {};\n const brandingCssVars = currentlyAppliedBranding.brandingCssVars || {};\n Object.assign(brandingCssVars, brandingVars);\n currentlyAppliedBranding.brandingCssVars = brandingCssVars;\n }\n\n if (currentlyAppliedBranding) {\n try {\n const { oldAssets, newAssets } = await this.staticAssets.cloneAssetsIntoTenant('branding');\n currentlyAppliedBranding = this.replaceBrandingAssetsInBrandingOptions(\n currentlyAppliedBranding,\n oldAssets,\n newAssets\n );\n } catch (e) {\n console.warn('Failed to relocate branding assets into current tenant.', e);\n }\n }\n\n const publicOptionsApp = await this.createPublicOptionsApp();\n\n const defaultBrandingName = `default`;\n const result = await this.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(defaultBrandingName),\n currentlyAppliedBranding || {},\n ['latest', defaultBrandingName],\n publicOptionsApp\n );\n\n const fallbackBrandingName = `fallback`;\n await this.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(fallbackBrandingName),\n fallBackBranding,\n [fallbackBrandingName],\n publicOptionsApp\n );\n\n return result;\n }\n\n /**\n * Replaces the assets in the branding options with the new assets.\n * Goes through the provided `oldAssets` and replaces their occurrences in the branding with the corresponding `newAssets` entry sharing the same fileName.\n * Returns the updated branding options.\n */\n replaceBrandingAssetsInBrandingOptions(\n branding: BrandingOptionsJson,\n oldAssets: StaticAsset[],\n newAssets: StaticAsset[]\n ): BrandingOptionsJson {\n let brandingAsJSONString = JSON.stringify(branding);\n for (const oldAsset of oldAssets) {\n const newLocatedAsset = newAssets.find(tmp => tmp.fileName === oldAsset.fileName);\n if (!newLocatedAsset) {\n continue;\n }\n // if the path is the same, we don't need to replace it.\n if (oldAsset.path === newLocatedAsset.path) {\n continue;\n }\n\n // TODO: use proper replaceAll once it's available with es2021\n brandingAsJSONString = brandingAsJSONString.split(oldAsset.path).join(newLocatedAsset.path);\n }\n return JSON.parse(brandingAsJSONString);\n }\n\n private async getPublicOptionsApp() {\n let { data: apps } = await this.applicationService.listByName(this.manifestValues.name);\n apps = apps.filter(app => app.owner?.tenant?.id === this.appState.currentTenant.value?.name);\n\n return apps[0];\n }\n\n private async createPublicOptionsApp() {\n const { data: app } = await this.applicationService.create(this.manifestValues);\n return app;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3.BrandingVersionService"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-branding-shared-data.mjs","sources":["../../branding/shared/data/apply-branding-locally.service.ts","../../branding/shared/data/branding-shades.service.ts","../../branding/shared/data/branding-version.service.ts","../../branding/shared/data/branding.type.ts","../../branding/shared/data/store-branding.service.ts","../../branding/shared/data/c8y-ngx-components-branding-shared-data.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { OptionsService } from '@c8y/ngx-components';\nimport { BrandingOptionsJson } from './branding.type';\nimport { applyBrandingOptions, getOptionsToMerge, mergeOptions } from '@c8y/bootstrap';\n\n@Injectable({ providedIn: 'root' })\nexport class ApplyBrandingLocallyService {\n private keysToRemove: Array<string> | null;\n\n constructor(private options: OptionsService) {}\n\n applyBranding(optionsJson?: BrandingOptionsJson) {\n if (!this.keysToRemove) {\n this.keysToRemove = Object.keys(this.combineOptions());\n }\n const combinedOptions = this.combineOptions(optionsJson);\n const newKeysToRemove = Object.keys(combinedOptions);\n\n // avoid to remove keys that would actually be set again afterwards\n const keysToActuallyRemove = this.keysToRemove.filter(key => !newKeysToRemove.includes(key));\n this.removeKeysFromOptions(keysToActuallyRemove);\n\n this.keysToRemove = newKeysToRemove;\n\n applyBrandingOptions(combinedOptions);\n this.applyApplicationOptions(combinedOptions);\n }\n\n resetBranding() {\n this.applyBranding();\n }\n\n private applyApplicationOptions(optionsJson: any) {\n Object.entries(optionsJson).forEach(([key, value]) => {\n this.options.set(key, value);\n });\n }\n\n private removeKeysFromOptions(keys: string[]) {\n for (const key of keys) {\n this.options.delete(key);\n }\n }\n\n private combineOptions(optionsJson?: BrandingOptionsJson) {\n const optionsToMerge = getOptionsToMerge();\n if (!optionsToMerge) {\n // should never happen as the options should be set quite early in bootstrapping process.\n throw Error(`Failed to retrieve options for merging`);\n }\n if (optionsJson) {\n optionsToMerge.dynamicOptions = optionsJson;\n }\n return mergeOptions(optionsToMerge);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { default as chroma } from 'chroma-js';\n\n@Injectable({ providedIn: 'root' })\nexport class BrandingShadesService {\n getShadeColorBrandingCssVars(newBrandPrimary: string) {\n const shades = this.generateShades(newBrandPrimary);\n return this.shadesToObject(shades);\n }\n\n isValidShadeColor(color: string): boolean {\n try {\n return chroma.valid(color);\n } catch {\n return false;\n }\n }\n\n hasCustomShadesSet(\n previousBrandPrimary: string,\n otherVars: Record<string, string | number>\n ): boolean {\n if (previousBrandPrimary && otherVars) {\n const oldShades = this.generateShades(previousBrandPrimary);\n const oldShadesObj = this.shadesToObject(oldShades);\n for (const shadeKey of Object.keys(oldShadesObj)) {\n const fromVars = otherVars[shadeKey];\n const generated = oldShadesObj[shadeKey];\n if (fromVars === null || fromVars === undefined) {\n continue;\n }\n if (fromVars !== generated) {\n return true;\n }\n }\n }\n return false;\n }\n\n private shadesToObject(shades: string[]) {\n const brandingCssVars: Record<`c8y-brand-${number}0`, string> = {};\n let i = 1;\n for (const shade of shades) {\n const key = `c8y-brand-${i}0` as const;\n brandingCssVars[key] = shade;\n i++;\n }\n\n return brandingCssVars;\n }\n\n private generateShades(inputColor: string) {\n const referenceShades = [\n '#134158',\n '#1C5569',\n '#058192', // primary color\n '#22A6AA',\n '#3CC1B7',\n '#8ADBD5',\n '#C5EDEA',\n '#EBF9F8'\n ];\n // Calculate the luminance of the reference shades\n const referenceLuminances = referenceShades.map(color => chroma(color).luminance());\n const inputColorAsHex = chroma(inputColor);\n // Generate shades of the input color with the same luminance as the reference shades\n const generatedShades = referenceLuminances.map(luminance =>\n chroma(inputColor).luminance(luminance).hex('rgb')\n );\n // Calculate the distance between the input color and each color in the generatedShades array\n const distances = generatedShades.map(color => chroma.deltaE(inputColorAsHex, color));\n // Find the index of the color with the smallest distance\n const index = distances.indexOf(Math.min(...distances));\n generatedShades[index] = inputColorAsHex.hex('rgb');\n return generatedShades;\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Service for creating and manipulating branding versions.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BrandingVersionService {\n static readonly nameAndIterationSeparator = '-';\n\n /**\n * Creates the initial branding version for a given name.\n * @param name The name of the branding.\n * @returns The initial branding version.\n */\n createInitialBrandingVersion<T extends string>(name: T) {\n return `${name}${BrandingVersionService.nameAndIterationSeparator}${1}` as const;\n }\n\n /**\n * Splits a branding version into its name and iteration.\n * @param version The branding version to split.\n * @returns The name and iteration of the branding version.\n *\n * Errors are thrown if the version is not in the expected format.\n */\n splitBrandingIntoNameAndIteration(version: string): { name: string; iteration: number } {\n const splitted = version.split(BrandingVersionService.nameAndIterationSeparator);\n if (splitted.length < 2) {\n throw Error(\n `A valid version should at least conatin one '${BrandingVersionService.nameAndIterationSeparator}', this is not the case for '${version}'`\n );\n }\n\n const lastValueOfSplittedArray = splitted[splitted.length - 1];\n if (lastValueOfSplittedArray === '' || !/[0-9]+/.test(lastValueOfSplittedArray)) {\n throw Error(\n `The second part of the version should be a positive integer, this is not the case for '${lastValueOfSplittedArray}' from '${version}'`\n );\n }\n\n const iteration = Number.parseInt(lastValueOfSplittedArray);\n if (Number.isNaN(iteration) && iteration <= 0) {\n throw Error(\n `The second part of the version should be a positive integer, this is not the case for '${iteration}' from '${version}'`\n );\n }\n\n const name = splitted.slice(0, -1).join(BrandingVersionService.nameAndIterationSeparator);\n if (!name) {\n throw Error(\n `The first part of the version should not be empty, this is the case for '${name}' from '${version}'`\n );\n }\n\n return { iteration, name };\n }\n\n /**\n * Bumps the iteration of a branding version.\n * @param version The branding version to bump.\n * @returns The bumped branding version.\n *\n * Errors are thrown if the version is not in the expected format.\n */\n bumpBrandingIteration(version: string) {\n const { name, iteration } = this.splitBrandingIntoNameAndIteration(version);\n return `${name}${BrandingVersionService.nameAndIterationSeparator}${iteration + 1}` as const;\n }\n}\n","import type { FormBuilder, FormControl } from '@angular/forms';\nimport { Alert, colorValidator } from '@c8y/ngx-components';\nimport type { ApplicationOptions } from '@c8y/options';\n\ntype ParamIntersection<T> = {\n [K in keyof T]: (x: T[K]) => void;\n}[keyof T] extends (x: infer I) => void\n ? I\n : never;\n\nexport type BrandingFormValue = ReturnType<typeof createGenericBrandingForm>['value'];\nexport type BrandingFormKeys = keyof BrandingFormValue;\nexport type BrandingFormTopLevelKeys = (typeof brandingFormGroupTopLevelEntries)[number];\nexport type BrandingFormTopLevelKeysToUnpack =\n (typeof brandingFormGroupTopLevelEntriesToUnpack)[number];\n\nexport type TopLevelFormKeysNotToUnpack = Exclude<\n BrandingFormTopLevelKeys,\n BrandingFormTopLevelKeysToUnpack\n>;\nexport type UnpackedTopLevelFormKeys = ParamIntersection<\n Pick<BrandingFormValue, BrandingFormTopLevelKeysToUnpack>\n>;\nexport type NotUnpackedTopLevelFormKeys = Pick<BrandingFormValue, TopLevelFormKeysNotToUnpack>;\nexport type TopLevelForm = NotUnpackedTopLevelFormKeys & UnpackedTopLevelFormKeys;\nexport type TopLevelValues = TopLevelForm;\n\nexport type BrandingCSSVarsForm = Omit<BrandingFormValue, BrandingFormTopLevelKeys>;\n\nexport type BrandingCSSVarsValues = ParamIntersection<BrandingCSSVarsForm> &\n ReturnType<typeof createBrandingForm>['value'];\n\nexport type BrandingOptionsJson = TopLevelValues & {\n brandingCssVars?: BrandingCSSVarsValues;\n} & Partial<ApplicationOptions>;\n\nexport const brandingFormGroupTopLevelEntries = [\n 'cookieBanner',\n 'genericApplicationOptions',\n 'darkThemeAvailable',\n 'messageBanner'\n] as const satisfies ReadonlyArray<BrandingFormKeys>;\nexport const brandingFormGroupTopLevelEntriesToUnpack = [\n 'genericApplicationOptions'\n] as const satisfies ReadonlyArray<(typeof brandingFormGroupTopLevelEntries)[number]>;\n\nexport const numberBrandingVars = ['brand-logo-img-height', 'btn-border-radius-base'] as const;\nexport const colorBrandingVars = [\n 'brand-dark',\n 'brand-light',\n 'brand-primary',\n 'c8y-brand-10',\n 'c8y-brand-20',\n 'c8y-brand-30',\n 'c8y-brand-40',\n 'c8y-brand-50',\n 'c8y-brand-60',\n 'c8y-brand-70',\n 'c8y-brand-80',\n 'palette-status-info',\n 'palette-status-warning',\n 'palette-status-success',\n 'palette-status-danger',\n 'palette-status-info-light',\n 'palette-status-warning-light',\n 'palette-status-success-light',\n 'palette-status-danger-light',\n 'palette-status-info-dark',\n 'palette-status-warning-dark',\n 'palette-status-success-dark',\n 'palette-status-danger-dark',\n 'body-background-color',\n 'text-color',\n 'text-muted',\n 'link-color',\n 'link-hover-color',\n 'action-bar-background-default',\n 'action-bar-color-actions-hover',\n 'action-bar-color-actions',\n 'action-bar-color-default',\n 'action-bar-icon-color',\n 'header-color',\n 'header-text-color',\n 'header-hover-color',\n 'navigator-bg-color',\n 'navigator-active-bg',\n 'navigator-border-active',\n 'navigator-header-bg',\n 'navigator-title-color',\n 'navigator-separator-color',\n 'navigator-text-color',\n 'navigator-color-active',\n 'right-drawer-background-default',\n 'right-drawer-text-color-default',\n 'right-drawer-separator-color',\n 'right-drawer-link-color',\n 'right-drawer-link-color-hover',\n 'right-drawer-text-muted'\n] as const;\nexport const stringBrandingVars = ['brand-logo-img', 'navigator-platform-logo'] as const;\n\nexport const stringOrNumberBrandingVars = ['navigator-platform-logo-height'] as const;\n\nexport const allBrandingCSSVars = [\n ...numberBrandingVars,\n ...stringBrandingVars,\n ...colorBrandingVars\n] as const;\n\nexport function createGenericBrandingForm(formBuilder: FormBuilder) {\n const form = formBuilder.group({\n darkThemeAvailable: formBuilder.control<boolean>(false),\n cookieBanner: formBuilder.group({\n cookieBannerTitle: formBuilder.control<string>(undefined),\n cookieBannerText: formBuilder.control<string>(undefined),\n cookieBannerDisabled: formBuilder.control(false),\n policyUrl: formBuilder.control<string>(undefined),\n policyVersion: formBuilder.control<string>(undefined)\n }),\n messageBanner: formBuilder.group({\n messageBannerEnabled: formBuilder.control(false),\n messageBannerContent: formBuilder.control<string>(''),\n messageBannerType: formBuilder.control<Alert['type']>('info')\n }),\n baseTypography: formBuilder.group({\n 'font-url': formBuilder.control<string>(undefined),\n 'font-family-base': formBuilder.control<string>(undefined)\n }),\n headingsAndNavigatorTypography: formBuilder.group({\n 'font-family-headings': formBuilder.control<string>(undefined),\n 'navigator-font-family': formBuilder.control<string>('var(--font-family-base)')\n }),\n genericApplicationOptions: formBuilder.group({\n globalTitle: formBuilder.control<string>(undefined),\n faviconUrl: formBuilder.control<string>(undefined)\n })\n });\n return form;\n}\n\nexport function createBrandingForm(formBuilder: FormBuilder) {\n const colorControls = colorBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<string>(undefined, { asyncValidators: [colorValidator()] });\n return acc;\n },\n {} as { [key in (typeof colorBrandingVars)[number]]: FormControl<string> }\n );\n const stringControls = stringBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<string>(undefined);\n return acc;\n },\n {} as { [key in (typeof stringBrandingVars)[number]]: FormControl<string> }\n );\n const numberControls = numberBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<number>(undefined);\n return acc;\n },\n {} as { [key in (typeof numberBrandingVars)[number]]: FormControl<number> }\n );\n const stringOrNumberControls = stringOrNumberBrandingVars.reduce(\n (acc, key) => {\n acc[key] = formBuilder.control<number>(undefined);\n return acc;\n },\n {} as {\n [key in (typeof stringOrNumberBrandingVars)[number]]: FormControl<string | number>;\n }\n );\n const form = formBuilder.group({\n ...colorControls,\n ...stringControls,\n ...numberControls,\n ...stringOrNumberControls\n });\n\n return form;\n}\n","import { Injectable } from '@angular/core';\nimport {\n ApplicationAvailability,\n ApplicationType,\n FetchClient,\n IApplication,\n IApplicationBinary,\n IManagedObject,\n InventoryBinaryService,\n InventoryService\n} from '@c8y/client';\nimport { ApplicationService } from '@c8y/client';\nimport { AppStateService, ThemeSwitcherService, ZipService } from '@c8y/ngx-components';\nimport { defer, BehaviorSubject, Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { cloneDeep, uniq } from 'lodash-es';\nimport { BrandingVersionService } from './branding-version.service';\nimport { BrandingOptionsJson, allBrandingCSSVars, numberBrandingVars } from './branding.type';\nimport { StaticAsset, StaticAssetsService } from '@c8y/ngx-components/static-assets/data';\n\nexport interface BrandVersion {\n name: string;\n id: string;\n revision: number;\n version: string;\n tags: string[];\n owner?: string;\n lastUpdated?: string;\n publicOptionsApp?: IApplication;\n}\n\nexport interface BrandingFileDetails {\n fileName: string;\n blob: Blob;\n jsonContent?: any;\n}\n\nexport interface BrandingFileDetailsLegacy {\n path: string;\n value: string;\n blob?: Blob;\n fileName: string;\n urlWrapped: boolean;\n}\n\n/**\n * Service to load and store the branding of the tenant.\n */\n@Injectable({ providedIn: 'root' })\nexport class StoreBrandingService {\n readonly fileNames = {\n options: 'options.json',\n manifest: 'cumulocity.json',\n exportZipName: 'public-options.zip'\n } as const;\n readonly manifestValues = {\n name: 'public-options',\n contextPath: 'public-options',\n key: 'public-options-key',\n description: 'Application containing static assets used by e.g. branding.',\n noAppSwitcher: true,\n type: ApplicationType.HOSTED,\n availability: ApplicationAvailability.SHARED\n } as const satisfies IApplication;\n refreshTriggerBrandingVariants = new BehaviorSubject<void>(null);\n constructor(\n private applicationService: ApplicationService,\n private inventory: InventoryService,\n private binary: InventoryBinaryService,\n private zip: ZipService,\n private fetch: FetchClient,\n private brandingVersionService: BrandingVersionService,\n private appState: AppStateService,\n private staticAssets: StaticAssetsService,\n private themeSwitcher: ThemeSwitcherService\n ) {}\n\n /**\n * Sets the `latest` tag on the provided branding version. Making it the global active branding.\n */\n async markAsActive(brandingVersion: BrandVersion, app?: IApplication): Promise<void> {\n const publicOptions = app || (await this.getPublicOptionsApp());\n const tags = brandingVersion.tags || [];\n const version = brandingVersion.version;\n await this.applicationService.setPackageVersionTag(publicOptions, version, [...tags, 'latest']);\n }\n\n /**\n * Returns the brandings of the tenant.\n * If no public options app is found, publicOptions will be undefined and variants an empty array.\n * For old brandings (created without versioning) a default version is returned.\n */\n async loadBrandingVariants(\n app?: IApplication\n ): Promise<{ publicOptions: IApplication | undefined; variants: BrandVersion[] }> {\n const publicOptions = app || (await this.getPublicOptionsApp());\n if (!publicOptions) {\n return { publicOptions: undefined, variants: [] };\n }\n const { data: versions } = await this.applicationService.listVersions(publicOptions);\n let mappedVersions: BrandVersion[] =\n versions\n ?.map(tmp => {\n try {\n const { name, iteration } =\n this.brandingVersionService.splitBrandingIntoNameAndIteration(tmp.version);\n return {\n revision: iteration,\n name: name,\n id: tmp.binaryId,\n version: tmp.version,\n tags: tmp.tags || [],\n publicOptionsApp: publicOptions\n };\n } catch (e) {\n console.warn('Failed to parse version', tmp, e);\n return undefined;\n }\n })\n ?.filter(Boolean) || [];\n if (!versions && publicOptions.activeVersionId) {\n mappedVersions = [\n {\n name: 'default',\n id: publicOptions.activeVersionId,\n version: 'default-1',\n revision: 1,\n tags: ['latest', 'default'],\n publicOptionsApp: publicOptions\n }\n ];\n }\n\n const variants = await this.getMetadataOfBrandingBinaries(mappedVersions);\n return { publicOptions, variants };\n }\n\n /**\n * As the branding is not immediately available after creation, this method will wait for the branding to be present.\n * @param version The version of the branding to be retrieved.\n */\n async waitForBrandingToBePresent(version: string): Promise<void> {\n const numberOfAttempts = 120;\n const sleepDurationInSeconds = 1;\n for (let i = 0; i < numberOfAttempts; i++) {\n try {\n // do not sleep before the first attempt\n if (i !== 0) {\n await new Promise(resolve => setTimeout(resolve, sleepDurationInSeconds * 1_000));\n }\n await this.getBrandingOptionsForVersion(version);\n console.info(`Branding \"${version}\" available now.`);\n return;\n } catch (e) {\n console.warn(\n `Branding \"${version}\" not yet present, retrying in ${sleepDurationInSeconds} seconds...`,\n e\n );\n }\n }\n throw new Error(\n `Branding \"${version}\" not available after ${numberOfAttempts * sleepDurationInSeconds} seconds, giving up.`\n );\n }\n\n /**\n * Will create a the initial branding based on the currently applied CSS variables.\n */\n async getStartedUsingBranding(): Promise<void> {\n const allVariables: Record<string, string> = {};\n const themeToRetrieveVars = ['light', 'dark'] as const;\n const unretrievableVars = new Array<string>();\n for (const theme of themeToRetrieveVars) {\n this.themeSwitcher.temporaryChangeTheme(theme);\n const styles = getComputedStyle(document.body);\n const variablesToSkip = [\n 'navigator-platform-logo',\n 'brand-logo-img'\n ] satisfies (typeof allBrandingCSSVars)[number][];\n const values = allBrandingCSSVars\n .filter(cssVar => !variablesToSkip.includes(cssVar as any))\n .reduce((prev, key) => {\n const directValue = styles.getPropertyValue(`--${key}`);\n const c8yPrefixedValue = styles.getPropertyValue(`--c8y-${key}`);\n const newKey = theme === 'light' ? key : `dark-${key}`;\n if (!directValue && !c8yPrefixedValue) {\n unretrievableVars.push(newKey);\n return prev;\n }\n let value: string | number = directValue || c8yPrefixedValue;\n if (numberBrandingVars.includes(key as any)) {\n try {\n value = Number.parseFloat(value.replace(/[A-Za-z]/g, '').trim());\n } catch (e) {\n console.warn(\n `Failed to parse number for \"${key}\" value that failed to parse: \"${value}\"`,\n e\n );\n return prev;\n }\n }\n return Object.assign(prev, { [newKey]: value });\n }, {});\n Object.assign(allVariables, values);\n }\n this.themeSwitcher.resetTemporaryTheme();\n\n try {\n await this.createPublicOptionsAppFromInheritedOptions(allVariables);\n } catch (e) {\n console.warn(e);\n }\n }\n\n getZipForBinary(\n binaryId: string,\n fileName: string = this.fileNames.exportZipName\n ): Observable<File> {\n return defer(() => this.binary.download(binaryId)).pipe(\n switchMap(response => response.blob()),\n map(blob => new File([blob], fileName))\n );\n }\n\n /**\n * Deletes the public options app and therefore all brandings.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async deleteAllBrandings(publicOptions?: IApplication): Promise<void> {\n publicOptions = publicOptions || (await this.getPublicOptionsApp());\n await this.applicationService.delete(publicOptions);\n }\n\n /**\n * Enhances the provided branding versions with metadata from the linked binaries.\n * It will add the owner and lastUpdated fields to the versions.\n * The provided array is altered.\n */\n async getMetadataOfBrandingBinaries(versions: BrandVersion[]): Promise<BrandVersion[]> {\n const binaryIds = uniq(versions.map(tmp => tmp.id));\n if (!binaryIds.length) {\n return versions;\n }\n const { data: metadata } = await this.inventory.list({\n ids: binaryIds.join(','),\n pageSize: 2000\n });\n return versions.map(version => {\n const metadataForVersion =\n metadata.find(tmp => tmp.id === version.id) || ({} as IManagedObject);\n const { owner, lastUpdated } = metadataForVersion;\n return Object.assign(version, { owner, lastUpdated });\n });\n }\n\n /**\n * Saves the provided branding as a new version for the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async saveBranding(\n blob: Blob | File,\n version: string,\n tags: string[] = [],\n publicOptionsApp?: IApplication\n ): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n const file = blob instanceof File ? blob : new File([blob], `public-options-${version}.zip`);\n const publicOptions = publicOptionsApp || (await this.getPublicOptionsApp());\n\n const { data: binary } = await this.applicationService\n .binary(publicOptions)\n .uploadApplicationVersion(file, version, tags);\n if (!publicOptions.activeVersionId || tags.includes('latest')) {\n await this.applicationService.update({\n id: publicOptions.id,\n activeVersionId: `${binary.binaryId}`\n });\n }\n this.refreshTriggerBrandingVariants.next();\n return { version, binary, tags };\n }\n\n /**\n * Removes a branding version from the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async deleteBrandingVersion(version: string, publicOptions?: IApplication): Promise<void> {\n publicOptions = publicOptions || (await this.getPublicOptionsApp());\n await this.applicationService.deleteVersionPackage(publicOptions, { version });\n this.refreshTriggerBrandingVariants.next();\n }\n\n /**\n * Returns the blob of a zip file containing the provided branding options (options.json) and the manifest (cumulocity.json).\n */\n async getBrandingZip(content: Record<string, any> = {}): Promise<Blob> {\n content.lastUpdated = new Date().toISOString();\n const contentAsString = JSON.stringify(content);\n const zip = await this.zip.createZip([\n { fileName: this.fileNames.options, blob: new Blob([contentAsString]) },\n { fileName: this.fileNames.manifest, blob: new Blob([JSON.stringify(this.manifestValues)]) }\n ]);\n return zip;\n }\n\n /**\n * Adds a new branding version to the public options app.\n * The public options app can be optionally provided to avoid another request for it.\n */\n async addBranding(\n version: string,\n content: BrandingOptionsJson = {},\n tags: string[] = [],\n publicOptionsApp?: IApplication\n ): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n const zip = await this.getBrandingZip(content);\n\n return await this.saveBranding(zip, version, tags, publicOptionsApp);\n }\n\n /**\n * Returns the branding options for the provided version.\n * If no branding was found (e.g. status 404), an error is thrown.\n */\n async getBrandingOptionsForVersion(version?: string): Promise<BrandingOptionsJson> {\n const url = `/apps/public/public-options${version ? `@${version}` : ''}/${this.fileNames.options}?nocache=${new Date().getTime()}`;\n const response = await this.fetch.fetch(url);\n if (response.status !== 200) {\n throw Error(`Unexpected status code: ${response.status}`);\n }\n\n const content = await response.json();\n return content as BrandingOptionsJson;\n }\n\n /**\n * Saves a new iteration of an already existing branding.\n */\n async saveExistingBranding(\n branding: Record<string, any>,\n currentVersion: string,\n tagsOfCurrentVersion: string[] = [],\n newVersion?: string\n ): Promise<string> {\n const publicOptions = await this.getPublicOptionsApp();\n const versionToBeSet = newVersion\n ? this.brandingVersionService.createInitialBrandingVersion(newVersion)\n : this.brandingVersionService.bumpBrandingIteration(currentVersion);\n\n const finalTags = tagsOfCurrentVersion;\n // only apply latest tag directly\n // there seems to be some special handling for the latest tag in the backend, that allows to directly move it while uploading the new version.\n // for all other tags this results in a 409 conflict. We therefore need to first delete the old version, before setting the other tags on the new version.\n if (!newVersion) {\n tagsOfCurrentVersion = tagsOfCurrentVersion.filter(tag => tag === 'latest');\n }\n await this.addBranding(versionToBeSet, branding, tagsOfCurrentVersion, publicOptions);\n if (!newVersion) {\n try {\n await this.deleteBrandingVersion(currentVersion, publicOptions);\n } catch (e) {\n if (e.res.status !== 404) {\n throw e;\n }\n }\n await this.applicationService.setPackageVersionTag(publicOptions, versionToBeSet, finalTags);\n }\n\n return versionToBeSet;\n }\n\n /**\n * Combines current branding options with the provided branding variables and creates a new public options app.\n * Any assets in the branding will be cloned.\n */\n async createPublicOptionsAppFromInheritedOptions(brandingVars?: Record<string, string>): Promise<{\n version: string;\n binary: IApplicationBinary;\n tags: string[];\n }> {\n let currentlyAppliedBranding: BrandingOptionsJson;\n let fallBackBranding: BrandingOptionsJson = {};\n try {\n currentlyAppliedBranding = await this.getBrandingOptionsForVersion();\n fallBackBranding = cloneDeep(currentlyAppliedBranding);\n } catch (e) {\n console.warn('Failed to get currently applied branding, proceeding with empty branding.', e);\n }\n\n if (brandingVars) {\n currentlyAppliedBranding = currentlyAppliedBranding || {};\n const brandingCssVars = currentlyAppliedBranding.brandingCssVars || {};\n Object.assign(brandingCssVars, brandingVars);\n currentlyAppliedBranding.brandingCssVars = brandingCssVars;\n }\n\n if (currentlyAppliedBranding) {\n try {\n const { oldAssets, newAssets } = await this.staticAssets.cloneAssetsIntoTenant('branding');\n currentlyAppliedBranding = this.replaceBrandingAssetsInBrandingOptions(\n currentlyAppliedBranding,\n oldAssets,\n newAssets\n );\n } catch (e) {\n console.warn('Failed to relocate branding assets into current tenant.', e);\n }\n }\n\n const publicOptionsApp = await this.createPublicOptionsApp();\n\n const defaultBrandingName = `default`;\n const result = await this.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(defaultBrandingName),\n currentlyAppliedBranding || {},\n ['latest', defaultBrandingName],\n publicOptionsApp\n );\n\n const fallbackBrandingName = `fallback`;\n await this.addBranding(\n this.brandingVersionService.createInitialBrandingVersion(fallbackBrandingName),\n fallBackBranding,\n [fallbackBrandingName],\n publicOptionsApp\n );\n\n return result;\n }\n\n /**\n * Replaces the assets in the branding options with the new assets.\n * Goes through the provided `oldAssets` and replaces their occurrences in the branding with the corresponding `newAssets` entry sharing the same fileName.\n * Returns the updated branding options.\n */\n replaceBrandingAssetsInBrandingOptions(\n branding: BrandingOptionsJson,\n oldAssets: StaticAsset[],\n newAssets: StaticAsset[]\n ): BrandingOptionsJson {\n let brandingAsJSONString = JSON.stringify(branding);\n for (const oldAsset of oldAssets) {\n const newLocatedAsset = newAssets.find(tmp => tmp.fileName === oldAsset.fileName);\n if (!newLocatedAsset) {\n continue;\n }\n // if the path is the same, we don't need to replace it.\n if (oldAsset.path === newLocatedAsset.path) {\n continue;\n }\n\n // TODO: use proper replaceAll once it's available with es2021\n brandingAsJSONString = brandingAsJSONString.split(oldAsset.path).join(newLocatedAsset.path);\n }\n return JSON.parse(brandingAsJSONString);\n }\n\n private async getPublicOptionsApp() {\n let { data: apps } = await this.applicationService.listByName(this.manifestValues.name);\n apps = apps.filter(app => app.owner?.tenant?.id === this.appState.currentTenant.value?.name);\n\n return apps[0];\n }\n\n private async createPublicOptionsApp() {\n const { data: app } = await this.applicationService.create(this.manifestValues);\n return app;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3.BrandingVersionService"],"mappings":"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"}
@@ -1000,9 +1000,15 @@ class ApplicationPluginsGuard {
1000
1000
  if (!app) {
1001
1001
  return false;
1002
1002
  }
1003
+ const manifest = app.manifest;
1004
+ if (!manifest) {
1005
+ return false;
1006
+ }
1003
1007
  return (app.type === ApplicationType.HOSTED &&
1004
1008
  this.ecosystemService.isOwner(app) &&
1005
- !this.ecosystemService.isPackage(app));
1009
+ !this.ecosystemService.isPackage(app) &&
1010
+ // apps like e.g. the public-options should not have the plugins tab
1011
+ !manifest.noAppSwitcher);
1006
1012
  }
1007
1013
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationPluginsGuard, deps: [{ token: i3.EcosystemService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1008
1014
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationPluginsGuard }); }