game-lobby-lib 0.0.12 → 0.0.13

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.
@@ -47,11 +47,11 @@ export class BannersComponent {
47
47
  }
48
48
  }
49
49
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannersComponent, deps: [{ token: i1.GameLobbyThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
50
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BannersComponent, isStandalone: true, selector: "app-banners", inputs: { bannerData: "bannerData", theme: "theme", bannerOverlay: "bannerOverlay" }, outputs: { routerLinkClicked: "routerLinkClicked" }, viewQueries: [{ propertyName: "btnSpans", predicate: ["btnSpan"], descendants: true }], ngImport: i0, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.cm-banner{padding:0 20px}}@media (max-width: 768px){.cm-banner{padding:0 15px}}@media (max-width: 480px){.cm-banner{padding:0 10px}}.cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.cm-banner .slideWrapper img{aspect-ratio:4/3}}.cm-banner .slideWrapper .lobbylib_cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{bottom:20px;padding:10px}}.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BannersComponent, isStandalone: true, selector: "app-banners", inputs: { bannerData: "bannerData", theme: "theme", bannerOverlay: "bannerOverlay" }, outputs: { routerLinkClicked: "routerLinkClicked" }, viewQueries: [{ propertyName: "btnSpans", predicate: ["btnSpan"], descendants: true }], ngImport: i0, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"lobby_cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".lobby_cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.lobby_cm-banner{padding:0 20px}}@media (max-width: 768px){.lobby_cm-banner{padding:0 15px}}@media (max-width: 480px){.lobby_cm-banner{padding:0 10px}}.lobby_cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.lobby_cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.lobby_cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.lobby_cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper img{aspect-ratio:4/3}}.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{bottom:20px;padding:10px}}.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None }); }
51
51
  }
52
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannersComponent, decorators: [{
53
53
  type: Component,
54
- args: [{ selector: 'app-banners', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], encapsulation: ViewEncapsulation.None, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.cm-banner{padding:0 20px}}@media (max-width: 768px){.cm-banner{padding:0 15px}}@media (max-width: 480px){.cm-banner{padding:0 10px}}.cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.cm-banner .slideWrapper img{aspect-ratio:4/3}}.cm-banner .slideWrapper .lobbylib_cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{bottom:20px;padding:10px}}.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"] }]
54
+ args: [{ selector: 'app-banners', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], encapsulation: ViewEncapsulation.None, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"lobby_cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".lobby_cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.lobby_cm-banner{padding:0 20px}}@media (max-width: 768px){.lobby_cm-banner{padding:0 15px}}@media (max-width: 480px){.lobby_cm-banner{padding:0 10px}}.lobby_cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.lobby_cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.lobby_cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.lobby_cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper img{aspect-ratio:4/3}}.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{bottom:20px;padding:10px}}.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"] }]
55
55
  }], ctorParameters: () => [{ type: i1.GameLobbyThemeService }], propDecorators: { btnSpans: [{
56
56
  type: ViewChildren,
57
57
  args: ['btnSpan']
@@ -64,4 +64,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
64
64
  }], bannerOverlay: [{
65
65
  type: Input
66
66
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1lLWxvYmJ5LWxpYi9zcmMvbGliL2Jhbm5lcnMvYmFubmVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1lLWxvYmJ5LWxpYi9zcmMvbGliL2Jhbm5lcnMvYmFubmVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBVSxZQUFZLEVBQUUsaUJBQWlCLEVBQXlCLE1BQU0sRUFBRSxZQUFZLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDNUssT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBYS9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFZM0IsWUFBWSxZQUFtQztRQVAvQyxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ1gsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRCxrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDdkQseUVBQXlFO1FBQ3pFLFdBQU0sR0FBVSxFQUFFLENBQUM7UUFDbkIsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBR25DLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUMxRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQWtCO1FBQ3hDLCtDQUErQztRQUMvQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILDREQUE0RDtZQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFbEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7K0dBbERVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLDBTQ2Q3QixpOUNBbUNBLCszRkQzQlksWUFBWTs7NEZBTVgsZ0JBQWdCO2tCQVQ1QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsV0FDZCxDQUFDLHNCQUFzQixDQUFDLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJOzBGQUdaLFFBQVE7c0JBQWhDLFlBQVk7dUJBQUMsU0FBUztnQkFFZCxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0UsYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiwgUXVlcnlMaXN0LCBFbGVtZW50UmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgR2FtZUxvYmJ5VGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUvdGhlbWVTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHYW1lTG9iYnlUaGVtZSB9IGZyb20gJy4uL3RoZW1lL2RlZmF1bHQtdGhlbWUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmFubmVycycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhbm5lcnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9iYW5uZXJzLmNvbXBvbmVudC5zY3NzJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW5uZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkcmVuKCdidG5TcGFuJykgYnRuU3BhbnMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIEBJbnB1dCgpIGJhbm5lckRhdGE6IGFueTtcclxuICBASW5wdXQoKSB0aGVtZT86IEdhbWVMb2JieVRoZW1lO1xyXG4gIGJhc2VVcmw6IHN0cmluZyA9ICcnO1xyXG4gIEBPdXRwdXQoKSByb3V0ZXJMaW5rQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBJbnB1dCgpIGJhbm5lck92ZXJsYXk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuICAvLyBGSVg6IEluaXRpYWxpemUgc2xpZGVzIGFzIGVtcHR5IGFycmF5IHRvIHByZXZlbnQgbnVsbCByZWZlcmVuY2UgZXJyb3JzXHJcbiAgc2xpZGVzOiBhbnlbXSA9IFtdO1xyXG4gIGhvdmVyZWRTbGlkZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBcclxuICBjb25zdHJ1Y3Rvcih0aGVtZVNlcnZpY2U6IEdhbWVMb2JieVRoZW1lU2VydmljZSkge1xyXG4gICAgdGhlbWVTZXJ2aWNlLnRoZW1lJC5zdWJzY3JpYmUodCA9PiAodGhpcy50aGVtZSA9IHQpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ0Jhbm5lciBiYW5uZXJPdmVybGF5OicsIHRoaXMuYmFubmVyT3ZlcmxheSk7IC8vIERlYnVnIGxvZyB0byBjaGVjayBiYW5uZXJEYXRhXHJcbiAgICB0aGlzLnNldERhdGFUaGVtZXMoKTtcclxuICB9XHJcblxyXG4gIHNldERhdGFUaGVtZXMoKTogdm9pZCB7XHJcbiAgICAvLyBGSVg6IEFkZCBzYWZlIG5hdmlnYXRpb24gdG8gcHJldmVudCBlcnJvcnMgaWYgYmFubmVyRGF0YSBpcyBudWxsL3VuZGVmaW5lZFxyXG4gICAgdGhpcy5zbGlkZXMgPSB0aGlzLmJhbm5lckRhdGEuYmFubmVyRGF0YSB8fCBbXTtcclxuICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuYmFubmVyRGF0YS5iYXNlVXJsIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91dGVyTGlua0Zyb21CdXR0b24oYnV0dG9uSHRtbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBGSVg6IEFkZCBudWxsL3VuZGVmaW5lZCBjaGVjayBmb3IgYnV0dG9uSHRtbFxyXG4gICAgaWYgKCFidXR0b25IdG1sKSB7XHJcbiAgICAgIHRoaXMucm91dGVyTGlua0NsaWNrZWQuZW1pdCgnJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBQYXJzZSB0aGUgSFRNTCBzdHJpbmcgdG8gZXh0cmFjdCB0aGUgcm91dGVybGluayBhdHRyaWJ1dGVcclxuICAgICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xyXG4gICAgICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGJ1dHRvbkh0bWwsICd0ZXh0L2h0bWwnKTtcclxuICAgICAgY29uc3QgYW5jaG9yID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2Fbcm91dGVybGlua10nKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgICBjb25zdCByb3V0ZXJMaW5rID0gYW5jaG9yLmdldEF0dHJpYnV0ZSgncm91dGVybGluaycpO1xyXG4gICAgICAgIHRoaXMucm91dGVyTGlua0NsaWNrZWQuZW1pdChyb3V0ZXJMaW5rIHx8ICcnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlckxpbmtDbGlja2VkLmVtaXQoJycpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGJ1dHRvbiBIVE1MOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5yb3V0ZXJMaW5rQ2xpY2tlZC5lbWl0KCcnKTtcclxuICAgIH1cclxuICB9XHJcbn0iLCI8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS82LjUuMC9jc3MvYWxsLm1pbi5jc3NcIj5cclxuPGRpdiBjbGFzcz1cImNtLWJhbm5lclwiPiBcclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmFubmVyT3ZlcmxheVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFubmVyT3ZlcmxheVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxzd2lwZXItY29udGFpbmVyXHJcbiAgICBjbGFzcz1cIm15LXN3aXBlclwiXHJcbiAgICBzbGlkZXMtcGVyLXZpZXc9XCIxXCJcclxuICAgIHBhZ2luYXRpb249XCJ0cnVlXCJcclxuICAgIHBhZ2luYXRpb24tY2xpY2thYmxlPVwidHJ1ZVwiXHJcbiAgICBzcGVlZD1cIjUwMFwiXHJcbiAgICBbbG9vcF09XCJzbGlkZXMubGVuZ3RoID4gMVwiXHJcbiAgICBhdXRvcGxheT1cInRydWVcIlxyXG4gICAgYXV0b3BsYXktZGVsYXk9XCIxNTAwMFwiXHJcbiAgICBjc3MtbW9kZT1cInRydWVcIj5cclxuICAgIDxzd2lwZXItc2xpZGUgKm5nRm9yPVwibGV0IHNsaWRlIG9mIHNsaWRlc1wiPlxyXG4gICAgICA8ZGl2IFtpZF09XCJzbGlkZS5pZFwiIGNsYXNzPVwic2xpZGVXcmFwcGVyXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyAnL3VwbG9hZHMvYmFubmVyLycgKyBzbGlkZS5pbWFnZVBhdGhcIiBbYWx0XT1cInNsaWRlLm5hbWVcIiA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYmJ5bGliX2NtLXNsaWRlcl9fYnRuXCIgXHJcbiAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogaG92ZXJlZFNsaWRlSWQgPT09IHNsaWRlLmlkID8gKHRoZW1lPy5iYWNrZ3JvdW5kIHx8ICcjMjYyNjI2JykgOiAodGhlbWU/LmJ1dHRvbkJhY2tncm91bmRDb2xvciB8fCAnJyksXHJcbiAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyNmZmYnLFxyXG4gICAgICAgICAgICAgICAnYm9yZGVyJzogdGhlbWU/LmJvcmRlciB8fCAnbm9uZSdcclxuICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZFNsaWRlSWQgPSBzbGlkZS5pZFwiXHJcbiAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkU2xpZGVJZCA9IG51bGxcIlxyXG4gICAgICAgICAgICAgKGNsaWNrKT1cImdldFJvdXRlckxpbmtGcm9tQnV0dG9uKHNsaWRlLmJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic2xpZGUuYnV0dG9uIHx8ICcnXCIgPiA8L3NwYW4+XHJcbiAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gIDwvc3dpcGVyLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1lLWxvYmJ5LWxpYi9zcmMvbGliL2Jhbm5lcnMvYmFubmVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1lLWxvYmJ5LWxpYi9zcmMvbGliL2Jhbm5lcnMvYmFubmVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBVSxZQUFZLEVBQUUsaUJBQWlCLEVBQXlCLE1BQU0sRUFBRSxZQUFZLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDNUssT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBYS9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFZM0IsWUFBWSxZQUFtQztRQVAvQyxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ1gsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRCxrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDdkQseUVBQXlFO1FBQ3pFLFdBQU0sR0FBVSxFQUFFLENBQUM7UUFDbkIsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBR25DLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUMxRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQWtCO1FBQ3hDLCtDQUErQztRQUMvQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILDREQUE0RDtZQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFbEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7K0dBbERVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLDBTQ2Q3Qix1OUNBbUNBLCs5RkQzQlksWUFBWTs7NEZBTVgsZ0JBQWdCO2tCQVQ1QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsV0FDZCxDQUFDLHNCQUFzQixDQUFDLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJOzBGQUdaLFFBQVE7c0JBQWhDLFlBQVk7dUJBQUMsU0FBUztnQkFFZCxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0UsYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiwgUXVlcnlMaXN0LCBFbGVtZW50UmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgR2FtZUxvYmJ5VGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUvdGhlbWVTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHYW1lTG9iYnlUaGVtZSB9IGZyb20gJy4uL3RoZW1lL2RlZmF1bHQtdGhlbWUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmFubmVycycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhbm5lcnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9iYW5uZXJzLmNvbXBvbmVudC5zY3NzJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW5uZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkcmVuKCdidG5TcGFuJykgYnRuU3BhbnMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIEBJbnB1dCgpIGJhbm5lckRhdGE6IGFueTtcclxuICBASW5wdXQoKSB0aGVtZT86IEdhbWVMb2JieVRoZW1lO1xyXG4gIGJhc2VVcmw6IHN0cmluZyA9ICcnO1xyXG4gIEBPdXRwdXQoKSByb3V0ZXJMaW5rQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBJbnB1dCgpIGJhbm5lck92ZXJsYXk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuICAvLyBGSVg6IEluaXRpYWxpemUgc2xpZGVzIGFzIGVtcHR5IGFycmF5IHRvIHByZXZlbnQgbnVsbCByZWZlcmVuY2UgZXJyb3JzXHJcbiAgc2xpZGVzOiBhbnlbXSA9IFtdO1xyXG4gIGhvdmVyZWRTbGlkZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBcclxuICBjb25zdHJ1Y3Rvcih0aGVtZVNlcnZpY2U6IEdhbWVMb2JieVRoZW1lU2VydmljZSkge1xyXG4gICAgdGhlbWVTZXJ2aWNlLnRoZW1lJC5zdWJzY3JpYmUodCA9PiAodGhpcy50aGVtZSA9IHQpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ0Jhbm5lciBiYW5uZXJPdmVybGF5OicsIHRoaXMuYmFubmVyT3ZlcmxheSk7IC8vIERlYnVnIGxvZyB0byBjaGVjayBiYW5uZXJEYXRhXHJcbiAgICB0aGlzLnNldERhdGFUaGVtZXMoKTtcclxuICB9XHJcblxyXG4gIHNldERhdGFUaGVtZXMoKTogdm9pZCB7XHJcbiAgICAvLyBGSVg6IEFkZCBzYWZlIG5hdmlnYXRpb24gdG8gcHJldmVudCBlcnJvcnMgaWYgYmFubmVyRGF0YSBpcyBudWxsL3VuZGVmaW5lZFxyXG4gICAgdGhpcy5zbGlkZXMgPSB0aGlzLmJhbm5lckRhdGEuYmFubmVyRGF0YSB8fCBbXTtcclxuICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuYmFubmVyRGF0YS5iYXNlVXJsIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91dGVyTGlua0Zyb21CdXR0b24oYnV0dG9uSHRtbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBGSVg6IEFkZCBudWxsL3VuZGVmaW5lZCBjaGVjayBmb3IgYnV0dG9uSHRtbFxyXG4gICAgaWYgKCFidXR0b25IdG1sKSB7XHJcbiAgICAgIHRoaXMucm91dGVyTGlua0NsaWNrZWQuZW1pdCgnJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBQYXJzZSB0aGUgSFRNTCBzdHJpbmcgdG8gZXh0cmFjdCB0aGUgcm91dGVybGluayBhdHRyaWJ1dGVcclxuICAgICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xyXG4gICAgICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGJ1dHRvbkh0bWwsICd0ZXh0L2h0bWwnKTtcclxuICAgICAgY29uc3QgYW5jaG9yID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2Fbcm91dGVybGlua10nKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgICBjb25zdCByb3V0ZXJMaW5rID0gYW5jaG9yLmdldEF0dHJpYnV0ZSgncm91dGVybGluaycpO1xyXG4gICAgICAgIHRoaXMucm91dGVyTGlua0NsaWNrZWQuZW1pdChyb3V0ZXJMaW5rIHx8ICcnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlckxpbmtDbGlja2VkLmVtaXQoJycpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGJ1dHRvbiBIVE1MOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5yb3V0ZXJMaW5rQ2xpY2tlZC5lbWl0KCcnKTtcclxuICAgIH1cclxuICB9XHJcbn0iLCI8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS82LjUuMC9jc3MvYWxsLm1pbi5jc3NcIj5cclxuPGRpdiBjbGFzcz1cImxvYmJ5X2NtLWJhbm5lclwiPiBcclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmFubmVyT3ZlcmxheVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFubmVyT3ZlcmxheVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxzd2lwZXItY29udGFpbmVyXHJcbiAgICBjbGFzcz1cIm15LXN3aXBlclwiXHJcbiAgICBzbGlkZXMtcGVyLXZpZXc9XCIxXCJcclxuICAgIHBhZ2luYXRpb249XCJ0cnVlXCJcclxuICAgIHBhZ2luYXRpb24tY2xpY2thYmxlPVwidHJ1ZVwiXHJcbiAgICBzcGVlZD1cIjUwMFwiXHJcbiAgICBbbG9vcF09XCJzbGlkZXMubGVuZ3RoID4gMVwiXHJcbiAgICBhdXRvcGxheT1cInRydWVcIlxyXG4gICAgYXV0b3BsYXktZGVsYXk9XCIxNTAwMFwiXHJcbiAgICBjc3MtbW9kZT1cInRydWVcIj5cclxuICAgIDxzd2lwZXItc2xpZGUgKm5nRm9yPVwibGV0IHNsaWRlIG9mIHNsaWRlc1wiPlxyXG4gICAgICA8ZGl2IFtpZF09XCJzbGlkZS5pZFwiIGNsYXNzPVwic2xpZGVXcmFwcGVyXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImJhc2VVcmwgKyAnL3VwbG9hZHMvYmFubmVyLycgKyBzbGlkZS5pbWFnZVBhdGhcIiBbYWx0XT1cInNsaWRlLm5hbWVcIiA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYmJ5bGliX2NtLXNsaWRlcl9fYnRuXCIgXHJcbiAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogaG92ZXJlZFNsaWRlSWQgPT09IHNsaWRlLmlkID8gKHRoZW1lPy5iYWNrZ3JvdW5kIHx8ICcjMjYyNjI2JykgOiAodGhlbWU/LmJ1dHRvbkJhY2tncm91bmRDb2xvciB8fCAnJyksXHJcbiAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyNmZmYnLFxyXG4gICAgICAgICAgICAgICAnYm9yZGVyJzogdGhlbWU/LmJvcmRlciB8fCAnbm9uZSdcclxuICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZFNsaWRlSWQgPSBzbGlkZS5pZFwiXHJcbiAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkU2xpZGVJZCA9IG51bGxcIlxyXG4gICAgICAgICAgICAgKGNsaWNrKT1cImdldFJvdXRlckxpbmtGcm9tQnV0dG9uKHNsaWRlLmJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic2xpZGUuYnV0dG9uIHx8ICcnXCIgPiA8L3NwYW4+XHJcbiAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gIDwvc3dpcGVyLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -100,11 +100,11 @@ class BannersComponent {
100
100
  }
101
101
  }
102
102
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannersComponent, deps: [{ token: GameLobbyThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
103
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BannersComponent, isStandalone: true, selector: "app-banners", inputs: { bannerData: "bannerData", theme: "theme", bannerOverlay: "bannerOverlay" }, outputs: { routerLinkClicked: "routerLinkClicked" }, viewQueries: [{ propertyName: "btnSpans", predicate: ["btnSpan"], descendants: true }], ngImport: i0, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.cm-banner{padding:0 20px}}@media (max-width: 768px){.cm-banner{padding:0 15px}}@media (max-width: 480px){.cm-banner{padding:0 10px}}.cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.cm-banner .slideWrapper img{aspect-ratio:4/3}}.cm-banner .slideWrapper .lobbylib_cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{bottom:20px;padding:10px}}.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None }); }
103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BannersComponent, isStandalone: true, selector: "app-banners", inputs: { bannerData: "bannerData", theme: "theme", bannerOverlay: "bannerOverlay" }, outputs: { routerLinkClicked: "routerLinkClicked" }, viewQueries: [{ propertyName: "btnSpans", predicate: ["btnSpan"], descendants: true }], ngImport: i0, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"lobby_cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".lobby_cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.lobby_cm-banner{padding:0 20px}}@media (max-width: 768px){.lobby_cm-banner{padding:0 15px}}@media (max-width: 480px){.lobby_cm-banner{padding:0 10px}}.lobby_cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.lobby_cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.lobby_cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.lobby_cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper img{aspect-ratio:4/3}}.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{bottom:20px;padding:10px}}.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None }); }
104
104
  }
105
105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BannersComponent, decorators: [{
106
106
  type: Component,
107
- args: [{ selector: 'app-banners', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], encapsulation: ViewEncapsulation.None, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.cm-banner{padding:0 20px}}@media (max-width: 768px){.cm-banner{padding:0 15px}}@media (max-width: 480px){.cm-banner{padding:0 10px}}.cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.cm-banner .slideWrapper img{aspect-ratio:4/3}}.cm-banner .slideWrapper .lobbylib_cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn{bottom:20px;padding:10px}}.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"] }]
107
+ args: [{ selector: 'app-banners', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], encapsulation: ViewEncapsulation.None, template: "<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"lobby_cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n", styles: [".lobby_cm-banner{width:100%;max-width:1280px;display:block;position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}@media (max-width: 1280px){.lobby_cm-banner{padding:0 20px}}@media (max-width: 768px){.lobby_cm-banner{padding:0 15px}}@media (max-width: 480px){.lobby_cm-banner{padding:0 10px}}.lobby_cm-banner .slideWrapper{position:relative;width:100%;font-weight:400;overflow:hidden}.lobby_cm-banner .slideWrapper img{width:100%;height:auto;max-width:1280px;aspect-ratio:1280/340;object-fit:cover;object-position:center;display:block;border-radius:4px}@media (max-width: 1280px){.lobby_cm-banner .slideWrapper img{aspect-ratio:16/5}}@media (max-width: 768px){.lobby_cm-banner .slideWrapper img{aspect-ratio:16/6}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper img{aspect-ratio:4/3}}.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{position:absolute;border-radius:4px;left:25%;bottom:40px;z-index:2;padding:20px;cursor:pointer;transition:all .3s ease}@media (max-width: 1024px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:20%;bottom:40px;padding:15px}}@media (max-width: 768px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{left:50%;transform:translate(-50%);bottom:30px;padding:12px}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn{bottom:20px;padding:10px}}.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-weight:200;border:none;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px}@media (max-width: 768px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.9rem;padding:14px 28px}}@media (max-width: 480px){.lobby_cm-banner .slideWrapper .lobbylib_cm-slider__btn .btn{font-size:.8rem;padding:10px 20px}}.my-swiper{width:100%;max-width:1280px;--swiper-pagination-bottom: 15px;--swiper-pagination-bullet-inactive-color: #999;--swiper-pagination-color: #fff;--swiper-pagination-bullet-size: 15px}@media (max-width: 768px){.my-swiper{--swiper-pagination-bullet-size: 12px;--swiper-pagination-bottom: 10px}}@media (max-width: 480px){.my-swiper{--swiper-pagination-bullet-size: 10px;--swiper-pagination-bottom: 8px}}.my-swiper::part(pagination){left:0!important;right:0!important;text-align:center!important;width:100%!important;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-right:400px!important}@media (max-width: 1280px){.my-swiper::part(pagination){padding-right:300px!important;justify-content:flex-end!important}}@media (max-width: 768px){.my-swiper::part(pagination){padding-right:200px!important;justify-content:flex-end!important}}@media (max-width: 480px){.my-swiper::part(pagination){justify-content:center!important;padding-right:200px!important}}@media (max-width: 80px){.my-swiper::part(pagination){justify-content:center!important;padding-right:100px!important}}.my-swiper::part(bullet){background:#999!important}.my-swiper::part(bullet-active){background:#fff!important}\n"] }]
108
108
  }], ctorParameters: () => [{ type: GameLobbyThemeService }], propDecorators: { btnSpans: [{
109
109
  type: ViewChildren,
110
110
  args: ['btnSpan']
@@ -1 +1 @@
1
- {"version":3,"file":"game-lobby-lib.mjs","sources":["../../../projects/game-lobby-lib/src/lib/theme/default-theme.ts","../../../projects/game-lobby-lib/src/lib/theme/theme.token.ts","../../../projects/game-lobby-lib/src/lib/theme/themeService.service.ts","../../../projects/game-lobby-lib/src/lib/banners/banners.component.ts","../../../projects/game-lobby-lib/src/lib/banners/banners.component.html","../../../projects/game-lobby-lib/src/lib/game-lobby-lib.service.ts","../../../projects/game-lobby-lib/src/lib/casino-lobby/casino-lobby.component.ts","../../../projects/game-lobby-lib/src/lib/casino-lobby/casino-lobby.component.html","../../../projects/game-lobby-lib/src/lib/game-lobby-lib.component.ts","../../../projects/game-lobby-lib/src/public-api.ts","../../../projects/game-lobby-lib/src/game-lobby-lib.ts"],"sourcesContent":["export interface GameLobbyTheme {\r\n border: string;\r\n borderSearch: string;\r\n gametextbackground: string;\r\n buttonBackgroundColor: string;\r\n background: string;\r\n textColor: string;\r\n}\r\n\r\nexport const DEFAULT_THEME: GameLobbyTheme = {\r\n border: '2px solid #02B0CB',\r\n gametextbackground: 'rgba(0, 0, 0, 0.5)',\r\n borderSearch: '1px solid #cccccc',\r\n buttonBackgroundColor: '#22c55e',\r\n background: '#ffffff',\r\n textColor: '#ffffff'\r\n};\r\n","import { InjectionToken } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { GameLobbyTheme, DEFAULT_THEME } from './default-theme';\r\n\r\nexport const GAME_LOBBY_THEME_TOKEN =\r\n new InjectionToken<BehaviorSubject<GameLobbyTheme>>(\r\n 'GAME_LOBBY_THEME_TOKEN',\r\n {\r\n providedIn: 'root',\r\n factory: () => new BehaviorSubject(DEFAULT_THEME)\r\n }\r\n );\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { GameLobbyTheme } from './default-theme';\r\nimport { GAME_LOBBY_THEME_TOKEN } from './theme.token';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class GameLobbyThemeService {\r\n\r\n constructor(\r\n @Inject(GAME_LOBBY_THEME_TOKEN)\r\n private readonly themeSubject: BehaviorSubject<GameLobbyTheme>\r\n ) {}\r\n\r\n /** Observable for components */\r\n get theme$(): Observable<GameLobbyTheme> {\r\n return this.themeSubject.asObservable();\r\n }\r\n\r\n /** Current theme snapshot */\r\n get current(): GameLobbyTheme {\r\n return this.themeSubject.value;\r\n }\r\n\r\n /** Update theme at runtime */\r\n setTheme(theme: GameLobbyTheme): void {\r\n this.themeSubject.next(theme);\r\n }\r\n\r\n /** Partial update helper (optional but useful) */\r\n patchTheme(partial: Partial<GameLobbyTheme>): void {\r\n this.themeSubject.next({\r\n ...this.themeSubject.value,\r\n ...partial\r\n });\r\n }\r\n}\r\n","import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, OnInit, ViewChildren, ViewEncapsulation, QueryList, ElementRef, Output, EventEmitter, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { GameLobbyThemeService } from '../theme/themeService.service';\r\nimport { GameLobbyTheme } from '../theme/default-theme';\r\n\r\n@Component({\r\n selector: 'app-banners',\r\n standalone: true,\r\n imports: [CommonModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n templateUrl: './banners.component.html',\r\n styleUrl: './banners.component.scss',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class BannersComponent implements OnInit {\r\n @ViewChildren('btnSpan') btnSpans!: QueryList<ElementRef>;\r\n\r\n @Input() bannerData: any;\r\n @Input() theme?: GameLobbyTheme;\r\n baseUrl: string = '';\r\n @Output() routerLinkClicked = new EventEmitter<string>();\r\n @Input() bannerOverlay: TemplateRef<any> | null = null;\r\n // FIX: Initialize slides as empty array to prevent null reference errors\r\n slides: any[] = [];\r\n hoveredSlideId: number | null = null;\r\n \r\n constructor(themeService: GameLobbyThemeService) {\r\n themeService.theme$.subscribe(t => (this.theme = t));\r\n }\r\n\r\n ngOnInit(): void {\r\n console.log('Banner bannerOverlay:', this.bannerOverlay); // Debug log to check bannerData\r\n this.setDataThemes();\r\n }\r\n\r\n setDataThemes(): void {\r\n // FIX: Add safe navigation to prevent errors if bannerData is null/undefined\r\n this.slides = this.bannerData.bannerData || [];\r\n this.baseUrl = this.bannerData.baseUrl || '';\r\n }\r\n\r\n getRouterLinkFromButton(buttonHtml: string): void {\r\n // FIX: Add null/undefined check for buttonHtml\r\n if (!buttonHtml) {\r\n this.routerLinkClicked.emit('');\r\n return;\r\n }\r\n\r\n try {\r\n // Parse the HTML string to extract the routerlink attribute\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(buttonHtml, 'text/html');\r\n const anchor = doc.querySelector('a[routerlink]');\r\n \r\n if (anchor) {\r\n const routerLink = anchor.getAttribute('routerlink');\r\n this.routerLinkClicked.emit(routerLink || '');\r\n } else {\r\n this.routerLinkClicked.emit('');\r\n }\r\n } catch (error) {\r\n console.error('Error parsing button HTML:', error);\r\n this.routerLinkClicked.emit('');\r\n }\r\n }\r\n}","<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n HttpClient,\r\n HttpHeaders,\r\n HttpParams,\r\n} from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, map, shareReplay } from 'rxjs/operators';\r\n\r\n//Intefaces\r\n\r\nexport interface BaseApiResponse {\r\n status: 'SUCCESS' | 'FAILED' | string;\r\n}\r\n\r\nexport interface GameMultilingualUrl {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface Game {\r\n gameCode: string;\r\n gameId: number | null;\r\n gameType: string;\r\n publishedDate: string | null;\r\n hasDemo: number;\r\n name: string;\r\n multilingualUrl: GameMultilingualUrl;\r\n vendorId: string;\r\n tagList: string[];\r\n displayOrder: number;\r\n gameCategory: string;\r\n vendorName: string;\r\n gameGroupIds: number[] | null;\r\n gameGroupDisplayOrder?: number | null;\r\n}\r\n\r\nexport interface GameProvider {\r\n id: number;\r\n name: string;\r\n prefix: string;\r\n vendorCode: string;\r\n vendorClass: string;\r\n vendorDisplayName: string;\r\n subProviders: any[];\r\n displayOrder: number;\r\n}\r\n\r\nexport interface GetGamesParams {\r\n languageId?: string; // default always 'en'\r\n gameGroupId?: number;\r\n tag?: string;\r\n vendorId?: string;\r\n sorting?: string;\r\n sort?: string;\r\n searchText?: string;\r\n size?: number;\r\n page?: number;\r\n}\r\n\r\nexport interface GetOtherParams {\r\n languageId?: string; // default always 'en'\r\n}\r\n\r\nexport interface GamesListResponse extends BaseApiResponse {\r\n gamesList: Game[];\r\n}\r\n\r\nexport interface ProvidersListResponse extends BaseApiResponse {\r\n gameProvidersList: GameProvider[];\r\n}\r\n\r\nexport interface ToggleFavoriteResponse extends BaseApiResponse {\r\n ecrExternalId: string;\r\n gameId: string;\r\n gameCategoryId: number;\r\n gameTypeId: number;\r\n favoriteAddFlag: boolean;\r\n errorCode: string | null;\r\n errorDescription: string | null;\r\n}\r\n\r\nexport interface GameGroupMultilingualUrl {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface GameGroupProviderIds {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface GameGroup {\r\n id: number;\r\n name: string;\r\n group_type: string;\r\n group_sub_type: string;\r\n game_asset_style: string;\r\n game_group_order: number;\r\n content: string;\r\n metaTitle: string;\r\n metaTags: string;\r\n metaDescription: string;\r\n multilingualUrlGameGroup: GameGroupMultilingualUrl;\r\n gameGroupProviderIdsListResult: GameGroupProviderIds | [];\r\n}\r\n\r\nexport interface GameLobby {\r\n id: number;\r\n title: string;\r\n name: string;\r\n user_segment: string;\r\n lobby_order: number;\r\n content: string;\r\n metaTitle: string;\r\n metaTags: string;\r\n metaDescription: string;\r\n multilingualUrlLobby: GameMultilingualUrl;\r\n gameGroupList: GameGroup[];\r\n}\r\n\r\nexport interface GameGroupsResponse extends Array<GameLobby> { }\r\n\r\nexport interface GameResponse {\r\n content: any[];\r\n totalElements: number;\r\n totalPages: number;\r\n}\r\n\r\n// Final lobbyGames structure \r\nexport interface LobbyGames {\r\n gameGroupDetails: GameGroup;\r\n games: any[];\r\n}\r\n// Service logic\r\n\r\ninterface CachedPost {\r\n observable: Observable<any>;\r\n timestamp: number;\r\n}\r\n\r\ninterface CachedGet {\r\n observable: Observable<any>;\r\n timestamp: number;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GameLobbyLibService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n private postCache = new Map<string, CachedPost>();\r\n private getCache = new Map<string, CachedGet>();\r\n\r\n // common methods to build params and headers for all API calls\r\n\r\n private buildParams(params?: any): HttpParams {\r\n const merged = {\r\n languageId: 'en', // defauit to en\r\n ...params\r\n };\r\n\r\n let httpParams = new HttpParams();\r\n Object.keys(merged).forEach(key => {\r\n httpParams = httpParams.set(key, merged[key] ?? '');\r\n });\r\n\r\n return httpParams;\r\n }\r\n\r\n private buildHeaders(extraHeaders?: { [key: string]: string }): HttpHeaders {\r\n const defaultHeaders = {\r\n accept: 'application/json, text/plain, */*'\r\n };\r\n\r\n return new HttpHeaders({\r\n ...defaultHeaders,\r\n ...extraHeaders\r\n });\r\n }\r\n\r\n // API methods\r\n getGamesGroups(\r\n baseUrl: string,\r\n params?: GetOtherParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<GameGroupsResponse> {\r\n\r\n return this.lbGetCachedApi<GameGroupsResponse>(\r\n `${baseUrl}/ajax/game/getLobbyListWithGameGroups`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n getGames(\r\n baseUrl: string,\r\n params?: GetGamesParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<Game[]> {\r\n\r\n return this.lbGetCachedApi<Game[]>(\r\n `${baseUrl}/ajax/v2/games`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n getLastPlayed(\r\n baseUrl: string,\r\n params?: GetOtherParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<GamesListResponse> {\r\n\r\n return this.lbGetCachedApi<GamesListResponse>(\r\n `${baseUrl}/ajax/v2/getUserLastPlayed`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n getFavouriteGames(\r\n baseUrl: string,\r\n params?: GetOtherParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<GamesListResponse> {\r\n\r\n return this.lbGetCachedApi<GamesListResponse>(\r\n `${baseUrl}/ajax/v2/getFavorites`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n getGamesProviders(\r\n baseUrl: string,\r\n params?: GetOtherParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<ProvidersListResponse> {\r\n\r\n return this.lbGetCachedApi<ProvidersListResponse>(\r\n `${baseUrl}/ajax/v2/getGameProviders`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n toggleFavoriteGame(\r\n baseUrl: string,\r\n gameId: number,\r\n newState: boolean,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<ToggleFavoriteResponse> {\r\n\r\n const formData = new FormData();\r\n formData.append('gameId', String(gameId));\r\n formData.append('newState', String(newState));\r\n\r\n return this.lbPostCachedApi<ToggleFavoriteResponse>(\r\n `${baseUrl}/ajax/profile/toggleFavoriteGame`,\r\n formData,\r\n {\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n // Caching logic for GET and POST requests\r\n\r\n lbGetCachedApi<T>(\r\n url: string,\r\n options: {\r\n params?: any;\r\n headers?: HttpHeaders | { [header: string]: string | string[] };\r\n withCredentials?: boolean;\r\n } = {},\r\n cache_expire: number = 0\r\n ): Observable<T> {\r\n\r\n const request$ = this.http\r\n .get<T>(url, {\r\n withCredentials: true,\r\n ...options\r\n })\r\n .pipe(\r\n catchError(e => {\r\n return throwError(() => e);\r\n }),\r\n shareReplay(1)\r\n );\r\n\r\n if (cache_expire === 0) {\r\n return request$;\r\n }\r\n\r\n const cacheKey = this.generateCacheKey(url, options?.params);\r\n const now = Date.now();\r\n const cached = this.getCache.get(cacheKey);\r\n\r\n if (cached && now - cached.timestamp < cache_expire) {\r\n return cached.observable;\r\n }\r\n\r\n this.getCache.set(cacheKey, { observable: request$, timestamp: now });\r\n return request$;\r\n }\r\n\r\n lbPostCachedApi<T>(\r\n url: string,\r\n body: any,\r\n options: {\r\n headers?: HttpHeaders | { [header: string]: string | string[] };\r\n withCredentials?: boolean;\r\n } = {},\r\n cache_expire: number = 0\r\n ): Observable<T> {\r\n\r\n const request$ = this.http.post<T>(\r\n url,\r\n body,\r\n {\r\n observe: 'body', //body response\r\n withCredentials: true,\r\n ...options\r\n }\r\n ).pipe(\r\n catchError(e => throwError(() => e)),\r\n shareReplay(1)\r\n );\r\n\r\n if (cache_expire === 0) return request$;\r\n\r\n const cacheKey = this.generateCacheKey(url, body);\r\n const now = Date.now();\r\n const cached = this.postCache.get(cacheKey);\r\n\r\n if (cached && now - cached.timestamp < cache_expire) {\r\n return cached.observable;\r\n }\r\n\r\n this.postCache.set(cacheKey, { observable: request$, timestamp: now });\r\n return request$;\r\n }\r\n\r\n\r\n private generateCacheKey(url: string, params: any): string {\r\n try {\r\n if (!params) return url;\r\n return `${url}::${JSON.stringify(params)}`;\r\n } catch {\r\n return url;\r\n }\r\n }\r\n\r\n clearAllApiCache(): void {\r\n this.postCache.clear();\r\n this.getCache.clear();\r\n }\r\n\r\n\r\n handleHTTPError(e: any) {\r\n if (e.message && e.message.includes(\"countryBlocked\")) {\r\n console.log(\"Country blocked:\" + e.message.split(\":\")[1]);\r\n // notify the host brand\r\n } else if (e.message && e.message.includes(\"session_expired_sso\")) {\r\n console.log(\"Session expired:\" + e.message.split(\":\")[1]);\r\n // notify the host brand\r\n } else {\r\n if (e.status === 401) {\r\n console.log(\"Error Code:\" + e.status);\r\n // notify the host brand\r\n } else if (e.status === 404) {\r\n console.log(\"Error Code:\" + e.status);\r\n // notify the host brand\r\n } else if (e.status === 504) {\r\n console.log(\"Error Code:\" + e.status);\r\n // notify the host brand\r\n } else {\r\n console.log(\"Error Code:\" + e.status);\r\n // notify the host brand\r\n }\r\n }\r\n }\r\n}\r\n\r\n","import { Component, Input, OnInit, ViewChild, AfterViewInit, ViewEncapsulation, CUSTOM_ELEMENTS_SCHEMA, ViewChildren, QueryList, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { GameLobbyTheme } from '../theme/default-theme';\r\nimport { GameLobbyThemeService } from '../theme/themeService.service';\r\nimport { LobbyGames, GameGroup, GameGroupsResponse, GameLobby } from '../game-lobby-lib.service';\r\nimport { GameLobbyLibService } from '../game-lobby-lib.service';\r\nimport { forkJoin, map, of, switchMap, tap, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'lib-casino-lobby',\r\n standalone: true,\r\n imports: [CommonModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n templateUrl: './casino-lobby.component.html',\r\n styleUrl: './casino-lobby.component.scss',\r\n // encapsulation: ViewEncapsulation.None\r\n})\r\nexport class CasinoLobbyComponent implements OnInit, AfterViewInit {\r\n hoveredSlideId: string | null = null;\r\n hoveredButton: string | null = null;\r\n hoveredGameKey: string | null = null;\r\n @ViewChild('swiperContainer') swiperContainer: any;\r\n @ViewChildren('gameSwiperContainer') gameSwiperContainers!: QueryList<ElementRef>;\r\n @Output() gameClicked = new EventEmitter<string>();\r\n @Input() casinoData: any;\r\n @Input() theme?: GameLobbyTheme;\r\n @Input() baseUrl: string = '';\r\n @Input() brandConfig: any;\r\n websiteCode: string = '';\r\n providerList: any[] = []; // FIX: Initialize as empty array\r\n pulsingButton: string | null = null;\r\n showGameCategoryTop = false;\r\n categoryChosen = false;\r\n categoryLabel: string = 'CATEGORY';\r\n sortedGameGroupList: any[] = []; // FIX: Initialize as empty array instead of undefined\r\n hoveredViewAllIndex: number | null = null;\r\n\r\n /* games logic */\r\n lobbyGames: LobbyGames[] = [];\r\n sortedGameGroup: GameGroup[] = [];\r\n filteredGames: any | null = null;\r\n filterShowLoadMore: boolean = false;\r\n currentFilterPage: number = 0;\r\n noGamesToShow: boolean = false;\r\n filterActive: boolean = false;\r\n private searchSubject: Subject<string> = new Subject<string>();\r\n currentSearchText: string = '';\r\n currentSearchParams: any = {};\r\n @ViewChild('searchInput') searchInput: any;\r\n\r\n constructor(themeService: GameLobbyThemeService, private gameLobbyLibService: GameLobbyLibService) {\r\n themeService.theme$.subscribe(t => (this.theme = t));\r\n }\r\n\r\n slideNext(index: number) {\r\n const swiperEl = this.gameSwiperContainers.toArray()[index]?.nativeElement;\r\n if (swiperEl?.swiper) {\r\n swiperEl.swiper.slideNext();\r\n }\r\n }\r\n\r\n slidePrev(index: number) {\r\n const swiperEl = this.gameSwiperContainers.toArray()[index]?.nativeElement;\r\n if (swiperEl?.swiper) {\r\n swiperEl.swiper.slidePrev();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getGamesProviders(); // Fetch providers list\r\n this.loadLobbyGames(false); // Load games for non-logged in users by default\r\n this.searchSubject\r\n .pipe(\r\n debounceTime(2000), // wait 2000ms after typing stops\r\n distinctUntilChanged(), // ignore same text\r\n switchMap((searchText: string) => {\r\n this.currentFilterPage = 0; // reset page\r\n this.currentSearchText = searchText;\r\n this.currentSearchParams = {\r\n page: 1,\r\n size: this.brandConfig.loadMorePageSize,\r\n languageId: this.brandConfig?.langCode,\r\n searchText: searchText\r\n };\r\n return this.gameLobbyLibService.getGames(\r\n this.brandConfig?.apiUrl,\r\n this.currentSearchParams,\r\n { referer: this.brandConfig?.siteUrl }\r\n );\r\n })\r\n )\r\n .subscribe((games: any[]) => {\r\n if (!games) {\r\n this.filteredGames = [];\r\n this.filterShowLoadMore = false;\r\n return;\r\n }\r\n\r\n this.filteredGames = games;\r\n this.filterShowLoadMore =\r\n games.length === this.brandConfig.loadMorePageSize;\r\n if (this.currentSearchText.trim() !== '' && this.currentSearchText !== null) {\r\n this.activateFilter();\r\n } else {\r\n this.deactivateFilter();\r\n }\r\n this.checkIfNoGamesToShow();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.initializeProviderSwiper();\r\n this.initializeGameSwipers();\r\n }, 2000);\r\n this.triggerPulse('');\r\n }\r\n\r\n onSearchChange(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (!input) return;\r\n const value = input.value ?? '';\r\n this.searchSubject.next(value.trim());\r\n }\r\n\r\n private initializeProviderSwiper() {\r\n if (this.swiperContainer?.nativeElement) {\r\n const providerSwiperEl = this.swiperContainer.nativeElement;\r\n const parentContainer = providerSwiperEl.closest('.searchBar') || providerSwiperEl.closest('.fixed-footer-width');\r\n const prevButton = parentContainer?.querySelector('.swiper-button-prev');\r\n const nextButton = parentContainer?.querySelector('.swiper-button-next');\r\n\r\n if (prevButton && nextButton) {\r\n prevButton.addEventListener('click', () => {\r\n providerSwiperEl.swiper?.slidePrev();\r\n });\r\n nextButton.addEventListener('click', () => {\r\n providerSwiperEl.swiper?.slideNext();\r\n });\r\n }\r\n }\r\n }\r\n\r\n private initializeGameSwipers() {\r\n if (this.gameSwiperContainers && this.gameSwiperContainers.length > 0) {\r\n this.gameSwiperContainers.forEach((swiperRef, index) => {\r\n const gameSwiperEl = swiperRef.nativeElement;\r\n\r\n // Find the parent games-section for this specific swiper\r\n const gamesSection = gameSwiperEl.closest('.games-section');\r\n\r\n if (gamesSection) {\r\n const customPrev = gamesSection.querySelector('.btn-Arrow-left');\r\n const customNext = gamesSection.querySelector('.btn-Arrow-right');\r\n\r\n if (customPrev) {\r\n customPrev.addEventListener('click', () => {\r\n console.log(`Game section ${index} - Previous clicked`);\r\n gameSwiperEl.swiper?.slidePrev();\r\n });\r\n }\r\n if (customNext) {\r\n customNext.addEventListener('click', () => {\r\n console.log(`Game section ${index} - Next clicked`);\r\n gameSwiperEl.swiper?.slideNext();\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // FIX: Updated loop logic to prevent Swiper loop warnings\r\n // Only enable loop when we have more slides than the maximum slidesPerView\r\n shouldLoopProviders(): boolean {\r\n if (!this.providerList || !Array.isArray(this.providerList)) {\r\n return false;\r\n }\r\n\r\n // Max slidesPerView is 12 at the 1280px breakpoint\r\n // Only enable loop if we have more providers than what's visible\r\n const maxSlidesPerView = 12;\r\n return this.providerList.length > maxSlidesPerView;\r\n }\r\n\r\n shouldLoopGames(games: any[]): boolean {\r\n if (!games || !Array.isArray(games)) {\r\n return false;\r\n }\r\n\r\n // Max slidesPerView is 8 at the 1280px breakpoint\r\n // Only enable loop if we have more games than what's visible\r\n const maxSlidesPerView = 8;\r\n return games.length > maxSlidesPerView;\r\n }\r\n\r\n // NEW: Per-group loop logic for game swipers\r\n // This checks each game group individually to determine if loop should be enabled\r\n shouldLoopGamesForGroup(games: any[]): boolean {\r\n if (!games || !Array.isArray(games)) {\r\n return false;\r\n }\r\n\r\n // Max slidesPerView is 8 at the 1280px breakpoint\r\n // Only enable loop if this specific group has more games than what's visible\r\n const maxSlidesPerView = 8;\r\n return games.length > maxSlidesPerView;\r\n }\r\n\r\n triggerPulse(button: string) {\r\n this.pulsingButton = button;\r\n setTimeout(() => {\r\n this.pulsingButton = null;\r\n }, 400); // Duration should match the animation\r\n }\r\n\r\n toggleGameCategoryTop() {\r\n this.showGameCategoryTop = !this.showGameCategoryTop;\r\n this.categoryChosen = this.categoryLabel !== 'CATEGORY';\r\n if (this.categoryLabel == 'CATEGORY') {\r\n this.deactivateFilter();\r\n }\r\n }\r\n\r\n viewGameCategory(group: any) {\r\n this.categoryLabel = group.name;\r\n this.showGameCategoryTop = false;\r\n this.filterGroupGames(0, group.id);\r\n }\r\n\r\n DropdownClose() {\r\n this.categoryLabel === 'CATEGORY' ? this.categoryChosen = false : this.categoryChosen = true;\r\n this.categoryChosen ? this.categoryLabel = 'CATEGORY' : this.categoryLabel;\r\n !this.categoryChosen ? this.categoryChosen = true : this.categoryChosen = false;\r\n this.showGameCategoryTop = false;\r\n if (this.categoryLabel == 'CATEGORY') {\r\n this.deactivateFilter();\r\n }\r\n }\r\n\r\n \r\n\r\n getGameImage(game: any): string {\r\n if (!game?.gameCode) {\r\n return this.brandConfig.defaultGameImage;\r\n }\r\n\r\n return `${this.brandConfig?.gamesImagesDir}/${game.gameCode}/${game.gameCode}.webp`;\r\n }\r\n\r\n onImageError(event: Event): void {\r\n const img = event.target as HTMLImageElement;\r\n // Prevent infinite loop\r\n if (img.src.includes('default-game-image.jpg')) return;\r\n img.src = this.brandConfig.defaultGameImage;\r\n }\r\n\r\n // Games filters\r\n filterGroupGames(currentPage: number, gameGroupId: number) {\r\n this.showGameCategoryTop = false;\r\n this.clearSearch();\r\n this.getFilteredGames(currentPage, this.brandConfig.loadMorePageSize, { gameGroupId: gameGroupId });\r\n this.activateFilter();\r\n }\r\n\r\n filterProviderGames(currentPage: number, vendorid: number) {\r\n this.clearSearch();\r\n this.getFilteredGames(currentPage, this.brandConfig.loadMorePageSize, { vendorId: vendorid });\r\n this.activateFilter();\r\n }\r\n\r\n filterHotGames(currentPage: number, tag: string) {\r\n this.clearSearch();\r\n this.getFilteredGames(currentPage, this.brandConfig.loadMorePageSize, { tag: tag });\r\n this.activateFilter();\r\n }\r\n\r\n filterFavouriteGames() {\r\n this.clearSearch();\r\n this.getFavouriteGames();\r\n this.activateFilter();\r\n }\r\n\r\n filterLastPlayedGames() {\r\n this.clearSearch();\r\n this.getLastPlayed();\r\n this.activateFilter();\r\n }\r\n\r\n loadMoreFilteredGames() {\r\n this.currentSearchParams.page = this.currentFilterPage + 1; // Increment page for next load\r\n this.getFilteredGames(this.currentFilterPage, this.brandConfig.loadMorePageSize, this.currentSearchParams);\r\n }\r\n\r\n clearSearch(): void {\r\n console.log('Clearing search input and resetting filters');\r\n if (this.searchInput) {\r\n this.searchInput.nativeElement.value = '';\r\n }\r\n this.currentSearchText = '';\r\n this.currentFilterPage = 0;\r\n }\r\n\r\n activateFilter() {\r\n this.filterActive = true;\r\n }\r\n\r\n deactivateFilter() {\r\n this.filterActive = false;\r\n }\r\n\r\n getFilteredGames(\r\n currentPageNumber: number,\r\n pageSize: number,\r\n filters?: Record<string, any>\r\n ) {\r\n const baseParams = {\r\n page: currentPageNumber + 1,\r\n size: pageSize,\r\n languageId: this.brandConfig?.langCode\r\n };\r\n\r\n const queryParams = {\r\n ...baseParams,\r\n ...(filters || {})\r\n };\r\n this.currentSearchParams = queryParams; // Store current search params for load more functionality\r\n this.gameLobbyLibService.getGames(\r\n this.brandConfig?.apiUrl,\r\n queryParams,\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe((games: any[]) => {\r\n\r\n if (!games) {\r\n this.filterShowLoadMore = false;\r\n return;\r\n }\r\n\r\n // If first page - replace\r\n if (currentPageNumber === 0) {\r\n this.filteredGames = games;\r\n }\r\n // If next page - append\r\n else if (currentPageNumber > 0) {\r\n this.filteredGames = [\r\n ...this.filteredGames,\r\n ...games\r\n ];\r\n }\r\n // If returned count === pageSize - more games might exist\r\n this.filterShowLoadMore = games.length === pageSize;\r\n this.currentFilterPage = currentPageNumber + 1; // Update current page\r\n if (!this.filterShowLoadMore) {\r\n this.currentFilterPage = 0; // Reset to first page if no more games\r\n }\r\n this.checkIfNoGamesToShow();\r\n console.log('Filtered Games:', this.filteredGames);\r\n console.log('Show Load More:', this.filterShowLoadMore);\r\n });\r\n }\r\n\r\n\r\n // Get Games\r\n getGames(pageNumber: number, pageSize: number) {\r\n this.gameLobbyLibService.getGames(\r\n this.brandConfig?.apiUrl,\r\n { page: pageNumber, size: pageSize, languageId: this.brandConfig?.langCode },\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe(games => {\r\n console.log('Games:', games);\r\n });\r\n }\r\n // Last Played\r\n getLastPlayed() {\r\n this.filteredGames = []; // Reset before loading new ones\r\n this.gameLobbyLibService.getLastPlayed(\r\n this.brandConfig?.apiUrl,\r\n { languageId: this.brandConfig?.langCode },\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe(res => {\r\n if (!res || !res.status || res.status.toLowerCase() !== 'success') {\r\n console.error('Error fetching last played games:', res);\r\n return;\r\n } else {\r\n this.filteredGames = res.gamesList;\r\n this.checkIfNoGamesToShow();\r\n }\r\n });\r\n }\r\n // Favourites\r\n getFavouriteGames() {\r\n this.gameLobbyLibService.getFavouriteGames(\r\n this.brandConfig?.apiUrl,\r\n { languageId: this.brandConfig?.langCode },\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe(res => {\r\n if (!res || !res.status || res.status.toLowerCase() !== 'success') {\r\n console.error('Error fetching favourite games:', res);\r\n return;\r\n } else {\r\n this.filteredGames = res.gamesList;\r\n this.checkIfNoGamesToShow();\r\n }\r\n });\r\n }\r\n // Providers\r\n getGamesProviders() {\r\n this.gameLobbyLibService.getGamesProviders(\r\n this.brandConfig?.apiUrl,\r\n { languageId: this.brandConfig?.langCode },\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe(res => {\r\n console.log('Providers:', res?.gameProvidersList.length);\r\n this.providerList = res?.gameProvidersList || [];\r\n });\r\n }\r\n\r\n loadLobbyGames(isLoggedIn: boolean): void {\r\n console.log('Loading lobby games for', isLoggedIn ? 'logged in user' : 'guest user');\r\n this.gameLobbyLibService.getGamesGroups(this.brandConfig?.apiUrl, { languageId: this.brandConfig?.langCode }, { referer: this.brandConfig?.siteUrl }).pipe(\r\n /* Step 1: Select correct lobby safely */\r\n map((lobbies: GameGroupsResponse) => {\r\n\r\n if (!lobbies || !lobbies.length) return [];\r\n\r\n let selectedLobby: GameLobby | undefined;\r\n\r\n // If only one lobby returned use it\r\n if (lobbies.length === 1) {\r\n selectedLobby = lobbies[0];\r\n }\r\n // If multiple apply login logic\r\n else {\r\n selectedLobby = isLoggedIn\r\n ? lobbies.find(l => l.title.includes('Home Lobby'))\r\n : lobbies.find(l => !l.title.includes('Home Lobby'));\r\n }\r\n\r\n if (!selectedLobby?.gameGroupList?.length) return [];\r\n\r\n // Sort by order\r\n return selectedLobby.gameGroupList\r\n .slice()\r\n .sort((a, b) => a.game_group_order - b.game_group_order);\r\n }),\r\n\r\n tap(sortedGroups => {\r\n this.sortedGameGroup = sortedGroups;\r\n }),\r\n\r\n /* Step 2: Fetch games in parallel */\r\n switchMap((sortedGroups: GameGroup[]) => {\r\n\r\n if (!sortedGroups.length) return of([]);\r\n\r\n const requests = sortedGroups\r\n .filter(group => group.name && group.name.trim() !== '')\r\n .map(group =>\r\n this.gameLobbyLibService.getGames(this.brandConfig?.apiUrl, {\r\n page: 1,\r\n size: this.brandConfig?.lobbyGamesPageSize,\r\n gameGroupId: group.id\r\n }, { referer: this.brandConfig?.siteUrl }).pipe(\r\n map((res: any) => ({\r\n gameGroupDetails: group,\r\n games: res\r\n }))\r\n )\r\n );\r\n\r\n return forkJoin(requests);\r\n })\r\n\r\n ).subscribe({\r\n next: (result: LobbyGames[]) => {\r\n this.lobbyGames = result;\r\n },\r\n error: (err) => {\r\n console.error('Error loading lobby games:', err);\r\n }\r\n });\r\n }\r\n\r\n checkIfNoGamesToShow() {\r\n let noGames = false;\r\n if (this.filteredGames && Array.isArray(this.filteredGames) && this.filteredGames.length === 0) {\r\n noGames = true;\r\n }\r\n this.noGamesToShow = noGames;\r\n }\r\n\r\n getgameClicked(gameCode: any): void {\r\n this.gameClicked.emit(gameCode);\r\n }\r\n}","<div class=\"main-lobby\">\r\n <div class=\"game-filter-background\" [ngStyle]=\"{ 'background': theme?.background || 'none' }\">\r\n <!-- Main Filter Section -->\r\n <div class=\"fixed-footer-width clearfix\" [ngStyle]=\"{ 'border-bottom': theme?.borderSearch || 'none' }\">\r\n <div class=\"display-filter-content\">\r\n <!-- Search Bar -->\r\n <div class=\"searchBar\">\r\n <div class=\"game-search\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\">\r\n <form class=\"form-inline\" (submit)=\"$event.preventDefault()\">\r\n <i class=\"fa fa-search\"></i>\r\n <input #searchInput class=\"game-search-form\" id=\"searchInput\" name=\"gameSearch\" type=\"text\" placeholder=\"GAME SEARCH\"\r\n aria-label=\"Search\" (input)=\"onSearchChange($event)\" />\r\n </form>\r\n </div>\r\n\r\n <!-- Provider Swiper -->\r\n <div class=\"swiperContainer\">\r\n <swiper-container #swiperContainer *ngIf=\"providerList && providerList.length\"\r\n slides-per-view=\"1\" space-between=\"6\" speed=\"50\" [loop]=\"shouldLoopProviders()\"\r\n navigation=\"false\" css-mode=\"true\" [breakpoints]=\"{\r\n '100': { slidesPerView: 3 },\r\n '200': { slidesPerView: 4 },\r\n '320': { slidesPerView: 4 },\r\n '480': { slidesPerView: 6 },\r\n '768': { slidesPerView: 8 },\r\n '991': { slidesPerView: 10 },\r\n '1280': { slidesPerView: 12 }\r\n }\">\r\n <swiper-slide *ngFor=\"let provider of providerList\">\r\n <div class=\"provider-slide-item\">\r\n <img [src]=\"brandConfig?.providersIconsDir + '/' + provider.vendorCode + '.svg'\"\r\n [alt]=\"provider.name\" (click)=\"filterProviderGames(0, provider.vendorCode)\"\r\n loading=\"lazy\" />\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n\r\n <!-- Navigation buttons - OUTSIDE .swiperContainer but INSIDE .searchBar -->\r\n <div class=\"swiper-navigation-row\">\r\n <button class=\"swiper-button-prev\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Previous providers\">\r\n <span class=\"icon-arrow-left-games\"></span>\r\n </button>\r\n\r\n <button class=\"swiper-button-next\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Next providers\">\r\n <span class=\"icon-arrow-right-games\"></span>\r\n </button>\r\n </div>\r\n <div class=\"game-provider\">\r\n <div class=\"desktop\">\r\n <ul class=\"f-tabs providerIcons-ul-desktop\">\r\n <li id=\"favouriteIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterFavouriteGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Favorite Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-heart\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Recent Games Icon -->\r\n <li id=\"recentGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterLastPlayedGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Last played Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-clock\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Hot Games Icon -->\r\n <li id=\"hotGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterHotGames(0, 'hot')\">\r\n <div id=\"hotGamestt\" style=\"display: none; margin-left: -23px\"\r\n class=\"ttip ttip-arrow\">\r\n Hot Games\r\n <span class=\"arrow-down\" style=\"margin-left: -35px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"hotGames\">\r\n <i class=\"fa fa-fire\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Game Category Dropdown -->\r\n <li id=\"gameCategory\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"game-category-link game-category-link-desktop hidden-xs hidden-sm display-filter-content\">\r\n <a type=\"button\" class=\"category-btn\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"toggleGameCategoryTop()\">\r\n {{ categoryLabel }}\r\n </a>\r\n <a type=\"button\" id=\"gameCategoryLink\" [ngClass]=\"{\r\n 'icon-angle-down': !categoryChosen,\r\n 'icon-close': categoryChosen,\r\n 'pull-right': true\r\n }\" aria-label=\"Toggle category menu\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"categoryChosen ? DropdownClose() : toggleGameCategoryTop()\"></a>\r\n\r\n <!-- Game Category Dropdown Menu (positioned directly below) -->\r\n <div id=\"gameCategoryTop\"\r\n class=\"clearfix game-category-list game-category-list-footer\"\r\n [style.display]=\"showGameCategoryTop ? 'block' : 'none'\">\r\n <div class=\"game-category-list-width\">\r\n <ul class=\"game-category-list-item\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.background || '#262626',\r\n 'border': theme?.border || 'none'\r\n }\">\r\n <li class=\"game-category-list-item-li\" *ngFor=\"let group of lobbyGames\"\r\n id=\"{{group.gameGroupDetails.id}}-LeftSideButton-footer\"\r\n (click)=\"categoryLabel = group.gameGroupDetails.name; filterGroupGames(0, group.gameGroupDetails.id)\">\r\n {{ group.gameGroupDetails.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Games Section -->\r\n <div class=\"games-background\" id=\"gamesLobby\" *ngIf=\"!filterActive\">\r\n <div *ngFor=\"let group of lobbyGames; let i = index\" class=\"games-section\">\r\n <div class=\"new-game-header\">\r\n <h3 [ngStyle]=\"{ 'color': theme?.textColor || '#FFFFFF' }\">{{group.gameGroupDetails.name}}</h3>\r\n <div>\r\n <a class=\"btn-newgamestrip\" [ngStyle]=\"{ 'border': (theme?.borderSearch || 'none'),\r\n 'background-color': hoveredViewAllIndex === i ? (theme?.buttonBackgroundColor || '') : (theme?.background || '#262626')\r\n }\" (click)=\"viewGameCategory(group.gameGroupDetails)\" (mouseenter)=\"hoveredViewAllIndex = i\"\r\n (mouseleave)=\"hoveredViewAllIndex = null\">VIEW ALL</a>\r\n <a class=\"btn-Arrow-left\" [ngClass]=\"{ 'pulse': pulsingButton === 'prev' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'prev' + i ? (theme?.borderSearch || 'none'):'1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Previous games\"\r\n (click)=\"triggerPulse('prev' + i); slidePrev(i)\" (mouseenter)=\"hoveredButton = 'prev' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-left\"></span>\r\n </a>\r\n <a class=\"btn-Arrow-right\" [ngClass]=\"{ 'pulse': pulsingButton === 'next' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'next' + i ? (theme?.borderSearch || 'none') : '1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Next games\"\r\n (click)=\"triggerPulse('next' + i); slideNext(i)\" (mouseenter)=\"hoveredButton = 'next' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-right\"></span>\r\n </a>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"swiperContainer\">\r\n <div style=\"overflow-x: auto; white-space: nowrap; width: 100%;\">\r\n <swiper-container #gameSwiperContainer *ngIf=\"group.games && group.games.length\" slides-per-view=\"1\"\r\n space-between=\"10\" speed=\"50\" [loop]=\"shouldLoopGamesForGroup(group.games)\" navigation=\"false\"\r\n css-mode=\"false\" [breakpoints]=\"{\r\n '190': { slidesPerView: 1, spaceBetween: 10 },\r\n '350': { slidesPerView: 2, spaceBetween: 10 },\r\n '520': { slidesPerView: 3, spaceBetween: 10 },\r\n '676': { slidesPerView: 4, spaceBetween: 10 },\r\n '834': { slidesPerView: 4, spaceBetween: 10 },\r\n '998': { slidesPerView: 5, spaceBetween: 10 },\r\n '1158': { slidesPerView: 6, spaceBetween: 10 },\r\n '1280': { slidesPerView: 6, spaceBetween: 10 }\r\n }\">\r\n <swiper-slide *ngFor=\"let game of group.games; let gameIndex = index\"\r\n [attr.data-game-id]=\"i + '-' + game.gameCode\" class=\"lobby_games-home\">\r\n <div class=\"game-card\">\r\n <div class=\"game-card__content\"\r\n (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\"\r\n *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\"\r\n (click)=\"getgameClicked(game.gameCode)\"\r\n style=\"cursor: pointer;\"\r\n >\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\"\r\n (error)=\"onImageError($event)\" [alt]=\"game.name\" loading=\"lazy\"\r\n [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name\r\n }}</span></div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- Filtered Games Sections-->\r\n <div class=\"games-background\" id=\"filtered-games-section\" *ngIf=\"filterActive\">\r\n <div class=\"lobby_games-row\">\r\n <div class=\"game-card\" [attr.data-game-id]=\"gameIndex + '-' + game.gameCode\"\r\n *ngFor=\"let game of filteredGames; let gameIndex = index\">\r\n <div class=\"game-card__content\" (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\" *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\" (click)=\"getgameClicked(game.gameCode)\" style=\"cursor: pointer;\">\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\" (error)=\"onImageError($event)\"\r\n [alt]=\"game.name\" loading=\"lazy\" [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name }}</span></div>\r\n </div>\r\n </div>\r\n <div class=\"lobby_loadMoreBtn\" *ngIf=\"filterShowLoadMore\">\r\n <a class=\"btn load-more-btn\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n (click)=\"loadMoreFilteredGames()\">\r\n LOAD MORE\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"games-background lobby_noGamesMessage\" id=\"noGamesMessage\" *ngIf=\"noGamesToShow\">\r\n <p>NO GAMES FOUND</p>\r\n </div>\r\n</div>","import { Component, Input, OnInit, ViewEncapsulation, Output, TemplateRef } from '@angular/core';\r\nimport { BannersComponent } from './banners/banners.component';\r\nimport {GameLobbyTheme} from './theme/default-theme';\r\nimport { CasinoLobbyComponent } from './casino-lobby/casino-lobby.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EventEmitter } from '@angular/core';\r\n@Component({\r\n selector: 'lib-game-lobby-lib',\r\n standalone: true,\r\n imports: [CommonModule, BannersComponent, CasinoLobbyComponent],\r\n template: `\r\n <div class=\"lobbyaria-setsize\" [ngStyle]=\"{ 'background-color': (themeObject?.background || '#262626')}\" >\r\n <app-banners [theme]=\"themeObject\" [bannerData]=\"bannerDataInformation\" [bannerOverlay]=\"bannerOverlay\" \r\n (routerLinkClicked)=\"onRouterLinkClicked($event)\"></app-banners>\r\n <lib-casino-lobby [theme]=\"themeObject\" [casinoData]=\"bannerDataInformation\" [brandConfig]=\"brandConfig\" (gameClicked)=\"onGameClicked($event)\"></lib-casino-lobby>\r\n </div>\r\n `,\r\n styles: `.lobbyaria-setsize{\r\n height: 100%; padding: 15px;background-color: #262626;\r\n }`,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GameLobbyLibComponent implements OnInit {\r\n @Input() bannerData!: any;\r\n @Input() themes!: GameLobbyTheme;\r\n @Input() brandConfig!: any;\r\n @Input() bannerOverlay: TemplateRef<any> | null = null;\r\n @Output() routerLinkClicked = new EventEmitter<string>();\r\n @Output() gameClicked = new EventEmitter<string>();\r\n themeObject: any;\r\n bannerDataInformation:any\r\n constructor() {\r\n // Do not use @Input() values here\r\n }\r\n\r\n setDataThemes(): void {\r\n this.bannerDataInformation = this.bannerData;\r\n this.themeObject = this.themes;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setDataThemes();\r\n }\r\n\r\n onGameClicked(gameCode: string) {\r\n this.gameClicked.emit(gameCode);\r\n }\r\n\r\n onRouterLinkClicked(link: string) {\r\n this.routerLinkClicked.emit(link);\r\n }\r\n}\r\n","/*\r\n * Public API Surface of game-lobby-lib\r\n */\r\nexport * from './lib/banners/banners.component';\r\nexport * from './lib/casino-lobby/casino-lobby.component';\r\nexport * from './lib/game-lobby-lib.service';\r\nexport * from './lib/game-lobby-lib.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GameLobbyThemeService","i1","i2.GameLobbyLibService","i3"],"mappings":"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"}
1
+ {"version":3,"file":"game-lobby-lib.mjs","sources":["../../../projects/game-lobby-lib/src/lib/theme/default-theme.ts","../../../projects/game-lobby-lib/src/lib/theme/theme.token.ts","../../../projects/game-lobby-lib/src/lib/theme/themeService.service.ts","../../../projects/game-lobby-lib/src/lib/banners/banners.component.ts","../../../projects/game-lobby-lib/src/lib/banners/banners.component.html","../../../projects/game-lobby-lib/src/lib/game-lobby-lib.service.ts","../../../projects/game-lobby-lib/src/lib/casino-lobby/casino-lobby.component.ts","../../../projects/game-lobby-lib/src/lib/casino-lobby/casino-lobby.component.html","../../../projects/game-lobby-lib/src/lib/game-lobby-lib.component.ts","../../../projects/game-lobby-lib/src/public-api.ts","../../../projects/game-lobby-lib/src/game-lobby-lib.ts"],"sourcesContent":["export interface GameLobbyTheme {\r\n border: string;\r\n borderSearch: string;\r\n gametextbackground: string;\r\n buttonBackgroundColor: string;\r\n background: string;\r\n textColor: string;\r\n}\r\n\r\nexport const DEFAULT_THEME: GameLobbyTheme = {\r\n border: '2px solid #02B0CB',\r\n gametextbackground: 'rgba(0, 0, 0, 0.5)',\r\n borderSearch: '1px solid #cccccc',\r\n buttonBackgroundColor: '#22c55e',\r\n background: '#ffffff',\r\n textColor: '#ffffff'\r\n};\r\n","import { InjectionToken } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { GameLobbyTheme, DEFAULT_THEME } from './default-theme';\r\n\r\nexport const GAME_LOBBY_THEME_TOKEN =\r\n new InjectionToken<BehaviorSubject<GameLobbyTheme>>(\r\n 'GAME_LOBBY_THEME_TOKEN',\r\n {\r\n providedIn: 'root',\r\n factory: () => new BehaviorSubject(DEFAULT_THEME)\r\n }\r\n );\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { GameLobbyTheme } from './default-theme';\r\nimport { GAME_LOBBY_THEME_TOKEN } from './theme.token';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class GameLobbyThemeService {\r\n\r\n constructor(\r\n @Inject(GAME_LOBBY_THEME_TOKEN)\r\n private readonly themeSubject: BehaviorSubject<GameLobbyTheme>\r\n ) {}\r\n\r\n /** Observable for components */\r\n get theme$(): Observable<GameLobbyTheme> {\r\n return this.themeSubject.asObservable();\r\n }\r\n\r\n /** Current theme snapshot */\r\n get current(): GameLobbyTheme {\r\n return this.themeSubject.value;\r\n }\r\n\r\n /** Update theme at runtime */\r\n setTheme(theme: GameLobbyTheme): void {\r\n this.themeSubject.next(theme);\r\n }\r\n\r\n /** Partial update helper (optional but useful) */\r\n patchTheme(partial: Partial<GameLobbyTheme>): void {\r\n this.themeSubject.next({\r\n ...this.themeSubject.value,\r\n ...partial\r\n });\r\n }\r\n}\r\n","import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, OnInit, ViewChildren, ViewEncapsulation, QueryList, ElementRef, Output, EventEmitter, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { GameLobbyThemeService } from '../theme/themeService.service';\r\nimport { GameLobbyTheme } from '../theme/default-theme';\r\n\r\n@Component({\r\n selector: 'app-banners',\r\n standalone: true,\r\n imports: [CommonModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n templateUrl: './banners.component.html',\r\n styleUrl: './banners.component.scss',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class BannersComponent implements OnInit {\r\n @ViewChildren('btnSpan') btnSpans!: QueryList<ElementRef>;\r\n\r\n @Input() bannerData: any;\r\n @Input() theme?: GameLobbyTheme;\r\n baseUrl: string = '';\r\n @Output() routerLinkClicked = new EventEmitter<string>();\r\n @Input() bannerOverlay: TemplateRef<any> | null = null;\r\n // FIX: Initialize slides as empty array to prevent null reference errors\r\n slides: any[] = [];\r\n hoveredSlideId: number | null = null;\r\n \r\n constructor(themeService: GameLobbyThemeService) {\r\n themeService.theme$.subscribe(t => (this.theme = t));\r\n }\r\n\r\n ngOnInit(): void {\r\n console.log('Banner bannerOverlay:', this.bannerOverlay); // Debug log to check bannerData\r\n this.setDataThemes();\r\n }\r\n\r\n setDataThemes(): void {\r\n // FIX: Add safe navigation to prevent errors if bannerData is null/undefined\r\n this.slides = this.bannerData.bannerData || [];\r\n this.baseUrl = this.bannerData.baseUrl || '';\r\n }\r\n\r\n getRouterLinkFromButton(buttonHtml: string): void {\r\n // FIX: Add null/undefined check for buttonHtml\r\n if (!buttonHtml) {\r\n this.routerLinkClicked.emit('');\r\n return;\r\n }\r\n\r\n try {\r\n // Parse the HTML string to extract the routerlink attribute\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(buttonHtml, 'text/html');\r\n const anchor = doc.querySelector('a[routerlink]');\r\n \r\n if (anchor) {\r\n const routerLink = anchor.getAttribute('routerlink');\r\n this.routerLinkClicked.emit(routerLink || '');\r\n } else {\r\n this.routerLinkClicked.emit('');\r\n }\r\n } catch (error) {\r\n console.error('Error parsing button HTML:', error);\r\n this.routerLinkClicked.emit('');\r\n }\r\n }\r\n}","<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css\">\r\n<div class=\"lobby_cm-banner\"> \r\n <ng-container *ngIf=\"bannerOverlay\">\r\n <ng-container *ngTemplateOutlet=\"bannerOverlay\"></ng-container>\r\n </ng-container>\r\n <swiper-container\r\n class=\"my-swiper\"\r\n slides-per-view=\"1\"\r\n pagination=\"true\"\r\n pagination-clickable=\"true\"\r\n speed=\"500\"\r\n [loop]=\"slides.length > 1\"\r\n autoplay=\"true\"\r\n autoplay-delay=\"15000\"\r\n css-mode=\"true\">\r\n <swiper-slide *ngFor=\"let slide of slides\">\r\n <div [id]=\"slide.id\" class=\"slideWrapper\">\r\n <img [src]=\"baseUrl + '/uploads/banner/' + slide.imagePath\" [alt]=\"slide.name\" >\r\n <div class=\"lobbylib_cm-slider__btn\" \r\n [ngStyle]=\"{\r\n 'background-color': hoveredSlideId === slide.id ? (theme?.background || '#262626') : (theme?.buttonBackgroundColor || ''),\r\n 'color': theme?.textColor || '#fff',\r\n 'border': theme?.border || 'none'\r\n }\"\r\n (mouseenter)=\"hoveredSlideId = slide.id\"\r\n (mouseleave)=\"hoveredSlideId = null\"\r\n (click)=\"getRouterLinkFromButton(slide.button)\"\r\n >\r\n <span [innerHTML]=\"slide.button || ''\" > </span>\r\n \r\n </div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n HttpClient,\r\n HttpHeaders,\r\n HttpParams,\r\n} from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, map, shareReplay } from 'rxjs/operators';\r\n\r\n//Intefaces\r\n\r\nexport interface BaseApiResponse {\r\n status: 'SUCCESS' | 'FAILED' | string;\r\n}\r\n\r\nexport interface GameMultilingualUrl {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface Game {\r\n gameCode: string;\r\n gameId: number | null;\r\n gameType: string;\r\n publishedDate: string | null;\r\n hasDemo: number;\r\n name: string;\r\n multilingualUrl: GameMultilingualUrl;\r\n vendorId: string;\r\n tagList: string[];\r\n displayOrder: number;\r\n gameCategory: string;\r\n vendorName: string;\r\n gameGroupIds: number[] | null;\r\n gameGroupDisplayOrder?: number | null;\r\n}\r\n\r\nexport interface GameProvider {\r\n id: number;\r\n name: string;\r\n prefix: string;\r\n vendorCode: string;\r\n vendorClass: string;\r\n vendorDisplayName: string;\r\n subProviders: any[];\r\n displayOrder: number;\r\n}\r\n\r\nexport interface GetGamesParams {\r\n languageId?: string; // default always 'en'\r\n gameGroupId?: number;\r\n tag?: string;\r\n vendorId?: string;\r\n sorting?: string;\r\n sort?: string;\r\n searchText?: string;\r\n size?: number;\r\n page?: number;\r\n}\r\n\r\nexport interface GetOtherParams {\r\n languageId?: string; // default always 'en'\r\n}\r\n\r\nexport interface GamesListResponse extends BaseApiResponse {\r\n gamesList: Game[];\r\n}\r\n\r\nexport interface ProvidersListResponse extends BaseApiResponse {\r\n gameProvidersList: GameProvider[];\r\n}\r\n\r\nexport interface ToggleFavoriteResponse extends BaseApiResponse {\r\n ecrExternalId: string;\r\n gameId: string;\r\n gameCategoryId: number;\r\n gameTypeId: number;\r\n favoriteAddFlag: boolean;\r\n errorCode: string | null;\r\n errorDescription: string | null;\r\n}\r\n\r\nexport interface GameGroupMultilingualUrl {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface GameGroupProviderIds {\r\n [key: string]: string;\r\n}\r\n\r\nexport interface GameGroup {\r\n id: number;\r\n name: string;\r\n group_type: string;\r\n group_sub_type: string;\r\n game_asset_style: string;\r\n game_group_order: number;\r\n content: string;\r\n metaTitle: string;\r\n metaTags: string;\r\n metaDescription: string;\r\n multilingualUrlGameGroup: GameGroupMultilingualUrl;\r\n gameGroupProviderIdsListResult: GameGroupProviderIds | [];\r\n}\r\n\r\nexport interface GameLobby {\r\n id: number;\r\n title: string;\r\n name: string;\r\n user_segment: string;\r\n lobby_order: number;\r\n content: string;\r\n metaTitle: string;\r\n metaTags: string;\r\n metaDescription: string;\r\n multilingualUrlLobby: GameMultilingualUrl;\r\n gameGroupList: GameGroup[];\r\n}\r\n\r\nexport interface GameGroupsResponse extends Array<GameLobby> { }\r\n\r\nexport interface GameResponse {\r\n content: any[];\r\n totalElements: number;\r\n totalPages: number;\r\n}\r\n\r\n// Final lobbyGames structure \r\nexport interface LobbyGames {\r\n gameGroupDetails: GameGroup;\r\n games: any[];\r\n}\r\n// Service logic\r\n\r\ninterface CachedPost {\r\n observable: Observable<any>;\r\n timestamp: number;\r\n}\r\n\r\ninterface CachedGet {\r\n observable: Observable<any>;\r\n timestamp: number;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GameLobbyLibService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n private postCache = new Map<string, CachedPost>();\r\n private getCache = new Map<string, CachedGet>();\r\n\r\n // common methods to build params and headers for all API calls\r\n\r\n private buildParams(params?: any): HttpParams {\r\n const merged = {\r\n languageId: 'en', // defauit to en\r\n ...params\r\n };\r\n\r\n let httpParams = new HttpParams();\r\n Object.keys(merged).forEach(key => {\r\n httpParams = httpParams.set(key, merged[key] ?? '');\r\n });\r\n\r\n return httpParams;\r\n }\r\n\r\n private buildHeaders(extraHeaders?: { [key: string]: string }): HttpHeaders {\r\n const defaultHeaders = {\r\n accept: 'application/json, text/plain, */*'\r\n };\r\n\r\n return new HttpHeaders({\r\n ...defaultHeaders,\r\n ...extraHeaders\r\n });\r\n }\r\n\r\n // API methods\r\n getGamesGroups(\r\n baseUrl: string,\r\n params?: GetOtherParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<GameGroupsResponse> {\r\n\r\n return this.lbGetCachedApi<GameGroupsResponse>(\r\n `${baseUrl}/ajax/game/getLobbyListWithGameGroups`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n getGames(\r\n baseUrl: string,\r\n params?: GetGamesParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<Game[]> {\r\n\r\n return this.lbGetCachedApi<Game[]>(\r\n `${baseUrl}/ajax/v2/games`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n getLastPlayed(\r\n baseUrl: string,\r\n params?: GetOtherParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<GamesListResponse> {\r\n\r\n return this.lbGetCachedApi<GamesListResponse>(\r\n `${baseUrl}/ajax/v2/getUserLastPlayed`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n getFavouriteGames(\r\n baseUrl: string,\r\n params?: GetOtherParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<GamesListResponse> {\r\n\r\n return this.lbGetCachedApi<GamesListResponse>(\r\n `${baseUrl}/ajax/v2/getFavorites`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n getGamesProviders(\r\n baseUrl: string,\r\n params?: GetOtherParams,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<ProvidersListResponse> {\r\n\r\n return this.lbGetCachedApi<ProvidersListResponse>(\r\n `${baseUrl}/ajax/v2/getGameProviders`,\r\n {\r\n params: this.buildParams(params),\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n toggleFavoriteGame(\r\n baseUrl: string,\r\n gameId: number,\r\n newState: boolean,\r\n extraHeaders?: { [key: string]: string },\r\n cache_expire: number = 0\r\n ): Observable<ToggleFavoriteResponse> {\r\n\r\n const formData = new FormData();\r\n formData.append('gameId', String(gameId));\r\n formData.append('newState', String(newState));\r\n\r\n return this.lbPostCachedApi<ToggleFavoriteResponse>(\r\n `${baseUrl}/ajax/profile/toggleFavoriteGame`,\r\n formData,\r\n {\r\n headers: this.buildHeaders(extraHeaders)\r\n },\r\n cache_expire\r\n );\r\n }\r\n\r\n // Caching logic for GET and POST requests\r\n\r\n lbGetCachedApi<T>(\r\n url: string,\r\n options: {\r\n params?: any;\r\n headers?: HttpHeaders | { [header: string]: string | string[] };\r\n withCredentials?: boolean;\r\n } = {},\r\n cache_expire: number = 0\r\n ): Observable<T> {\r\n\r\n const request$ = this.http\r\n .get<T>(url, {\r\n withCredentials: true,\r\n ...options\r\n })\r\n .pipe(\r\n catchError(e => {\r\n return throwError(() => e);\r\n }),\r\n shareReplay(1)\r\n );\r\n\r\n if (cache_expire === 0) {\r\n return request$;\r\n }\r\n\r\n const cacheKey = this.generateCacheKey(url, options?.params);\r\n const now = Date.now();\r\n const cached = this.getCache.get(cacheKey);\r\n\r\n if (cached && now - cached.timestamp < cache_expire) {\r\n return cached.observable;\r\n }\r\n\r\n this.getCache.set(cacheKey, { observable: request$, timestamp: now });\r\n return request$;\r\n }\r\n\r\n lbPostCachedApi<T>(\r\n url: string,\r\n body: any,\r\n options: {\r\n headers?: HttpHeaders | { [header: string]: string | string[] };\r\n withCredentials?: boolean;\r\n } = {},\r\n cache_expire: number = 0\r\n ): Observable<T> {\r\n\r\n const request$ = this.http.post<T>(\r\n url,\r\n body,\r\n {\r\n observe: 'body', //body response\r\n withCredentials: true,\r\n ...options\r\n }\r\n ).pipe(\r\n catchError(e => throwError(() => e)),\r\n shareReplay(1)\r\n );\r\n\r\n if (cache_expire === 0) return request$;\r\n\r\n const cacheKey = this.generateCacheKey(url, body);\r\n const now = Date.now();\r\n const cached = this.postCache.get(cacheKey);\r\n\r\n if (cached && now - cached.timestamp < cache_expire) {\r\n return cached.observable;\r\n }\r\n\r\n this.postCache.set(cacheKey, { observable: request$, timestamp: now });\r\n return request$;\r\n }\r\n\r\n\r\n private generateCacheKey(url: string, params: any): string {\r\n try {\r\n if (!params) return url;\r\n return `${url}::${JSON.stringify(params)}`;\r\n } catch {\r\n return url;\r\n }\r\n }\r\n\r\n clearAllApiCache(): void {\r\n this.postCache.clear();\r\n this.getCache.clear();\r\n }\r\n\r\n\r\n handleHTTPError(e: any) {\r\n if (e.message && e.message.includes(\"countryBlocked\")) {\r\n console.log(\"Country blocked:\" + e.message.split(\":\")[1]);\r\n // notify the host brand\r\n } else if (e.message && e.message.includes(\"session_expired_sso\")) {\r\n console.log(\"Session expired:\" + e.message.split(\":\")[1]);\r\n // notify the host brand\r\n } else {\r\n if (e.status === 401) {\r\n console.log(\"Error Code:\" + e.status);\r\n // notify the host brand\r\n } else if (e.status === 404) {\r\n console.log(\"Error Code:\" + e.status);\r\n // notify the host brand\r\n } else if (e.status === 504) {\r\n console.log(\"Error Code:\" + e.status);\r\n // notify the host brand\r\n } else {\r\n console.log(\"Error Code:\" + e.status);\r\n // notify the host brand\r\n }\r\n }\r\n }\r\n}\r\n\r\n","import { Component, Input, OnInit, ViewChild, AfterViewInit, ViewEncapsulation, CUSTOM_ELEMENTS_SCHEMA, ViewChildren, QueryList, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { GameLobbyTheme } from '../theme/default-theme';\r\nimport { GameLobbyThemeService } from '../theme/themeService.service';\r\nimport { LobbyGames, GameGroup, GameGroupsResponse, GameLobby } from '../game-lobby-lib.service';\r\nimport { GameLobbyLibService } from '../game-lobby-lib.service';\r\nimport { forkJoin, map, of, switchMap, tap, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'lib-casino-lobby',\r\n standalone: true,\r\n imports: [CommonModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n templateUrl: './casino-lobby.component.html',\r\n styleUrl: './casino-lobby.component.scss',\r\n // encapsulation: ViewEncapsulation.None\r\n})\r\nexport class CasinoLobbyComponent implements OnInit, AfterViewInit {\r\n hoveredSlideId: string | null = null;\r\n hoveredButton: string | null = null;\r\n hoveredGameKey: string | null = null;\r\n @ViewChild('swiperContainer') swiperContainer: any;\r\n @ViewChildren('gameSwiperContainer') gameSwiperContainers!: QueryList<ElementRef>;\r\n @Output() gameClicked = new EventEmitter<string>();\r\n @Input() casinoData: any;\r\n @Input() theme?: GameLobbyTheme;\r\n @Input() baseUrl: string = '';\r\n @Input() brandConfig: any;\r\n websiteCode: string = '';\r\n providerList: any[] = []; // FIX: Initialize as empty array\r\n pulsingButton: string | null = null;\r\n showGameCategoryTop = false;\r\n categoryChosen = false;\r\n categoryLabel: string = 'CATEGORY';\r\n sortedGameGroupList: any[] = []; // FIX: Initialize as empty array instead of undefined\r\n hoveredViewAllIndex: number | null = null;\r\n\r\n /* games logic */\r\n lobbyGames: LobbyGames[] = [];\r\n sortedGameGroup: GameGroup[] = [];\r\n filteredGames: any | null = null;\r\n filterShowLoadMore: boolean = false;\r\n currentFilterPage: number = 0;\r\n noGamesToShow: boolean = false;\r\n filterActive: boolean = false;\r\n private searchSubject: Subject<string> = new Subject<string>();\r\n currentSearchText: string = '';\r\n currentSearchParams: any = {};\r\n @ViewChild('searchInput') searchInput: any;\r\n\r\n constructor(themeService: GameLobbyThemeService, private gameLobbyLibService: GameLobbyLibService) {\r\n themeService.theme$.subscribe(t => (this.theme = t));\r\n }\r\n\r\n slideNext(index: number) {\r\n const swiperEl = this.gameSwiperContainers.toArray()[index]?.nativeElement;\r\n if (swiperEl?.swiper) {\r\n swiperEl.swiper.slideNext();\r\n }\r\n }\r\n\r\n slidePrev(index: number) {\r\n const swiperEl = this.gameSwiperContainers.toArray()[index]?.nativeElement;\r\n if (swiperEl?.swiper) {\r\n swiperEl.swiper.slidePrev();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getGamesProviders(); // Fetch providers list\r\n this.loadLobbyGames(false); // Load games for non-logged in users by default\r\n this.searchSubject\r\n .pipe(\r\n debounceTime(2000), // wait 2000ms after typing stops\r\n distinctUntilChanged(), // ignore same text\r\n switchMap((searchText: string) => {\r\n this.currentFilterPage = 0; // reset page\r\n this.currentSearchText = searchText;\r\n this.currentSearchParams = {\r\n page: 1,\r\n size: this.brandConfig.loadMorePageSize,\r\n languageId: this.brandConfig?.langCode,\r\n searchText: searchText\r\n };\r\n return this.gameLobbyLibService.getGames(\r\n this.brandConfig?.apiUrl,\r\n this.currentSearchParams,\r\n { referer: this.brandConfig?.siteUrl }\r\n );\r\n })\r\n )\r\n .subscribe((games: any[]) => {\r\n if (!games) {\r\n this.filteredGames = [];\r\n this.filterShowLoadMore = false;\r\n return;\r\n }\r\n\r\n this.filteredGames = games;\r\n this.filterShowLoadMore =\r\n games.length === this.brandConfig.loadMorePageSize;\r\n if (this.currentSearchText.trim() !== '' && this.currentSearchText !== null) {\r\n this.activateFilter();\r\n } else {\r\n this.deactivateFilter();\r\n }\r\n this.checkIfNoGamesToShow();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.initializeProviderSwiper();\r\n this.initializeGameSwipers();\r\n }, 2000);\r\n this.triggerPulse('');\r\n }\r\n\r\n onSearchChange(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (!input) return;\r\n const value = input.value ?? '';\r\n this.searchSubject.next(value.trim());\r\n }\r\n\r\n private initializeProviderSwiper() {\r\n if (this.swiperContainer?.nativeElement) {\r\n const providerSwiperEl = this.swiperContainer.nativeElement;\r\n const parentContainer = providerSwiperEl.closest('.searchBar') || providerSwiperEl.closest('.fixed-footer-width');\r\n const prevButton = parentContainer?.querySelector('.swiper-button-prev');\r\n const nextButton = parentContainer?.querySelector('.swiper-button-next');\r\n\r\n if (prevButton && nextButton) {\r\n prevButton.addEventListener('click', () => {\r\n providerSwiperEl.swiper?.slidePrev();\r\n });\r\n nextButton.addEventListener('click', () => {\r\n providerSwiperEl.swiper?.slideNext();\r\n });\r\n }\r\n }\r\n }\r\n\r\n private initializeGameSwipers() {\r\n if (this.gameSwiperContainers && this.gameSwiperContainers.length > 0) {\r\n this.gameSwiperContainers.forEach((swiperRef, index) => {\r\n const gameSwiperEl = swiperRef.nativeElement;\r\n\r\n // Find the parent games-section for this specific swiper\r\n const gamesSection = gameSwiperEl.closest('.games-section');\r\n\r\n if (gamesSection) {\r\n const customPrev = gamesSection.querySelector('.btn-Arrow-left');\r\n const customNext = gamesSection.querySelector('.btn-Arrow-right');\r\n\r\n if (customPrev) {\r\n customPrev.addEventListener('click', () => {\r\n console.log(`Game section ${index} - Previous clicked`);\r\n gameSwiperEl.swiper?.slidePrev();\r\n });\r\n }\r\n if (customNext) {\r\n customNext.addEventListener('click', () => {\r\n console.log(`Game section ${index} - Next clicked`);\r\n gameSwiperEl.swiper?.slideNext();\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // FIX: Updated loop logic to prevent Swiper loop warnings\r\n // Only enable loop when we have more slides than the maximum slidesPerView\r\n shouldLoopProviders(): boolean {\r\n if (!this.providerList || !Array.isArray(this.providerList)) {\r\n return false;\r\n }\r\n\r\n // Max slidesPerView is 12 at the 1280px breakpoint\r\n // Only enable loop if we have more providers than what's visible\r\n const maxSlidesPerView = 12;\r\n return this.providerList.length > maxSlidesPerView;\r\n }\r\n\r\n shouldLoopGames(games: any[]): boolean {\r\n if (!games || !Array.isArray(games)) {\r\n return false;\r\n }\r\n\r\n // Max slidesPerView is 8 at the 1280px breakpoint\r\n // Only enable loop if we have more games than what's visible\r\n const maxSlidesPerView = 8;\r\n return games.length > maxSlidesPerView;\r\n }\r\n\r\n // NEW: Per-group loop logic for game swipers\r\n // This checks each game group individually to determine if loop should be enabled\r\n shouldLoopGamesForGroup(games: any[]): boolean {\r\n if (!games || !Array.isArray(games)) {\r\n return false;\r\n }\r\n\r\n // Max slidesPerView is 8 at the 1280px breakpoint\r\n // Only enable loop if this specific group has more games than what's visible\r\n const maxSlidesPerView = 8;\r\n return games.length > maxSlidesPerView;\r\n }\r\n\r\n triggerPulse(button: string) {\r\n this.pulsingButton = button;\r\n setTimeout(() => {\r\n this.pulsingButton = null;\r\n }, 400); // Duration should match the animation\r\n }\r\n\r\n toggleGameCategoryTop() {\r\n this.showGameCategoryTop = !this.showGameCategoryTop;\r\n this.categoryChosen = this.categoryLabel !== 'CATEGORY';\r\n if (this.categoryLabel == 'CATEGORY') {\r\n this.deactivateFilter();\r\n }\r\n }\r\n\r\n viewGameCategory(group: any) {\r\n this.categoryLabel = group.name;\r\n this.showGameCategoryTop = false;\r\n this.filterGroupGames(0, group.id);\r\n }\r\n\r\n DropdownClose() {\r\n this.categoryLabel === 'CATEGORY' ? this.categoryChosen = false : this.categoryChosen = true;\r\n this.categoryChosen ? this.categoryLabel = 'CATEGORY' : this.categoryLabel;\r\n !this.categoryChosen ? this.categoryChosen = true : this.categoryChosen = false;\r\n this.showGameCategoryTop = false;\r\n if (this.categoryLabel == 'CATEGORY') {\r\n this.deactivateFilter();\r\n }\r\n }\r\n\r\n \r\n\r\n getGameImage(game: any): string {\r\n if (!game?.gameCode) {\r\n return this.brandConfig.defaultGameImage;\r\n }\r\n\r\n return `${this.brandConfig?.gamesImagesDir}/${game.gameCode}/${game.gameCode}.webp`;\r\n }\r\n\r\n onImageError(event: Event): void {\r\n const img = event.target as HTMLImageElement;\r\n // Prevent infinite loop\r\n if (img.src.includes('default-game-image.jpg')) return;\r\n img.src = this.brandConfig.defaultGameImage;\r\n }\r\n\r\n // Games filters\r\n filterGroupGames(currentPage: number, gameGroupId: number) {\r\n this.showGameCategoryTop = false;\r\n this.clearSearch();\r\n this.getFilteredGames(currentPage, this.brandConfig.loadMorePageSize, { gameGroupId: gameGroupId });\r\n this.activateFilter();\r\n }\r\n\r\n filterProviderGames(currentPage: number, vendorid: number) {\r\n this.clearSearch();\r\n this.getFilteredGames(currentPage, this.brandConfig.loadMorePageSize, { vendorId: vendorid });\r\n this.activateFilter();\r\n }\r\n\r\n filterHotGames(currentPage: number, tag: string) {\r\n this.clearSearch();\r\n this.getFilteredGames(currentPage, this.brandConfig.loadMorePageSize, { tag: tag });\r\n this.activateFilter();\r\n }\r\n\r\n filterFavouriteGames() {\r\n this.clearSearch();\r\n this.getFavouriteGames();\r\n this.activateFilter();\r\n }\r\n\r\n filterLastPlayedGames() {\r\n this.clearSearch();\r\n this.getLastPlayed();\r\n this.activateFilter();\r\n }\r\n\r\n loadMoreFilteredGames() {\r\n this.currentSearchParams.page = this.currentFilterPage + 1; // Increment page for next load\r\n this.getFilteredGames(this.currentFilterPage, this.brandConfig.loadMorePageSize, this.currentSearchParams);\r\n }\r\n\r\n clearSearch(): void {\r\n console.log('Clearing search input and resetting filters');\r\n if (this.searchInput) {\r\n this.searchInput.nativeElement.value = '';\r\n }\r\n this.currentSearchText = '';\r\n this.currentFilterPage = 0;\r\n }\r\n\r\n activateFilter() {\r\n this.filterActive = true;\r\n }\r\n\r\n deactivateFilter() {\r\n this.filterActive = false;\r\n }\r\n\r\n getFilteredGames(\r\n currentPageNumber: number,\r\n pageSize: number,\r\n filters?: Record<string, any>\r\n ) {\r\n const baseParams = {\r\n page: currentPageNumber + 1,\r\n size: pageSize,\r\n languageId: this.brandConfig?.langCode\r\n };\r\n\r\n const queryParams = {\r\n ...baseParams,\r\n ...(filters || {})\r\n };\r\n this.currentSearchParams = queryParams; // Store current search params for load more functionality\r\n this.gameLobbyLibService.getGames(\r\n this.brandConfig?.apiUrl,\r\n queryParams,\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe((games: any[]) => {\r\n\r\n if (!games) {\r\n this.filterShowLoadMore = false;\r\n return;\r\n }\r\n\r\n // If first page - replace\r\n if (currentPageNumber === 0) {\r\n this.filteredGames = games;\r\n }\r\n // If next page - append\r\n else if (currentPageNumber > 0) {\r\n this.filteredGames = [\r\n ...this.filteredGames,\r\n ...games\r\n ];\r\n }\r\n // If returned count === pageSize - more games might exist\r\n this.filterShowLoadMore = games.length === pageSize;\r\n this.currentFilterPage = currentPageNumber + 1; // Update current page\r\n if (!this.filterShowLoadMore) {\r\n this.currentFilterPage = 0; // Reset to first page if no more games\r\n }\r\n this.checkIfNoGamesToShow();\r\n console.log('Filtered Games:', this.filteredGames);\r\n console.log('Show Load More:', this.filterShowLoadMore);\r\n });\r\n }\r\n\r\n\r\n // Get Games\r\n getGames(pageNumber: number, pageSize: number) {\r\n this.gameLobbyLibService.getGames(\r\n this.brandConfig?.apiUrl,\r\n { page: pageNumber, size: pageSize, languageId: this.brandConfig?.langCode },\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe(games => {\r\n console.log('Games:', games);\r\n });\r\n }\r\n // Last Played\r\n getLastPlayed() {\r\n this.filteredGames = []; // Reset before loading new ones\r\n this.gameLobbyLibService.getLastPlayed(\r\n this.brandConfig?.apiUrl,\r\n { languageId: this.brandConfig?.langCode },\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe(res => {\r\n if (!res || !res.status || res.status.toLowerCase() !== 'success') {\r\n console.error('Error fetching last played games:', res);\r\n return;\r\n } else {\r\n this.filteredGames = res.gamesList;\r\n this.checkIfNoGamesToShow();\r\n }\r\n });\r\n }\r\n // Favourites\r\n getFavouriteGames() {\r\n this.gameLobbyLibService.getFavouriteGames(\r\n this.brandConfig?.apiUrl,\r\n { languageId: this.brandConfig?.langCode },\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe(res => {\r\n if (!res || !res.status || res.status.toLowerCase() !== 'success') {\r\n console.error('Error fetching favourite games:', res);\r\n return;\r\n } else {\r\n this.filteredGames = res.gamesList;\r\n this.checkIfNoGamesToShow();\r\n }\r\n });\r\n }\r\n // Providers\r\n getGamesProviders() {\r\n this.gameLobbyLibService.getGamesProviders(\r\n this.brandConfig?.apiUrl,\r\n { languageId: this.brandConfig?.langCode },\r\n { referer: this.brandConfig?.siteUrl }\r\n ).subscribe(res => {\r\n console.log('Providers:', res?.gameProvidersList.length);\r\n this.providerList = res?.gameProvidersList || [];\r\n });\r\n }\r\n\r\n loadLobbyGames(isLoggedIn: boolean): void {\r\n console.log('Loading lobby games for', isLoggedIn ? 'logged in user' : 'guest user');\r\n this.gameLobbyLibService.getGamesGroups(this.brandConfig?.apiUrl, { languageId: this.brandConfig?.langCode }, { referer: this.brandConfig?.siteUrl }).pipe(\r\n /* Step 1: Select correct lobby safely */\r\n map((lobbies: GameGroupsResponse) => {\r\n\r\n if (!lobbies || !lobbies.length) return [];\r\n\r\n let selectedLobby: GameLobby | undefined;\r\n\r\n // If only one lobby returned use it\r\n if (lobbies.length === 1) {\r\n selectedLobby = lobbies[0];\r\n }\r\n // If multiple apply login logic\r\n else {\r\n selectedLobby = isLoggedIn\r\n ? lobbies.find(l => l.title.includes('Home Lobby'))\r\n : lobbies.find(l => !l.title.includes('Home Lobby'));\r\n }\r\n\r\n if (!selectedLobby?.gameGroupList?.length) return [];\r\n\r\n // Sort by order\r\n return selectedLobby.gameGroupList\r\n .slice()\r\n .sort((a, b) => a.game_group_order - b.game_group_order);\r\n }),\r\n\r\n tap(sortedGroups => {\r\n this.sortedGameGroup = sortedGroups;\r\n }),\r\n\r\n /* Step 2: Fetch games in parallel */\r\n switchMap((sortedGroups: GameGroup[]) => {\r\n\r\n if (!sortedGroups.length) return of([]);\r\n\r\n const requests = sortedGroups\r\n .filter(group => group.name && group.name.trim() !== '')\r\n .map(group =>\r\n this.gameLobbyLibService.getGames(this.brandConfig?.apiUrl, {\r\n page: 1,\r\n size: this.brandConfig?.lobbyGamesPageSize,\r\n gameGroupId: group.id\r\n }, { referer: this.brandConfig?.siteUrl }).pipe(\r\n map((res: any) => ({\r\n gameGroupDetails: group,\r\n games: res\r\n }))\r\n )\r\n );\r\n\r\n return forkJoin(requests);\r\n })\r\n\r\n ).subscribe({\r\n next: (result: LobbyGames[]) => {\r\n this.lobbyGames = result;\r\n },\r\n error: (err) => {\r\n console.error('Error loading lobby games:', err);\r\n }\r\n });\r\n }\r\n\r\n checkIfNoGamesToShow() {\r\n let noGames = false;\r\n if (this.filteredGames && Array.isArray(this.filteredGames) && this.filteredGames.length === 0) {\r\n noGames = true;\r\n }\r\n this.noGamesToShow = noGames;\r\n }\r\n\r\n getgameClicked(gameCode: any): void {\r\n this.gameClicked.emit(gameCode);\r\n }\r\n}","<div class=\"main-lobby\">\r\n <div class=\"game-filter-background\" [ngStyle]=\"{ 'background': theme?.background || 'none' }\">\r\n <!-- Main Filter Section -->\r\n <div class=\"fixed-footer-width clearfix\" [ngStyle]=\"{ 'border-bottom': theme?.borderSearch || 'none' }\">\r\n <div class=\"display-filter-content\">\r\n <!-- Search Bar -->\r\n <div class=\"searchBar\">\r\n <div class=\"game-search\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\">\r\n <form class=\"form-inline\" (submit)=\"$event.preventDefault()\">\r\n <i class=\"fa fa-search\"></i>\r\n <input #searchInput class=\"game-search-form\" id=\"searchInput\" name=\"gameSearch\" type=\"text\" placeholder=\"GAME SEARCH\"\r\n aria-label=\"Search\" (input)=\"onSearchChange($event)\" />\r\n </form>\r\n </div>\r\n\r\n <!-- Provider Swiper -->\r\n <div class=\"swiperContainer\">\r\n <swiper-container #swiperContainer *ngIf=\"providerList && providerList.length\"\r\n slides-per-view=\"1\" space-between=\"6\" speed=\"50\" [loop]=\"shouldLoopProviders()\"\r\n navigation=\"false\" css-mode=\"true\" [breakpoints]=\"{\r\n '100': { slidesPerView: 3 },\r\n '200': { slidesPerView: 4 },\r\n '320': { slidesPerView: 4 },\r\n '480': { slidesPerView: 6 },\r\n '768': { slidesPerView: 8 },\r\n '991': { slidesPerView: 10 },\r\n '1280': { slidesPerView: 12 }\r\n }\">\r\n <swiper-slide *ngFor=\"let provider of providerList\">\r\n <div class=\"provider-slide-item\">\r\n <img [src]=\"brandConfig?.providersIconsDir + '/' + provider.vendorCode + '.svg'\"\r\n [alt]=\"provider.name\" (click)=\"filterProviderGames(0, provider.vendorCode)\"\r\n loading=\"lazy\" />\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n\r\n <!-- Navigation buttons - OUTSIDE .swiperContainer but INSIDE .searchBar -->\r\n <div class=\"swiper-navigation-row\">\r\n <button class=\"swiper-button-prev\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Previous providers\">\r\n <span class=\"icon-arrow-left-games\"></span>\r\n </button>\r\n\r\n <button class=\"swiper-button-next\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Next providers\">\r\n <span class=\"icon-arrow-right-games\"></span>\r\n </button>\r\n </div>\r\n <div class=\"game-provider\">\r\n <div class=\"desktop\">\r\n <ul class=\"f-tabs providerIcons-ul-desktop\">\r\n <li id=\"favouriteIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterFavouriteGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Favorite Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-heart\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Recent Games Icon -->\r\n <li id=\"recentGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterLastPlayedGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Last played Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-clock\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Hot Games Icon -->\r\n <li id=\"hotGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterHotGames(0, 'hot')\">\r\n <div id=\"hotGamestt\" style=\"display: none; margin-left: -23px\"\r\n class=\"ttip ttip-arrow\">\r\n Hot Games\r\n <span class=\"arrow-down\" style=\"margin-left: -35px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"hotGames\">\r\n <i class=\"fa fa-fire\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Game Category Dropdown -->\r\n <li id=\"gameCategory\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"game-category-link game-category-link-desktop hidden-xs hidden-sm display-filter-content\">\r\n <a type=\"button\" class=\"category-btn\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"toggleGameCategoryTop()\">\r\n {{ categoryLabel }}\r\n </a>\r\n <a type=\"button\" id=\"gameCategoryLink\" [ngClass]=\"{\r\n 'icon-angle-down': !categoryChosen,\r\n 'icon-close': categoryChosen,\r\n 'pull-right': true\r\n }\" aria-label=\"Toggle category menu\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"categoryChosen ? DropdownClose() : toggleGameCategoryTop()\"></a>\r\n\r\n <!-- Game Category Dropdown Menu (positioned directly below) -->\r\n <div id=\"gameCategoryTop\"\r\n class=\"clearfix game-category-list game-category-list-footer\"\r\n [style.display]=\"showGameCategoryTop ? 'block' : 'none'\">\r\n <div class=\"game-category-list-width\">\r\n <ul class=\"game-category-list-item\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.background || '#262626',\r\n 'border': theme?.border || 'none'\r\n }\">\r\n <li class=\"game-category-list-item-li\" *ngFor=\"let group of lobbyGames\"\r\n id=\"{{group.gameGroupDetails.id}}-LeftSideButton-footer\"\r\n (click)=\"categoryLabel = group.gameGroupDetails.name; filterGroupGames(0, group.gameGroupDetails.id)\">\r\n {{ group.gameGroupDetails.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Games Section -->\r\n <div class=\"games-background\" id=\"gamesLobby\" *ngIf=\"!filterActive\">\r\n <div *ngFor=\"let group of lobbyGames; let i = index\" class=\"games-section\">\r\n <div class=\"new-game-header\">\r\n <h3 [ngStyle]=\"{ 'color': theme?.textColor || '#FFFFFF' }\">{{group.gameGroupDetails.name}}</h3>\r\n <div>\r\n <a class=\"btn-newgamestrip\" [ngStyle]=\"{ 'border': (theme?.borderSearch || 'none'),\r\n 'background-color': hoveredViewAllIndex === i ? (theme?.buttonBackgroundColor || '') : (theme?.background || '#262626')\r\n }\" (click)=\"viewGameCategory(group.gameGroupDetails)\" (mouseenter)=\"hoveredViewAllIndex = i\"\r\n (mouseleave)=\"hoveredViewAllIndex = null\">VIEW ALL</a>\r\n <a class=\"btn-Arrow-left\" [ngClass]=\"{ 'pulse': pulsingButton === 'prev' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'prev' + i ? (theme?.borderSearch || 'none'):'1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Previous games\"\r\n (click)=\"triggerPulse('prev' + i); slidePrev(i)\" (mouseenter)=\"hoveredButton = 'prev' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-left\"></span>\r\n </a>\r\n <a class=\"btn-Arrow-right\" [ngClass]=\"{ 'pulse': pulsingButton === 'next' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'next' + i ? (theme?.borderSearch || 'none') : '1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Next games\"\r\n (click)=\"triggerPulse('next' + i); slideNext(i)\" (mouseenter)=\"hoveredButton = 'next' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-right\"></span>\r\n </a>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"swiperContainer\">\r\n <div style=\"overflow-x: auto; white-space: nowrap; width: 100%;\">\r\n <swiper-container #gameSwiperContainer *ngIf=\"group.games && group.games.length\" slides-per-view=\"1\"\r\n space-between=\"10\" speed=\"50\" [loop]=\"shouldLoopGamesForGroup(group.games)\" navigation=\"false\"\r\n css-mode=\"false\" [breakpoints]=\"{\r\n '190': { slidesPerView: 1, spaceBetween: 10 },\r\n '350': { slidesPerView: 2, spaceBetween: 10 },\r\n '520': { slidesPerView: 3, spaceBetween: 10 },\r\n '676': { slidesPerView: 4, spaceBetween: 10 },\r\n '834': { slidesPerView: 4, spaceBetween: 10 },\r\n '998': { slidesPerView: 5, spaceBetween: 10 },\r\n '1158': { slidesPerView: 6, spaceBetween: 10 },\r\n '1280': { slidesPerView: 6, spaceBetween: 10 }\r\n }\">\r\n <swiper-slide *ngFor=\"let game of group.games; let gameIndex = index\"\r\n [attr.data-game-id]=\"i + '-' + game.gameCode\" class=\"lobby_games-home\">\r\n <div class=\"game-card\">\r\n <div class=\"game-card__content\"\r\n (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\"\r\n *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\"\r\n (click)=\"getgameClicked(game.gameCode)\"\r\n style=\"cursor: pointer;\"\r\n >\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\"\r\n (error)=\"onImageError($event)\" [alt]=\"game.name\" loading=\"lazy\"\r\n [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name\r\n }}</span></div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- Filtered Games Sections-->\r\n <div class=\"games-background\" id=\"filtered-games-section\" *ngIf=\"filterActive\">\r\n <div class=\"lobby_games-row\">\r\n <div class=\"game-card\" [attr.data-game-id]=\"gameIndex + '-' + game.gameCode\"\r\n *ngFor=\"let game of filteredGames; let gameIndex = index\">\r\n <div class=\"game-card__content\" (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\" *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\" (click)=\"getgameClicked(game.gameCode)\" style=\"cursor: pointer;\">\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\" (error)=\"onImageError($event)\"\r\n [alt]=\"game.name\" loading=\"lazy\" [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name }}</span></div>\r\n </div>\r\n </div>\r\n <div class=\"lobby_loadMoreBtn\" *ngIf=\"filterShowLoadMore\">\r\n <a class=\"btn load-more-btn\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n (click)=\"loadMoreFilteredGames()\">\r\n LOAD MORE\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"games-background lobby_noGamesMessage\" id=\"noGamesMessage\" *ngIf=\"noGamesToShow\">\r\n <p>NO GAMES FOUND</p>\r\n </div>\r\n</div>","import { Component, Input, OnInit, ViewEncapsulation, Output, TemplateRef } from '@angular/core';\r\nimport { BannersComponent } from './banners/banners.component';\r\nimport {GameLobbyTheme} from './theme/default-theme';\r\nimport { CasinoLobbyComponent } from './casino-lobby/casino-lobby.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EventEmitter } from '@angular/core';\r\n@Component({\r\n selector: 'lib-game-lobby-lib',\r\n standalone: true,\r\n imports: [CommonModule, BannersComponent, CasinoLobbyComponent],\r\n template: `\r\n <div class=\"lobbyaria-setsize\" [ngStyle]=\"{ 'background-color': (themeObject?.background || '#262626')}\" >\r\n <app-banners [theme]=\"themeObject\" [bannerData]=\"bannerDataInformation\" [bannerOverlay]=\"bannerOverlay\" \r\n (routerLinkClicked)=\"onRouterLinkClicked($event)\"></app-banners>\r\n <lib-casino-lobby [theme]=\"themeObject\" [casinoData]=\"bannerDataInformation\" [brandConfig]=\"brandConfig\" (gameClicked)=\"onGameClicked($event)\"></lib-casino-lobby>\r\n </div>\r\n `,\r\n styles: `.lobbyaria-setsize{\r\n height: 100%; padding: 15px;background-color: #262626;\r\n }`,\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GameLobbyLibComponent implements OnInit {\r\n @Input() bannerData!: any;\r\n @Input() themes!: GameLobbyTheme;\r\n @Input() brandConfig!: any;\r\n @Input() bannerOverlay: TemplateRef<any> | null = null;\r\n @Output() routerLinkClicked = new EventEmitter<string>();\r\n @Output() gameClicked = new EventEmitter<string>();\r\n themeObject: any;\r\n bannerDataInformation:any\r\n constructor() {\r\n // Do not use @Input() values here\r\n }\r\n\r\n setDataThemes(): void {\r\n this.bannerDataInformation = this.bannerData;\r\n this.themeObject = this.themes;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setDataThemes();\r\n }\r\n\r\n onGameClicked(gameCode: string) {\r\n this.gameClicked.emit(gameCode);\r\n }\r\n\r\n onRouterLinkClicked(link: string) {\r\n this.routerLinkClicked.emit(link);\r\n }\r\n}\r\n","/*\r\n * Public API Surface of game-lobby-lib\r\n */\r\nexport * from './lib/banners/banners.component';\r\nexport * from './lib/casino-lobby/casino-lobby.component';\r\nexport * from './lib/game-lobby-lib.service';\r\nexport * from './lib/game-lobby-lib.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GameLobbyThemeService","i1","i2.GameLobbyLibService","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "game-lobby-lib",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0",