nextalys-carousel 0.0.68 → 0.0.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/esm2022/common-types.mjs +4 -0
  2. package/esm2022/lib/nxs-carousel/common-types.mjs +4 -0
  3. package/esm2022/lib/nxs-carousel/nxs-carousel/carousel-events.mjs +5 -0
  4. package/{esm2020 → esm2022}/lib/nxs-carousel/nxs-carousel/nxs-carousel-dialog.component.mjs +11 -9
  5. package/esm2022/lib/nxs-carousel/nxs-carousel/nxs-carousel.component.mjs +288 -0
  6. package/esm2022/lib/nxs-carousel/nxs-carousel/nxs-carousel.module.mjs +75 -0
  7. package/{esm2020 → esm2022}/lib/nxs-carousel/nxs-carousel/swiper-directives.mjs +4 -4
  8. package/esm2022/lib/nxs-carousel-mock/common-types.mjs +4 -0
  9. package/esm2022/lib/nxs-carousel-mock/nxs-carousel-mock/nxs-carousel-mock.component.mjs +45 -0
  10. package/{esm2020 → esm2022}/lib/nxs-carousel-mock/nxs-carousel-mock/nxs-carousel-mock.module.mjs +7 -7
  11. package/{esm2020 → esm2022}/lib/nxs-carousel-mock/nxs-carousel-mock/swiper-directives.mjs +4 -4
  12. package/{fesm2015 → fesm2022}/nextalys-carousel-lib-nxs-carousel-mock.mjs +23 -24
  13. package/{fesm2020 → fesm2022}/nextalys-carousel-lib-nxs-carousel-mock.mjs.map +1 -1
  14. package/{fesm2020 → fesm2022}/nextalys-carousel-lib-nxs-carousel.mjs +75 -53
  15. package/fesm2022/nextalys-carousel-lib-nxs-carousel.mjs.map +1 -0
  16. package/{fesm2015 → fesm2022}/nextalys-carousel.mjs +3 -3
  17. package/{fesm2020 → fesm2022}/nextalys-carousel.mjs.map +1 -1
  18. package/lib/nxs-carousel/nxs-carousel/nxs-carousel-dialog.component.d.ts +1 -1
  19. package/lib/nxs-carousel/nxs-carousel/nxs-carousel.component.d.ts +2 -2
  20. package/lib/nxs-carousel/nxs-carousel/nxs-carousel.component.d.ts.map +1 -1
  21. package/lib/nxs-carousel/nxs-carousel/swiper-directives.d.ts +1 -1
  22. package/lib/nxs-carousel-mock/nxs-carousel-mock/nxs-carousel-mock.component.d.ts +1 -1
  23. package/lib/nxs-carousel-mock/nxs-carousel-mock/nxs-carousel-types.d.ts +1 -1
  24. package/lib/nxs-carousel-mock/nxs-carousel-mock/nxs-carousel-types.d.ts.map +1 -1
  25. package/lib/nxs-carousel-mock/nxs-carousel-mock/swiper-directives.d.ts +1 -1
  26. package/package.json +11 -21
  27. package/esm2020/common-types.mjs +0 -6
  28. package/esm2020/lib/nxs-carousel/common-types.mjs +0 -6
  29. package/esm2020/lib/nxs-carousel/nxs-carousel/carousel-events.mjs +0 -5
  30. package/esm2020/lib/nxs-carousel/nxs-carousel/nxs-carousel.component.mjs +0 -266
  31. package/esm2020/lib/nxs-carousel/nxs-carousel/nxs-carousel.module.mjs +0 -75
  32. package/esm2020/lib/nxs-carousel-mock/common-types.mjs +0 -6
  33. package/esm2020/lib/nxs-carousel-mock/nxs-carousel-mock/nxs-carousel-mock.component.mjs +0 -44
  34. package/fesm2015/nextalys-carousel-lib-nxs-carousel-mock.mjs.map +0 -1
  35. package/fesm2015/nextalys-carousel-lib-nxs-carousel.mjs +0 -412
  36. package/fesm2015/nextalys-carousel-lib-nxs-carousel.mjs.map +0 -1
  37. package/fesm2015/nextalys-carousel.mjs.map +0 -1
  38. package/fesm2020/nextalys-carousel-lib-nxs-carousel-mock.mjs +0 -101
  39. package/fesm2020/nextalys-carousel-lib-nxs-carousel.mjs.map +0 -1
  40. package/fesm2020/nextalys-carousel.mjs +0 -14
  41. /package/{esm2020 → esm2022}/lib/nxs-carousel/nextalys-carousel-lib-nxs-carousel.mjs +0 -0
  42. /package/{esm2020 → esm2022}/lib/nxs-carousel/nxs-carousel/nxs-carousel-types.mjs +0 -0
  43. /package/{esm2020 → esm2022}/lib/nxs-carousel/public-api-carousel.mjs +0 -0
  44. /package/{esm2020 → esm2022}/lib/nxs-carousel-mock/nextalys-carousel-lib-nxs-carousel-mock.mjs +0 -0
  45. /package/{esm2020 → esm2022}/lib/nxs-carousel-mock/nxs-carousel-mock/nxs-carousel-types.mjs +0 -0
  46. /package/{esm2020 → esm2022}/lib/nxs-carousel-mock/public-api-carousel-mock.mjs +0 -0
  47. /package/{esm2020 → esm2022}/nextalys-carousel.mjs +0 -0
  48. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,10 +1,10 @@
1
1
  class NxsCarouselModuleConfig {
2
- constructor() {
3
- this.debug = false;
4
- }
2
+ debug = false;
5
3
  }
6
4
 
7
5
  // export * from './lib/nxs-carousel/nxs-carousel.component';
6
+ // export * from './lib/nxs-carousel/nxs-carousel.module';
7
+ // export * from './lib/nxs-carousel/nxs-carousel-types';
8
8
 
9
9
  /**
10
10
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"nextalys-carousel.mjs","sources":["../../lib/common-types.ts","../../lib/public-api.ts","../../lib/nextalys-carousel.ts"],"sourcesContent":["\nexport interface NxsCarouselImage {\n alt?: string;\n src: string;\n}\nexport class NxsCarouselModuleConfig {\n debug?: boolean = false;\n}","// export * from './lib/nxs-carousel/nxs-carousel.component';\n// export * from './lib/nxs-carousel/nxs-carousel.module';\n// export * from './lib/nxs-carousel/nxs-carousel-types';\nexport * from './common-types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"MAKa,uBAAuB,CAAA;AAApC,IAAA,WAAA,GAAA;QACI,IAAK,CAAA,KAAA,GAAa,KAAK,CAAC;KAC3B;AAAA;;ACPD;;ACAA;;AAEG;;;;"}
1
+ {"version":3,"file":"nextalys-carousel.mjs","sources":["../../lib/common-types.ts","../../lib/public-api.ts","../../lib/nextalys-carousel.ts"],"sourcesContent":["\nexport interface NxsCarouselImage {\n alt?: string;\n src: string;\n}\nexport class NxsCarouselModuleConfig {\n debug?: boolean = false;\n}","// export * from './lib/nxs-carousel/nxs-carousel.component';\n// export * from './lib/nxs-carousel/nxs-carousel.module';\n// export * from './lib/nxs-carousel/nxs-carousel-types';\nexport * from './common-types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"MAKa,uBAAuB,CAAA;IAChC,KAAK,GAAa,KAAK,CAAC;AAC3B;;ACPD;AACA;AACA;;ACFA;;AAEG;;;;"}
@@ -8,6 +8,6 @@ export declare class NxsCarouselDialogComponent {
8
8
  wrapperClass: string;
9
9
  constructor(data: NxsCarouselDialogData, dialogRef: MatDialogRef<NxsCarouselDialogComponent>);
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<NxsCarouselDialogComponent, never>;
11
- static ɵcmp: i0.ɵɵComponentDeclaration<NxsCarouselDialogComponent, "nxs-carousel-dialog", never, {}, {}, never, never, false>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<NxsCarouselDialogComponent, "nxs-carousel-dialog", never, {}, {}, never, never, false, never>;
12
12
  }
13
13
  //# sourceMappingURL=nxs-carousel-dialog.component.d.ts.map
@@ -11,7 +11,7 @@ export declare class NxsCarouselComponent {
11
11
  private platformId;
12
12
  private config?;
13
13
  private swiperReady;
14
- contents: TemplateRef<HTMLElement>;
14
+ contents: TemplateRef<HTMLElement>[];
15
15
  swiperComponent?: SwiperComponent;
16
16
  lazy: boolean;
17
17
  private eventsCollector;
@@ -44,6 +44,6 @@ export declare class NxsCarouselComponent {
44
44
  private runInZone;
45
45
  onSlideChange(instances: Swiper[]): void;
46
46
  static ɵfac: i0.ɵɵFactoryDeclaration<NxsCarouselComponent, [null, null, null, { optional: true; }]>;
47
- static ɵcmp: i0.ɵɵComponentDeclaration<NxsCarouselComponent, "nxs-carousel", never, { "lazy": "lazy"; "images": "images"; "setOptions": "options"; "hasHtmlContent": "hasHtmlContent"; }, { "slideChange": "slideChange"; "slideClick": "slideClick"; }, ["contents"], never, false>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<NxsCarouselComponent, "nxs-carousel", never, { "lazy": { "alias": "lazy"; "required": false; }; "images": { "alias": "images"; "required": false; }; "setOptions": { "alias": "options"; "required": false; }; "hasHtmlContent": { "alias": "hasHtmlContent"; "required": false; }; }, { "slideChange": "slideChange"; "slideClick": "slideClick"; }, ["contents"], never, false, never>;
48
48
  }
49
49
  //# sourceMappingURL=nxs-carousel.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nxs-carousel.component.d.ts","sourceRoot":"","sources":["../../../../lib/nxs-carousel/nxs-carousel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,YAAY,EAAiC,MAAM,EAAmB,WAAW,EAAkB,MAAM,eAAe,CAAC;AAC1L,OAAO,EAAyB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAIrD,OAAmB,EAA0C,MAAM,EAAE,aAAa,EAAU,MAAM,QAAQ,CAAC;AAE3G,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;;AAK5E,qBAMa,oBAAoB;IAiCzB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,IAAI;IACS,OAAO,CAAC,UAAU;IAC3B,OAAO,CAAC,MAAM,CAAC;IAnC/B,OAAO,CAAC,WAAW,CAAS;IAE5B,QAAQ,EAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAEpC,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,IAAI,UAAQ;IACZ,OAAO,CAAC,eAAe,CAAyB;IAGzC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAClC,OAAO,EAAE,kBAAkB,CAAQ;IACnC,iBAAiB,EAAE,aAAa,CAAQ;IACxC,IACI,UAAU,CAAC,GAAG,EAAE,kBAAkB,EAGrC;IAED,cAAc,UAAS;IACvB,WAAW,EAAE,MAAM,CAAK;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IAGjC,WAAW,uBAA8B;IAClC,YAAY,SAAK;IAExB,UAAU,uDAA8D;IACxE,SAAS,UAAS;gBAGN,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACS,UAAU,EAAE,GAAG,EACxB,MAAM,CAAC,EAAE,uBAAuB;IASxD,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,OAAO;IAMf,WAAW,IAAI,IAAI;IAGnB,eAAe,IAAI,IAAI;IAKvB,mBAAmB;IAanB,OAAO,CAAC,iBAAiB;IAuEzB,OAAO,CAAC,oBAAoB;IAuBrB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM;IAW/E,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAGvC,IAAI;IAGJ,QAAQ;IAGR,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAenC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAkBzB,OAAO,CAAC,SAAS;IAOjB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE;yCAvOxB,oBAAoB;2CAApB,oBAAoB;CAwPhC"}
1
+ {"version":3,"file":"nxs-carousel.component.d.ts","sourceRoot":"","sources":["../../../../lib/nxs-carousel/nxs-carousel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,YAAY,EAAiC,MAAM,EAAmB,WAAW,EAAkB,MAAM,eAAe,CAAC;AAC1L,OAAO,EAAyB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAIrD,OAAmB,EAA0C,MAAM,EAAE,aAAa,EAAU,MAAM,QAAQ,CAAC;AAE3G,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;;AAK5E,qBAMa,oBAAoB;IAiCzB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,IAAI;IACS,OAAO,CAAC,UAAU;IAC3B,OAAO,CAAC,MAAM,CAAC;IAnC/B,OAAO,CAAC,WAAW,CAAS;IAE5B,QAAQ,EAAG,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;IAEtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,IAAI,UAAQ;IACZ,OAAO,CAAC,eAAe,CAAyB;IAGzC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAClC,OAAO,EAAE,kBAAkB,CAAQ;IACnC,iBAAiB,EAAE,aAAa,CAAQ;IACxC,IACI,UAAU,CAAC,GAAG,EAAE,kBAAkB,EAGrC;IAED,cAAc,UAAS;IACvB,WAAW,EAAE,MAAM,CAAK;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IAGjC,WAAW,uBAA8B;IAClC,YAAY,SAAK;IAExB,UAAU,uDAA8D;IACxE,SAAS,UAAS;gBAGN,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACS,UAAU,EAAE,GAAG,EACxB,MAAM,CAAC,EAAE,uBAAuB;IASxD,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,OAAO;IAMf,WAAW,IAAI,IAAI;IAGnB,eAAe,IAAI,IAAI;IAKvB,mBAAmB;IAanB,OAAO,CAAC,iBAAiB;IAuEzB,OAAO,CAAC,oBAAoB;IAuBrB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM;IAW/E,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAGvC,IAAI;IAGJ,QAAQ;IAGR,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAenC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAkCzB,OAAO,CAAC,SAAS;IAOjB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE;yCAvPxB,oBAAoB;2CAApB,oBAAoB;CAwQhC"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class NxsSwiperTemplateDirective {
3
3
  static ɵfac: i0.ɵɵFactoryDeclaration<NxsSwiperTemplateDirective, never>;
4
- static ɵdir: i0.ɵɵDirectiveDeclaration<NxsSwiperTemplateDirective, "[nxsSwiperTemplate]", never, {}, {}, never, never, false>;
4
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NxsSwiperTemplateDirective, "[nxsSwiperTemplate]", never, {}, {}, never, never, false, never>;
5
5
  }
6
6
  //# sourceMappingURL=swiper-directives.d.ts.map
@@ -17,6 +17,6 @@ export declare class NxsCarouselComponent {
17
17
  next(): void;
18
18
  previous(): void;
19
19
  static ɵfac: i0.ɵɵFactoryDeclaration<NxsCarouselComponent, never>;
20
- static ɵcmp: i0.ɵɵComponentDeclaration<NxsCarouselComponent, "nxs-carousel", never, { "lazy": "lazy"; "images": "images"; "options": "options"; "hasHtmlContent": "hasHtmlContent"; }, { "slideChange": "slideChange"; "slideClick": "slideClick"; }, never, never, false>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<NxsCarouselComponent, "nxs-carousel", never, { "lazy": { "alias": "lazy"; "required": false; }; "images": { "alias": "images"; "required": false; }; "options": { "alias": "options"; "required": false; }; "hasHtmlContent": { "alias": "hasHtmlContent"; "required": false; }; }, { "slideChange": "slideChange"; "slideClick": "slideClick"; }, never, never, false, never>;
21
21
  }
22
22
  //# sourceMappingURL=nxs-carousel-mock.component.d.ts.map
@@ -1,2 +1,2 @@
1
- export declare type NxsCarouselOptions = any;
1
+ export type NxsCarouselOptions = any;
2
2
  //# sourceMappingURL=nxs-carousel-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nxs-carousel-types.d.ts","sourceRoot":"","sources":["../../../../lib/nxs-carousel-mock/nxs-carousel-types.ts"],"names":[],"mappings":"AAAA,oBAAY,kBAAkB,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"nxs-carousel-types.d.ts","sourceRoot":"","sources":["../../../../lib/nxs-carousel-mock/nxs-carousel-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class NxsSwiperTemplateDirective {
3
3
  static ɵfac: i0.ɵɵFactoryDeclaration<NxsSwiperTemplateDirective, never>;
4
- static ɵdir: i0.ɵɵDirectiveDeclaration<NxsSwiperTemplateDirective, "[nxsSwiperTemplate]", never, {}, {}, never, never, false>;
4
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NxsSwiperTemplateDirective, "[nxsSwiperTemplate]", never, {}, {}, never, never, false, never>;
5
5
  }
6
6
  //# sourceMappingURL=swiper-directives.d.ts.map
package/package.json CHANGED
@@ -1,15 +1,11 @@
1
1
  {
2
2
  "name": "nextalys-carousel",
3
- "version": "0.0.68",
3
+ "version": "0.0.69",
4
4
  "dependencies": {
5
5
  "swiper": "^8.2.4",
6
6
  "tslib": "^2.3.0"
7
7
  },
8
- "module": "fesm2015/nextalys-carousel.mjs",
9
- "es2020": "fesm2020/nextalys-carousel.mjs",
10
- "esm2020": "esm2020/nextalys-carousel.mjs",
11
- "fesm2020": "fesm2020/nextalys-carousel.mjs",
12
- "fesm2015": "fesm2015/nextalys-carousel.mjs",
8
+ "module": "fesm2022/nextalys-carousel.mjs",
13
9
  "typings": "index.d.ts",
14
10
  "exports": {
15
11
  "./package.json": {
@@ -17,27 +13,21 @@
17
13
  },
18
14
  ".": {
19
15
  "types": "./index.d.ts",
20
- "esm2020": "./esm2020/nextalys-carousel.mjs",
21
- "es2020": "./fesm2020/nextalys-carousel.mjs",
22
- "es2015": "./fesm2015/nextalys-carousel.mjs",
23
- "node": "./fesm2015/nextalys-carousel.mjs",
24
- "default": "./fesm2020/nextalys-carousel.mjs"
16
+ "esm2022": "./esm2022/nextalys-carousel.mjs",
17
+ "esm": "./esm2022/nextalys-carousel.mjs",
18
+ "default": "./fesm2022/nextalys-carousel.mjs"
25
19
  },
26
20
  "./lib/nxs-carousel-mock": {
27
21
  "types": "./lib/nxs-carousel-mock/index.d.ts",
28
- "esm2020": "./esm2020/lib/nxs-carousel-mock/nextalys-carousel-lib-nxs-carousel-mock.mjs",
29
- "es2020": "./fesm2020/nextalys-carousel-lib-nxs-carousel-mock.mjs",
30
- "es2015": "./fesm2015/nextalys-carousel-lib-nxs-carousel-mock.mjs",
31
- "node": "./fesm2015/nextalys-carousel-lib-nxs-carousel-mock.mjs",
32
- "default": "./fesm2020/nextalys-carousel-lib-nxs-carousel-mock.mjs"
22
+ "esm2022": "./esm2022/lib/nxs-carousel-mock/nextalys-carousel-lib-nxs-carousel-mock.mjs",
23
+ "esm": "./esm2022/lib/nxs-carousel-mock/nextalys-carousel-lib-nxs-carousel-mock.mjs",
24
+ "default": "./fesm2022/nextalys-carousel-lib-nxs-carousel-mock.mjs"
33
25
  },
34
26
  "./lib/nxs-carousel": {
35
27
  "types": "./lib/nxs-carousel/index.d.ts",
36
- "esm2020": "./esm2020/lib/nxs-carousel/nextalys-carousel-lib-nxs-carousel.mjs",
37
- "es2020": "./fesm2020/nextalys-carousel-lib-nxs-carousel.mjs",
38
- "es2015": "./fesm2015/nextalys-carousel-lib-nxs-carousel.mjs",
39
- "node": "./fesm2015/nextalys-carousel-lib-nxs-carousel.mjs",
40
- "default": "./fesm2020/nextalys-carousel-lib-nxs-carousel.mjs"
28
+ "esm2022": "./esm2022/lib/nxs-carousel/nextalys-carousel-lib-nxs-carousel.mjs",
29
+ "esm": "./esm2022/lib/nxs-carousel/nextalys-carousel-lib-nxs-carousel.mjs",
30
+ "default": "./fesm2022/nextalys-carousel-lib-nxs-carousel.mjs"
41
31
  }
42
32
  },
43
33
  "sideEffects": false
@@ -1,6 +0,0 @@
1
- export class NxsCarouselModuleConfig {
2
- constructor() {
3
- this.debug = false;
4
- }
5
- }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbW1vbi10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLE9BQU8sdUJBQXVCO0lBQXBDO1FBQ0ksVUFBSyxHQUFhLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCBpbnRlcmZhY2UgTnhzQ2Fyb3VzZWxJbWFnZSB7XG4gICAgYWx0Pzogc3RyaW5nO1xuICAgIHNyYzogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIE54c0Nhcm91c2VsTW9kdWxlQ29uZmlnIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW4gPSBmYWxzZTtcbn0iXX0=
@@ -1,6 +0,0 @@
1
- export class NxsCarouselModuleConfig {
2
- constructor() {
3
- this.debug = false;
4
- }
5
- }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbW1vbi10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLE9BQU8sdUJBQXVCO0lBQXBDO1FBQ0ksVUFBSyxHQUFhLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCBpbnRlcmZhY2UgTnhzQ2Fyb3VzZWxJbWFnZSB7XG4gICAgYWx0Pzogc3RyaW5nO1xuICAgIHNyYzogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIE54c0Nhcm91c2VsTW9kdWxlQ29uZmlnIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW4gPSBmYWxzZTtcbn0iXX0=
@@ -1,5 +0,0 @@
1
- import { NxsEvent } from "nextalys-js-helpers";
2
- export class CarouselEvents {
3
- }
4
- CarouselEvents.openCarouselDialog = new NxsEvent();
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL254cy1jYXJvdXNlbC9jYXJvdXNlbC1ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRy9DLE1BQU0sT0FBTyxjQUFjOztBQUNoQixpQ0FBa0IsR0FBRyxJQUFJLFFBQVEsRUFNcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE54c0V2ZW50IH0gZnJvbSBcIm5leHRhbHlzLWpzLWhlbHBlcnNcIjtcbmltcG9ydCB7IE54c0Nhcm91c2VsRGlhbG9nRGF0YSB9IGZyb20gXCIuL254cy1jYXJvdXNlbC10eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxFdmVudHMge1xuICAgIHN0YXRpYyBvcGVuQ2Fyb3VzZWxEaWFsb2cgPSBuZXcgTnhzRXZlbnQ8e1xuICAgICAgICBkYXRhOiBOeHNDYXJvdXNlbERpYWxvZ0RhdGE7XG4gICAgICAgIHBhbmVsQ2xhc3M6IHN0cmluZztcbiAgICAgICAgd2lkdGg/OiBzdHJpbmc7XG4gICAgICAgIGhlaWdodD86IHN0cmluZztcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBib29sZWFuO1xuICAgIH0+KCk7XG59Il19
@@ -1,266 +0,0 @@
1
- import { Component, ViewEncapsulation, Input, ViewChild, Output, EventEmitter, PLATFORM_ID, Inject, Optional, NgZone, ContentChildren, TemplateRef } from '@angular/core';
2
- import { MatDialog } from '@angular/material/dialog';
3
- import { isPlatformBrowser } from '@angular/common';
4
- import { EventsCollector } from 'nextalys-js-helpers/dist/events';
5
- // import Swiper core and required modules
6
- import SwiperCore, { Navigation, Pagination, Autoplay, Lazy, Thumbs } from 'swiper';
7
- //Virtual,Scrollbar,A11y
8
- import { SwiperComponent } from 'swiper/angular';
9
- import { NxsSwiperTemplateDirective } from './swiper-directives';
10
- import { NxsCarouselModuleConfig } from '../common-types';
11
- import { CarouselEvents } from './carousel-events';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/material/dialog";
14
- import * as i2 from "../common-types";
15
- import * as i3 from "@angular/common";
16
- import * as i4 from "swiper/angular";
17
- // install Swiper modules
18
- SwiperCore.use([Navigation, Pagination, Autoplay, Lazy, Thumbs]);
19
- export class NxsCarouselComponent {
20
- constructor(matDialog, zone, platformId, config) {
21
- this.matDialog = matDialog;
22
- this.zone = zone;
23
- this.platformId = platformId;
24
- this.config = config;
25
- this.swiperReady = false;
26
- this.lazy = true;
27
- this.eventsCollector = new EventsCollector();
28
- this.options = null;
29
- this.thumbnailsOptions = null;
30
- this.hasHtmlContent = false;
31
- this.slidesCount = 0;
32
- this.slideChange = new EventEmitter();
33
- this.currentSlide = 0;
34
- this.slideClick = new EventEmitter();
35
- this.isBrowser = false;
36
- if (!this.config)
37
- this.config = { debug: false };
38
- this.isBrowser = isPlatformBrowser(this.platformId);
39
- this.log('constructor - isBrowser', this.isBrowser);
40
- this.options = this.setDefaultOptions(undefined, false);
41
- }
42
- set setOptions(val) {
43
- this.options = this.setDefaultOptions(val, false);
44
- this.setThumbnailsOptions();
45
- }
46
- log(...args) {
47
- if (!this.config.debug)
48
- return;
49
- console.log('[NxsCarousel]', ...args);
50
- }
51
- destroy() {
52
- if (!this.isBrowser) {
53
- return;
54
- }
55
- this.eventsCollector?.unsubscribeAll();
56
- }
57
- ngOnDestroy() {
58
- this.destroy();
59
- }
60
- ngAfterViewInit() {
61
- // console.log('thi.contents', this.contents);
62
- // this.initSlides();
63
- // this.createSlider(true);
64
- }
65
- getMainSliderHeight() {
66
- if (!this.options)
67
- return '';
68
- if (this.options.nxsThumbnails && this.options.nxsThumbnails.show) {
69
- if (this.options.nxsThumbnails.onMainSlider) {
70
- return '100%';
71
- }
72
- else if (this.options.nxsThumbnails.percentHeight) {
73
- return (100 - this.options.nxsThumbnails.percentHeight) + '%';
74
- }
75
- }
76
- return '';
77
- }
78
- setDefaultOptions(options, forDialog) {
79
- if (!options && forDialog) {
80
- options = {
81
- nxsShowNavigationBullets: true, loop: true, nxsThumbnails: { show: true }, effect: 'slide', nxsShowNavigationArrows: true, nxsShowImagesCount: true,
82
- lazy: this.lazy,
83
- };
84
- }
85
- else if (!options) {
86
- options = {
87
- nxsShowNavigationBullets: true, loop: true,
88
- nxsThumbnails: { show: false }, effect: 'slide', nxsShowNavigationArrows: true, nxsShowImagesCount: false, nxsCarouselDialogOptions: {},
89
- lazy: this.lazy,
90
- };
91
- }
92
- if (options.nxsCarouselDialogOptions) {
93
- if (typeof options.nxsCarouselDialogOptions.nxsThumbnails === 'undefined')
94
- options.nxsCarouselDialogOptions.nxsThumbnails = { show: false };
95
- if (typeof options.nxsCarouselDialogOptions.effect === 'undefined')
96
- options.nxsCarouselDialogOptions.effect = 'slide';
97
- if (typeof options.nxsCarouselDialogOptions.nxsShowNavigationArrows === 'undefined')
98
- options.nxsCarouselDialogOptions.nxsShowNavigationArrows = true;
99
- if (!!options.nxsCarouselDialogOptions.nxsThumbnails?.show) {
100
- if (typeof options.nxsCarouselDialogOptions.nxsThumbnails.percentHeight === 'undefined')
101
- options.nxsCarouselDialogOptions.nxsThumbnails.percentHeight = 20;
102
- if (typeof options.nxsCarouselDialogOptions.nxsThumbnails.perView === 'undefined')
103
- options.nxsCarouselDialogOptions.nxsThumbnails.perView = 10;
104
- options.nxsCarouselDialogOptions.nxsThumbnails.breakpoints = {
105
- 640: {
106
- slidesPerView: 5,
107
- },
108
- 768: {
109
- slidesPerView: 7,
110
- },
111
- 1024: {
112
- slidesPerView: 8,
113
- },
114
- };
115
- }
116
- }
117
- if (!options.nxsThumbnails)
118
- options.nxsThumbnails = { show: false };
119
- if (options.nxsThumbnails.show && typeof options.nxsThumbnails.percentHeight === 'undefined')
120
- options.nxsThumbnails.percentHeight = 20;
121
- if (options.nxsThumbnails.show && typeof options.nxsThumbnails.perView === 'undefined')
122
- options.nxsThumbnails.perView = 10;
123
- if (forDialog)
124
- options.nxsfullscreenOnClick = false;
125
- if (options.nxsThumbnails.onMainSlider)
126
- options.nxsShowNavigationBullets = false;
127
- if (typeof options.lazy === 'undefined')
128
- options.lazy = true;
129
- if (typeof options.navigation === 'undefined')
130
- options.navigation = true;
131
- if (typeof options.pagination === 'undefined')
132
- options.pagination = { clickable: true };
133
- if (options.nxsShowNavigationBullets === false) {
134
- options.pagination = false;
135
- }
136
- // console.log("Log ~ file: nxs-carousel.component.ts ~ line 272 ~ NxsCarouselComponent ~ setDefaultOptions ~ options", options);
137
- return options;
138
- }
139
- setThumbnailsOptions() {
140
- if (!!this.options?.nxsThumbnails?.show) {
141
- this.thumbnailsOptions = {
142
- slidesPerView: this.options.nxsThumbnails.perView,
143
- loop: false,
144
- freeMode: true,
145
- // watchSlidesVisibility: true,
146
- watchSlidesProgress: true,
147
- breakpoints: this.options.nxsThumbnails.breakpoints,
148
- // spaceBetween: 10,
149
- };
150
- if (this.lazy) {
151
- // Disable preloading of all images
152
- this.thumbnailsOptions.preloadImages = false;
153
- // Enable lazy loading
154
- this.thumbnailsOptions.lazy = true;
155
- }
156
- // console.log("Log ~ file: nxs-carousel.component.ts ~ line 184 ~ NxsCarouselComponent ~ setThumbnailsOptions ~ this.thumbnailsOptions.lazy", this.thumbnailsOptions.lazy);
157
- // this.thumbnailsSliderInstance = new Swiper(this.nxsThumbnailsSliderContainer.nativeElement, thumbnailsOptions);
158
- // this.options.thumbs = { swiper: this.thumbnailsSliderInstance };
159
- }
160
- }
161
- showFullScreenCarousel(images, wrapperClass) {
162
- this.options.nxsCarouselDialogOptions = this.setDefaultOptions(this.options.nxsCarouselDialogOptions, true);
163
- const data = { images, wrapperClass, options: this.options.nxsCarouselDialogOptions };
164
- CarouselEvents.openCarouselDialog?.emit({
165
- data,
166
- panelClass: 'nxs-carousel-dialog',
167
- width: !!this.options.nxsCarouselDialogSize ? this.options.nxsCarouselDialogSize.width : undefined,
168
- height: !!this.options.nxsCarouselDialogSize ? this.options.nxsCarouselDialogSize.height : undefined,
169
- disableClose: !this.options.nxsCarouselDialogExitable,
170
- });
171
- }
172
- goToSlide(index, speed) {
173
- this.swiperInstance?.slideTo(index, speed);
174
- }
175
- next() {
176
- this.swiperInstance?.slideNext();
177
- }
178
- previous() {
179
- this.swiperInstance?.slidePrev();
180
- }
181
- onSwiperThumbnails(instance) {
182
- if (this.options?.nxsThumbnails?.show)
183
- this.thumbnailsSwiperInstance = instance;
184
- else
185
- this.thumbnailsSwiperInstance = null;
186
- // if (this.options?.nxsThumbnails?.show) {
187
- // const optionsClone = MainHelpers.cloneObject(this.options);
188
- // optionsClone.thumbs = { swiper: this.thumbnailsSwiperInstance };
189
- // // this.options = optionsClone;
190
- // // this.options = { ...this.options, thumbs: { swiper: this.thumbnailsSwiperInstance } };
191
- // console.log("Log ~ file: nxs-carousel.component.ts ~ line 416 ~ NxsCarouselComponent ~ onSwiperThumbnails ~ this.options ", this.options);
192
- // this.options.thumbs = { swiper: this.thumbnailsSwiperInstance };
193
- // }
194
- }
195
- onSwiper(instance) {
196
- this.log('swiper ready - instance', instance);
197
- this.swiperInstance = instance;
198
- this.swiperInstance.on('click', (swiperInstance, evt) => {
199
- // console.log("Log ~ file: nxs-carousel.component.ts ~ line 392 ~ NxsCarouselComponent ~ this.swiperInstance.on ~ evt", evt);
200
- const target = evt.target;
201
- if (target.className.indexOf('nxs-carousel-button') !== -1 || target.className.indexOf('swiper-pagination') !== -1)
202
- return;
203
- this.runInZone(() => {
204
- this.slideClick.next(evt);
205
- if (this.options.nxsfullscreenOnClick && this.images && this.images.length && !this.hasHtmlContent) {
206
- this.showFullScreenCarousel(this.images, 'fullscreen-carousel');
207
- }
208
- });
209
- });
210
- this.swiperReady = true;
211
- }
212
- runInZone(callback, ...args) {
213
- if (!this.zone) {
214
- callback(args);
215
- }
216
- return this.zone.run(() => callback(args));
217
- }
218
- onSlideChange(instances) {
219
- if (!this.swiperReady) {
220
- return;
221
- }
222
- if (!this.swiperInstance && instances?.length) {
223
- this.swiperInstance = instances[0];
224
- }
225
- // console.log("Log ~ file: nxs-carousel.component.ts:252 ~ NxsCarouselComponent ~ onSlideChange ~ instances:", instances);
226
- // this.swiperInstance = instance;
227
- // this.log('slide change - instance', instance);
228
- this.runInZone(() => {
229
- this.currentSlide = this.swiperInstance?.realIndex || 0;
230
- // console.log("Log ~ file: nxs-carousel.component.ts:256 ~ NxsCarouselComponent ~ this.runInZone ~ this.swiperInstance?.realIndex:", this.swiperInstance);
231
- this.log('slide change - currentSlide', this.currentSlide);
232
- this.slideChange.next(this.currentSlide);
233
- });
234
- }
235
- }
236
- NxsCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: NxsCarouselComponent, deps: [{ token: i1.MatDialog }, { token: i0.NgZone }, { token: PLATFORM_ID }, { token: i2.NxsCarouselModuleConfig, optional: true }], target: i0.ɵɵFactoryTarget.Component });
237
- NxsCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: NxsCarouselComponent, selector: "nxs-carousel", inputs: { lazy: "lazy", images: "images", setOptions: ["options", "setOptions"], hasHtmlContent: "hasHtmlContent" }, outputs: { slideChange: "slideChange", slideClick: "slideClick" }, queries: [{ propertyName: "contents", predicate: NxsSwiperTemplateDirective, read: TemplateRef }], viewQueries: [{ propertyName: "swiperComponent", first: true, predicate: ["swiper"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"options\"\n [ngClass]=\"{'swiper-container':true,'nxs-slider-with-thumbnails':!!options.nxsThumbnails && options.nxsThumbnails.show}\"\n [style.height]=\"getMainSliderHeight()\">\n <swiper [config]=\"options\" (swiper)=\"onSwiper($event)\" (slideChange)=\"onSlideChange($event)\"\n [thumbs]=\"{ swiper: thumbnailsSwiperInstance }\">\n <ng-container *ngIf=\"hasHtmlContent\">\n <ng-template *ngFor=\"let slide of contents\" swiperSlide>\n <ng-template [ngTemplateOutlet]=\"slide\" [ngTemplateOutletContext]=\"{\n $implicit: slide\n }\"></ng-template>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!hasHtmlContent && images?.length\">\n <ng-template swiperSlide *ngFor=\"let slideImage of images\">\n <img [ngClass]=\"{'nxs-image-slide':true,'swiper-lazy':lazy}\"\n [attr.data-src]=\"lazy ? slideImage.src : null\" [src]=\"lazy ? null : slideImage.src\"\n [attr.alt]=\"slideImage.alt\" />\n <div *ngIf=\"lazy\" class=\"swiper-lazy-preloader swiper-lazy-preloader-black\"></div>\n </ng-template>\n </ng-container>\n </swiper>\n <ng-container *ngIf=\"images && options.nxsShowImagesCount\">\n <div class=\"nxs-image-counter\">\n {{currentSlide+1}} / {{images.length}}\n </div>\n </ng-container>\n</div>\n\n<div *ngIf=\"thumbnailsOptions && images?.length\"\n [style.height]=\"(!!options.nxsThumbnails && options.nxsThumbnails.show && !!options.nxsThumbnails.percentHeight) ? (options.nxsThumbnails.percentHeight + '%'):''\"\n [style.top]=\"(!!options.nxsThumbnails && options.nxsThumbnails.show && !!options.nxsThumbnails.percentHeight && options.nxsThumbnails.onMainSlider) ? ('-' + (options.nxsThumbnails.percentHeight) + '%'):''\"\n [ngClass]=\"{'swiper-container':true, 'nxs-slider-thumbnails-container':true,'nxs-slider-thumbnails-on-main-slider':options.nxsThumbnails && options.nxsThumbnails.onMainSlider}\">\n <swiper [config]=\"thumbnailsOptions\" (swiper)=\"onSwiperThumbnails($event)\">\n <ng-template swiperSlide *ngFor=\"let slideImage of images\">\n <img [ngClass]=\"{'nxs-image-slide':true,'swiper-lazy':lazy}\" [attr.data-src]=\"lazy ? slideImage.src : null\"\n [src]=\"lazy ? null : slideImage.src\" [attr.alt]=\"slideImage.alt\" />\n <div *ngIf=\"lazy\" class=\"swiper-lazy-preloader swiper-lazy-preloader-black\"></div>\n </ng-template>\n </swiper>\n</div>", styles: ["nxs-carousel{display:block;height:100%;position:relative;--swiper-navigation-color: #fff;--swiper-pagination-color: #fff;--swiper-theme-color: #fff}nxs-carousel .swiper-container{width:100%;height:100%;display:block;position:relative}nxs-carousel .swiper-container swiper{height:100%}nxs-carousel .swiper-container .swiper-wrapper .swiper-slide{height:100%;position:relative;width:auto;min-height:50px;background-size:cover;background-position:center;background-repeat:no-repeat}nxs-carousel .swiper-container .nxs-image-slide{height:100%;-o-object-fit:cover;object-fit:cover;width:100%;-o-object-position:center;object-position:center}nxs-carousel .swiper-container.nxs-slider-with-thumbnails{height:80%}nxs-carousel .swiper-container.nxs-slider-thumbnails-container{height:20%;background:transparent;padding:6px 0}nxs-carousel .swiper-container.nxs-slider-thumbnails-container .swiper-slide{cursor:pointer;border-radius:6px;margin:0 6px;border:2px solid transparent}nxs-carousel .swiper-container.nxs-slider-thumbnails-container .swiper-slide.swiper-slide-thumb-active{border:2px solid lightblue}nxs-carousel .swiper-container.nxs-slider-thumbnails-on-main-slider{top:-20%}nxs-carousel .nxs-image-counter{position:absolute;top:0;right:0;color:#fff;padding:4px;font-weight:700;z-index:10}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SwiperComponent, selector: "swiper, [swiper]", inputs: ["enabled", "on", "direction", "touchEventsTarget", "initialSlide", "speed", "cssMode", "updateOnWindowResize", "resizeObserver", "nested", "focusableElements", "width", "height", "preventInteractionOnTransition", "userAgent", "url", "edgeSwipeDetection", "edgeSwipeThreshold", "freeMode", "autoHeight", "setWrapperSize", "virtualTranslate", "effect", "breakpoints", "spaceBetween", "slidesPerView", "maxBackfaceHiddenSlides", "grid", "slidesPerGroup", "slidesPerGroupSkip", "centeredSlides", "centeredSlidesBounds", "slidesOffsetBefore", "slidesOffsetAfter", "normalizeSlideIndex", "centerInsufficientSlides", "watchOverflow", "roundLengths", "touchRatio", "touchAngle", "simulateTouch", "shortSwipes", "longSwipes", "longSwipesRatio", "longSwipesMs", "followFinger", "allowTouchMove", "threshold", "touchMoveStopPropagation", "touchStartPreventDefault", "touchStartForcePreventDefault", "touchReleaseOnEdges", "uniqueNavElements", "resistance", "resistanceRatio", "watchSlidesProgress", "grabCursor", "preventClicks", "preventClicksPropagation", "slideToClickedSlide", "preloadImages", "updateOnImagesReady", "loop", "loopAdditionalSlides", "loopedSlides", "loopFillGroupWithBlank", "loopPreventsSlide", "rewind", "allowSlidePrev", "allowSlideNext", "swipeHandler", "noSwiping", "noSwipingClass", "noSwipingSelector", "passiveListeners", "containerModifierClass", "slideClass", "slideBlankClass", "slideActiveClass", "slideDuplicateActiveClass", "slideVisibleClass", "slideDuplicateClass", "slideNextClass", "slideDuplicateNextClass", "slidePrevClass", "slideDuplicatePrevClass", "wrapperClass", "runCallbacksOnInit", "observeParents", "observeSlideChildren", "a11y", "autoplay", "controller", "coverflowEffect", "cubeEffect", "fadeEffect", "flipEffect", "creativeEffect", "cardsEffect", "hashNavigation", "history", "keyboard", "lazy", "mousewheel", "parallax", "thumbs", "zoom", "class", "id", "navigation", "pagination", "scrollbar", "virtual", "config"], outputs: ["_beforeBreakpoint", "_containerClasses", "_slideClass", "_swiper", "activeIndexChange", "afterInit", "autoplay", "autoplayStart", "autoplayStop", "autoplayPause", "autoplayResume", "beforeDestroy", "beforeInit", "beforeLoopFix", "beforeResize", "beforeSlideChangeStart", "beforeTransitionStart", "breakpoint", "changeDirection", "click", "doubleTap", "doubleClick", "destroy", "fromEdge", "hashChange", "hashSet", "imagesReady", "init", "keyPress", "lazyImageLoad", "lazyImageReady", "loopFix", "momentumBounce", "navigationHide", "navigationShow", "observerUpdate", "orientationchange", "paginationHide", "paginationRender", "paginationShow", "paginationUpdate", "progress", "reachBeginning", "reachEnd", "realIndexChange", "resize", "scroll", "scrollbarDragEnd", "scrollbarDragMove", "scrollbarDragStart", "setTransition", "setTranslate", "slideChange", "slideChangeTransitionEnd", "slideChangeTransitionStart", "slideNextTransitionEnd", "slideNextTransitionStart", "slidePrevTransitionEnd", "slidePrevTransitionStart", "slideResetTransitionStart", "slideResetTransitionEnd", "sliderMove", "sliderFirstMove", "slidesLengthChange", "slidesGridLengthChange", "snapGridLengthChange", "snapIndexChange", "tap", "toEdge", "touchEnd", "touchMove", "touchMoveOpposite", "touchStart", "transitionEnd", "transitionStart", "update", "zoomChange", "swiper", "lock", "unlock"] }, { kind: "directive", type: i4.SwiperSlideDirective, selector: "ng-template[swiperSlide]", inputs: ["virtualIndex", "class", "ngClass", "data-swiper-autoplay", "zoom"] }], encapsulation: i0.ViewEncapsulation.None });
238
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: NxsCarouselComponent, decorators: [{
239
- type: Component,
240
- args: [{ selector: 'nxs-carousel', encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"options\"\n [ngClass]=\"{'swiper-container':true,'nxs-slider-with-thumbnails':!!options.nxsThumbnails && options.nxsThumbnails.show}\"\n [style.height]=\"getMainSliderHeight()\">\n <swiper [config]=\"options\" (swiper)=\"onSwiper($event)\" (slideChange)=\"onSlideChange($event)\"\n [thumbs]=\"{ swiper: thumbnailsSwiperInstance }\">\n <ng-container *ngIf=\"hasHtmlContent\">\n <ng-template *ngFor=\"let slide of contents\" swiperSlide>\n <ng-template [ngTemplateOutlet]=\"slide\" [ngTemplateOutletContext]=\"{\n $implicit: slide\n }\"></ng-template>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!hasHtmlContent && images?.length\">\n <ng-template swiperSlide *ngFor=\"let slideImage of images\">\n <img [ngClass]=\"{'nxs-image-slide':true,'swiper-lazy':lazy}\"\n [attr.data-src]=\"lazy ? slideImage.src : null\" [src]=\"lazy ? null : slideImage.src\"\n [attr.alt]=\"slideImage.alt\" />\n <div *ngIf=\"lazy\" class=\"swiper-lazy-preloader swiper-lazy-preloader-black\"></div>\n </ng-template>\n </ng-container>\n </swiper>\n <ng-container *ngIf=\"images && options.nxsShowImagesCount\">\n <div class=\"nxs-image-counter\">\n {{currentSlide+1}} / {{images.length}}\n </div>\n </ng-container>\n</div>\n\n<div *ngIf=\"thumbnailsOptions && images?.length\"\n [style.height]=\"(!!options.nxsThumbnails && options.nxsThumbnails.show && !!options.nxsThumbnails.percentHeight) ? (options.nxsThumbnails.percentHeight + '%'):''\"\n [style.top]=\"(!!options.nxsThumbnails && options.nxsThumbnails.show && !!options.nxsThumbnails.percentHeight && options.nxsThumbnails.onMainSlider) ? ('-' + (options.nxsThumbnails.percentHeight) + '%'):''\"\n [ngClass]=\"{'swiper-container':true, 'nxs-slider-thumbnails-container':true,'nxs-slider-thumbnails-on-main-slider':options.nxsThumbnails && options.nxsThumbnails.onMainSlider}\">\n <swiper [config]=\"thumbnailsOptions\" (swiper)=\"onSwiperThumbnails($event)\">\n <ng-template swiperSlide *ngFor=\"let slideImage of images\">\n <img [ngClass]=\"{'nxs-image-slide':true,'swiper-lazy':lazy}\" [attr.data-src]=\"lazy ? slideImage.src : null\"\n [src]=\"lazy ? null : slideImage.src\" [attr.alt]=\"slideImage.alt\" />\n <div *ngIf=\"lazy\" class=\"swiper-lazy-preloader swiper-lazy-preloader-black\"></div>\n </ng-template>\n </swiper>\n</div>", styles: ["nxs-carousel{display:block;height:100%;position:relative;--swiper-navigation-color: #fff;--swiper-pagination-color: #fff;--swiper-theme-color: #fff}nxs-carousel .swiper-container{width:100%;height:100%;display:block;position:relative}nxs-carousel .swiper-container swiper{height:100%}nxs-carousel .swiper-container .swiper-wrapper .swiper-slide{height:100%;position:relative;width:auto;min-height:50px;background-size:cover;background-position:center;background-repeat:no-repeat}nxs-carousel .swiper-container .nxs-image-slide{height:100%;-o-object-fit:cover;object-fit:cover;width:100%;-o-object-position:center;object-position:center}nxs-carousel .swiper-container.nxs-slider-with-thumbnails{height:80%}nxs-carousel .swiper-container.nxs-slider-thumbnails-container{height:20%;background:transparent;padding:6px 0}nxs-carousel .swiper-container.nxs-slider-thumbnails-container .swiper-slide{cursor:pointer;border-radius:6px;margin:0 6px;border:2px solid transparent}nxs-carousel .swiper-container.nxs-slider-thumbnails-container .swiper-slide.swiper-slide-thumb-active{border:2px solid lightblue}nxs-carousel .swiper-container.nxs-slider-thumbnails-on-main-slider{top:-20%}nxs-carousel .nxs-image-counter{position:absolute;top:0;right:0;color:#fff;padding:4px;font-weight:700;z-index:10}\n"] }]
241
- }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.NgZone }, { type: undefined, decorators: [{
242
- type: Inject,
243
- args: [PLATFORM_ID]
244
- }] }, { type: i2.NxsCarouselModuleConfig, decorators: [{
245
- type: Optional
246
- }] }]; }, propDecorators: { contents: [{
247
- type: ContentChildren,
248
- args: [NxsSwiperTemplateDirective, { read: TemplateRef }]
249
- }], swiperComponent: [{
250
- type: ViewChild,
251
- args: ['swiper', { static: false }]
252
- }], lazy: [{
253
- type: Input
254
- }], images: [{
255
- type: Input
256
- }], setOptions: [{
257
- type: Input,
258
- args: ['options']
259
- }], hasHtmlContent: [{
260
- type: Input
261
- }], slideChange: [{
262
- type: Output
263
- }], slideClick: [{
264
- type: Output
265
- }] } });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnhzLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9ueHMtY2Fyb3VzZWwvbnhzLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYi9ueHMtY2Fyb3VzZWwvbnhzLWNhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUUxTCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLDBDQUEwQztBQUMxQyxPQUFPLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBeUIsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNHLHdCQUF3QjtBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBRW5ELHlCQUF5QjtBQUN6QixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxD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QkFxQ2hDLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7NENBakNiLFFBQVE7c0JBRFAsZUFBZTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR2xFLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUd0QyxJQUFJO3NCQURILEtBQUs7Z0JBS0MsTUFBTTtzQkFEWixLQUFLO2dCQUtGLFVBQVU7c0JBRGIsS0FBSzt1QkFBQyxTQUFTO2dCQU1oQixjQUFjO3NCQURiLEtBQUs7Z0JBT04sV0FBVztzQkFEVixNQUFNO2dCQUlQLFVBQVU7c0JBRFQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBQTEFURk9STV9JRCwgSW5qZWN0LCBPcHRpb25hbCwgTmdab25lLCBDb250ZW50Q2hpbGRyZW4sIFRlbXBsYXRlUmVmLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnhzQ2Fyb3VzZWxEaWFsb2dEYXRhLCBOeHNDYXJvdXNlbE9wdGlvbnMgfSBmcm9tICcuL254cy1jYXJvdXNlbC10eXBlcyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXZlbnRzQ29sbGVjdG9yIH0gZnJvbSAnbmV4dGFseXMtanMtaGVscGVycy9kaXN0L2V2ZW50cyc7XG4vLyBpbXBvcnQgU3dpcGVyIGNvcmUgYW5kIHJlcXVpcmVkIG1vZHVsZXNcbmltcG9ydCBTd2lwZXJDb3JlLCB7IE5hdmlnYXRpb24sIFBhZ2luYXRpb24sIEF1dG9wbGF5LCBMYXp5LCBTd2lwZXIsIFN3aXBlck9wdGlvbnMsIFRodW1icyB9IGZyb20gJ3N3aXBlcic7XG4vL1ZpcnR1YWwsU2Nyb2xsYmFyLEExMXlcbmltcG9ydCB7IFN3aXBlckNvbXBvbmVudCB9IGZyb20gJ3N3aXBlci9hbmd1bGFyJztcbmltcG9ydCB7IE54c1N3aXBlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9zd2lwZXItZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbEltYWdlLCBOeHNDYXJvdXNlbE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uL2NvbW1vbi10eXBlcyc7XG5pbXBvcnQgeyBDYXJvdXNlbEV2ZW50cyB9IGZyb20gJy4vY2Fyb3VzZWwtZXZlbnRzJztcblxuLy8gaW5zdGFsbCBTd2lwZXIgbW9kdWxlc1xuU3dpcGVyQ29yZS51c2UoW05hdmlnYXRpb24sIFBhZ2luYXRpb24sIEF1dG9wbGF5LCBMYXp5LCBUaHVtYnNdKTtcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbnhzLWNhcm91c2VsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbnhzLWNhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ueHMtY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBOeHNDYXJvdXNlbENvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBzd2lwZXJSZWFkeSA9IGZhbHNlO1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTnhzU3dpcGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBjb250ZW50cyE6IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkKCdzd2lwZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBzd2lwZXJDb21wb25lbnQ/OiBTd2lwZXJDb21wb25lbnQ7XG4gICAgQElucHV0KClcbiAgICBsYXp5ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGV2ZW50c0NvbGxlY3RvciA9IG5ldyBFdmVudHNDb2xsZWN0b3IoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGltYWdlczogTnhzQ2Fyb3VzZWxJbWFnZVtdO1xuICAgIG9wdGlvbnM6IE54c0Nhcm91c2VsT3B0aW9ucyA9IG51bGw7XG4gICAgdGh1bWJuYWlsc09wdGlvbnM6IFN3aXBlck9wdGlvbnMgPSBudWxsO1xuICAgIEBJbnB1dCgnb3B0aW9ucycpXG4gICAgc2V0IHNldE9wdGlvbnModmFsOiBOeHNDYXJvdXNlbE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXREZWZhdWx0T3B0aW9ucyh2YWwsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRUaHVtYm5haWxzT3B0aW9ucygpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIGhhc0h0bWxDb250ZW50ID0gZmFsc2U7XG4gICAgc2xpZGVzQ291bnQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBzd2lwZXJJbnN0YW5jZTogU3dpcGVyO1xuICAgIHRodW1ibmFpbHNTd2lwZXJJbnN0YW5jZTogU3dpcGVyO1xuXG4gICAgQE91dHB1dCgpXG4gICAgc2xpZGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBwdWJsaWMgY3VycmVudFNsaWRlID0gMDtcbiAgICBAT3V0cHV0KClcbiAgICBzbGlkZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCB8IFBvaW50ZXJFdmVudD4oKTtcbiAgICBpc0Jyb3dzZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY29uZmlnPzogTnhzQ2Fyb3VzZWxNb2R1bGVDb25maWcsXG5cbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZylcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0geyBkZWJ1ZzogZmFsc2UgfTtcbiAgICAgICAgdGhpcy5pc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICAgICAgICB0aGlzLmxvZygnY29uc3RydWN0b3IgLSBpc0Jyb3dzZXInLCB0aGlzLmlzQnJvd3Nlcik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2V0RGVmYXVsdE9wdGlvbnModW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgfVxuICAgIHByaXZhdGUgbG9nKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZGVidWcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnNvbGUubG9nKCdbTnhzQ2Fyb3VzZWxdJywgLi4uYXJncyk7XG4gICAgfVxuICAgIHByaXZhdGUgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXZlbnRzQ29sbGVjdG9yPy51bnN1YnNjcmliZUFsbCgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaS5jb250ZW50cycsIHRoaXMuY29udGVudHMpO1xuICAgICAgICAvLyB0aGlzLmluaXRTbGlkZXMoKTtcbiAgICAgICAgLy8gdGhpcy5jcmVhdGVTbGlkZXIodHJ1ZSk7XG4gICAgfVxuICAgIGdldE1haW5TbGlkZXJIZWlnaHQoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMgJiYgdGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMuc2hvdykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzLm9uTWFpblNsaWRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnMTAwJSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgxMDAgLSB0aGlzLm9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0KSArICclJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9uczogTnhzQ2Fyb3VzZWxPcHRpb25zLCBmb3JEaWFsb2c6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFvcHRpb25zICYmIGZvckRpYWxvZykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBueHNTaG93TmF2aWdhdGlvbkJ1bGxldHM6IHRydWUsIGxvb3A6IHRydWUsIG54c1RodW1ibmFpbHM6IHsgc2hvdzogdHJ1ZSB9LCBlZmZlY3Q6ICdzbGlkZScsIG54c1Nob3dOYXZpZ2F0aW9uQXJyb3dzOiB0cnVlLCBueHNTaG93SW1hZ2VzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGF6eTogdGhpcy5sYXp5LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBueHNTaG93TmF2aWdhdGlvbkJ1bGxldHM6IHRydWUsIGxvb3A6IHRydWUsXG4gICAgICAgICAgICAgICAgbnhzVGh1bWJuYWlsczogeyBzaG93OiBmYWxzZSB9LCBlZmZlY3Q6ICdzbGlkZScsIG54c1Nob3dOYXZpZ2F0aW9uQXJyb3dzOiB0cnVlLCBueHNTaG93SW1hZ2VzQ291bnQ6IGZhbHNlLCBueHNDYXJvdXNlbERpYWxvZ09wdGlvbnM6IHt9LFxuICAgICAgICAgICAgICAgIGxhenk6IHRoaXMubGF6eSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1RodW1ibmFpbHMgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1RodW1ibmFpbHMgPSB7IHNob3c6IGZhbHNlIH07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLmVmZmVjdCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMuZWZmZWN0ID0gJ3NsaWRlJztcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzU2hvd05hdmlnYXRpb25BcnJvd3MgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1Nob3dOYXZpZ2F0aW9uQXJyb3dzID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKCEhb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzVGh1bWJuYWlscz8uc2hvdykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0ID0gMjA7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlclZpZXcgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlclZpZXcgPSAxMDtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNUaHVtYm5haWxzLmJyZWFrcG9pbnRzID0ge1xuICAgICAgICAgICAgICAgICAgICA2NDA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIDc2ODoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgMTAyNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogOCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucy5ueHNUaHVtYm5haWxzKVxuICAgICAgICAgICAgb3B0aW9ucy5ueHNUaHVtYm5haWxzID0geyBzaG93OiBmYWxzZSB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLm54c1RodW1ibmFpbHMuc2hvdyAmJiB0eXBlb2Ygb3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlcmNlbnRIZWlnaHQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgb3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlcmNlbnRIZWlnaHQgPSAyMDtcblxuICAgICAgICBpZiAob3B0aW9ucy5ueHNUaHVtYm5haWxzLnNob3cgJiYgdHlwZW9mIG9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJWaWV3ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIG9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJWaWV3ID0gMTA7XG5cblxuICAgICAgICBpZiAoZm9yRGlhbG9nKVxuICAgICAgICAgICAgb3B0aW9ucy5ueHNmdWxsc2NyZWVuT25DbGljayA9IGZhbHNlO1xuICAgICAgICBpZiAob3B0aW9ucy5ueHNUaHVtYm5haWxzLm9uTWFpblNsaWRlcilcbiAgICAgICAgICAgIG9wdGlvbnMubnhzU2hvd05hdmlnYXRpb25CdWxsZXRzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxhenkgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgb3B0aW9ucy5sYXp5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICBvcHRpb25zLm5hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnaW5hdGlvbiA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICBvcHRpb25zLnBhZ2luYXRpb24gPSB7IGNsaWNrYWJsZTogdHJ1ZSB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLm54c1Nob3dOYXZpZ2F0aW9uQnVsbGV0cyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiTG9nIH4gZmlsZTogbnhzLWNhcm91c2VsLmNvbXBvbmVudC50cyB+IGxpbmUgMjcyIH4gTnhzQ2Fyb3VzZWxDb21wb25lbnQgfiBzZXREZWZhdWx0T3B0aW9ucyB+IG9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUaHVtYm5haWxzT3B0aW9ucygpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5vcHRpb25zPy5ueHNUaHVtYm5haWxzPy5zaG93KSB7XG4gICAgICAgICAgICB0aGlzLnRodW1ibmFpbHNPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlclZpZXcsXG4gICAgICAgICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZnJlZU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgLy8gd2F0Y2hTbGlkZXNWaXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgYnJlYWtwb2ludHM6IHRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzLmJyZWFrcG9pbnRzLFxuICAgICAgICAgICAgICAgIC8vIHNwYWNlQmV0d2VlbjogMTAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMubGF6eSkge1xuICAgICAgICAgICAgICAgIC8vIERpc2FibGUgcHJlbG9hZGluZyBvZiBhbGwgaW1hZ2VzXG4gICAgICAgICAgICAgICAgdGhpcy50aHVtYm5haWxzT3B0aW9ucy5wcmVsb2FkSW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gRW5hYmxlIGxhenkgbG9hZGluZ1xuICAgICAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsc09wdGlvbnMubGF6eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkxvZyB+IGZpbGU6IG54cy1jYXJvdXNlbC5jb21wb25lbnQudHMgfiBsaW5lIDE4NCB+IE54c0Nhcm91c2VsQ29tcG9uZW50IH4gc2V0VGh1bWJuYWlsc09wdGlvbnMgfiAgIHRoaXMudGh1bWJuYWlsc09wdGlvbnMubGF6eVwiLCB0aGlzLnRodW1ibmFpbHNPcHRpb25zLmxhenkpO1xuXG4gICAgICAgICAgICAvLyB0aGlzLnRodW1ibmFpbHNTbGlkZXJJbnN0YW5jZSA9IG5ldyBTd2lwZXIodGhpcy5ueHNUaHVtYm5haWxzU2xpZGVyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHRodW1ibmFpbHNPcHRpb25zKTtcbiAgICAgICAgICAgIC8vIHRoaXMub3B0aW9ucy50aHVtYnMgPSB7IHN3aXBlcjogdGhpcy50aHVtYm5haWxzU2xpZGVySW5zdGFuY2UgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgc2hvd0Z1bGxTY3JlZW5DYXJvdXNlbChpbWFnZXM6IE54c0Nhcm91c2VsSW1hZ2VbXSwgd3JhcHBlckNsYXNzPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMgPSB0aGlzLnNldERlZmF1bHRPcHRpb25zKHRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMsIHRydWUpO1xuICAgICAgICBjb25zdCBkYXRhOiBOeHNDYXJvdXNlbERpYWxvZ0RhdGEgPSB7IGltYWdlcywgd3JhcHBlckNsYXNzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zIH07XG4gICAgICAgIENhcm91c2VsRXZlbnRzLm9wZW5DYXJvdXNlbERpYWxvZz8uZW1pdCh7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ254cy1jYXJvdXNlbC1kaWFsb2cnLFxuICAgICAgICAgICAgd2lkdGg6ICEhdGhpcy5vcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nU2l6ZSA/IHRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ1NpemUud2lkdGggOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6ICEhdGhpcy5vcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nU2l6ZSA/IHRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ1NpemUuaGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiAhdGhpcy5vcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nRXhpdGFibGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnb1RvU2xpZGUoaW5kZXg6IG51bWJlciwgc3BlZWQ/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zd2lwZXJJbnN0YW5jZT8uc2xpZGVUbyhpbmRleCwgc3BlZWQpO1xuICAgIH1cbiAgICBuZXh0KCkge1xuICAgICAgICB0aGlzLnN3aXBlckluc3RhbmNlPy5zbGlkZU5leHQoKTtcbiAgICB9XG4gICAgcHJldmlvdXMoKSB7XG4gICAgICAgIHRoaXMuc3dpcGVySW5zdGFuY2U/LnNsaWRlUHJldigpO1xuICAgIH1cbiAgICBvblN3aXBlclRodW1ibmFpbHMoaW5zdGFuY2U6IFN3aXBlcikge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5ueHNUaHVtYm5haWxzPy5zaG93KVxuICAgICAgICAgICAgdGhpcy50aHVtYm5haWxzU3dpcGVySW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy50aHVtYm5haWxzU3dpcGVySW5zdGFuY2UgPSBudWxsO1xuXG4gICAgICAgIC8vIGlmICh0aGlzLm9wdGlvbnM/Lm54c1RodW1ibmFpbHM/LnNob3cpIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IG9wdGlvbnNDbG9uZSA9IE1haW5IZWxwZXJzLmNsb25lT2JqZWN0KHRoaXMub3B0aW9ucyk7XG4gICAgICAgIC8vICAgICBvcHRpb25zQ2xvbmUudGh1bWJzID0geyBzd2lwZXI6IHRoaXMudGh1bWJuYWlsc1N3aXBlckluc3RhbmNlIH07XG4gICAgICAgIC8vICAgICAvLyB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQ2xvbmU7XG4gICAgICAgIC8vICAgICAvLyB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgdGh1bWJzOiB7IHN3aXBlcjogdGhpcy50aHVtYm5haWxzU3dpcGVySW5zdGFuY2UgfSB9O1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2coXCJMb2cgfiBmaWxlOiBueHMtY2Fyb3VzZWwuY29tcG9uZW50LnRzIH4gbGluZSA0MTYgfiBOeHNDYXJvdXNlbENvbXBvbmVudCB+IG9uU3dpcGVyVGh1bWJuYWlscyB+ICAgIHRoaXMub3B0aW9ucyBcIiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgLy8gICAgIHRoaXMub3B0aW9ucy50aHVtYnMgPSB7IHN3aXBlcjogdGhpcy50aHVtYm5haWxzU3dpcGVySW5zdGFuY2UgfTtcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBvblN3aXBlcihpbnN0YW5jZTogU3dpcGVyKSB7XG4gICAgICAgIHRoaXMubG9nKCdzd2lwZXIgcmVhZHkgLSBpbnN0YW5jZScsIGluc3RhbmNlKTtcbiAgICAgICAgdGhpcy5zd2lwZXJJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICB0aGlzLnN3aXBlckluc3RhbmNlLm9uKCdjbGljaycsIChzd2lwZXJJbnN0YW5jZSwgZXZ0KSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkxvZyB+IGZpbGU6IG54cy1jYXJvdXNlbC5jb21wb25lbnQudHMgfiBsaW5lIDM5MiB+IE54c0Nhcm91c2VsQ29tcG9uZW50IH4gdGhpcy5zd2lwZXJJbnN0YW5jZS5vbiB+IGV2dFwiLCBldnQpO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoJ254cy1jYXJvdXNlbC1idXR0b24nKSAhPT0gLTEgfHwgdGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItcGFnaW5hdGlvbicpICE9PSAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnJ1bkluWm9uZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZUNsaWNrLm5leHQoZXZ0KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm54c2Z1bGxzY3JlZW5PbkNsaWNrICYmIHRoaXMuaW1hZ2VzICYmIHRoaXMuaW1hZ2VzLmxlbmd0aCAmJiAhdGhpcy5oYXNIdG1sQ29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGdWxsU2NyZWVuQ2Fyb3VzZWwodGhpcy5pbWFnZXMsICdmdWxsc2NyZWVuLWNhcm91c2VsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3dpcGVyUmVhZHkgPSB0cnVlO1xuICAgIH1cbiAgICBwcml2YXRlIHJ1bkluWm9uZTxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPihjYWxsYmFjazogVCwgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgaWYgKCF0aGlzLnpvbmUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnpvbmUucnVuKCgpID0+IGNhbGxiYWNrKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBvblNsaWRlQ2hhbmdlKGluc3RhbmNlczogU3dpcGVyW10pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN3aXBlclJlYWR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnN3aXBlckluc3RhbmNlICYmIGluc3RhbmNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXBlckluc3RhbmNlID0gaW5zdGFuY2VzWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiTG9nIH4gZmlsZTogbnhzLWNhcm91c2VsLmNvbXBvbmVudC50czoyNTIgfiBOeHNDYXJvdXNlbENvbXBvbmVudCB+IG9uU2xpZGVDaGFuZ2UgfiBpbnN0YW5jZXM6XCIsIGluc3RhbmNlcyk7XG4gICAgICAgIC8vIHRoaXMuc3dpcGVySW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgLy8gdGhpcy5sb2coJ3NsaWRlIGNoYW5nZSAtIGluc3RhbmNlJywgaW5zdGFuY2UpO1xuICAgICAgICB0aGlzLnJ1bkluWm9uZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTbGlkZSA9IHRoaXMuc3dpcGVySW5zdGFuY2U/LnJlYWxJbmRleCB8fCAwO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJMb2cgfiBmaWxlOiBueHMtY2Fyb3VzZWwuY29tcG9uZW50LnRzOjI1NiB+IE54c0Nhcm91c2VsQ29tcG9uZW50IH4gdGhpcy5ydW5JblpvbmUgfiB0aGlzLnN3aXBlckluc3RhbmNlPy5yZWFsSW5kZXg6XCIsIHRoaXMuc3dpcGVySW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5sb2coJ3NsaWRlIGNoYW5nZSAtIGN1cnJlbnRTbGlkZScsIHRoaXMuY3VycmVudFNsaWRlKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVDaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnRTbGlkZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJvcHRpb25zXCJcbiAgICBbbmdDbGFzc109XCJ7J3N3aXBlci1jb250YWluZXInOnRydWUsJ254cy1zbGlkZXItd2l0aC10aHVtYm5haWxzJzohIW9wdGlvbnMubnhzVGh1bWJuYWlscyAmJiBvcHRpb25zLm54c1RodW1ibmFpbHMuc2hvd31cIlxuICAgIFtzdHlsZS5oZWlnaHRdPVwiZ2V0TWFpblNsaWRlckhlaWdodCgpXCI+XG4gICAgPHN3aXBlciBbY29uZmlnXT1cIm9wdGlvbnNcIiAoc3dpcGVyKT1cIm9uU3dpcGVyKCRldmVudClcIiAoc2xpZGVDaGFuZ2UpPVwib25TbGlkZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW3RodW1ic109XCJ7IHN3aXBlcjogdGh1bWJuYWlsc1N3aXBlckluc3RhbmNlIH1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0h0bWxDb250ZW50XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nRm9yPVwibGV0IHNsaWRlIG9mIGNvbnRlbnRzXCIgc3dpcGVyU2xpZGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNsaWRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHNsaWRlXG4gICAgICAgICAgICAgICAgICAgIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzSHRtbENvbnRlbnQgJiYgaW1hZ2VzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBzd2lwZXJTbGlkZSAqbmdGb3I9XCJsZXQgc2xpZGVJbWFnZSBvZiBpbWFnZXNcIj5cbiAgICAgICAgICAgICAgICA8aW1nIFtuZ0NsYXNzXT1cInsnbnhzLWltYWdlLXNsaWRlJzp0cnVlLCdzd2lwZXItbGF6eSc6bGF6eX1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXNyY109XCJsYXp5ID8gc2xpZGVJbWFnZS5zcmMgOiBudWxsXCIgW3NyY109XCJsYXp5ID8gbnVsbCA6IHNsaWRlSW1hZ2Uuc3JjXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYWx0XT1cInNsaWRlSW1hZ2UuYWx0XCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGF6eVwiIGNsYXNzPVwic3dpcGVyLWxhenktcHJlbG9hZGVyIHN3aXBlci1sYXp5LXByZWxvYWRlci1ibGFja1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zd2lwZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImltYWdlcyAmJiBvcHRpb25zLm54c1Nob3dJbWFnZXNDb3VudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnhzLWltYWdlLWNvdW50ZXJcIj5cbiAgICAgICAgICAgIHt7Y3VycmVudFNsaWRlKzF9fSAvIHt7aW1hZ2VzLmxlbmd0aH19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJ0aHVtYm5haWxzT3B0aW9ucyAmJiBpbWFnZXM/Lmxlbmd0aFwiXG4gICAgW3N0eWxlLmhlaWdodF09XCIoISFvcHRpb25zLm54c1RodW1ibmFpbHMgJiYgb3B0aW9ucy5ueHNUaHVtYm5haWxzLnNob3cgJiYgISFvcHRpb25zLm54c1RodW1ibmFpbHMucGVyY2VudEhlaWdodCkgPyAgKG9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0ICsgJyUnKTonJ1wiXG4gICAgW3N0eWxlLnRvcF09XCIoISFvcHRpb25zLm54c1RodW1ibmFpbHMgJiYgb3B0aW9ucy5ueHNUaHVtYm5haWxzLnNob3cgJiYgISFvcHRpb25zLm54c1RodW1ibmFpbHMucGVyY2VudEhlaWdodCAmJiBvcHRpb25zLm54c1RodW1ibmFpbHMub25NYWluU2xpZGVyKSA/ICAoJy0nICsgKG9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0KSArICclJyk6JydcIlxuICAgIFtuZ0NsYXNzXT1cInsnc3dpcGVyLWNvbnRhaW5lcic6dHJ1ZSwgJ254cy1zbGlkZXItdGh1bWJuYWlscy1jb250YWluZXInOnRydWUsJ254cy1zbGlkZXItdGh1bWJuYWlscy1vbi1tYWluLXNsaWRlcic6b3B0aW9ucy5ueHNUaHVtYm5haWxzICYmIG9wdGlvbnMubnhzVGh1bWJuYWlscy5vbk1haW5TbGlkZXJ9XCI+XG4gICAgPHN3aXBlciBbY29uZmlnXT1cInRodW1ibmFpbHNPcHRpb25zXCIgKHN3aXBlcik9XCJvblN3aXBlclRodW1ibmFpbHMoJGV2ZW50KVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgc3dpcGVyU2xpZGUgKm5nRm9yPVwibGV0IHNsaWRlSW1hZ2Ugb2YgaW1hZ2VzXCI+XG4gICAgICAgICAgICA8aW1nIFtuZ0NsYXNzXT1cInsnbnhzLWltYWdlLXNsaWRlJzp0cnVlLCdzd2lwZXItbGF6eSc6bGF6eX1cIiBbYXR0ci5kYXRhLXNyY109XCJsYXp5ID8gc2xpZGVJbWFnZS5zcmMgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImxhenkgPyBudWxsIDogc2xpZGVJbWFnZS5zcmNcIiBbYXR0ci5hbHRdPVwic2xpZGVJbWFnZS5hbHRcIiAvPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxhenlcIiBjbGFzcz1cInN3aXBlci1sYXp5LXByZWxvYWRlciBzd2lwZXItbGF6eS1wcmVsb2FkZXItYmxhY2tcIj48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3N3aXBlcj5cbjwvZGl2PiJdfQ==